Java Mailing List Archive

http://www.gg3721.com/

Home » Hibernate Commits List »

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

hibernate-commits

2008-07-11


Author LoginPost Reply
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)
@@(protected) @@


 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)
@@(protected) @@
* @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)
@@(protected) @@
+// $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)
@@(protected) @@
import org.hibernate.util.StringHelper;

/**
- * Bridge to use a StringBridge as a FieldBridge
+ * Bridge to use a StringBridge as a FieldBridge.
*
* @author Emmanuel Bernard
*/
@@(protected) @@
   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)
@@(protected) @@
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;
@@(protected) @@
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;
@@(protected) @@
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;
@@(protected) @@
* @author Richard Hallier
* @author Hardy Ferentschik
*/
+@(protected)")
public class DocumentBuilder<T> {
 private static final Logger log = LoggerFactory.getLogger( DocumentBuilder.class );

@@(protected) @@
     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;
@@(protected) @@
   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 );
@@(protected) @@
   return safeFromTupleId;
 }

+  /**
+   * Wrapper class containing all the meta data extracted out of the entities.
+   */
 private static class PropertiesMetadata {
   public Float boost;
   public Analyzer analyzer;
@@(protected) @@
     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)
@@(protected) @@
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;

/**
@@(protected) @@
   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
@@(protected) @@
     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)
@@(protected) @@
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;

/**
@@(protected) @@

 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
@@(protected) @@
     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)
@@(protected) @@
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
@@(protected) @@
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 );
@@(protected) @@
   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)
@@(protected) @@
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;

/**
@@(protected) @@
   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
@@(protected) @@
   }
   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)
@@(protected) @@
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;

/**
@@(protected) @@
   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)
@@(protected) @@

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
+import org.hibernate.search.bridge.LuceneOptions;
import org.hibernate.search.bridge.TwoWayFieldBridge;

/**
@@(protected) @@
   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 );
 }
}

_______________________________________________
hibernate-commits mailing list
hibernate-commits@(protected)
https://lists.jboss.org/mailman/listinfo/hibernate-commits
©2008 gg3721.com - Jax Systems, LLC, U.S.A.