[hibernate-commits] Hibernate SVN: r14922 - in search/trunk/src: java/org/hibernate/search/bridge and 3 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Jul 11 11:18:24 EDT 2008


Author: hardy.ferentschik
Date: 2008-07-11 11:18:24 -0400 (Fri, 11 Jul 2008)
New Revision: 14922

Added:
   search/trunk/src/java/org/hibernate/search/bridge/LuceneOptions.java
Modified:
   search/trunk/src/java/org/hibernate/search/backend/WorkQueue.java
   search/trunk/src/java/org/hibernate/search/bridge/FieldBridge.java
   search/trunk/src/java/org/hibernate/search/bridge/String2FieldBridgeAdaptor.java
   search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
   search/trunk/src/test/org/hibernate/search/test/bridge/CatDeptsFieldsClassBridge.java
   search/trunk/src/test/org/hibernate/search/test/bridge/CatFieldsClassBridge.java
   search/trunk/src/test/org/hibernate/search/test/bridge/DateSplitBridge.java
   search/trunk/src/test/org/hibernate/search/test/bridge/EquipmentType.java
   search/trunk/src/test/org/hibernate/search/test/bridge/TruncateFieldBridge.java
   search/trunk/src/test/org/hibernate/search/test/id/PersonPKBridge.java
Log:
HSEARCH-156:
- Introduced a LuceneOptions class to encapsulate the lucene specific parameters in the FieldBridge interface.

Modified: search/trunk/src/java/org/hibernate/search/backend/WorkQueue.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/backend/WorkQueue.java	2008-07-11 12:28:22 UTC (rev 14921)
+++ search/trunk/src/java/org/hibernate/search/backend/WorkQueue.java	2008-07-11 15:18:24 UTC (rev 14922)
@@ -44,7 +44,7 @@
 
 
 	public List<LuceneWork> getSealedQueue() {
-		if (sealedQueue == null) throw new AssertionFailure("Access a Sealed WorkQueue whcih has not been sealed");
+		if (sealedQueue == null) throw new AssertionFailure("Access a Sealed WorkQueue which has not been sealed");
 		return sealedQueue;
 	}
 

Modified: search/trunk/src/java/org/hibernate/search/bridge/FieldBridge.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/bridge/FieldBridge.java	2008-07-11 12:28:22 UTC (rev 14921)
+++ search/trunk/src/java/org/hibernate/search/bridge/FieldBridge.java	2008-07-11 15:18:24 UTC (rev 14922)
@@ -11,11 +11,13 @@
  * @author Emmanuel Bernard
  */
 public interface FieldBridge {
+
 	/**
 	 * Manipulate the document to index the given value.
 	 * A common implementation is to add a Field <code>name</code> to the given document following
 	 * the parameters (<code>store</code>, <code>index</code>, <code>boost</code>) if the
 	 * <code>value</code> is not null
+	 * @param parameterObject TODO
 	 */
-	void set(String name, Object value, Document document, Field.Store store, Field.Index index, Field.TermVector termVector, Float boost);
+	void set(String name, Object value, Document document, LuceneOptions parameterObject);
 }

Added: search/trunk/src/java/org/hibernate/search/bridge/LuceneOptions.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/bridge/LuceneOptions.java	                        (rev 0)
+++ search/trunk/src/java/org/hibernate/search/bridge/LuceneOptions.java	2008-07-11 15:18:24 UTC (rev 14922)
@@ -0,0 +1,25 @@
+// $Id:$
+package org.hibernate.search.bridge;
+
+import org.apache.lucene.document.Field.Index;
+import org.apache.lucene.document.Field.Store;
+import org.apache.lucene.document.Field.TermVector;
+
+/**
+ * A wrapper class for Lucene parameters needed for indexing.
+ * 
+ * @author Hardy Ferentschik
+ */
+public class LuceneOptions {
+	public Store store;
+	public Index index;
+	public TermVector termVector;
+	public Float boost;
+
+	public LuceneOptions(Store store, Index index, TermVector termVector, Float boost) {
+		this.store = store;
+		this.index = index;
+		this.termVector = termVector;
+		this.boost = boost;
+	}
+}
\ No newline at end of file


Property changes on: search/trunk/src/java/org/hibernate/search/bridge/LuceneOptions.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: search/trunk/src/java/org/hibernate/search/bridge/String2FieldBridgeAdaptor.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/bridge/String2FieldBridgeAdaptor.java	2008-07-11 12:28:22 UTC (rev 14921)
+++ search/trunk/src/java/org/hibernate/search/bridge/String2FieldBridgeAdaptor.java	2008-07-11 15:18:24 UTC (rev 14922)
@@ -6,7 +6,7 @@
 import org.hibernate.util.StringHelper;
 
 /**
- * Bridge to use a StringBridge as a FieldBridge
+ * Bridge to use a StringBridge as a FieldBridge.
  *
  * @author Emmanuel Bernard
  */
@@ -17,13 +17,13 @@
 		this.stringBridge = stringBridge;
 	}
 
-	public void set(String name, Object value, Document document, Field.Store store, Field.Index index, Field.TermVector termVector, Float boost) {
+	public void set(String name, Object value, Document document, LuceneOptions parameterObject) {
 		String indexedString = stringBridge.objectToString( value );
 		//Do not add fields on empty strings, seems a sensible default in most situations
 		//TODO if Store, probably also save empty ones
 		if ( StringHelper.isNotEmpty( indexedString ) ) {
-			Field field = new Field( name, indexedString, store, index, termVector );
-			if ( boost != null ) field.setBoost( boost );
+			Field field = new Field( name, indexedString, parameterObject.store, parameterObject.index, parameterObject.termVector );
+			if ( parameterObject.boost != null ) field.setBoost( parameterObject.boost );
 			document.add( field );
 		}
 	}

Modified: search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java	2008-07-11 12:28:22 UTC (rev 14921)
+++ search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java	2008-07-11 15:18:24 UTC (rev 14922)
@@ -27,7 +27,8 @@
 import org.hibernate.annotations.common.util.StringHelper;
 import org.hibernate.proxy.HibernateProxy;
 import org.hibernate.search.SearchException;
-import org.hibernate.search.impl.InitContext;
+import org.hibernate.search.annotations.AnalyzerDef;
+import org.hibernate.search.annotations.AnalyzerDefs;
 import org.hibernate.search.annotations.Boost;
 import org.hibernate.search.annotations.ClassBridge;
 import org.hibernate.search.annotations.ClassBridges;
@@ -37,8 +38,6 @@
 import org.hibernate.search.annotations.IndexedEmbedded;
 import org.hibernate.search.annotations.Store;
 import org.hibernate.search.annotations.TermVector;
-import org.hibernate.search.annotations.AnalyzerDefs;
-import org.hibernate.search.annotations.AnalyzerDef;
 import org.hibernate.search.backend.AddLuceneWork;
 import org.hibernate.search.backend.DeleteLuceneWork;
 import org.hibernate.search.backend.LuceneWork;
@@ -46,8 +45,10 @@
 import org.hibernate.search.backend.WorkType;
 import org.hibernate.search.bridge.BridgeFactory;
 import org.hibernate.search.bridge.FieldBridge;
+import org.hibernate.search.bridge.LuceneOptions;
 import org.hibernate.search.bridge.TwoWayFieldBridge;
 import org.hibernate.search.bridge.TwoWayString2FieldBridgeAdaptor;
+import org.hibernate.search.impl.InitContext;
 import org.hibernate.search.store.DirectoryProvider;
 import org.hibernate.search.store.IndexShardingStrategy;
 import org.hibernate.search.util.BinderHelper;
@@ -64,6 +65,7 @@
  * @author Richard Hallier
  * @author Hardy Ferentschik
  */
+ at SuppressWarnings("unchecked")
 public class DocumentBuilder<T> {
 	private static final Logger log = LoggerFactory.getLogger( DocumentBuilder.class );
 
@@ -603,7 +605,9 @@
 			Field classField =
 					new Field( CLASS_FIELDNAME, instanceClass.getName(), Field.Store.YES, Field.Index.UN_TOKENIZED, Field.TermVector.NO );
 			doc.add( classField );
-			idBridge.set( idKeywordName, id, doc, Field.Store.YES, Field.Index.UN_TOKENIZED, Field.TermVector.NO, idBoost );
+			LuceneOptions luceneOptions = new LuceneOptions(Field.Store.YES,
+					Field.Index.UN_TOKENIZED, Field.TermVector.NO, idBoost);
+			idBridge.set( idKeywordName, id, doc, luceneOptions );
 		}
 		buildDocumentFields( instance, doc, rootPropertiesMetadata );
 		return doc;
@@ -615,26 +619,15 @@
 		Object unproxiedInstance = unproxy( instance );
 		for (int i = 0; i < propertiesMetadata.classBridges.size(); i++) {
 			FieldBridge fb = propertiesMetadata.classBridges.get( i );
-
-			fb.set( propertiesMetadata.classNames.get( i ),
-					unproxiedInstance,
-					doc,
-					propertiesMetadata.classStores.get( i ),
-					propertiesMetadata.classIndexes.get( i ),
-					propertiesMetadata.classTermVectors.get( i ),
-					propertiesMetadata.classBoosts.get( i ) );
+			fb.set(propertiesMetadata.classNames.get(i), unproxiedInstance,
+					doc, propertiesMetadata.getClassLuceneOptions(i));
 		}
 		for (int i = 0; i < propertiesMetadata.fieldNames.size(); i++) {
 			XMember member = propertiesMetadata.fieldGetters.get( i );
 			Object value = getMemberValue( unproxiedInstance, member );
-			propertiesMetadata.fieldBridges.get( i ).set(
-					propertiesMetadata.fieldNames.get( i ),
-					value, doc,
-					propertiesMetadata.fieldStore.get( i ),
-					propertiesMetadata.fieldIndex.get( i ),
-					propertiesMetadata.fieldTermVectors.get( i ),
-					getBoost( member )
-			);
+			propertiesMetadata.fieldBridges.get(i).set(
+					propertiesMetadata.fieldNames.get(i), value, doc,
+					propertiesMetadata.getFieldLuceneOptions(i, getBoost(member)));
 		}
 		for (int i = 0; i < propertiesMetadata.embeddedGetters.size(); i++) {
 			XMember member = propertiesMetadata.embeddedGetters.get( i );
@@ -823,6 +816,9 @@
 		return safeFromTupleId;
 	}
 
+	/**
+	 * Wrapper class containing all the meta data extracted out of the entities.
+	 */
 	private static class PropertiesMetadata {
 		public Float boost;
 		public Analyzer analyzer;
@@ -849,5 +845,17 @@
 			MAP,
 			ARRAY
 		}
+		
+		private LuceneOptions getClassLuceneOptions(int i) {
+			LuceneOptions options = new LuceneOptions(classStores.get(i),
+					classIndexes.get(i), classTermVectors.get(i), classBoosts.get(i));
+			return options;
+		}
+		
+		private LuceneOptions getFieldLuceneOptions(int i, Float boost) {
+			LuceneOptions options = new LuceneOptions(fieldStore.get(i),
+					fieldIndex.get(i), fieldTermVectors.get(i), boost);
+			return options;
+		}		
 	}
 }

Modified: search/trunk/src/test/org/hibernate/search/test/bridge/CatDeptsFieldsClassBridge.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/bridge/CatDeptsFieldsClassBridge.java	2008-07-11 12:28:22 UTC (rev 14921)
+++ search/trunk/src/test/org/hibernate/search/test/bridge/CatDeptsFieldsClassBridge.java	2008-07-11 15:18:24 UTC (rev 14922)
@@ -5,6 +5,7 @@
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.hibernate.search.bridge.FieldBridge;
+import org.hibernate.search.bridge.LuceneOptions;
 import org.hibernate.search.bridge.ParameterizedBridge;
 
 /**
@@ -18,7 +19,7 @@
 		this.sepChar = (String) parameters.get( "sepChar" );
 	}
 
-	public void set(String name, Object value, Document document, Field.Store store, Field.Index index, Field.TermVector termVector, Float boost) {
+	public void set(String name, Object value, Document document, LuceneOptions parameterObject) {
 		// In this particular class the name of the new field was passed
 		// from the name field of the ClassBridge Annotation. This is not
 		// a requirement. It just works that way in this instance. The
@@ -33,8 +34,8 @@
 			fieldValue2 = "";
 		}
 		String fieldValue = fieldValue1 + sepChar + fieldValue2;
-		Field field = new Field( name, fieldValue, store, index, termVector );
-		if ( boost != null ) field.setBoost( boost );
+		Field field = new Field( name, fieldValue, parameterObject.store, parameterObject.index, parameterObject.termVector );
+		if ( parameterObject.boost != null ) field.setBoost( parameterObject.boost );
 		document.add( field );
 	}
 }

Modified: search/trunk/src/test/org/hibernate/search/test/bridge/CatFieldsClassBridge.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/bridge/CatFieldsClassBridge.java	2008-07-11 12:28:22 UTC (rev 14921)
+++ search/trunk/src/test/org/hibernate/search/test/bridge/CatFieldsClassBridge.java	2008-07-11 15:18:24 UTC (rev 14922)
@@ -5,6 +5,7 @@
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.hibernate.search.bridge.FieldBridge;
+import org.hibernate.search.bridge.LuceneOptions;
 import org.hibernate.search.bridge.ParameterizedBridge;
 
 /**
@@ -14,11 +15,12 @@
 
 	private String sepChar;
 
+	@SuppressWarnings("unchecked")
 	public void setParameterValues(Map parameters) {
 		this.sepChar = (String) parameters.get( "sepChar" );
 	}
 
-	public void set(String name, Object value, Document document, Field.Store store, Field.Index index, Field.TermVector termVector, Float boost) {
+	public void set(String name, Object value, Document document, LuceneOptions parameterObject) {
 		// In this particular class the name of the new field was passed
 		// from the name field of the ClassBridge Annotation. This is not
 		// a requirement. It just works that way in this instance. The
@@ -33,8 +35,8 @@
 			fieldValue2 = "";
 		}
 		String fieldValue = fieldValue1 + sepChar + fieldValue2;
-		Field field = new Field( name, fieldValue, store, index, termVector );
-		if ( boost != null ) field.setBoost( boost );
+		Field field = new Field( name, fieldValue, parameterObject.store, parameterObject.index, parameterObject.termVector );
+		if ( parameterObject.boost != null ) field.setBoost( parameterObject.boost );
 		document.add( field );
 	}
 }

Modified: search/trunk/src/test/org/hibernate/search/test/bridge/DateSplitBridge.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/bridge/DateSplitBridge.java	2008-07-11 12:28:22 UTC (rev 14921)
+++ search/trunk/src/test/org/hibernate/search/test/bridge/DateSplitBridge.java	2008-07-11 15:18:24 UTC (rev 14922)
@@ -9,6 +9,7 @@
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.hibernate.search.bridge.FieldBridge;
+import org.hibernate.search.bridge.LuceneOptions;
 
 /**
  * Store the date in 3 different field year, month, day
@@ -20,7 +21,7 @@
 public class DateSplitBridge implements FieldBridge {
 	private final static TimeZone GMT = TimeZone.getTimeZone( "GMT" );
 
-	public void set(String name, Object value, Document document, Field.Store store, Field.Index index, Field.TermVector termVector, Float boost) {
+	public void set(String name, Object value, Document document, LuceneOptions parameterObject) {
 		Date date = (Date) value;
 		Calendar cal = GregorianCalendar.getInstance( GMT );
 		cal.setTime( date );
@@ -28,16 +29,16 @@
 		int month = cal.get( Calendar.MONTH ) + 1;
 		int day = cal.get( Calendar.DAY_OF_MONTH );
 		//set year
-		Field field = new Field( name + ".year", String.valueOf( year ), store, index, termVector );
-		if ( boost != null ) field.setBoost( boost );
+		Field field = new Field( name + ".year", String.valueOf( year ), parameterObject.store, parameterObject.index, parameterObject.termVector );
+		if ( parameterObject.boost != null ) field.setBoost( parameterObject.boost );
 		document.add( field );
 		//set month and pad it if needed
-		field = new Field( name + ".month", month < 10 ? "0" : "" + String.valueOf( month ), store, index, termVector );
-		if ( boost != null ) field.setBoost( boost );
+		field = new Field( name + ".month", month < 10 ? "0" : "" + String.valueOf( month ), parameterObject.store, parameterObject.index, parameterObject.termVector );
+		if ( parameterObject.boost != null ) field.setBoost( parameterObject.boost );
 		document.add( field );
 		//set day and pad it if needed
-		field = new Field( name + ".day", day < 10 ? "0" : "" + String.valueOf( day ), store, index, termVector );
-		if ( boost != null ) field.setBoost( boost );
+		field = new Field( name + ".day", day < 10 ? "0" : "" + String.valueOf( day ), parameterObject.store, parameterObject.index, parameterObject.termVector );
+		if ( parameterObject.boost != null ) field.setBoost( parameterObject.boost );
 		document.add( field );
 	}
 }

Modified: search/trunk/src/test/org/hibernate/search/test/bridge/EquipmentType.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/bridge/EquipmentType.java	2008-07-11 12:28:22 UTC (rev 14921)
+++ search/trunk/src/test/org/hibernate/search/test/bridge/EquipmentType.java	2008-07-11 15:18:24 UTC (rev 14922)
@@ -5,6 +5,7 @@
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.hibernate.search.bridge.FieldBridge;
+import org.hibernate.search.bridge.LuceneOptions;
 import org.hibernate.search.bridge.ParameterizedBridge;
 
 /**
@@ -18,7 +19,7 @@
 		this.equips = parameters;
 	}
 
-	public void set(String name, Object value, Document document, Field.Store store, Field.Index index, Field.TermVector termVector, Float boost) {
+	public void set(String name, Object value, Document document, LuceneOptions parameterObject) {
 		// In this particular class the name of the new field was passed
 		// from the name field of the ClassBridge Annotation. This is not
 		// a requirement. It just works that way in this instance. The
@@ -32,8 +33,8 @@
 		}
 		else {
 			String fieldValue = (String) equips.get( fieldValue1 );
-			field = new Field( name, fieldValue, store, index, termVector );
-			if ( boost != null ) field.setBoost( boost );
+			field = new Field( name, fieldValue, parameterObject.store, parameterObject.index, parameterObject.termVector );
+			if ( parameterObject.boost != null ) field.setBoost( parameterObject.boost );
 		}
 		document.add( field );
 	}

Modified: search/trunk/src/test/org/hibernate/search/test/bridge/TruncateFieldBridge.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/bridge/TruncateFieldBridge.java	2008-07-11 12:28:22 UTC (rev 14921)
+++ search/trunk/src/test/org/hibernate/search/test/bridge/TruncateFieldBridge.java	2008-07-11 15:18:24 UTC (rev 14922)
@@ -4,6 +4,7 @@
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.hibernate.search.bridge.FieldBridge;
+import org.hibernate.search.bridge.LuceneOptions;
 import org.hibernate.util.StringHelper;
 
 /**
@@ -15,12 +16,12 @@
 		return field.stringValue();
 	}
 
-	public void set(String name, Object value, Document document, Field.Store store, Field.Index index, Field.TermVector termVector, Float boost) {
+	public void set(String name, Object value, Document document, LuceneOptions parameterObject) {
 		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, termVector );
-			if ( boost != null ) field.setBoost( boost );
+			Field field = new Field( name, indexedString.substring( 0, indexedString.length() / 2 ), parameterObject.store, parameterObject.index, parameterObject.termVector );
+			if ( parameterObject.boost != null ) field.setBoost( parameterObject.boost );
 			document.add( field );
 		}
 	}

Modified: search/trunk/src/test/org/hibernate/search/test/id/PersonPKBridge.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/id/PersonPKBridge.java	2008-07-11 12:28:22 UTC (rev 14921)
+++ search/trunk/src/test/org/hibernate/search/test/id/PersonPKBridge.java	2008-07-11 15:18:24 UTC (rev 14922)
@@ -3,6 +3,7 @@
 
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
+import org.hibernate.search.bridge.LuceneOptions;
 import org.hibernate.search.bridge.TwoWayFieldBridge;
 
 /**
@@ -26,20 +27,20 @@
 		return sb.toString();
 	}
 
-	public void set(String name, Object value, Document document, Field.Store store, Field.Index index, Field.TermVector termVector, Float boost) {
+	public void set(String name, Object value, Document document, LuceneOptions parameterObject) {
 		PersonPK id = (PersonPK) value;
 
 		//store each property in a unique field
-		Field field = new Field( name + ".firstName", id.getFirstName(), store, index, termVector );
-		if ( boost != null ) field.setBoost( boost );
+		Field field = new Field( name + ".firstName", id.getFirstName(), parameterObject.store, parameterObject.index, parameterObject.termVector );
+		if ( parameterObject.boost != null ) field.setBoost( parameterObject.boost );
 		document.add( field );
-		field = new Field( name + ".lastName", id.getLastName(), store, index, termVector );
-		if ( boost != null ) field.setBoost( boost );
+		field = new Field( name + ".lastName", id.getLastName(), parameterObject.store, parameterObject.index, parameterObject.termVector );
+		if ( parameterObject.boost != null ) field.setBoost( parameterObject.boost );
 		document.add( field );
 
 		//store the unique string representation in the named field
-		field = new Field( name, objectToString( id ), store, index, termVector );
-		if ( boost != null ) field.setBoost( boost );
+		field = new Field( name, objectToString( id ), parameterObject.store, parameterObject.index, parameterObject.termVector );
+		if ( parameterObject.boost != null ) field.setBoost( parameterObject.boost );
 		document.add( field );
 	}
 }




More information about the hibernate-commits mailing list