Package org.hibernate.search.bridge.impl

Source Code of org.hibernate.search.bridge.impl.SpatialBridgeProvider

/*
* 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 <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/

package org.hibernate.search.bridge.impl;

import java.lang.reflect.AnnotatedElement;

import org.hibernate.search.annotations.Spatial;
import org.hibernate.search.annotations.SpatialMode;
import org.hibernate.search.bridge.FieldBridge;
import org.hibernate.search.spatial.SpatialFieldBridgeByHash;
import org.hibernate.search.spatial.SpatialFieldBridgeByRange;
import org.hibernate.search.util.logging.impl.Log;
import org.hibernate.search.util.logging.impl.LoggerFactory;

/**
* Built-in {@link org.hibernate.search.bridge.spi.BridgeProvider} handling spatial index bridging
* when {@code @Spatial} is involved.
* As built-in provider, no Service Loader file is used: the {@code BridgeFactory} does access it
* after the custom bridge providers found.
*
* @author Emmanuel Bernard <emmanuel@hibernate.org>
*/
public class SpatialBridgeProvider extends ExtendedBridgeProvider {
  private static final Log LOG = LoggerFactory.make();

  @Override
  public FieldBridge provideFieldBridge(ExtendedBridgeProviderContext context) {
    FieldBridge bridge = null;
    AnnotatedElement annotatedElement = context.getAnnotatedElement();
    if ( annotatedElement.isAnnotationPresent( Spatial.class ) ) {
      Spatial spatialAnn = annotatedElement.getAnnotation( Spatial.class );
      try {
        bridge = buildSpatialBridge( spatialAnn, null, null );
      }
      catch (Exception e) {
        throw LOG.unableToInstantiateSpatial( context.getMemberName(), e );
      }
      if ( bridge == null ) {
        throw LOG.unableToInstantiateSpatial( context.getMemberName(), null );
      }
    }
    return bridge;
  }

  /**
   * This instantiates the SpatialFieldBridge from a {@code Spatial} annotation.
   *
   * @param spatial the {@code Spatial} annotation
   * @return Returns the {@code SpatialFieldBridge} instance
   * @param latitudeField a {@link java.lang.String} object.
   * @param longitudeField a {@link java.lang.String} object.
   */
  public static FieldBridge buildSpatialBridge(Spatial spatial, String latitudeField, String longitudeField) {
    FieldBridge bridge = null;
    if ( spatial != null ) {
      if ( spatial.spatialMode() == SpatialMode.HASH ) {
        if ( latitudeField != null && longitudeField != null ) {
          bridge = new SpatialFieldBridgeByHash( spatial.topSpatialHashLevel(), spatial.bottomSpatialHashLevel(), latitudeField, longitudeField );
        }
        else {
          bridge = new SpatialFieldBridgeByHash( spatial.topSpatialHashLevel(), spatial.bottomSpatialHashLevel() );
        }
      }
      else {
        if ( latitudeField != null && longitudeField != null ) {
          bridge = new SpatialFieldBridgeByRange( latitudeField, longitudeField );
        }
        else {
          bridge = new SpatialFieldBridgeByRange();
        }
      }
    }

    return bridge;
  }
}
TOP

Related Classes of org.hibernate.search.bridge.impl.SpatialBridgeProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.