[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