org.hibernate.search.engine.metadata.impl.BridgeDefinedField Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-search-engine Show documentation
Show all versions of hibernate-search-engine Show documentation
Core of the Object/Lucene mapper, query engine and index management
/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or .
*/
package org.hibernate.search.engine.metadata.impl;
import java.util.HashMap;
import java.util.Map;
import org.apache.lucene.document.Field;
import org.hibernate.search.bridge.spi.FieldType;
/**
* A field defined by a bridge.
*
* @author Gunnar Morling
*/
public class BridgeDefinedField {
private final BackReference sourceField;
/*
* Here we cannot use DocumentFieldPath because metadata-providing field bridges only provide the absolute name,
* without telling the prefix from the relative name.
*/
private final String absoluteName;
private final FieldType type;
/*
* This map will group bridge defined field properties that make sense only for specific index managers.
* For example, in Elasticsearch one can specify the mapping as dynamic.
*/
private Map, Object> extra = new HashMap<>();
public BridgeDefinedField(BridgeDefinedField bridgeDefinedField) {
this.sourceField = bridgeDefinedField.sourceField;
this.absoluteName = bridgeDefinedField.absoluteName;
this.type = bridgeDefinedField.type;
}
public BridgeDefinedField(BackReference sourceField, String absoluteName, FieldType type) {
this.sourceField = sourceField;
this.absoluteName = absoluteName;
this.type = type;
}
/**
* @return The {@link DocumentFieldMetadata} whose field bridge declared this field.
*/
public DocumentFieldMetadata getSourceField() {
return sourceField.get();
}
/**
* @return The full name of this field, including any indexed-embedded prefix.
*/
public String getAbsoluteName() {
return absoluteName;
}
public Field.Index getIndex() {
return getSourceField().getIndex();
}
public FieldType getType() {
return type;
}
@Override
public String toString() {
return "BridgeDefinedField [name=" + absoluteName + ", type=" + type + "]";
}
/**
* Adds the object that containing the field properties specific for a backend,
*
* @param backendBridgeDefineFieldClass the type of the object containing the properties
* @param backendBridgeDefineField the object that stores the properties
*/
public void add(Class backendBridgeDefineFieldClass, T backendBridgeDefineField) {
extra.put( backendBridgeDefineFieldClass, backendBridgeDefineField );
}
/**
* Get the bridge defined field of the specific class.
*
* @param bridgeDefineFieldClass the type of the object containing the properties of the field
* @return the object containing the properties of the field
*/
public T getBridgeDefinedField(Class bridgeDefineFieldClass) {
return bridgeDefineFieldClass.cast( extra.get( bridgeDefineFieldClass ) );
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy