From 2e6f0fb5ae21ed614144f9fb6eb231e82be3cc55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Tue, 8 Nov 2016 15:10:18 +0100 Subject: [PATCH] HSEARCH-2451 Added getters for FacetMetadata to TypeMetadata Preliminary work for HSEARCH-2451. --- .../engine/metadata/impl/TypeMetadata.java | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/engine/src/main/java/org/hibernate/search/engine/metadata/impl/TypeMetadata.java b/engine/src/main/java/org/hibernate/search/engine/metadata/impl/TypeMetadata.java index b979f4e35d6..25904e93d34 100644 --- a/engine/src/main/java/org/hibernate/search/engine/metadata/impl/TypeMetadata.java +++ b/engine/src/main/java/org/hibernate/search/engine/metadata/impl/TypeMetadata.java @@ -96,6 +96,11 @@ public class TypeMetadata { */ private final Map bridgeDefinedFieldNameToFieldMetadata; + /** + * Metadata for a facet keyed against the facet field name + */ + private final Map facetFieldNameToFacetMetadata; + /** * Metadata for a Java property (field or getter) keyed against the property name. */ @@ -177,6 +182,7 @@ protected TypeMetadata(Builder builder) { this.propertyGetterNameToPropertyMetadata = buildPropertyMetadataMap( builder.propertyMetadataSet ); this.documentFieldMetadata = collectFieldMetadata( builder.propertyMetadataSet, builder.classBridgeFields, builder.idPropertyMetadata ); this.documentFieldNameToFieldMetadata = buildFieldMetadataMap( documentFieldMetadata ); + this.facetFieldNameToFacetMetadata = buildFacetMetadataMap( documentFieldMetadata ); this.bridgeDefinedFieldNameToFieldMetadata = buildBridgeDefinedFieldMetadataMap( documentFieldNameToFieldMetadata.values() ); this.classBridgeFieldNameToDocumentFieldMetadata = copyClassBridgeMetadata( builder.classBridgeFields ); this.classBridgeSortableFieldMetadata = Collections.unmodifiableSet( builder.classBridgeSortableFieldMetadata ); @@ -234,6 +240,20 @@ public BridgeDefinedField getBridgeDefinedFieldMetadataFor(String fieldName) { return null; } + public FacetMetadata getFacetMetadataFor(String facetFieldName) { + FacetMetadata result = facetFieldNameToFacetMetadata.get( facetFieldName ); + if ( result != null ) { + return result; + } + for ( EmbeddedTypeMetadata element : embeddedTypeMetadata ) { + result = element.getFacetMetadataFor( facetFieldName ); + if ( result != null ) { + return result; + } + } + return null; + } + /** * Return all {@link DocumentFieldMetadata}. * Instances are not duplicated in the collection. We use {@code Collection} instead of {@code Set} for @@ -431,18 +451,25 @@ private Map buildFieldMetadataMap(Set buildBridgeDefinedFieldMetadataMap(Collection documentFieldMetadataCollection) { - Map tmpMap = new HashMap(); + private Map buildFacetMetadataMap(Collection documentFieldMetadataCollection) { + Map tmpMap = new HashMap(); for ( DocumentFieldMetadata documentFieldMetadata : documentFieldMetadataCollection ) { - for ( BridgeDefinedField bridgeDefinedField : documentFieldMetadata.getBridgeDefinedFields().values() ) { - tmpMap.put( bridgeDefinedField.getAbsoluteName(), bridgeDefinedField ); + for ( FacetMetadata facetMetadata : documentFieldMetadata.getFacetMetadata() ) { + tmpMap.put( facetMetadata.getAbsoluteName(), facetMetadata ); } } - for ( DocumentFieldMetadata documentFieldMetadata : classBridgeFields ) { + // Class bridge fields, etc. are already included in documentFieldMetadataCollection + return Collections.unmodifiableMap( tmpMap ); + } + + private Map buildBridgeDefinedFieldMetadataMap(Collection documentFieldMetadataCollection) { + Map tmpMap = new HashMap(); + for ( DocumentFieldMetadata documentFieldMetadata : documentFieldMetadataCollection ) { for ( BridgeDefinedField bridgeDefinedField : documentFieldMetadata.getBridgeDefinedFields().values() ) { tmpMap.put( bridgeDefinedField.getAbsoluteName(), bridgeDefinedField ); } } + // Class bridge fields, etc. are already included in documentFieldMetadataCollection return Collections.unmodifiableMap( tmpMap ); }