You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ju...@apache.org on 2011/06/03 23:52:19 UTC

svn commit: r1131257 - in /sling/trunk: bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/ bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/ launchpad/builder/src/main/bundles/ launchpad/integration-tests/sr...

Author: justin
Date: Fri Jun  3 21:52:18 2011
New Revision: 1131257

URL: http://svn.apache.org/viewvc?rev=1131257&view=rev
Log:
SLING-1533 - removing query language validation from json query servlet and now doing it inside the resource resolver. also adding code which injects jcr:path and jcr:score if those aren't in the column list

Modified:
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java
    sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/JsonQueryServlet.java
    sling/trunk/launchpad/builder/src/main/bundles/list.xml
    sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/JsonQueryServletTest.java

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java?rev=1131257&r1=1131256&r2=1131257&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java Fri Jun  3 21:52:18 2011
@@ -23,7 +23,6 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Set;
@@ -36,7 +35,9 @@ import javax.jcr.NamespaceException;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.Value;
+import javax.jcr.query.Query;
 import javax.jcr.query.QueryResult;
+import javax.jcr.query.Row;
 import javax.jcr.query.RowIterator;
 import javax.servlet.http.HttpServletRequest;
 
@@ -94,6 +95,15 @@ public class JcrResourceResolver
 
     public static final String PROP_REDIRECT_EXTERNAL_STATUS = "sling:status";
 
+    @SuppressWarnings("deprecation")
+    private static final String DEFAULT_QUERY_LANGUAGE = Query.XPATH;
+
+    /** column name for node path */
+    private static final String QUERY_COLUMN_PATH = "jcr:path";
+
+    /** column name for score value */
+    private static final String QUERY_COLUMN_SCORE = "jcr:score";
+
     /** The root provider for the resource tree. */
     private final JcrResourceProviderEntry rootProvider;
 
@@ -905,9 +915,12 @@ public class JcrResourceResolver
                                                         final String language)
     throws SlingException {
         checkClosed();
+
+        final String queryLanguage = isSupportedQueryLanguage(language) ? language : DEFAULT_QUERY_LANGUAGE;
+
         try {
             QueryResult result = JcrResourceUtil.query(adaptTo(Session.class), query,
-                language);
+                queryLanguage);
             final String[] colNames = result.getColumnNames();
             final RowIterator rows = result.getRows();
             return new Iterator<Map<String, Object>>() {
@@ -918,14 +931,31 @@ public class JcrResourceResolver
                 public Map<String, Object> next() {
                     Map<String, Object> row = new HashMap<String, Object>();
                     try {
-                        Value[] values = rows.nextRow().getValues();
+                        Row jcrRow = rows.nextRow();
+                        boolean didPath = false;
+                        boolean didScore = false;
+                        Value[] values = jcrRow.getValues();
                         for (int i = 0; i < values.length; i++) {
                             Value v = values[i];
                             if (v != null) {
-                                row.put(colNames[i],
+                                String colName = colNames[i];
+                                row.put(colName,
                                     JcrResourceUtil.toJavaObject(values[i]));
+                                if (colName.equals(QUERY_COLUMN_PATH)) {
+                                    didPath = true;
+                                }
+                                if (colName.equals(QUERY_COLUMN_SCORE)) {
+                                    didScore = true;
+                                }
                             }
                         }
+                        if (!didPath) {
+                            row.put(QUERY_COLUMN_PATH, jcrRow.getPath());
+                        }
+                        if (!didScore) {
+                            row.put(QUERY_COLUMN_SCORE, jcrRow.getScore());
+                        }
+
                     } catch (RepositoryException re) {
                         LOGGER.error(
                             "queryResources$next: Problem accessing row values",
@@ -1289,4 +1319,19 @@ public class JcrResourceResolver
 
         return absPath;
     }
+
+    private boolean isSupportedQueryLanguage(String language) {
+        try {
+        String[] supportedLanguages = adaptTo(Session.class).getWorkspace().
+            getQueryManager().getSupportedQueryLanguages();
+            for (String lang : supportedLanguages) {
+                if (lang.equals(language)) {
+                    return true;
+                }
+            }
+        } catch (RepositoryException e) {
+            LOGGER.error("Unable to discover supported query languages", e);
+        }
+        return false;
+    }
 }

Modified: sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/JsonQueryServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/JsonQueryServlet.java?rev=1131257&r1=1131256&r2=1131257&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/JsonQueryServlet.java (original)
+++ sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/JsonQueryServlet.java Fri Jun  3 21:52:18 2011
@@ -24,8 +24,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import javax.jcr.query.Query;
-
 import org.apache.sling.api.SlingException;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
@@ -114,8 +112,7 @@ public class JsonQueryServlet extends Sl
      *
      */
     protected String getQueryType(SlingHttpServletRequest req) {
-        return (req.getParameter(QUERY_TYPE) != null && req.getParameter(
-                QUERY_TYPE).equals(Query.SQL)) ? Query.SQL : Query.XPATH;
+        return req.getParameter(QUERY_TYPE);
     }
     
 

Modified: sling/trunk/launchpad/builder/src/main/bundles/list.xml
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/builder/src/main/bundles/list.xml?rev=1131257&r1=1131256&r2=1131257&view=diff
==============================================================================
--- sling/trunk/launchpad/builder/src/main/bundles/list.xml (original)
+++ sling/trunk/launchpad/builder/src/main/bundles/list.xml Fri Jun  3 21:52:18 2011
@@ -101,7 +101,7 @@
         <bundle>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.servlets.get</artifactId>
-            <version>2.1.2</version>
+            <version>2.1.3-SNAPSHOT</version>
         </bundle>
         <bundle>
             <groupId>org.apache.sling</groupId>

Modified: sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/JsonQueryServletTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/JsonQueryServletTest.java?rev=1131257&r1=1131256&r2=1131257&view=diff
==============================================================================
--- sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/JsonQueryServletTest.java (original)
+++ sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/JsonQueryServletTest.java Fri Jun  3 21:52:18 2011
@@ -111,6 +111,11 @@ public class JsonQueryServletTest extend
         assertCount(5, query, "sql", 0, 0);
     }
     
+    public void testSql2() throws IOException {
+        final String query = "select * from [nt:unstructured] where ISDESCENDANTNODE('" + testPath + "/folderB')";
+        assertCount(5, query, "JCR-SQL2", 0, 0);
+    }
+
     public void testOffset() throws IOException {
         assertCount(3, "/" + testPath + "/folderC/*", "xpath", 2, 0);
     }