Skip to content

Commit

Permalink
HSEARCH-4142 Add DocumentIdentifierValueConverter#convertToSource
Browse files Browse the repository at this point in the history
  • Loading branch information
fax4ever committed Mar 1, 2021
1 parent e9de87e commit 86a001f
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 5 deletions.
Expand Up @@ -6,6 +6,8 @@
*/
package org.hibernate.search.engine.backend.types.converter.spi;

import org.hibernate.search.engine.backend.types.converter.runtime.spi.FromDocumentIdentifierValueConvertContext;
import org.hibernate.search.engine.backend.types.converter.runtime.spi.FromDocumentIdentifierValueConvertContextExtension;
import org.hibernate.search.engine.backend.types.converter.runtime.spi.ToDocumentIdentifierValueConvertContext;
import org.hibernate.search.engine.backend.types.converter.runtime.spi.ToDocumentIdentifierValueConvertContextExtension;
import org.hibernate.search.util.common.SearchException;
Expand Down Expand Up @@ -48,6 +50,14 @@ default void requiresType(Class<?> requiredType) {
// no check by default
}

/**
* @param documentId The document identifier to convert.
* @param context A context that can be
* {@link FromDocumentIdentifierValueConvertContext#extension(FromDocumentIdentifierValueConvertContextExtension) extended}
* @return The original source identifier value.
*/
I convertToSource(String documentId, FromDocumentIdentifierValueConvertContext context);

/**
* @param other Another {@link DocumentIdentifierValueConverter}, never {@code null}.
* @return {@code true} if the given object behaves exactly the same as this object, i.e. its
Expand Down
Expand Up @@ -8,6 +8,7 @@

import java.lang.invoke.MethodHandles;

import org.hibernate.search.engine.backend.types.converter.runtime.spi.FromDocumentIdentifierValueConvertContext;
import org.hibernate.search.engine.backend.types.converter.runtime.spi.ToDocumentIdentifierValueConvertContext;
import org.hibernate.search.engine.logging.impl.Log;
import org.hibernate.search.util.common.logging.impl.LoggerFactory;
Expand All @@ -28,11 +29,16 @@ public String convertToDocumentUnknown(Object value, ToDocumentIdentifierValueCo

@Override
public void requiresType(Class<?> requiredType) {
if ( !String.class.isAssignableFrom( requiredType ) ) {
if ( !requiredType.isAssignableFrom( String.class ) ) {
throw log.wrongRequiredIdentifierType( requiredType, String.class );
}
}

@Override
public String convertToSource(String documentId, FromDocumentIdentifierValueConvertContext context) {
return documentId;
}

@Override
public boolean isCompatibleWith(DocumentIdentifierValueConverter<?> other) {
return getClass().equals( other.getClass() );
Expand Down
Expand Up @@ -10,6 +10,7 @@

import java.util.Arrays;

import org.hibernate.search.engine.backend.types.converter.runtime.spi.FromDocumentIdentifierValueConvertContext;
import org.hibernate.search.engine.backend.types.converter.spi.DocumentIdentifierValueConverter;
import org.hibernate.search.engine.backend.types.converter.runtime.spi.ToDocumentIdentifierValueConvertContext;
import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper;
Expand Down Expand Up @@ -41,6 +42,11 @@ public String convertToDocument(Integer value, ToDocumentIdentifierValueConvertC
public String convertToDocumentUnknown(Object value, ToDocumentIdentifierValueConvertContext context) {
return convertToDocument( (Integer) value, context );
}

@Override
public Integer convertToSource(String documentId, FromDocumentIdentifierValueConvertContext context) {
throw new UnsupportedOperationException( "Should not be called" );
}
};

@ClassRule
Expand Down
Expand Up @@ -11,6 +11,7 @@

import java.util.Arrays;

import org.hibernate.search.engine.backend.types.converter.runtime.spi.FromDocumentIdentifierValueConvertContext;
import org.hibernate.search.engine.backend.types.converter.runtime.spi.ToDocumentIdentifierValueConvertContext;
import org.hibernate.search.engine.backend.types.converter.spi.DocumentIdentifierValueConverter;
import org.hibernate.search.engine.reporting.spi.EventContexts;
Expand Down Expand Up @@ -156,5 +157,10 @@ public String convertToDocument(String value, ToDocumentIdentifierValueConvertCo
public String convertToDocumentUnknown(Object value, ToDocumentIdentifierValueConvertContext context) {
throw new UnsupportedOperationException( "Should not be called" );
}

@Override
public String convertToSource(String documentId, FromDocumentIdentifierValueConvertContext context) {
throw new UnsupportedOperationException( "Should not be called" );
}
}
}
Expand Up @@ -15,6 +15,7 @@
import java.util.Iterator;
import java.util.Optional;

import org.hibernate.search.engine.backend.types.converter.runtime.spi.FromDocumentIdentifierValueConvertContext;
import org.hibernate.search.engine.backend.types.converter.runtime.spi.ToDocumentIdentifierValueConvertContext;
import org.hibernate.search.engine.backend.types.converter.runtime.spi.ToDocumentIdentifierValueConvertContextImpl;
import org.hibernate.search.engine.backend.types.converter.spi.DocumentIdentifierValueConverter;
Expand Down Expand Up @@ -198,6 +199,11 @@ public String convertToDocumentUnknown(Object value, ToDocumentIdentifierValueCo
throw new UnsupportedOperationException();
}

@Override
public Object convertToSource(String documentId, FromDocumentIdentifierValueConvertContext context) {
throw new UnsupportedOperationException();
}

@Override
public boolean isCompatibleWith(DocumentIdentifierValueConverter<?> other) {
throw new UnsupportedOperationException();
Expand Down
Expand Up @@ -9,13 +9,18 @@
import java.lang.invoke.MethodHandles;
import java.util.Optional;

import org.hibernate.search.engine.backend.session.spi.BackendSessionContext;
import org.hibernate.search.engine.backend.types.converter.runtime.spi.FromDocumentIdentifierValueConvertContext;
import org.hibernate.search.engine.backend.types.converter.runtime.spi.FromDocumentIdentifierValueConvertContextExtension;
import org.hibernate.search.engine.backend.types.converter.spi.DocumentIdentifierValueConverter;
import org.hibernate.search.engine.backend.types.converter.runtime.spi.ToDocumentIdentifierValueConvertContext;
import org.hibernate.search.engine.backend.types.converter.runtime.spi.ToDocumentIdentifierValueConvertContextExtension;
import org.hibernate.search.engine.backend.mapping.spi.BackendMappingContext;
import org.hibernate.search.mapper.pojo.bridge.IdentifierBridge;
import org.hibernate.search.mapper.pojo.bridge.runtime.IdentifierBridgeFromDocumentIdentifierContext;
import org.hibernate.search.mapper.pojo.bridge.runtime.IdentifierBridgeToDocumentIdentifierContext;
import org.hibernate.search.mapper.pojo.bridge.runtime.spi.BridgeMappingContext;
import org.hibernate.search.mapper.pojo.bridge.runtime.spi.BridgeSessionContext;
import org.hibernate.search.mapper.pojo.logging.impl.Log;
import org.hibernate.search.util.common.logging.impl.LoggerFactory;

Expand All @@ -38,7 +43,7 @@ public String toString() {

@Override
public String convertToDocument(I value, ToDocumentIdentifierValueConvertContext context) {
IdentifierBridgeToDocumentIdentifierContext extension = context.extension( PojoIdentifierBridgeContextExtension.INSTANCE );
IdentifierBridgeToDocumentIdentifierContext extension = context.extension( PojoToDocumentIdentifierBridgeContextExtension.INSTANCE );
return bridge.toDocumentIdentifier( value, extension );
}

Expand All @@ -49,11 +54,19 @@ public String convertToDocumentUnknown(Object value, ToDocumentIdentifierValueCo

@Override
public void requiresType(Class<?> requiredType) {
if ( !expectedValueType.isAssignableFrom( requiredType ) ) {
if ( !requiredType.isAssignableFrom( expectedValueType ) ) {
throw log.wrongRequiredIdentifierType( requiredType, expectedValueType );
}
}

@Override
public I convertToSource(String documentId, FromDocumentIdentifierValueConvertContext context) {
IdentifierBridgeFromDocumentIdentifierContext identifierContext = context.extension(
PojoFromDocumentIdentifierBridgeContextExtension.INSTANCE );

return bridge.fromDocumentIdentifier( documentId, identifierContext );
}

@Override
public boolean isCompatibleWith(DocumentIdentifierValueConverter<?> other) {
if ( other == null || !getClass().equals( other.getClass() ) ) {
Expand All @@ -65,9 +78,9 @@ public boolean isCompatibleWith(DocumentIdentifierValueConverter<?> other) {
&& bridge.isCompatibleWith( castedOther.bridge );
}

private static class PojoIdentifierBridgeContextExtension
private static class PojoToDocumentIdentifierBridgeContextExtension
implements ToDocumentIdentifierValueConvertContextExtension<IdentifierBridgeToDocumentIdentifierContext> {
private static final PojoIdentifierBridgeContextExtension INSTANCE = new PojoIdentifierBridgeContextExtension();
private static final PojoToDocumentIdentifierBridgeContextExtension INSTANCE = new PojoToDocumentIdentifierBridgeContextExtension();

@Override
public Optional<IdentifierBridgeToDocumentIdentifierContext> extendOptional(
Expand All @@ -82,4 +95,20 @@ public Optional<IdentifierBridgeToDocumentIdentifierContext> extendOptional(
}
}
}

private static class PojoFromDocumentIdentifierBridgeContextExtension
implements FromDocumentIdentifierValueConvertContextExtension<IdentifierBridgeFromDocumentIdentifierContext> {
private static final PojoFromDocumentIdentifierBridgeContextExtension INSTANCE = new PojoFromDocumentIdentifierBridgeContextExtension();

@Override
public Optional<IdentifierBridgeFromDocumentIdentifierContext> extendOptional(
FromDocumentIdentifierValueConvertContext original,
BackendSessionContext sessionContext) {
if ( sessionContext instanceof BridgeSessionContext ) {
BridgeSessionContext pojoSessionContext = (BridgeSessionContext) sessionContext;
return Optional.of( pojoSessionContext.identifierBridgeFromDocumentIdentifierContext() );
}
return Optional.empty();
}
}
}

0 comments on commit 86a001f

Please sign in to comment.