Java Mailing List Archive

http://www.gg3721.com/

Home » Hibernate Commits List »

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

hibernate-commits

2008-07-31


Author LoginPost Reply
Author: hardy.ferentschik
Date: 2008-07-31 11:39:33 -0400 (Thu, 31 Jul 2008)
New Revision: 15000

Modified:
 search/trunk/src/java/org/hibernate/search/SearchFactory.java
 search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
 search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java
 search/trunk/src/java/org/hibernate/search/util/ScopedAnalyzer.java
 search/trunk/src/test/org/hibernate/search/test/analyzer/AnalyzerTest.java
Log:
HSEARCH-244:
* Exposed the ScopedAnalyer in SearchFactory

Modified: search/trunk/src/java/org/hibernate/search/SearchFactory.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/SearchFactory.java  2008-07-31 15:10:43 UTC (rev 14999)
+++ search/trunk/src/java/org/hibernate/search/SearchFactory.java  2008-07-31 15:39:33 UTC (rev 15000)
@@(protected) @@
import org.apache.lucene.analysis.Analyzer;
import org.hibernate.search.reader.ReaderProvider;
import org.hibernate.search.store.DirectoryProvider;
+import org.hibernate.search.util.ScopedAnalyzer;

/**
* Provide application wide operations as well as access to the underlying Lucene resources.
@@(protected) @@
  * @throws SearchException if the definition name is unknown
  */
 Analyzer getAnalyzer(String name);
+  
+  /**
+   * Retrieves the scoped analyzer for a given class.
+   *
+   * @param clazz The class for which to retrieve the analyzer.
+   * @return The scoped analyzer for the specified class.
+   * @throws IllegalArgumentException in case <code>clazz == null</code> or the specified
+   * class is not an indexed entity.
+   */
+  ScopedAnalyzer getAnalyzer(Class clazz);
}

Modified: search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java  2008-07-31 15:10:43 UTC (rev 14999)
+++ search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java  2008-07-31 15:39:33 UTC (rev 15000)
@@(protected) @@
   return shardingStrategy;
 }

-  public Analyzer getAnalyzer() {
+  public ScopedAnalyzer getAnalyzer() {
   return analyzer;
 }


Modified: search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java  2008-07-31 15:10:43 UTC (rev 14999)
+++ search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java  2008-07-31 15:39:33 UTC (rev 15000)
@@(protected) @@
import org.hibernate.search.Environment;
import org.hibernate.search.SearchException;
import org.hibernate.search.Version;
-import org.hibernate.search.cfg.SearchConfiguration;
import org.hibernate.search.annotations.Factory;
import org.hibernate.search.annotations.FullTextFilterDef;
import org.hibernate.search.annotations.FullTextFilterDefs;
@@(protected) @@
import org.hibernate.search.backend.Worker;
import org.hibernate.search.backend.WorkerFactory;
import org.hibernate.search.backend.configuration.ConfigurationParseHelper;
+import org.hibernate.search.cfg.SearchConfiguration;
import org.hibernate.search.engine.DocumentBuilder;
import org.hibernate.search.engine.FilterDef;
import org.hibernate.search.engine.SearchFactoryImplementor;
@@(protected) @@
import org.hibernate.search.store.DirectoryProvider;
import org.hibernate.search.store.DirectoryProviderFactory;
import org.hibernate.search.store.optimization.OptimizerStrategy;
+import org.hibernate.search.util.ScopedAnalyzer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@@(protected) @@
   if ( analyzer == null) throw new SearchException( "Unknown Analyzer definition: " + name);
   return analyzer;
 }
+  
+  public ScopedAnalyzer getAnalyzer(Class clazz) {
+    if ( clazz == null) {
+      throw new IllegalArgumentException( "A class has to be specified for retrieving a scoped analyzer" );
+    }
+    
+    DocumentBuilder<Object> builder = documentBuilders.get( clazz );
+    if ( builder == null ) {
+      throw new IllegalArgumentException( "Entity for which to retrieve the scoped analyzer is not an @Indexed entity: " + clazz.getName() );
+    }
+    
+    return builder.getAnalyzer();
+  }  

 private void initDocumentBuilders(SearchConfiguration cfg, ReflectionManager reflectionManager) {
   InitContext context = new InitContext( cfg );

Modified: search/trunk/src/java/org/hibernate/search/util/ScopedAnalyzer.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/util/ScopedAnalyzer.java  2008-07-31 15:10:43 UTC (rev 14999)
+++ search/trunk/src/java/org/hibernate/search/util/ScopedAnalyzer.java  2008-07-31 15:39:33 UTC (rev 15000)
@@(protected) @@
package org.hibernate.search.util;

import java.io.Reader;
+import java.util.HashMap;
import java.util.Map;
-import java.util.HashMap;
+import java.util.Set;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
@@(protected) @@
 public void setGlobalAnalyzer(Analyzer globalAnalyzer) {
   this.globalAnalyzer = globalAnalyzer;
 }
+  
+  public Analyzer getGlobalAnalyzer() {
+    return globalAnalyzer;
+  }  

 public void addScopedAnalyzer(String scope, Analyzer scopedAnalyzer) {
   scopedAnalyzers.put( scope, scopedAnalyzer );
@@(protected) @@
   return getAnalyzer( fieldName ).getPositionIncrementGap( fieldName );
 }

-  private Analyzer getAnalyzer(String fieldName) {
+  public Analyzer getAnalyzer(String fieldName) {
   Analyzer analyzer = scopedAnalyzers.get( fieldName );
   if (analyzer == null) {
     analyzer = globalAnalyzer;
   }
   return analyzer;
 }
+  
+  public Set<String> getFields() {
+    return scopedAnalyzers.keySet();
+  }
}

Modified: search/trunk/src/test/org/hibernate/search/test/analyzer/AnalyzerTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/analyzer/AnalyzerTest.java  2008-07-31 15:10:43 UTC (rev 14999)
+++ search/trunk/src/test/org/hibernate/search/test/analyzer/AnalyzerTest.java  2008-07-31 15:39:33 UTC (rev 15000)
@@(protected) @@
// $Id$
package org.hibernate.search.test.analyzer;

-import org.hibernate.search.test.SearchTestCase;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.queryParser.QueryParser;
+import org.hibernate.Transaction;
+import org.hibernate.search.FullTextQuery;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
-import org.hibernate.search.FullTextQuery;
-import org.hibernate.Transaction;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.search.test.SearchTestCase;
+import org.hibernate.search.util.ScopedAnalyzer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;

/**
* @author Emmanuel Bernard
*/
public class AnalyzerTest extends SearchTestCase {

+  public static final Logger log = LoggerFactory.getLogger( AnalyzerTest.class );
+
 public void testScopedAnalyzers() throws Exception {
   MyEntity en = new MyEntity();
   en.setEntity( "Entity" );
@@(protected) @@
   tx.commit();

   tx = s.beginTransaction();
-    QueryParser parser = new QueryParser("id", new StandardAnalyzer() );
-    org.apache.lucene.search.Query luceneQuery = parser.parse( "entity:alarm");
+    QueryParser parser = new QueryParser( "id", new StandardAnalyzer() );
+    org.apache.lucene.search.Query luceneQuery = parser.parse( "entity:alarm" );
   FullTextQuery query = s.createFullTextQuery( luceneQuery, MyEntity.class );
   assertEquals( 1, query.getResultSize() );

-    luceneQuery = parser.parse( "property:cat");
+    luceneQuery = parser.parse( "property:cat" );
   query = s.createFullTextQuery( luceneQuery, MyEntity.class );
   assertEquals( 1, query.getResultSize() );

-    luceneQuery = parser.parse( "field:energy");
+    luceneQuery = parser.parse( "field:energy" );
   query = s.createFullTextQuery( luceneQuery, MyEntity.class );
   assertEquals( 1, query.getResultSize() );

-    luceneQuery = parser.parse( "component.componentProperty:noise");
+    luceneQuery = parser.parse( "component.componentProperty:noise" );
   query = s.createFullTextQuery( luceneQuery, MyEntity.class );
   assertEquals( 1, query.getResultSize() );

@@(protected) @@
   tx.commit();

   s.close();
+  }

+  public void testScopedAnalyzersAPI() throws Exception {
+    FullTextSession session = Search.getFullTextSession( openSession() );
+    SearchFactory searchFactory = session.getSearchFactory();
+    ScopedAnalyzer analzyer = searchFactory.getAnalyzer( MyEntity.class );
+
+    // explicitly get the global analyzer
+    assertEquals( "Wrong analyzer", Test1Analyzer.class, analzyer.getGlobalAnalyzer().getClass() );
+
+    // get the global analyzer by specifying a non existing field or null
+    assertEquals( "Wrong analyzer", Test1Analyzer.class, analzyer.getAnalyzer("").getClass() );
+    assertEquals( "Wrong analyzer", Test1Analyzer.class, analzyer.getAnalyzer(null).getClass() );
+    
+    // get a field analyzer
+    assertEquals( "Wrong analyzer", Test1Analyzer.class, analzyer.getAnalyzer("entity").getClass() );
+    assertEquals( "Wrong analyzer", Test2Analyzer.class, analzyer.getAnalyzer("property").getClass() );
+    assertEquals( "Wrong analyzer", Test3Analyzer.class, analzyer.getAnalyzer("field").getClass() );
+    assertEquals( "Wrong analyzer", Test4Analyzer.class, analzyer.getAnalyzer("component.componentProperty").getClass() );
+    
+    // get the field set
+    Set<String> fields = new HashSet<String>();
+    fields.add( "entity" );
+    fields.add( "property" );
+    fields.add( "field" );
+    fields.add( "component.componentProperty" );
+    assertEquals( "Wrong field set", fields, analzyer.getFields());
+    
+    // test border cases
+    try {
+      searchFactory.getAnalyzer( (Class) null );
+    } catch (IllegalArgumentException iae) {
+      log.debug( "success" );
+    }
+    
+    try {
+      searchFactory.getAnalyzer( String.class );
+    } catch (IllegalArgumentException iae) {
+      log.debug( "success" );
+    }    
+    
+    session.close();
 }

 protected Class[] getMappings() {
-    return new Class[] {
-        MyEntity.class
-    };
+    return new Class[] { MyEntity.class };
 }
}

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