[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