[hibernate-commits] Hibernate SVN: r10601 - in branches/Lucene_Integration/HibernateExt/metadata/src: java/org/hibernate/lucene/bridge test/org/hibernate/lucene/test/bridge

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Oct 17 20:58:45 EDT 2006


Author: epbernard
Date: 2006-10-17 20:58:41 -0400 (Tue, 17 Oct 2006)
New Revision: 10601

Added:
   branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/BigDecimalBridge.java
   branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/BigIntegerBridge.java
   branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/TruncateFieldBridge.java
   branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/TruncateStringBridge.java
Modified:
   branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/BridgeFactory.java
   branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/DateBridge.java
   branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/DoubleBridge.java
   branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/FloatBridge.java
   branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/IntegerBridge.java
   branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/LongBridge.java
   branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/ParameterizedBridge.java
   branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/StringImplBridge.java
   branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/BridgeTest.java
   branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/Cloud.java
Log:
ANN-454 support for BigDecimal/BigInteger
ANN-363 @FieldBridge support

Added: branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/BigDecimalBridge.java
===================================================================
--- branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/BigDecimalBridge.java	2006-10-17 23:58:05 UTC (rev 10600)
+++ branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/BigDecimalBridge.java	2006-10-18 00:58:41 UTC (rev 10601)
@@ -0,0 +1,19 @@
+//$Id: $
+package org.hibernate.lucene.bridge;
+
+import java.math.BigInteger;
+import java.math.BigDecimal;
+
+import org.hibernate.util.StringHelper;
+
+/**
+ * Map a BigDecimal element
+ *
+ * @author Emmanuel Bernard
+ */
+public class BigDecimalBridge extends NumberBridge {
+	public Object stringToObject(String stringValue) {
+        if ( StringHelper.isEmpty(stringValue) ) return null;
+        return new BigDecimal(stringValue);
+	}
+}

Added: branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/BigIntegerBridge.java
===================================================================
--- branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/BigIntegerBridge.java	2006-10-17 23:58:05 UTC (rev 10600)
+++ branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/BigIntegerBridge.java	2006-10-18 00:58:41 UTC (rev 10601)
@@ -0,0 +1,17 @@
+//$Id: $
+package org.hibernate.lucene.bridge;
+
+import java.math.BigInteger;
+
+import org.hibernate.util.StringHelper;
+
+/**
+ * Map a BigInteger element
+ * @author Emmanuel Bernard
+ */
+public class BigIntegerBridge extends NumberBridge {
+	public Object stringToObject(String stringValue) {
+        if ( StringHelper.isEmpty(stringValue) ) return null;
+        return new BigInteger(stringValue);
+	}
+}

Modified: branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/BridgeFactory.java
===================================================================
--- branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/BridgeFactory.java	2006-10-17 23:58:05 UTC (rev 10600)
+++ branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/BridgeFactory.java	2006-10-18 00:58:41 UTC (rev 10601)
@@ -4,6 +4,8 @@
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.math.BigInteger;
+import java.math.BigDecimal;
 
 import org.hibernate.HibernateException;
 import org.hibernate.reflection.XMember;
@@ -26,8 +28,12 @@
 
 	public static final FieldBridge LONG = new String2FieldBridgeAdaptor( new LongBridge() );
 
-	public static final FieldBridge STRING = new String2FieldBridgeAdaptor( new StringImplBridge() );
+    public static final FieldBridge BIG_INTEGER = new String2FieldBridgeAdaptor( new BigIntegerBridge() );
 
+    public static final FieldBridge BIG_DECIMAL = new String2FieldBridgeAdaptor( new BigDecimalBridge() );
+
+    public static final FieldBridge STRING = new String2FieldBridgeAdaptor( new StringImplBridge() );
+
 	public static final FieldBridge DATE_YEAR;
 	public static final FieldBridge DATE_MONTH;
 	public static final FieldBridge DATE_DAY;
@@ -45,9 +51,11 @@
         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 );
 
-		DATE_YEAR = org.hibernate.lucene.bridge.DateBridge.DATE_YEAR;
+        DATE_YEAR = org.hibernate.lucene.bridge.DateBridge.DATE_YEAR;
 		DATE_MONTH = org.hibernate.lucene.bridge.DateBridge.DATE_MONTH;
 		DATE_DAY = org.hibernate.lucene.bridge.DateBridge.DATE_DAY;
 		DATE_HOUR = org.hibernate.lucene.bridge.DateBridge.DATE_HOUR;

Modified: branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/DateBridge.java
===================================================================
--- branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/DateBridge.java	2006-10-17 23:58:05 UTC (rev 10600)
+++ branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/DateBridge.java	2006-10-18 00:58:41 UTC (rev 10601)
@@ -14,6 +14,15 @@
 /**
  * Bridge a java.util.Date to a String, truncated to the resolution
  * Date are stored GMT based
+ *
+ * ie
+ * Resolution.YEAR: yyyy
+ * Resolution.MONTH: yyyyMM
+ * Resolution.DAY: yyyyMMdd
+ * Resolution.HOUR: yyyyMMddHH
+ * Resolution.MINUTE: yyyyMMddHHmm
+ * Resolution.SECOND: yyyyMMddHHmmss
+ * Resolution.MILLISECOND: yyyyMMddHHmmssSSS
  * 
  * @author Emmanuel Bernard
  */

Modified: branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/DoubleBridge.java
===================================================================
--- branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/DoubleBridge.java	2006-10-17 23:58:05 UTC (rev 10600)
+++ branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/DoubleBridge.java	2006-10-18 00:58:41 UTC (rev 10601)
@@ -4,6 +4,8 @@
 import org.hibernate.util.StringHelper;
 
 /**
+ * Map a double element
+ *
  * @author Emmanuel Bernard
  */
 public class DoubleBridge extends NumberBridge {

Modified: branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/FloatBridge.java
===================================================================
--- branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/FloatBridge.java	2006-10-17 23:58:05 UTC (rev 10600)
+++ branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/FloatBridge.java	2006-10-18 00:58:41 UTC (rev 10601)
@@ -4,6 +4,8 @@
 import org.hibernate.util.StringHelper;
 
 /**
+ * Map a float element
+ *
  * @author Emmanuel Bernard
  */
 public class FloatBridge extends NumberBridge {

Modified: branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/IntegerBridge.java
===================================================================
--- branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/IntegerBridge.java	2006-10-17 23:58:05 UTC (rev 10600)
+++ branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/IntegerBridge.java	2006-10-18 00:58:41 UTC (rev 10601)
@@ -4,6 +4,8 @@
 import org.hibernate.util.StringHelper;
 
 /**
+ * Map an integer element
+ *
  * @author Emmanuel Bernard
  */
 public class IntegerBridge extends NumberBridge {

Modified: branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/LongBridge.java
===================================================================
--- branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/LongBridge.java	2006-10-17 23:58:05 UTC (rev 10600)
+++ branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/LongBridge.java	2006-10-18 00:58:41 UTC (rev 10601)
@@ -4,6 +4,8 @@
 import org.hibernate.util.StringHelper;
 
 /**
+ * Map a long element
+ *
  * @author Emmanuel Bernard
  */
 public class LongBridge extends NumberBridge {

Modified: branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/ParameterizedBridge.java
===================================================================
--- branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/ParameterizedBridge.java	2006-10-17 23:58:05 UTC (rev 10600)
+++ branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/ParameterizedBridge.java	2006-10-18 00:58:41 UTC (rev 10601)
@@ -9,5 +9,6 @@
  * @author Emmanuel Bernard
  */
 public interface ParameterizedBridge {
-	void setParameterValues(Map parameters);
+    //TODO inject Properties? since the annotations cannot support Object attribute?
+    void setParameterValues(Map parameters);
 }

Modified: branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/StringImplBridge.java
===================================================================
--- branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/StringImplBridge.java	2006-10-17 23:58:05 UTC (rev 10600)
+++ branches/Lucene_Integration/HibernateExt/metadata/src/java/org/hibernate/lucene/bridge/StringImplBridge.java	2006-10-18 00:58:41 UTC (rev 10601)
@@ -4,6 +4,7 @@
 import org.hibernate.util.StringHelper;
 
 /**
+ * Map a string element
  * @author Emmanuel Bernard
  */
 public class StringImplBridge implements StringBridge {

Modified: branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/BridgeTest.java
===================================================================
--- branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/BridgeTest.java	2006-10-17 23:58:05 UTC (rev 10600)
+++ branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/BridgeTest.java	2006-10-18 00:58:41 UTC (rev 10601)
@@ -8,13 +8,17 @@
 import java.util.TimeZone;
 
 import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
 
 import org.hibernate.lucene.test.TestCase;
 import org.hibernate.lucene.LuceneSession;
+import org.hibernate.lucene.Environment;
 import org.hsqldb.Session;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.queryParser.QueryParser;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.analysis.StopAnalyzer;
+import org.apache.lucene.analysis.SimpleAnalyzer;
 
 /**
  * @author Emmanuel Bernard
@@ -58,6 +62,36 @@
 
     }
 
+    public void testCustomBridges() throws Exception {
+        Cloud cloud = new Cloud();
+        cloud.setCustomFieldBridge( "This is divided by 2");
+        cloud.setCustomStringBridge( "This is div by 4");
+        org.hibernate.Session s = openSession();
+        Transaction tx = s.beginTransaction();
+        s.persist(cloud);
+        s.flush();
+        tx.commit();
+
+        tx = s.beginTransaction();
+        LuceneSession session = new LuceneSession(s);
+        QueryParser parser = new QueryParser("id", new SimpleAnalyzer() );
+        Query query;
+        List result;
+
+        query = parser.parse("customFieldBridge:This AND customStringBridge:This");
+        result = session.createLuceneQuery(query).list();
+        assertEquals( "Properties not mapped", 1, result.size() );
+
+        query = parser.parse("customFieldBridge:by AND customStringBridge:is");
+        result = session.createLuceneQuery(query).list();
+        assertEquals( "Custom types not taken into account", 0, result.size() );
+
+        s.delete( s.get( Cloud.class, cloud.getId() ) );
+        tx.commit();
+        s.close();
+
+    }
+
     public void testDateBridge() throws Exception {
         Cloud cloud = new Cloud();
         Calendar c = GregorianCalendar.getInstance();
@@ -108,4 +142,10 @@
                 Cloud.class
         };
     }
+
+
+    protected void configure(Configuration cfg) {
+        super.configure( cfg );
+        cfg.setProperty( Environment.ANALYZER_CLASS, SimpleAnalyzer.class.getName() );
+    }
 }

Modified: branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/Cloud.java
===================================================================
--- branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/Cloud.java	2006-10-17 23:58:05 UTC (rev 10600)
+++ branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/Cloud.java	2006-10-18 00:58:41 UTC (rev 10601)
@@ -10,7 +10,9 @@
 import org.hibernate.lucene.Indexed;
 import org.hibernate.lucene.Text;
 import org.hibernate.lucene.DateBridge;
+import org.hibernate.lucene.FieldBridge;
 import org.hibernate.lucene.bridge.Resolution;
+import org.hibernate.annotations.Parameter;
 
 /**
  * @author Emmanuel Bernard
@@ -36,7 +38,29 @@
     private Date dateMinute;
     private Date dateSecond;
     private Date dateMillisecond;
+    private String customFieldBridge;
+    private String customStringBridge;
 
+    @Text
+    @FieldBridge(impl = TruncateFieldBridge.class)
+    public String getCustomFieldBridge() {
+        return customFieldBridge;
+    }
+
+    public void setCustomFieldBridge(String customFieldBridge) {
+        this.customFieldBridge = customFieldBridge;
+    }
+
+    @Text
+    @FieldBridge(impl = TruncateStringBridge.class, params = @Parameter( name="dividedBy", value="4" ) )
+    public String getCustomStringBridge() {
+        return customStringBridge;
+    }
+
+    public void setCustomStringBridge(String customStringBridge) {
+        this.customStringBridge = customStringBridge;
+    }
+
     @Id @GeneratedValue @Keyword(id=true)
     public int getId() {
         return id;

Added: branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/TruncateFieldBridge.java
===================================================================
--- branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/TruncateFieldBridge.java	2006-10-17 23:58:05 UTC (rev 10600)
+++ branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/TruncateFieldBridge.java	2006-10-18 00:58:41 UTC (rev 10601)
@@ -0,0 +1,27 @@
+//$Id: $
+package org.hibernate.lucene.test.bridge;
+
+import org.hibernate.lucene.bridge.FieldBridge;
+import org.hibernate.util.StringHelper;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class TruncateFieldBridge implements FieldBridge {
+    public Object get(String name, Document document) {
+		Field field = document.getField( name );
+		return field.stringValue();
+	}
+
+	public void set(String name, Object value, Document document, Field.Store store, Field.Index index, Float boost) {
+        String indexedString = (String) value;
+        //Do not add fields on empty strings, seems a sensible default in most situations
+        if ( StringHelper.isNotEmpty( indexedString ) ) {
+            Field field = new Field(name, indexedString.substring(0, indexedString.length() / 2), store, index);
+            if (boost != null) field.setBoost( boost );
+            document.add( field );
+        }
+    }
+}

Added: branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/TruncateStringBridge.java
===================================================================
--- branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/TruncateStringBridge.java	2006-10-17 23:58:05 UTC (rev 10600)
+++ branches/Lucene_Integration/HibernateExt/metadata/src/test/org/hibernate/lucene/test/bridge/TruncateStringBridge.java	2006-10-18 00:58:41 UTC (rev 10601)
@@ -0,0 +1,26 @@
+//$Id: $
+package org.hibernate.lucene.test.bridge;
+
+import java.util.Map;
+
+import org.hibernate.lucene.bridge.StringBridge;
+import org.hibernate.lucene.bridge.ParameterizedBridge;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class TruncateStringBridge implements StringBridge, ParameterizedBridge {
+    private int div;
+    public Object stringToObject(String stringValue) {
+        return stringValue;
+    }
+
+    public String objectToString(Object object) {
+        String string = (String) object;
+        return object != null ? string.substring( 0, string.length() / div ) : null;
+    }
+
+    public void setParameterValues(Map parameters) {
+        div = Integer.valueOf( (String) parameters.get( "dividedBy" ) );
+    }
+}




More information about the hibernate-commits mailing list