Author: navssurtani
Date: 2008-08-14 02:17:05 -0400 (Thu, 14 Aug 2008)
New Revision: 15058
Modified:
search/trunk/src/java/org/hibernate/search/annotations/Indexed.java
search/trunk/src/java/org/hibernate/search/annotations/ProvidedId.java
search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java
search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
search/trunk/src/test/org/hibernate/search/test/SearchTestCase.java
Log:
navssurtani finished to-do in DocumentBuilder
Modified: search/trunk/src/java/org/hibernate/search/annotations/Indexed.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/annotations/Indexed.java 2008-08-13
18:17:51 UTC (rev 15057)
+++ search/trunk/src/java/org/hibernate/search/annotations/Indexed.java 2008-08-14
06:17:05 UTC (rev 15058)
@@ -1,11 +1,7 @@
//$Id$
package org.hibernate.search.annotations;
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+import java.lang.annotation.*;
@Retention( RetentionPolicy.RUNTIME )
@Target( ElementType.TYPE )
Modified: search/trunk/src/java/org/hibernate/search/annotations/ProvidedId.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/annotations/ProvidedId.java 2008-08-13
18:17:51 UTC (rev 15057)
+++ search/trunk/src/java/org/hibernate/search/annotations/ProvidedId.java 2008-08-14
06:17:05 UTC (rev 15058)
@@ -8,6 +8,8 @@
import java.lang.annotation.Target;
import org.hibernate.search.bridge.StringBridge;
+import org.hibernate.search.bridge.TwoWayFieldBridge;
+import org.hibernate.search.bridge.TwoWayString2FieldBridgeAdaptor;
/**
* Objects whose identifier is provided externally and not part of the object state
@@ -17,12 +19,12 @@
*
* @author Navin Surtani (<a
href="mailto:nsurtani@redhat.com">nsurtani@redhat.com</a>)
*/
-@Retention( RetentionPolicy.RUNTIME )
-@Target( ElementType.TYPE )
+(a)Retention(RetentionPolicy.RUNTIME)
+(a)Target(ElementType.TYPE)
@Documented
public @interface ProvidedId {
- String name() default "providedId";
+ String name() default "providedId";
- Class<?> bridge() default StringBridge.class;
+ ClassBridge bridgeImpl() default @ClassBridge(impl =
org.hibernate.search.bridge.builtin.StringBridge.class);
}
Modified: search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java 2008-08-13
18:17:51 UTC (rev 15057)
+++ search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java 2008-08-14
06:17:05 UTC (rev 15058)
@@ -35,203 +35,213 @@
/**
* This factory is responsible for creating and initializing build-in and custom
<i>FieldBridges</i>.
- *
+ *
* @author Emmanuel Bernard
* @author John Griffin
*/
public class BridgeFactory {
- private static Map<String, FieldBridge> builtInBridges = new HashMap<String,
FieldBridge>();
+ private static Map<String, FieldBridge> builtInBridges = new HashMap<String,
FieldBridge>();
- private BridgeFactory() {
- }
+ private BridgeFactory() {
+ }
- public static final TwoWayFieldBridge DOUBLE = new TwoWayString2FieldBridgeAdaptor( new
DoubleBridge() );
+ public static final TwoWayFieldBridge DOUBLE = new TwoWayString2FieldBridgeAdaptor(new
DoubleBridge());
- public static final TwoWayFieldBridge FLOAT = new TwoWayString2FieldBridgeAdaptor( new
FloatBridge() );
+ public static final TwoWayFieldBridge FLOAT = new TwoWayString2FieldBridgeAdaptor(new
FloatBridge());
- public static final TwoWayFieldBridge SHORT = new TwoWayString2FieldBridgeAdaptor( new
ShortBridge() );
+ public static final TwoWayFieldBridge SHORT = new TwoWayString2FieldBridgeAdaptor(new
ShortBridge());
- public static final TwoWayFieldBridge INTEGER = new TwoWayString2FieldBridgeAdaptor( new
IntegerBridge() );
+ public static final TwoWayFieldBridge INTEGER = new
TwoWayString2FieldBridgeAdaptor(new IntegerBridge());
- public static final TwoWayFieldBridge LONG = new TwoWayString2FieldBridgeAdaptor( new
LongBridge() );
+ public static final TwoWayFieldBridge LONG = new TwoWayString2FieldBridgeAdaptor(new
LongBridge());
- public static final TwoWayFieldBridge BIG_INTEGER = new TwoWayString2FieldBridgeAdaptor(
new BigIntegerBridge() );
+ public static final TwoWayFieldBridge BIG_INTEGER = new
TwoWayString2FieldBridgeAdaptor(new BigIntegerBridge());
- public static final TwoWayFieldBridge BIG_DECIMAL = new TwoWayString2FieldBridgeAdaptor(
new BigDecimalBridge() );
+ public static final TwoWayFieldBridge BIG_DECIMAL = new
TwoWayString2FieldBridgeAdaptor(new BigDecimalBridge());
- public static final TwoWayFieldBridge STRING = new TwoWayString2FieldBridgeAdaptor( new
StringBridge() );
+ public static final TwoWayFieldBridge STRING = new TwoWayString2FieldBridgeAdaptor(new
StringBridge());
- public static final TwoWayFieldBridge BOOLEAN = new TwoWayString2FieldBridgeAdaptor( new
BooleanBridge() );
+ public static final TwoWayFieldBridge BOOLEAN = new
TwoWayString2FieldBridgeAdaptor(new BooleanBridge());
- public static final TwoWayFieldBridge CLAZZ = new TwoWayString2FieldBridgeAdaptor( new
org.hibernate.search.bridge.builtin.ClassBridge() );
+ public static final TwoWayFieldBridge CLAZZ = new TwoWayString2FieldBridgeAdaptor(new
org.hibernate.search.bridge.builtin.ClassBridge());
- public static final TwoWayFieldBridge Url = new TwoWayString2FieldBridgeAdaptor( new
UrlBridge() );
+ public static final TwoWayFieldBridge Url = new TwoWayString2FieldBridgeAdaptor(new
UrlBridge());
- public static final TwoWayFieldBridge Uri = new TwoWayString2FieldBridgeAdaptor( new
UriBridge() );
+ public static final TwoWayFieldBridge Uri = new TwoWayString2FieldBridgeAdaptor(new
UriBridge());
- public static final FieldBridge DATE_YEAR = new TwoWayString2FieldBridgeAdaptor(
DateBridge.DATE_YEAR );
- public static final FieldBridge DATE_MONTH = new TwoWayString2FieldBridgeAdaptor(
DateBridge.DATE_MONTH );
- public static final FieldBridge DATE_DAY = new TwoWayString2FieldBridgeAdaptor(
DateBridge.DATE_DAY );
- public static final FieldBridge DATE_HOUR = new TwoWayString2FieldBridgeAdaptor(
DateBridge.DATE_HOUR );
- public static final FieldBridge DATE_MINUTE = new TwoWayString2FieldBridgeAdaptor(
DateBridge.DATE_MINUTE );
- public static final FieldBridge DATE_SECOND = new TwoWayString2FieldBridgeAdaptor(
DateBridge.DATE_SECOND );
- public static final TwoWayFieldBridge DATE_MILLISECOND =
- new TwoWayString2FieldBridgeAdaptor( DateBridge.DATE_MILLISECOND );
+ public static final FieldBridge DATE_YEAR = new
TwoWayString2FieldBridgeAdaptor(DateBridge.DATE_YEAR);
+ public static final FieldBridge DATE_MONTH = new
TwoWayString2FieldBridgeAdaptor(DateBridge.DATE_MONTH);
+ public static final FieldBridge DATE_DAY = new
TwoWayString2FieldBridgeAdaptor(DateBridge.DATE_DAY);
+ public static final FieldBridge DATE_HOUR = new
TwoWayString2FieldBridgeAdaptor(DateBridge.DATE_HOUR);
+ public static final FieldBridge DATE_MINUTE = new
TwoWayString2FieldBridgeAdaptor(DateBridge.DATE_MINUTE);
+ public static final FieldBridge DATE_SECOND = new
TwoWayString2FieldBridgeAdaptor(DateBridge.DATE_SECOND);
+ public static final TwoWayFieldBridge DATE_MILLISECOND =
+ new TwoWayString2FieldBridgeAdaptor(DateBridge.DATE_MILLISECOND);
- static {
- 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 );
+ static {
+ 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 );
- }
-
- /**
- * This extracts and instantiates the implementation class from a ClassBridge
- * annotation.
- *
- * @param cb the ClassBridge
- * @return FieldBridge
- */
- public static FieldBridge extractType(ClassBridge cb)
- {
- FieldBridge bridge = null;
+ builtInBridges.put(Date.class.getName(), DATE_MILLISECOND);
+ }
- 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() );
+ /**
+ * This extracts and instantiates the implementation class from a ClassBridge
+ * annotation.
+ *
+ * @param cb the ClassBridge
+ * @return FieldBridge
+ */
+ public static FieldBridge extractType(ClassBridge cb) {
+ FieldBridge bridge = null;
- return bridge;
- }
+ 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());
- public static FieldBridge guessType(Field field, XMember member, ReflectionManager
reflectionManager) {
- FieldBridge bridge;
- org.hibernate.search.annotations.FieldBridge bridgeAnn;
- //@Field bridge has priority over @FieldBridge
- if ( field != null && void.class != field.bridge().impl() ) {
- bridgeAnn = field.bridge();
- }
- else {
- bridgeAnn = member.getAnnotation( org.hibernate.search.annotations.FieldBridge.class
);
- }
- if ( bridgeAnn != null ) {
- Class impl = bridgeAnn.impl();
- if (impl == void.class)
- throw new SearchException("@FieldBridge with no implementation class defined in:
" + member.getName() );
- 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("@FieldBridge implementation implements none of the
field bridge interfaces: "
- + impl + " in " + member.getName() );
- }
- if ( bridgeAnn.params().length > 0 &&
ParameterizedBridge.class.isAssignableFrom( impl ) ) {
- Map params = new HashMap( bridgeAnn.params().length );
- for ( Parameter param : bridgeAnn.params() ) {
- params.put( param.name(), param.value() );
- }
- ( (ParameterizedBridge) instance ).setParameterValues( params );
- }
+ return bridge;
+ }
- }
- catch (Exception e) {
- //TODO add classname
- throw new HibernateException( "Unable to instanciate FieldBridge for " +
member.getName(), e );
- }
- }
- else if ( member.isAnnotationPresent( org.hibernate.search.annotations.DateBridge.class
) ) {
- Resolution resolution =
- member.getAnnotation( org.hibernate.search.annotations.DateBridge.class
).resolution();
- bridge = getDateField( resolution );
- }
- else {
- //find in built-ins
- XClass returnType = member.getType();
- bridge = builtInBridges.get( returnType.getName() );
- if ( bridge == null && returnType.isEnum() ) {
- bridge = new TwoWayString2FieldBridgeAdaptor(
- new EnumBridge( (Class<? extends Enum>) reflectionManager.toClass( returnType
) )
- );
- }
- }
- //TODO add classname
- if ( bridge == null ) throw new SearchException( "Unable to guess FieldBridge for
" + member.getName() );
- return bridge;
- }
+ public static TwoWayFieldBridge extractTwoWayType(ClassBridge cb) {
+ FieldBridge fb = extractType(cb);
+ if (fb instanceof TwoWayFieldBridge) {
+ return (TwoWayFieldBridge) fb;
+ }
+ else {
+ throw new HibernateException("ClassBridge passed in is not an instance of
" + TwoWayFieldBridge.class.getSimpleName());
+ }
+ }
- public static FieldBridge getDateField(Resolution resolution) {
- switch (resolution) {
- case YEAR:
- return DATE_YEAR;
- case MONTH:
- return DATE_MONTH;
- case DAY:
- return DATE_DAY;
- case HOUR:
- return DATE_HOUR;
- case MINUTE:
- return DATE_MINUTE;
- case SECOND:
- return DATE_SECOND;
- case MILLISECOND:
- return DATE_MILLISECOND;
- default:
- throw new AssertionFailure( "Unknown Resolution: " + resolution );
- }
- }
+ public static FieldBridge guessType(Field field, XMember member, ReflectionManager
reflectionManager) {
+ FieldBridge bridge;
+ org.hibernate.search.annotations.FieldBridge bridgeAnn;
+ //@Field bridge has priority over @FieldBridge
+ if (field != null && void.class != field.bridge().impl()) {
+ bridgeAnn = field.bridge();
+ }
+ else {
+ bridgeAnn =
member.getAnnotation(org.hibernate.search.annotations.FieldBridge.class);
+ }
+ if (bridgeAnn != null) {
+ Class impl = bridgeAnn.impl();
+ if (impl == void.class) {
+ throw new SearchException("@FieldBridge with no implementation class
defined in: " + member.getName());
+ }
+ 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("@FieldBridge implementation implements
none of the field bridge interfaces: "
+ + impl + " in " + member.getName());
+ }
+ if (bridgeAnn.params().length > 0 &&
ParameterizedBridge.class.isAssignableFrom(impl)) {
+ Map params = new HashMap(bridgeAnn.params().length);
+ for (Parameter param : bridgeAnn.params()) {
+ params.put(param.name(), param.value());
+ }
+ ((ParameterizedBridge) instance).setParameterValues(params);
+ }
+
+ }
+ catch (Exception e) {
+ //TODO add classname
+ throw new HibernateException("Unable to instanciate FieldBridge for
" + member.getName(), e);
+ }
+ }
+ else if
(member.isAnnotationPresent(org.hibernate.search.annotations.DateBridge.class)) {
+ Resolution resolution =
+
member.getAnnotation(org.hibernate.search.annotations.DateBridge.class).resolution();
+ bridge = getDateField(resolution);
+ }
+ else {
+ //find in built-ins
+ XClass returnType = member.getType();
+ bridge = builtInBridges.get(returnType.getName());
+ if (bridge == null && returnType.isEnum()) {
+ bridge = new TwoWayString2FieldBridgeAdaptor(
+ new EnumBridge((Class<? extends Enum>)
reflectionManager.toClass(returnType))
+ );
+ }
+ }
+ //TODO add classname
+ if (bridge == null) throw new SearchException("Unable to guess FieldBridge for
" + member.getName());
+ return bridge;
+ }
+
+ public static FieldBridge getDateField(Resolution resolution) {
+ switch (resolution) {
+ case YEAR:
+ return DATE_YEAR;
+ case MONTH:
+ return DATE_MONTH;
+ case DAY:
+ return DATE_DAY;
+ case HOUR:
+ return DATE_HOUR;
+ case MINUTE:
+ return DATE_MINUTE;
+ case SECOND:
+ return DATE_SECOND;
+ case MILLISECOND:
+ return DATE_MILLISECOND;
+ default:
+ throw new AssertionFailure("Unknown Resolution: " + resolution);
+ }
+ }
}
Modified: search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java 2008-08-13
18:17:51 UTC (rev 15057)
+++ search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java 2008-08-14
06:17:05 UTC (rev 15058)
@@ -118,22 +118,14 @@
ProvidedId provided = clazz.getAnnotation(
org.hibernate.search.annotations.ProvidedId.class );
if ( provided == null ) throw new SearchException( "No document id in: " +
clazz.getName() );
- //TODO navssurtani use something similar to BridgeFactory.extractType(ClassBridge)
- idBridge = getProvidedIdBridge();
+ idBridge = BridgeFactory.extractTwoWayType(provided.bridgeImpl());
idKeywordName = provided.name();
-
-
}
//if composite id, use of (a, b) in ((1,2)TwoWayString2FieldBridgeAdaptor, (3,4)) fails
on most database
//a TwoWayString2FieldBridgeAdaptor is never a composite id
safeFromTupleId = TwoWayString2FieldBridgeAdaptor.class.isAssignableFrom(
idBridge.getClass() );
}
- private TwoWayFieldBridge getProvidedIdBridge() {
- return new TwoWayString2FieldBridgeAdaptor( new StringBridge() );
- }
-
-
private Analyzer getAnalyzer(XAnnotatedElement annotatedElement, InitContext context) {
org.hibernate.search.annotations.Analyzer analyzerAnn =
annotatedElement.getAnnotation( org.hibernate.search.annotations.Analyzer.class );
Modified: search/trunk/src/test/org/hibernate/search/test/SearchTestCase.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/SearchTestCase.java 2008-08-13
18:17:51 UTC (rev 15057)
+++ search/trunk/src/test/org/hibernate/search/test/SearchTestCase.java 2008-08-14
06:17:05 UTC (rev 15058)
@@ -36,7 +36,7 @@
}
protected void setUp() throws Exception {
- //super.setUp(); //we need a fresh session factory each time for index set up
+// super.setUp(); //we need a fresh session factory each time for index set up
buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
}