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

org.hibernate.search.engine.metadata.impl.FieldMetadataBuilderImpl 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.LinkedHashSet;
import java.util.Set;

import org.hibernate.search.bridge.spi.FieldMetadataBuilder;
import org.hibernate.search.bridge.spi.FieldMetadataCreationContext;
import org.hibernate.search.bridge.spi.FieldType;
import org.hibernate.search.util.logging.impl.Log;
import org.hibernate.search.util.logging.impl.LoggerFactory;

/**
 * The internal implementation of {@link FieldMetadataBuilder}.
 *
 * @author Gunnar Morling
 */
class FieldMetadataBuilderImpl implements FieldMetadataBuilder {

	private static final Log LOG = LoggerFactory.make();

	private final Set sortableFieldsAbsoluteNames = new LinkedHashSet<>();
	private final Set bridgeDefinedFields = new LinkedHashSet<>();
	private final BackReference fieldMetadata;

	public FieldMetadataBuilderImpl(BackReference fieldMetadata) {
		this.fieldMetadata = fieldMetadata;
	}

	@Override
	public FieldMetadataCreationContext field(String name, FieldType type) {
		return new FieldMetadataCreationContextImpl( name, type );
	}

	public Set getSortableFieldsAbsoluteNames() {
		return sortableFieldsAbsoluteNames;
	}

	public Set getBridgeDefinedFields() {
		return bridgeDefinedFields;
	}

	private class FieldMetadataCreationContextImpl implements FieldMetadataCreationContext {

		private final BridgeDefinedField field;

		public FieldMetadataCreationContextImpl(String name, FieldType type) {
			this.field = new BridgeDefinedField( fieldMetadata, name, type );
			bridgeDefinedFields.add( field );
		}

		@Override
		public FieldMetadataCreationContext field(String name, FieldType type) {
			return FieldMetadataBuilderImpl.this.field( name, type );
		}

		@Override
		public FieldMetadataCreationContext sortable(boolean sortable) {
			sortableFieldsAbsoluteNames.add( field.getAbsoluteName() );
			return this;
		}

		public  T mappedOn(Class backend) {
			return create( backend );
		}

		private  T create(Class backend) {
			try {
				return backend.getDeclaredConstructor( BridgeDefinedField.class, FieldMetadataCreationContext.class ).newInstance( field, this );
			}
			catch (Exception e) {
				throw LOG.cannotCreateBridgeDefinedField( backend, e );
			}
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy