public static FieldBridge extractType(ClassBridge cb) {
builtInBridges.put( Double.class.getName(), DOUBLE );
builtInBridges.put( double.class.getName(), DOUBLE );
builtInBridges.put( Float.class.getName(), FLOAT );
builtInBridges.put( float.class.getName(), FLOAT );
builtInBridges.put( Short.class.getName(), SHORT );
builtInBridges.put( short.class.getName(), SHORT );
builtInBridges.put( Integer.class.getName(), INTEGER );
builtInBridges.put( int.class.getName(), INTEGER );
builtInBridges.put( Long.class.getName(), LONG );
builtInBridges.put( long.class.getName(), LONG );
builtInBridges.put( BigInteger.class.getName(), BIG_INTEGER );
builtInBridges.put( BigDecimal.class.getName(), BIG_DECIMAL );
builtInBridges.put( String.class.getName(), STRING );
builtInBridges.put( Boolean.class.getName(), BOOLEAN );
builtInBridges.put( boolean.class.getName(), BOOLEAN );
builtInBridges.put( Class.class.getName(), CLAZZ );
builtInBridges.put( URL.class.getName(), Url );
builtInBridges.put( URI.class.getName(), Uri );
builtInBridges.put( Date.class.getName(), DATE_MILLISECOND );
FieldBridge bridge = null;
if ( cb != null ) {
Class impl = cb.impl();
//TODO better error information ( see guessType() )
if (impl != null) {
try {
Object instance = impl.newInstance();
if ( FieldBridge.class.isAssignableFrom( impl ) ) {
bridge = (FieldBridge) instance;
}
else if ( org.hibernate.search.bridge.TwoWayStringBridge.class.isAssignableFrom( impl ) ) {
bridge = new TwoWayString2FieldBridgeAdaptor(
(org.hibernate.search.bridge.TwoWayStringBridge) instance );
}
else if ( org.hibernate.search.bridge.StringBridge.class.isAssignableFrom( impl ) ) {
bridge = new String2FieldBridgeAdaptor( (org.hibernate.search.bridge.StringBridge) instance );
}
else {
throw new SearchException("@ClassBridge implementation implements none of the field bridge interfaces: "
+ impl );
}
if ( cb.params().length > 0 && ParameterizedBridge.class.isAssignableFrom( impl ) ) {
Map params = new HashMap( cb.params().length );
for ( Parameter param : cb.params() ) {
params.put( param.name(), param.value() );
}
( (ParameterizedBridge) instance ).setParameterValues( params );
}
}
catch (Exception e) {
throw new HibernateException( "Unable to instantiate FieldBridge for " + ClassBridge.class.getName(), e );
}
}
}
if ( bridge == null ) throw new SearchException( "Unable to guess FieldBridge for " + ClassBridge.class.getName() );
return bridge;
}
This extracts and instantiates the implementation class from a ClassBridge
annotation. |