All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hibernate.search.engine.metadata.impl.BridgeDefinedField Maven / Gradle / Ivy

/*
 * 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