/*
* 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.math.BigDecimal;
import java.math.BigInteger;
import java.net.URI;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.hibernate.search.bridge.FieldBridge;
import org.hibernate.search.bridge.TwoWayFieldBridge;
import org.hibernate.search.bridge.builtin.BigDecimalBridge;
import org.hibernate.search.bridge.builtin.BigIntegerBridge;
import org.hibernate.search.bridge.builtin.BooleanBridge;
import org.hibernate.search.bridge.builtin.ByteBridge;
import org.hibernate.search.bridge.builtin.CharacterBridge;
import org.hibernate.search.bridge.builtin.DoubleBridge;
import org.hibernate.search.bridge.builtin.FloatBridge;
import org.hibernate.search.bridge.builtin.IntegerBridge;
import org.hibernate.search.bridge.builtin.LongBridge;
import org.hibernate.search.bridge.builtin.ShortBridge;
import org.hibernate.search.bridge.builtin.StringBridge;
import org.hibernate.search.bridge.builtin.UUIDBridge;
import org.hibernate.search.bridge.builtin.UriBridge;
import org.hibernate.search.bridge.builtin.UrlBridge;
import org.hibernate.search.bridge.spi.BridgeProvider;
import org.hibernate.search.bridge.util.impl.TwoWayString2FieldBridgeAdaptor;
import org.hibernate.search.bridge.util.impl.TwoWayString2FieldBridgeIgnoreAnalyzerAdaptor;
import org.hibernate.search.engine.service.spi.ServiceManager;
/**
* Support all the default types of the JDK.
*
* @author Emmanuel Bernard
*/
class BasicJDKTypesBridgeProvider implements BridgeProvider {
private static final TwoWayFieldBridge CHARACTER = new TwoWayString2FieldBridgeAdaptor( new CharacterBridge() );
private static final TwoWayFieldBridge DOUBLE = new TwoWayString2FieldBridgeIgnoreAnalyzerAdaptor( new DoubleBridge() );
private static final TwoWayFieldBridge FLOAT = new TwoWayString2FieldBridgeIgnoreAnalyzerAdaptor( new FloatBridge() );
private static final TwoWayFieldBridge BYTE = new TwoWayString2FieldBridgeIgnoreAnalyzerAdaptor( new ByteBridge() );
private static final TwoWayFieldBridge SHORT = new TwoWayString2FieldBridgeIgnoreAnalyzerAdaptor( new ShortBridge() );
private static final TwoWayFieldBridge INTEGER = new TwoWayString2FieldBridgeIgnoreAnalyzerAdaptor( new IntegerBridge() );
private static final TwoWayFieldBridge LONG = new TwoWayString2FieldBridgeIgnoreAnalyzerAdaptor( new LongBridge() );
private static final TwoWayFieldBridge BIG_INTEGER = new TwoWayString2FieldBridgeIgnoreAnalyzerAdaptor( new BigIntegerBridge() );
private static final TwoWayFieldBridge BIG_DECIMAL = new TwoWayString2FieldBridgeIgnoreAnalyzerAdaptor( new BigDecimalBridge() );
private static final TwoWayFieldBridge STRING = new TwoWayString2FieldBridgeAdaptor( new StringBridge() );
private static final TwoWayFieldBridge BOOLEAN = new TwoWayString2FieldBridgeIgnoreAnalyzerAdaptor( new BooleanBridge() );
private static final TwoWayFieldBridge Url = new TwoWayString2FieldBridgeIgnoreAnalyzerAdaptor( new UrlBridge() );
private static final TwoWayFieldBridge Uri = new TwoWayString2FieldBridgeIgnoreAnalyzerAdaptor( new UriBridge() );
private static final TwoWayFieldBridge UUID = new TwoWayString2FieldBridgeIgnoreAnalyzerAdaptor( new UUIDBridge() );
//Not static as it depends on the application's classloader
private final TwoWayFieldBridge clazz;
private final Map<String, FieldBridge> builtInBridges;
BasicJDKTypesBridgeProvider(ServiceManager serviceManager) {
this.clazz = new TwoWayString2FieldBridgeAdaptor( new org.hibernate.search.bridge.builtin.ClassBridge( serviceManager ) );
Map<String, FieldBridge> bridges = new HashMap<String, FieldBridge>();
bridges.put( Character.class.getName(), CHARACTER );
bridges.put( char.class.getName(), CHARACTER );
bridges.put( Double.class.getName(), DOUBLE );
bridges.put( double.class.getName(), DOUBLE );
bridges.put( Float.class.getName(), FLOAT );
bridges.put( float.class.getName(), FLOAT );
bridges.put( Byte.class.getName(), BYTE );
bridges.put( byte.class.getName(), BYTE );
bridges.put( Short.class.getName(), SHORT );
bridges.put( short.class.getName(), SHORT );
bridges.put( Integer.class.getName(), INTEGER );
bridges.put( int.class.getName(), INTEGER );
bridges.put( Long.class.getName(), LONG );
bridges.put( long.class.getName(), LONG );
bridges.put( BigInteger.class.getName(), BIG_INTEGER );
bridges.put( BigDecimal.class.getName(), BIG_DECIMAL );
bridges.put( String.class.getName(), STRING );
bridges.put( Boolean.class.getName(), BOOLEAN );
bridges.put( boolean.class.getName(), BOOLEAN );
bridges.put( URL.class.getName(), Url );
bridges.put( URI.class.getName(), Uri );
bridges.put( UUID.class.getName(), UUID );
bridges.put( Class.class.getName(), clazz );
this.builtInBridges = bridges;
}
@Override
public FieldBridge provideFieldBridge(BridgeProviderContext bridgeProviderContext) {
return builtInBridges.get( bridgeProviderContext.getReturnType().getName() );
}
}