[jbosscache-commits] JBoss Cache SVN: r5988 - searchable/trunk/src/main/java/org/jboss/cache/search.
jbosscache-commits at lists.jboss.org
jbosscache-commits at lists.jboss.org
Mon Jun 16 10:05:46 EDT 2008
Author: navssurtani
Date: 2008-06-16 10:05:46 -0400 (Mon, 16 Jun 2008)
New Revision: 5988
Added:
searchable/trunk/src/main/java/org/jboss/cache/search/CacheQuery.java
searchable/trunk/src/main/java/org/jboss/cache/search/CacheQueryImpl.java
Modified:
searchable/trunk/src/main/java/org/jboss/cache/search/NodeModifiedTransactionContext.java
searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCache.java
searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheFactory.java
searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheImpl.java
searchable/trunk/src/main/java/org/jboss/cache/search/SearchableListener.java
searchable/trunk/src/main/java/org/jboss/cache/search/Transformer.java
Log:
Renamed stuff
Copied: searchable/trunk/src/main/java/org/jboss/cache/search/CacheQuery.java (from rev 5947, searchable/trunk/src/main/java/org/jboss/cache/search/QueryResult.java)
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/CacheQuery.java (rev 0)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/CacheQuery.java 2008-06-16 14:05:46 UTC (rev 5988)
@@ -0,0 +1,67 @@
+package org.jboss.cache.search;
+
+import org.apache.lucene.search.Filter;
+import org.apache.lucene.search.Sort;
+import org.hibernate.search.FullTextFilter;
+/**
+ at author Navin Surtani - navin at surtani.org
+ */
+public interface CacheQuery
+{
+ //TODO: Figure out where we got this interface from ... then get the methods from the impl of THAT impl and copy it into CacheQuery impl.
+ /**
+ * Allows to let lucene sort the results. This is useful when you have
+ * additional sort requirements on top of the default lucene ranking.
+ * Without lucene sorting you would have to retrieve the full result set and
+ * order the hibernate objects.
+ *
+ * @param sort The lucene sort object.
+ * @return this for method chaining
+ */
+ CacheQuery setSort(Sort sort);
+
+ /**
+ * Allows to use lucene filters.
+ * Semi-deprecated? a preferred way is to use the @FullTextFilterDef approach
+ *
+ * @param filter The lucene filter.
+ * @return this for method chaining
+ */
+ CacheQuery setFilter(Filter filter);
+
+ /**
+ * Returns the number of hits for this search
+ * <p/>
+ * Caution:
+ * The number of results might be slightly different from
+ * <code>list().size()</code> because list() if the index is
+ * not in sync with the database at the time of query.
+ */
+ int getResultSize();
+
+ /**
+ * Enable a given filter by its name. Returns a FullTextFilter object that allows filter parameter injection
+ */
+ FullTextFilter enableFullTextFilter(String name);
+
+ /**
+ * Disable a given filter by its name
+ */
+ void disableFullTextFilter(String name);
+
+ /**
+ * {link:Query#setFirstResult}
+ */
+ CacheQuery setFirstResult(int firstResult);
+
+ /**
+ * {link:Query#setMaxResults}
+ */
+ CacheQuery setMaxResults(int maxResults);
+
+ /**
+ * Defines scrollable result fetch size as well as the JDBC fetch size
+ */
+ CacheQuery setFetchSize(int i);
+
+}
Copied: searchable/trunk/src/main/java/org/jboss/cache/search/CacheQueryImpl.java (from rev 5965, searchable/trunk/src/main/java/org/jboss/cache/search/QueryResultImpl.java)
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/CacheQueryImpl.java (rev 0)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/CacheQueryImpl.java 2008-06-16 14:05:46 UTC (rev 5988)
@@ -0,0 +1,169 @@
+package org.jboss.cache.search;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.lucene.search.Filter;
+import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.Sort;
+import org.hibernate.HibernateException;
+import org.hibernate.search.FullTextFilter;
+import org.hibernate.search.SearchException;
+import org.hibernate.search.engine.FilterDef;
+import org.hibernate.search.engine.SearchFactoryImplementor;
+import org.hibernate.search.impl.SearchFactoryImpl;
+import org.hibernate.search.query.FullTextFilterImpl;
+import org.hibernate.search.util.ContextHelper;
+import org.jboss.cache.Cache;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Navin Surtani - navin at surtani.org
+ */
+public class CacheQueryImpl implements CacheQuery
+{
+ //TODO: Javadoc all these methods
+ private Query query;
+ private Cache cache;
+ private Class[] classes;
+ private Sort sort;
+ private Filter filter;
+ private Map<String, FullTextFilterImpl> filterDefinitions;
+ private SearchFactoryImplementor searchFactoryImplementor;
+ private Integer firstResult;
+ private Integer resultSize;
+ private Integer maxResults;
+ private static final Log log = LogFactory.getLog(CacheQueryImpl.class);
+
+ public CacheQueryImpl(Query luceneQuery, Cache cache)
+ {
+ this.query = luceneQuery;
+ this.cache = cache;
+ }
+
+ public CacheQueryImpl(Query luceneQuery, Cache cache, Class... classes)
+ {
+ this.query = luceneQuery;
+ this.cache = cache;
+ this.classes = classes;
+
+ }
+
+ public CacheQuery setSort(Sort sort)
+ {
+ this.sort = sort;
+ return this;
+ }
+
+ public CacheQuery setFilter(Filter filter)
+ {
+ this.filter = filter;
+ return this;
+ }
+
+ public int getResultSize()
+ {
+ if (resultSize == null)
+ {
+ //get result size without object initialization
+ SearchFactoryImplementor searchFactoryImplementor = ContextHelper.getSearchFactoryBySFI(session);
+ IndexSearcher searcher = buildSearcher(searchFactoryImplementor);
+ if (searcher == null)
+ {
+ resultSize = 0;
+ }
+ else
+ {
+ Hits hits;
+ try
+ {
+ hits = getHits(searcher);
+ resultSize = hits.length();
+ }
+ catch (IOException e)
+ {
+ throw new HibernateException("Unable to query Lucene index", e);
+ }
+ finally
+ {
+ //searcher cannot be null
+ try
+ {
+ closeSearcher(searcher, searchFactoryImplementor.getReaderProvider());
+ //searchFactoryImplementor.getReaderProvider().closeReader( searcher.getIndexReader() );
+ }
+ catch (SearchException e)
+ {
+ log.warn("Unable to properly close searcher during lucene query: " + getQueryString(), e);
+ }
+ }
+ }
+ }
+ return this.resultSize;
+ }
+
+ public FullTextFilter enableFullTextFilter(String name)
+ {
+ if (filterDefinitions == null)
+ {
+ filterDefinitions = new HashMap<String, FullTextFilterImpl>();
+ }
+ FullTextFilterImpl filterDefinition = filterDefinitions.get(name);
+ if (filterDefinition != null) return filterDefinition;
+
+ filterDefinition = new FullTextFilterImpl();
+ filterDefinition.setName(name);
+ FilterDef filterDef = getSearchFactoryImplementor().getFilterDefinition(name);
+ if (filterDef == null)
+ {
+ throw new SearchException("Unkown @FullTextFilter: " + name);
+ }
+ filterDefinitions.put(name, filterDefinition);
+ return filterDefinition;
+ }
+
+ private SearchFactoryImplementor getSearchFactoryImplementor()
+ {
+ if (searchFactoryImplementor == null)
+ {
+ searchFactoryImplementor = createNewSearchFactoryImpl();
+ }
+ return searchFactoryImplementor;
+ }
+
+ private synchronized SearchFactoryImplementor createNewSearchFactoryImpl()
+ {
+ if (searchFactoryImplementor == null) searchFactoryImplementor = new SearchFactoryImpl(null); // TODO: This really expects a Hibernate Config object. How can we work around that?@??
+ return searchFactoryImplementor;
+ }
+
+
+ public void disableFullTextFilter(String name)
+ {
+ filterDefinitions.remove(name);
+ }
+
+ public CacheQuery setFirstResult(int firstResult)
+ {
+ if (firstResult < 0)
+ {
+ throw new IllegalArgumentException("'first' pagination parameter less than 0");
+ }
+ this.firstResult = firstResult;
+ return this;
+ }
+
+ public CacheQuery setMaxResults(int maxResults)
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ public CacheQuery setFetchSize(int i)
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+}
Modified: searchable/trunk/src/main/java/org/jboss/cache/search/NodeModifiedTransactionContext.java
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/NodeModifiedTransactionContext.java 2008-06-13 15:36:15 UTC (rev 5987)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/NodeModifiedTransactionContext.java 2008-06-16 14:05:46 UTC (rev 5988)
@@ -9,14 +9,12 @@
import javax.transaction.SystemException;
/**
- * Created by IntelliJ IDEA.
- * User: navin
- * Date: Jun 13, 2008
- * Time: 4:23:26 PM
- * To change this template use File | Settings | File Templates.
+ at author Navin Surtani - navin at surtani.org
*/
public class NodeModifiedTransactionContext implements TransactionContext
{
+
+ //TODO: Javadoc all these methods
NodeModifiedEvent event;
public boolean isTxInProgress()
@@ -42,7 +40,7 @@
}
catch (RollbackException e)
{
- e.printStackTrace();
+ e.printStackTrace();
}
}
Modified: searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCache.java
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCache.java 2008-06-13 15:36:15 UTC (rev 5987)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCache.java 2008-06-16 14:05:46 UTC (rev 5988)
@@ -4,15 +4,18 @@
import org.jboss.cache.Cache;
/**
- * Created by IntelliJ IDEA.
- * User: navin
- * Date: Jun 3, 2008
- * Time: 10:48:46 AM
- * To change this template use File | Settings | File Templates.
+ at author Navin Surtani - navin at surtani.org
*/
public interface SearchableCache extends Cache
{
- public QueryResult createQuery(Query luceneQuery);
+ /**
+ *
+ * @param luceneQuery
+ * @return
+ */
+ public CacheQuery createQuery(Query luceneQuery);
+ public CacheQuery createQuery(Query luceneQuery, Class... classes);
+
}
Modified: searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheFactory.java
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheFactory.java 2008-06-13 15:36:15 UTC (rev 5987)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheFactory.java 2008-06-16 14:05:46 UTC (rev 5988)
@@ -4,21 +4,17 @@
import org.jboss.cache.Cache;
/**
- * Created by IntelliJ IDEA.
- * User: navin
- * Date: Jun 3, 2008
- * Time: 10:52:25 AM
- * To change this template use File | Settings | File Templates.
+ at author Navin Surtani - navin at surtani.org
*/
public class SearchableCacheFactory
{
-
+ //TODO: Javadoc everything.
private SearchFactoryImpl searchFactory;
public SearchableCache createSearchableCache (Cache c, Class... classes)
{
- // TODO: Initialise HS internals
+ // TODO: Initialise HS internals and use the classes array that's being passed in as a param
SearchableListener listener = new SearchableListener();
c.addCacheListener(listener);
Modified: searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheImpl.java
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheImpl.java 2008-06-13 15:36:15 UTC (rev 5987)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheImpl.java 2008-06-16 14:05:46 UTC (rev 5988)
@@ -17,11 +17,7 @@
import java.util.Set;
/**
- * Created by IntelliJ IDEA.
- * User: navin
- * Date: Jun 3, 2008
- * Time: 10:51:53 AM
- * To change this template use File | Settings | File Templates.
+ at author Navin Surtani - navin at surtani.org
*/
public class SearchableCacheImpl implements SearchableCache
{
@@ -29,19 +25,21 @@
private Cache cache;
private Class[] classes;
+ //TODO: Javadoc all these methods
+
public SearchableCacheImpl(Cache cache)
{
this.cache = cache;
}
- public QueryResult createQuery(Query luceneQuery)
+ public CacheQuery createQuery(Query luceneQuery)
{
- return new QueryResultImpl(luceneQuery, cache);
+ return new CacheQueryImpl(luceneQuery, cache);
}
- public QueryResult createQuery(Query luceneQuery, Class... classes)
+ public CacheQuery createQuery(Query luceneQuery, Class... classes)
{
- return new QueryResultImpl(luceneQuery, cache, classes);
+ return new CacheQueryImpl(luceneQuery, cache, classes);
}
Modified: searchable/trunk/src/main/java/org/jboss/cache/search/SearchableListener.java
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/SearchableListener.java 2008-06-13 15:36:15 UTC (rev 5987)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/SearchableListener.java 2008-06-16 14:05:46 UTC (rev 5988)
@@ -11,25 +11,19 @@
import java.util.Map;
/**
- * Created by IntelliJ IDEA.
- * User: navin
- * Date: Jun 3, 2008
- * Time: 11:42:50 AM
- * To change this template use File | Settings | File Templates.
+ at author Navin Surtani - navin at surtani.org
*/
@CacheListener
public class SearchableListener
{
-
+//TODO: Javadoc everything
private SearchFactoryImpl searchFactory;
private TransactionContext transactionContext;
@NodeModified
public void updateLuceneIndexes(NodeModifiedEvent event)
{
- if (!event.isPre())
- {
if (event.getModificationType() == NodeModifiedEvent.ModificationType.valueOf("PUT_DATA"))
{
handlePutData(event);
@@ -39,12 +33,6 @@
{
handleDeleteData(event);
}
-
- }
- else
- {
- //TODO: Ask Manik or EB about good ways to ignore the data. Just have souts? Perhaps log stuff.
- }
}
void handlePutData(NodeModifiedEvent event)
Modified: searchable/trunk/src/main/java/org/jboss/cache/search/Transformer.java
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/Transformer.java 2008-06-13 15:36:15 UTC (rev 5987)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/Transformer.java 2008-06-16 14:05:46 UTC (rev 5988)
@@ -3,14 +3,11 @@
import org.jboss.cache.Fqn;
/**
- * Created by IntelliJ IDEA.
- * User: navin
- * Date: Jun 3, 2008
- * Time: 2:02:57 PM
- * To change this template use File | Settings | File Templates.
+ at author Navin Surtani - navin at surtani.org
*/
public class Transformer
{
+ //TODO: Javadoc everything
public static String getKey(String docId)
{
//docID comes in the format "Fqn=[/a/b/c]Key=[key]"
@@ -62,6 +59,5 @@
}
- //TODO: Look at HS documentation to see what can be done about non-String keys.
}
More information about the jbosscache-commits
mailing list