[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