[hibernate-commits] Hibernate SVN: r11183 - in branches/Branch_3_2/HibernateExt/search/src: java/org/hibernate/search/bridge/builtin and 1 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Feb 9 19:01:50 EST 2007


Author: epbernard
Date: 2007-02-09 19:01:50 -0500 (Fri, 09 Feb 2007)
New Revision: 11183

Added:
   branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/EnumBridge.java
   branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/CloudType.java
Modified:
   branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/BridgeFactory.java
   branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/BridgeTest.java
   branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/Cloud.java
Log:
HSEARCH-2 support for enums

Modified: branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/BridgeFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/BridgeFactory.java	2007-02-09 22:54:18 UTC (rev 11182)
+++ branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/BridgeFactory.java	2007-02-10 00:01:50 UTC (rev 11183)
@@ -18,6 +18,7 @@
 import org.hibernate.search.bridge.builtin.BigDecimalBridge;
 import org.hibernate.search.bridge.builtin.DoubleBridge;
 import org.hibernate.search.bridge.builtin.ShortBridge;
+import org.hibernate.search.bridge.builtin.EnumBridge;
 import org.hibernate.search.annotations.Resolution;
 import org.hibernate.search.annotations.Parameter;
 import org.hibernate.annotations.common.reflection.XClass;
@@ -54,7 +55,8 @@
 	public static final FieldBridge DATE_HOUR = new String2FieldBridgeAdaptor( DateBridge.DATE_HOUR );
 	public static final FieldBridge DATE_MINUTE = new String2FieldBridgeAdaptor( DateBridge.DATE_MINUTE );
 	public static final FieldBridge DATE_SECOND = new String2FieldBridgeAdaptor( DateBridge.DATE_SECOND );
-	public static final TwoWayFieldBridge DATE_MILLISECOND = new TwoWayString2FieldBridgeAdaptor( DateBridge.DATE_MILLISECOND );
+	public static final TwoWayFieldBridge DATE_MILLISECOND =
+			new TwoWayString2FieldBridgeAdaptor( DateBridge.DATE_MILLISECOND );
 
 	static {
 		builtInBridges.put( Double.class.getName(), DOUBLE );
@@ -86,7 +88,8 @@
 					bridge = (FieldBridge) instance;
 				}
 				else if ( org.hibernate.search.bridge.TwoWayStringBridge.class.isAssignableFrom( impl ) ) {
-					bridge = new TwoWayString2FieldBridgeAdaptor( (org.hibernate.search.bridge.TwoWayStringBridge) instance );
+					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 );
@@ -105,13 +108,19 @@
 			}
 		}
 		else if ( member.isAnnotationPresent( org.hibernate.search.annotations.DateBridge.class ) ) {
-			Resolution resolution = member.getAnnotation( org.hibernate.search.annotations.DateBridge.class ).resolution();
+			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>) returnType.getClass() )
+				);
+			}
 		}
 		//TODO add classname
 		if ( bridge == null ) throw new HibernateException( "Unable to guess FieldBridge for " + member.getName() );

Added: branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/EnumBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/EnumBridge.java	                        (rev 0)
+++ branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/EnumBridge.java	2007-02-10 00:01:50 UTC (rev 11183)
@@ -0,0 +1,32 @@
+//$Id: $
+package org.hibernate.search.bridge.builtin;
+
+import org.hibernate.search.bridge.TwoWayStringBridge;
+
+
+/**
+ * Map an Enum field
+ *
+ * @author Sylvain Vieujot
+ */
+public class EnumBridge implements TwoWayStringBridge {
+
+	private Class<? extends Enum> clazz = null;
+
+    /**
+     * @param clazz the class of the enum.
+     */
+    public EnumBridge(Class<? extends Enum> clazz) {
+        this.clazz = clazz;
+    }
+
+	public Enum<? extends Enum> stringToObject(String stringValue) {
+		return Enum.valueOf( clazz, stringValue );
+	}
+
+	public String objectToString(Object object) {
+		Enum e = (Enum) object;
+		return e.name();
+	}
+}
+

Modified: branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/BridgeTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/BridgeTest.java	2007-02-09 22:54:18 UTC (rev 11182)
+++ branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/BridgeTest.java	2007-02-10 00:01:50 UTC (rev 11183)
@@ -35,7 +35,8 @@
         cloud.setLong1( null );
         cloud.setLong2( 2l );
         cloud.setString(null);
-        org.hibernate.Session s = openSession();
+		cloud.setType( CloudType.DOG );
+		org.hibernate.Session s = openSession();
         Transaction tx = s.beginTransaction();
         s.persist(cloud);
         s.flush();
@@ -47,8 +48,10 @@
         Query query;
         List result;
 
-        query = parser.parse("double2:[2.1 TO 2.1] AND float2:[2.1 TO 2.1] AND int2:[2 TO 2.1] AND long2:[2 TO 2.1]");
-        result = session.createFullTextQuery(query).list();
+        query = parser.parse("double2:[2.1 TO 2.1] AND float2:[2.1 TO 2.1] " +
+				"AND int2:[2 TO 2.1] AND long2:[2 TO 2.1] AND type:\"dog\"");
+
+		result = session.createFullTextQuery(query).list();
         assertEquals( "find primitives and do not fail on null", 1, result.size() );
 
         query = parser.parse("double1:[2.1 TO 2.1] OR float1:[2.1 TO 2.1] OR int1:[2 TO 2.1] OR long1:[2 TO 2.1]");

Modified: branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/Cloud.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/Cloud.java	2007-02-09 22:54:18 UTC (rev 11182)
+++ branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/Cloud.java	2007-02-10 00:01:50 UTC (rev 11183)
@@ -13,6 +13,9 @@
 import org.hibernate.search.annotations.FieldBridge;
 import org.hibernate.search.annotations.Resolution;
 import org.hibernate.search.annotations.Parameter;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.Store;
 
 /**
  * @author Emmanuel Bernard
@@ -40,8 +43,9 @@
     private Date dateMillisecond;
     private String customFieldBridge;
     private String customStringBridge;
+	private CloudType type;
 
-    @Text
+	@Text
     @FieldBridge(impl = TruncateFieldBridge.class)
     public String getCustomFieldBridge() {
         return customFieldBridge;
@@ -230,4 +234,13 @@
     public void setDateMillisecond(Date dateMillisecond) {
         this.dateMillisecond = dateMillisecond;
     }
+
+	@Field(index = Index.TOKENIZED )
+	public CloudType getType() {
+		return type;
+	}
+
+	public void setType(CloudType type) {
+		this.type = type;
+	}
 }

Added: branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/CloudType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/CloudType.java	                        (rev 0)
+++ branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/CloudType.java	2007-02-10 00:01:50 UTC (rev 11183)
@@ -0,0 +1,12 @@
+//$Id: $
+package org.hibernate.search.test.bridge;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public enum CloudType {
+	DRAGON,
+	HOUSE,
+	DOG,
+	EUROPE
+}




More information about the hibernate-commits mailing list