You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2009/05/01 18:20:43 UTC

svn commit: r770738 - in /jackrabbit/trunk: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/query/qom/...

Author: jukka
Date: Fri May  1 16:20:43 2009
New Revision: 770738

URL: http://svn.apache.org/viewvc?rev=770738&view=rev
Log:
JCR-2093: Implement QueryObjectModelFactory.fullTextSearch() in QueryManagerImpl

Fix broken full text search tests

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryManagerImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactoryImpl.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/query/qom/QueryObjectModelFactoryTest.java
    jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/QueryObjectModelFactoryImpl.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryManagerImpl.java?rev=770738&r1=770737&r2=770738&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryManagerImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryManagerImpl.java Fri May  1 16:20:43 2009
@@ -22,11 +22,9 @@
 
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
-import javax.jcr.UnsupportedRepositoryOperationException;
 import javax.jcr.query.InvalidQueryException;
 import javax.jcr.query.Query;
 import javax.jcr.query.QueryManager;
-import javax.jcr.query.qom.FullTextSearch;
 import javax.jcr.query.qom.QueryObjectModel;
 import javax.jcr.query.qom.QueryObjectModelFactory;
 
@@ -81,25 +79,21 @@
      * @param itemMgr
      * @param searchMgr
      */
-    public QueryManagerImpl(final SessionImpl session,
-                            final ItemManager itemMgr,
-                            final SearchManager searchMgr) {
+    public QueryManagerImpl(
+            final SessionImpl session,
+            final ItemManager itemMgr,
+            final SearchManager searchMgr)
+            throws RepositoryException {
         this.session = session;
         this.itemMgr = itemMgr;
         this.searchMgr = searchMgr;
-        this.qomFactory = new QueryObjectModelFactoryImpl(session) {
+        this.qomFactory = new QueryObjectModelFactoryImpl(
+                session, session.getValueFactory()) {
             protected QueryObjectModel createQuery(QueryObjectModelTree qomTree)
                     throws InvalidQueryException, RepositoryException {
                 return searchMgr.createQueryObjectModel(
                         session, qomTree, QueryImpl.JCR_SQL2);
             }
-
-            public FullTextSearch fullTextSearch(
-                    String arg0, String arg1, String arg2)
-                    throws RepositoryException {
-                throw new UnsupportedRepositoryOperationException("JCR-1104");
-            }
-
         };
     }
 

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactoryImpl.java?rev=770738&r1=770737&r2=770738&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactoryImpl.java Fri May  1 16:20:43 2009
@@ -24,6 +24,8 @@
 import javax.jcr.nodetype.NodeTypeManager;
 import javax.jcr.nodetype.NodeType;
 import javax.jcr.nodetype.NodeTypeIterator;
+import javax.jcr.query.qom.Literal;
+import javax.jcr.query.qom.StaticOperand;
 import javax.jcr.RepositoryException;
 
 import org.apache.lucene.search.Query;
@@ -206,8 +208,14 @@
         QueryParser parser = new JackrabbitQueryParser(
                 fieldname, analyzer, synonymProvider);
         try {
-            // TODO: JCR-2093 How to handle the StaticOperand below?
-            return parser.parse(fts.getFullTextSearchExpression().toString());
+            StaticOperand expr = fts.getFullTextSearchExpression();
+            if (expr instanceof Literal) {
+                return parser.parse(
+                        ((Literal) expr).getLiteralValue().getString());
+            } else {
+                throw new RepositoryException(
+                        "Unknown static operand type: " + expr);
+            }
         } catch (ParseException e) {
             throw new RepositoryException(e);
         }

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/query/qom/QueryObjectModelFactoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/query/qom/QueryObjectModelFactoryTest.java?rev=770738&r1=770737&r2=770738&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/query/qom/QueryObjectModelFactoryTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/query/qom/QueryObjectModelFactoryTest.java Fri May  1 16:20:43 2009
@@ -346,9 +346,9 @@
      */
     public void testFullTextSearch() throws RepositoryException {
         FullTextSearch ftSearch = qomFactory.fullTextSearch(SELECTOR_NAME1, propertyName1, FULLTEXT_SEARCH_EXPR);
-        assertNull("Selector must be null", ftSearch.getSelectorName());
+        assertEquals("Wrong selector name", SELECTOR_NAME1, ftSearch.getSelectorName());
         assertEquals("Wrong propertyName", propertyName1, ftSearch.getPropertyName());
-        assertEquals("Wrong fulltext search expression", FULLTEXT_SEARCH_EXPR, ftSearch.getFullTextSearchExpression());
+        // TODO is there some way to check the contents of a StaticOperand?
     }
 
     /**
@@ -356,9 +356,9 @@
      */
     public void testFullTextSearchAllProperties() throws RepositoryException {
         FullTextSearch ftSearch = qomFactory.fullTextSearch(SELECTOR_NAME1, null, FULLTEXT_SEARCH_EXPR);
-        assertNull("Selector must be null", ftSearch.getSelectorName());
+        assertEquals("Wrong selector name", SELECTOR_NAME1, ftSearch.getSelectorName());
         assertNull("Property name must be null", ftSearch.getPropertyName());
-        assertEquals("Wrong fulltext search expression", FULLTEXT_SEARCH_EXPR, ftSearch.getFullTextSearchExpression());
+        // TODO is there some way to check the contents of a StaticOperand?
     }
 
     /**
@@ -368,7 +368,7 @@
         FullTextSearch ftSearch = qomFactory.fullTextSearch(SELECTOR_NAME1, propertyName1, FULLTEXT_SEARCH_EXPR);
         assertEquals("Wrong selector name", SELECTOR_NAME1, ftSearch.getSelectorName());
         assertEquals("Wrong propertyName", propertyName1, ftSearch.getPropertyName());
-        assertEquals("Wrong fulltext search expression", FULLTEXT_SEARCH_EXPR, ftSearch.getFullTextSearchExpression());
+        // TODO is there some way to check the contents of a StaticOperand?
     }
 
     /**

Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/QueryObjectModelFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/QueryObjectModelFactoryImpl.java?rev=770738&r1=770737&r2=770738&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/QueryObjectModelFactoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/QueryObjectModelFactoryImpl.java Fri May  1 16:20:43 2009
@@ -58,6 +58,8 @@
 import javax.jcr.query.qom.UpperCase;
 import javax.jcr.RepositoryException;
 import javax.jcr.Value;
+import javax.jcr.ValueFactory;
+
 import java.util.HashSet;
 import java.util.Set;
 
@@ -79,8 +81,15 @@
      */
     private final NamePathResolver resolver;
 
-    public QueryObjectModelFactoryImpl(NamePathResolver resolver) {
+    /**
+     * Value factory of the current session.
+     */
+    private final ValueFactory factory;
+
+    public QueryObjectModelFactoryImpl(
+            NamePathResolver resolver, ValueFactory factory) {
         this.resolver = resolver;
+        this.factory = factory;
     }
 
     /**
@@ -533,15 +542,21 @@
      */
     public FullTextSearch fullTextSearch(String selectorName,
                                          String propertyName,
-                                         StaticOperand fullTextSearchExpression)
+                                         String fullTextSearchExpression)
             throws InvalidQueryException, RepositoryException {
+        if (fullTextSearchExpression == null) {
+            throw new IllegalArgumentException(
+                    "Full text search expression is null");
+        }
         Name propName = null;
         if (propertyName != null) {
             propName = checkPropertyName(propertyName);
         }
+        Literal literal =
+            literal(factory.createValue(fullTextSearchExpression));
         return new FullTextSearchImpl(resolver,
                 checkSelectorName(selectorName), propName,
-                checkFullTextSearchExpression(fullTextSearchExpression));
+                checkFullTextSearchExpression(literal));
     }
 
     /**