private void buildDocumentFieldsForEmbeddedObjects(Document doc,
FacetsConfig facetsConfig,
TypeMetadata typeMetadata,
Map<String, String> fieldToAnalyzerMap,
Set<String> processedFieldNames,
ConversionContext conversionContext,
InstanceInitializer objectInitializer,
float inheritedBoost,
Object unproxiedInstance) {
for ( EmbeddedTypeMetadata embeddedTypeMetadata : typeMetadata.getEmbeddedTypeMetadata() ) {
XMember member = embeddedTypeMetadata.getEmbeddedGetter();
float embeddedBoost = inheritedBoost * embeddedTypeMetadata.getStaticBoost();
conversionContext.pushProperty( embeddedTypeMetadata.getEmbeddedFieldName() );
try {
Object value = ReflectionHelper.getMemberValue( unproxiedInstance, member );
if ( value == null ) {
processEmbeddedNullValue( doc, embeddedTypeMetadata, conversionContext );
continue;
}
switch ( embeddedTypeMetadata.getEmbeddedContainer() ) {
case ARRAY:
Object[] array = objectInitializer.initializeArray( (Object[]) value );
for ( Object arrayValue : array ) {
buildDocumentFields(
arrayValue,
doc,
facetsConfig,
true,
embeddedTypeMetadata,
fieldToAnalyzerMap,
processedFieldNames,
conversionContext,
objectInitializer,
embeddedBoost
);
}
break;
case COLLECTION:
Collection<?> collection = objectInitializer.initializeCollection( (Collection<?>) value );
for ( Object collectionValue : collection ) {
buildDocumentFields(
collectionValue,
doc,
facetsConfig,
true,
embeddedTypeMetadata,
fieldToAnalyzerMap,
processedFieldNames,
conversionContext,
objectInitializer,
embeddedBoost
);
}
break;
case MAP:
Map<?, ?> map = objectInitializer.initializeMap( (Map<?, ?>) value );
for ( Object collectionValue : map.values() ) {
buildDocumentFields(
collectionValue,
doc,
facetsConfig,
true,
embeddedTypeMetadata,
fieldToAnalyzerMap,
processedFieldNames,
conversionContext,
objectInitializer,
embeddedBoost
);
}
break;
case OBJECT:
buildDocumentFields(
value,
doc,
facetsConfig,
false,
embeddedTypeMetadata,
fieldToAnalyzerMap,
processedFieldNames,
conversionContext,
objectInitializer,
embeddedBoost
);
break;
default:
throw new AssertionFailure(
"Unknown embedded container: "
+ embeddedTypeMetadata.getEmbeddedContainer()
);
}
}
finally {
conversionContext.popProperty();
}
}
}