[hibernate-commits] Hibernate SVN: r15335 - in search/trunk: src/java/org/hibernate/search/impl and 9 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon Oct 13 05:51:41 EDT 2008


Author: hardy.ferentschik
Date: 2008-10-13 05:51:41 -0400 (Mon, 13 Oct 2008)
New Revision: 15335

Added:
   search/trunk/src/java/org/hibernate/search/util/HibernateSearchResourceLoader.java
   search/trunk/src/test-resources/org/
   search/trunk/src/test-resources/org/hibernate/
   search/trunk/src/test-resources/org/hibernate/search/
   search/trunk/src/test-resources/org/hibernate/search/test/
   search/trunk/src/test-resources/org/hibernate/search/test/analyzer/
   search/trunk/src/test-resources/org/hibernate/search/test/analyzer/solr/
   search/trunk/src/test-resources/org/hibernate/search/test/analyzer/solr/stoplist.properties
Removed:
   search/trunk/src/test/org/hibernate/search/test/analyzer/solr/stoplist.properties
Modified:
   search/trunk/ivy.xml
   search/trunk/pom.xml
   search/trunk/src/java/org/hibernate/search/impl/SolrAnalyzerBuilder.java
Log:
HSEARCH-254
* Upgraded to Lucene 2.4.0
* Upgraded to Solr 1.3.0
* Updated analyzer builder
* moved the properties file stoplist.properties into test-resources

Modified: search/trunk/ivy.xml
===================================================================
--- search/trunk/ivy.xml	2008-10-13 09:24:31 UTC (rev 15334)
+++ search/trunk/ivy.xml	2008-10-13 09:51:41 UTC (rev 15335)
@@ -19,10 +19,12 @@
         <dependency org="org.slf4j" name="slf4j-api" rev="1.4.2" conf="default->default"/>        
         <dependency org="org.hibernate" name="hibernate-core" rev="3.3.0.CR2" conf="default->default"/>
         <dependency org="javax.transaction" name="jta" rev="1.1" conf="default->default"/>
-        <dependency org="org.apache.lucene" name="lucene-core" rev="2.3.2" conf="default->default"/>
+        <dependency org="org.apache.lucene" name="lucene-core" rev="2.4.0" conf="default->default"/>
         <dependency org="javax.jms" name="jms" rev="1.1" conf="default->default"/> <!-- optional -->
         <dependency org="javax.annotation" name="jsr250-api" rev="1.0" conf="default->default"/> <!-- optional -->
-        <dependency org="org.hibernate.apache.lucene.solr" name="apache-solr-analyzer" rev="1.2.0" conf="default->default"/> <!-- optional -->
+        <dependency org="org.apache.solr" name="solr-core" rev="1.3.0" conf="default->default"/>
+        <dependency org="org.apache.solr" name="solr-common" rev="1.3.0" conf="default->default"/>
+        <!--dependency org="org.hibernate.apache.lucene.solr" name="apache-solr-analyzer" rev="1.3.0" conf="default->default"/-->
 
         <!-- transitive dependencies -->
         <dependency org="antlr" name="antlr" rev="2.7.6" conf="test->default"/>

Modified: search/trunk/pom.xml
===================================================================
--- search/trunk/pom.xml	2008-10-13 09:24:31 UTC (rev 15334)
+++ search/trunk/pom.xml	2008-10-13 09:51:41 UTC (rev 15335)
@@ -25,7 +25,7 @@
         <dependency>
             <groupId>org.apache.lucene</groupId>
             <artifactId>lucene-core</artifactId>
-            <version>2.3.2</version>
+            <version>2.4</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
@@ -52,11 +52,17 @@
             <optional>true</optional>
         </dependency>
         <dependency>
-            <groupId>org.hibernate.apache.lucene.solr</groupId>
-            <artifactId>apache-solr-analyzer</artifactId>
-            <version>1.2.0</version>
+            <groupId>org.apache.solr</groupId>
+            <artifactId>solr-common</artifactId>
+            <version>1.3.0</version>
             <optional>true</optional>
         </dependency>
+        <dependency>
+            <groupId>org.apache.solr</groupId>
+            <artifactId>solr-core</artifactId>
+            <version>1.3.0</version>
+            <optional>true</optional>
+        </dependency>
 
 
         <dependency>

Modified: search/trunk/src/java/org/hibernate/search/impl/SolrAnalyzerBuilder.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/impl/SolrAnalyzerBuilder.java	2008-10-13 09:24:31 UTC (rev 15334)
+++ search/trunk/src/java/org/hibernate/search/impl/SolrAnalyzerBuilder.java	2008-10-13 09:51:41 UTC (rev 15335)
@@ -8,21 +8,33 @@
 import org.apache.solr.analysis.TokenizerChain;
 import org.apache.solr.analysis.TokenFilterFactory;
 import org.apache.solr.analysis.TokenizerFactory;
+import org.apache.solr.util.plugin.ResourceLoaderAware;
+import org.apache.solr.common.ResourceLoader;
 
 import org.hibernate.search.annotations.AnalyzerDef;
 import org.hibernate.search.annotations.TokenizerDef;
 import org.hibernate.search.annotations.TokenFilterDef;
 import org.hibernate.search.annotations.Parameter;
 import org.hibernate.search.SearchException;
+import org.hibernate.search.util.HibernateSearchResourceLoader;
 
 /**
- * This class has a direct dependency on Solr classes
+ * Instances of this class are used to build Lucene analyzers which are defined using the solr <code>TokenFilterFactory</code>.
+ * To make the dependency to the solr framework optional only this class has direct dependecies to solr. Solr dependencies
+ * are not supposed to be used anywhere else (except the actual configuration of the analzers in the domain model).
  *
  * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
  */
 class SolrAnalyzerBuilder {
 	private SolrAnalyzerBuilder() {}
 
+	/**
+	 * Builds a Lucene <code>Analyzer</code> from the specified <code>AnalyzerDef</code> annotation.
+	 *
+	 * @param analyzerDef The <code>AnalyzerDef</code> annotation as found in the annotated domain class.
+	 * @return a Lucene <code>Analyzer</code>
+	 */
 	public static Analyzer buildAnalyzer(AnalyzerDef analyzerDef) {
 		TokenizerDef token = analyzerDef.tokenizer();
 		TokenizerFactory tokenFactory = ( TokenizerFactory ) instantiate( token.factory() );
@@ -30,10 +42,14 @@
 
 		final int length = analyzerDef.filters().length;
 		TokenFilterFactory[] filters = new TokenFilterFactory[length];
+		ResourceLoader resourceLoader = new HibernateSearchResourceLoader();
 		for ( int index = 0 ; index < length ; index++ ) {
 			TokenFilterDef filterDef = analyzerDef.filters()[index];
 			filters[index] = (TokenFilterFactory) instantiate( filterDef.factory() );
 			filters[index].init( getMapOfParameters( filterDef.params() ) );
+			if ( filters[index] instanceof ResourceLoaderAware ) {
+				((ResourceLoaderAware)filters[index]).inform( resourceLoader );
+			}
 		}
 		return new TokenizerChain(tokenFactory, filters);
 	}

Added: search/trunk/src/java/org/hibernate/search/util/HibernateSearchResourceLoader.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/util/HibernateSearchResourceLoader.java	                        (rev 0)
+++ search/trunk/src/java/org/hibernate/search/util/HibernateSearchResourceLoader.java	2008-10-13 09:51:41 UTC (rev 15335)
@@ -0,0 +1,76 @@
+package org.hibernate.search.util;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.BufferedReader;
+import java.io.Reader;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+
+import org.apache.solr.common.ResourceLoader;
+import org.apache.solr.util.plugin.ResourceLoaderAware;
+
+import org.hibernate.annotations.common.util.ReflectHelper;
+import org.hibernate.search.SearchException;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class HibernateSearchResourceLoader implements ResourceLoader {
+	public InputStream openResource(String resource) throws IOException {
+		return Thread.currentThread().getContextClassLoader().getResourceAsStream( resource );
+	}
+
+	public List<String> getLines(String resource) throws IOException {
+		BufferedReader reader = null;
+		try {
+			reader = new BufferedReader( new InputStreamReader( openResource( resource ) ) );
+			List<String> results = new ArrayList<String>();
+			String line = reader.readLine();
+			while ( line != null ) {
+				//comment or empty line
+				if ( line.length() != 0 && !line.startsWith( "#" ) ) {
+					results.add( line );
+				}
+				line = reader.readLine();
+			}
+			return Collections.unmodifiableList( results );
+		}
+		finally {
+			try {
+				if (reader != null) reader.close();
+			}
+			catch ( Exception e ) {
+				//we don't really care if we can't close
+			}
+		}
+	}
+
+	public Object newInstance(String cname, String... subpackages) {
+		if (subpackages != null && subpackages.length > 0)
+			throw new UnsupportedOperationException( "newInstance(classname, packages) not implemented" );
+
+		final Class<?> clazz;
+		try {
+			clazz = ReflectHelper.classForName( cname );
+		}
+		catch ( ClassNotFoundException e ) {
+			throw new SearchException("Unable to find class " + cname, e);
+		}
+		try {
+			final Object instance = clazz.newInstance();
+			if (instance instanceof ResourceLoaderAware) {
+				( ( ResourceLoaderAware) instance ).inform( this );
+			}
+			return instance;
+		}
+		catch ( InstantiationException e ) {
+			throw new SearchException("Unable to instanciate class with no-arg constructor: " + cname, e);
+		}
+		catch ( IllegalAccessException e ) {
+			throw new SearchException("Unable to instanciate class with no-arg constructor: " + cname, e);
+		}
+	}
+}

Deleted: search/trunk/src/test/org/hibernate/search/test/analyzer/solr/stoplist.properties
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/analyzer/solr/stoplist.properties	2008-10-13 09:24:31 UTC (rev 15334)
+++ search/trunk/src/test/org/hibernate/search/test/analyzer/solr/stoplist.properties	2008-10-13 09:51:41 UTC (rev 15335)
@@ -1,33 +0,0 @@
-a
-an
-and
-are
-as
-at
-be
-but
-by
-for
-if
-in
-into
-is
-it
-no
-not
-of
-on
-or
-such
-that
-the
-their
-then
-there
-these
-they
-this
-to
-was
-will
-with
\ No newline at end of file

Added: search/trunk/src/test-resources/org/hibernate/search/test/analyzer/solr/stoplist.properties
===================================================================
--- search/trunk/src/test-resources/org/hibernate/search/test/analyzer/solr/stoplist.properties	                        (rev 0)
+++ search/trunk/src/test-resources/org/hibernate/search/test/analyzer/solr/stoplist.properties	2008-10-13 09:51:41 UTC (rev 15335)
@@ -0,0 +1,33 @@
+a
+an
+and
+are
+as
+at
+be
+but
+by
+for
+if
+in
+into
+is
+it
+no
+not
+of
+on
+or
+such
+that
+the
+their
+then
+there
+these
+they
+this
+to
+was
+will
+with
\ No newline at end of file




More information about the hibernate-commits mailing list