[dna-commits] DNA SVN: r789 - in trunk/dna-jcr/src: main/resources/org/jboss/dna/jcr and 1 other directories.

dna-commits at lists.jboss.org dna-commits at lists.jboss.org
Mon Mar 23 22:29:20 EDT 2009


Author: rhauch
Date: 2009-03-23 22:29:20 -0400 (Mon, 23 Mar 2009)
New Revision: 789

Added:
   trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrQueryManager.java
Modified:
   trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrI18n.java
   trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrWorkspace.java
   trunk/dna-jcr/src/main/resources/org/jboss/dna/jcr/JcrI18n.properties
   trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrTckTest.java
   trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrWorkspaceTest.java
Log:
DNA-285 Pass all Level 1 TCK unit tests

Applied the patch that adds an implementation of the simplest query methods for an L1-compliant repository, and that uncommented the related TCK tests that now pass.

Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrI18n.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrI18n.java	2009-03-24 02:16:34 UTC (rev 788)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrI18n.java	2009-03-24 02:29:20 UTC (rev 789)
@@ -97,6 +97,10 @@
     public static I18n workspaceNameIsInvalid;
     public static I18n errorVerifyingWorkspaceName;
 
+    // Query-related messages
+    public static I18n notStoredQuery;
+    public static I18n invalidQueryLanguage;
+    
     static {
         try {
             I18n.initialize(JcrI18n.class);

Added: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrQueryManager.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrQueryManager.java	                        (rev 0)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrQueryManager.java	2009-03-24 02:29:20 UTC (rev 789)
@@ -0,0 +1,208 @@
+/*
+ * JBoss DNA (http://www.jboss.org/dna)
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * See the AUTHORS.txt file in the distribution for a full listing of 
+ * individual contributors.
+ *
+ * JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA
+ * is licensed to you under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ * 
+ * JBoss DNA is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.dna.jcr;
+
+import java.util.Arrays;
+import javax.jcr.ItemNotFoundException;
+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.QueryResult;
+import net.jcip.annotations.Immutable;
+import org.jboss.dna.graph.property.NamespaceRegistry;
+import org.jboss.dna.graph.property.Path;
+
+/**
+ * Place-holder implementation of {@link QueryManager} interface.
+ */
+ at Immutable
+class JcrQueryManager implements QueryManager {
+
+    private final JcrSession session;
+
+    JcrQueryManager( JcrSession session ) {
+        this.session = session;
+    }
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @see javax.jcr.query.QueryManager#createQuery(java.lang.String, java.lang.String)
+     */
+    public Query createQuery( String statement,
+                              String language ) throws InvalidQueryException {
+        return this.createQuery(statement, language, null);
+    }
+
+    /**
+     * Creates a new query by specifying the query statement itself, the language in which the query is stated, and, optionally,
+     * the node from which the query was loaded. If the query statement is syntactically invalid, given the language specified, an
+     * {@code InvalidQueryException} is thrown. The language must be a string from among those returned by {@code
+     * QueryManager#getSupportedQueryLanguages()}; if it is not, then an {@code InvalidQueryException} is thrown.
+     * 
+     * @param statement 
+     * @param language
+     * @param storedNode
+     * @return A {@code Query} object
+     * @throws InvalidQueryException if statement is invalid or language is unsupported. 
+     * @see javax.jcr.query.QueryManager#createQuery(java.lang.String, java.lang.String)
+     */
+    private Query createQuery( String statement,
+                               String language,
+                               AbstractJcrNode storedNode ) throws InvalidQueryException {
+        if (Query.XPATH.equals(language)) {
+            return new XPathQuery(this.session, statement, storedNode);
+        }
+        throw new InvalidQueryException(JcrI18n.invalidQueryLanguage.text(language, Arrays.asList(getSupportedQueryLanguages())));
+
+    }
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @see javax.jcr.query.QueryManager#getQuery(javax.jcr.Node)
+     */
+    public Query getQuery( Node node ) throws InvalidQueryException, RepositoryException {
+        assert node instanceof AbstractJcrNode;
+
+        JcrNodeType nodeType = (JcrNodeType)node.getPrimaryNodeType();
+        if (!nodeType.getInternalName().equals(JcrNtLexicon.QUERY)) {
+            throw new InvalidQueryException(JcrI18n.notStoredQuery.text());
+        }
+
+        // These are both mandatory properties for nodes of nt:query
+        NamespaceRegistry registry = session.getExecutionContext().getNamespaceRegistry();
+        String statement = node.getProperty(JcrLexicon.STATEMENT.getString(registry)).getString();
+        String language = node.getProperty(JcrLexicon.LANGUAGE.getString(registry)).getString();
+
+        return createQuery(statement, language, (AbstractJcrNode)node);
+    }
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @see javax.jcr.query.QueryManager#getSupportedQueryLanguages()
+     */
+    public String[] getSupportedQueryLanguages() {
+        return new String[] {Query.XPATH};
+    }
+
+    @Immutable
+    protected abstract class AbstractJcrQuery implements Query {
+        private final JcrSession session;
+        private final String language;
+        private final String statement;
+        private final Path storedPath;
+
+        protected AbstractJcrQuery( JcrSession session,
+                                    String statement,
+                                    String language,
+                                    AbstractJcrNode storedNode ) {
+            assert session != null;
+            assert statement != null;
+            assert language != null;
+
+            this.session = session;
+            this.language = language;
+            this.statement = statement;
+
+            try {
+                this.storedPath = storedNode != null ? storedNode.path() : null;
+            } catch (RepositoryException re) {
+                throw new IllegalStateException(re);
+            }
+        }
+
+        /**
+         * {@inheritDoc}
+         * 
+         * @see javax.jcr.query.Query#execute()
+         */
+        public abstract QueryResult execute();
+
+        /**
+         * {@inheritDoc}
+         * 
+         * @see javax.jcr.query.Query#getLanguage()
+         */
+        public String getLanguage() {
+            return language;
+        }
+
+        /**
+         * {@inheritDoc}
+         * 
+         * @see javax.jcr.query.Query#getStatement()
+         */
+        public String getStatement() {
+            return statement;
+        }
+
+        /**
+         * {@inheritDoc}
+         * 
+         * @see javax.jcr.query.Query#getStoredQueryPath()
+         */
+        public String getStoredQueryPath() throws ItemNotFoundException {
+            if (storedPath == null) {
+                throw new ItemNotFoundException(JcrI18n.notStoredQuery.text());
+            }
+            return storedPath.getString(session.getExecutionContext().getNamespaceRegistry());
+        }
+
+        /**
+         * {@inheritDoc}
+         * 
+         * @see javax.jcr.query.Query#storeAsNode(java.lang.String)
+         */
+        public Node storeAsNode( java.lang.String absPath ) throws UnsupportedRepositoryOperationException {
+            throw new UnsupportedRepositoryOperationException();
+        }
+
+    }
+
+    @Immutable
+    protected class XPathQuery extends AbstractJcrQuery {
+
+        XPathQuery( JcrSession session,
+                    String statement,
+                    AbstractJcrNode storedNode ) {
+            super(session, statement, Query.XPATH, storedNode);
+        }
+
+        /**
+         * {@inheritDoc}
+         * 
+         * @see org.jboss.dna.jcr.JcrQueryManager.AbstractJcrQuery#execute()
+         */
+        @Override
+        public QueryResult execute() {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+}


Property changes on: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrQueryManager.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrWorkspace.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrWorkspace.java	2009-03-24 02:16:34 UTC (rev 788)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrWorkspace.java	2009-03-24 02:29:20 UTC (rev 789)
@@ -107,6 +107,11 @@
     private final JcrNodeTypeManager nodeTypeManager;
 
     /**
+     * Reference to the JCR query manager for this workspace.
+     */
+    private final JcrQueryManager queryManager;
+    
+    /**
      * The {@link Session} instance that this corresponds with this workspace.
      */
     private final JcrSession session;
@@ -149,6 +154,7 @@
 
         // This must be initialized after the session
         this.nodeTypeManager = new JcrNodeTypeManager(session.getExecutionContext(), repository.getRepositoryTypeManager());
+        this.queryManager = new JcrQueryManager(this.session);
     }
 
     final String getSourceName() {
@@ -212,7 +218,7 @@
      * {@inheritDoc}
      */
     public final QueryManager getQueryManager() {
-        throw new UnsupportedOperationException();
+        return queryManager;
     }
 
     /**

Modified: trunk/dna-jcr/src/main/resources/org/jboss/dna/jcr/JcrI18n.properties
===================================================================
--- trunk/dna-jcr/src/main/resources/org/jboss/dna/jcr/JcrI18n.properties	2009-03-24 02:16:34 UTC (rev 788)
+++ trunk/dna-jcr/src/main/resources/org/jboss/dna/jcr/JcrI18n.properties	2009-03-24 02:29:20 UTC (rev 789)
@@ -83,3 +83,6 @@
 
 noNegativeDepth=Depth parameter ({0}) cannot be negative
 tooDeep=Depth parameter ({0}) cannot be greater than the result of getDepth() for this node
+
+notStoredQuery=This query has not been stored or loaded
+invalidQueryLanguage="{0}" is not a valid query langauge.  Supported languages are: {1}
\ No newline at end of file

Modified: trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrTckTest.java
===================================================================
--- trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrTckTest.java	2009-03-24 02:16:34 UTC (rev 788)
+++ trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrTckTest.java	2009-03-24 02:29:20 UTC (rev 789)
@@ -107,7 +107,7 @@
             addTestSuite(org.apache.jackrabbit.test.api.PropertyReadMethodsTest.class);
             addTestSuite(org.apache.jackrabbit.test.api.RepositoryDescriptorTest.class);
             addTestSuite(org.apache.jackrabbit.test.api.SessionReadMethodsTest.class);
-            // addTestSuite(org.apache.jackrabbit.test.api.WorkspaceReadMethodsTest.class);
+            addTestSuite(org.apache.jackrabbit.test.api.WorkspaceReadMethodsTest.class);
             addTestSuite(org.apache.jackrabbit.test.api.ReferenceableRootNodesTest.class);
             addTestSuite(org.apache.jackrabbit.test.api.ExportSysViewTest.class);
             addTestSuite(org.apache.jackrabbit.test.api.ExportDocViewTest.class);
@@ -118,13 +118,13 @@
             // addTestSuite(org.apache.jackrabbit.test.api.query.XPathDocOrderTest.class);
             // addTestSuite(org.apache.jackrabbit.test.api.query.XPathOrderByTest.class);
             // addTestSuite(org.apache.jackrabbit.test.api.query.XPathJcrPathTest.class);
-            // addTestSuite(org.apache.jackrabbit.test.api.query.DerefQueryLevel1Test.class);
-            // addTestSuite(org.apache.jackrabbit.test.api.query.GetLanguageTest.class);
-            // addTestSuite(org.apache.jackrabbit.test.api.query.GetPersistentQueryPathLevel1Test.class);
-            // addTestSuite(org.apache.jackrabbit.test.api.query.GetStatementTest.class);
-            // addTestSuite(org.apache.jackrabbit.test.api.query.GetSupportedQueryLanguagesTest.class);
+            addTestSuite(org.apache.jackrabbit.test.api.query.DerefQueryLevel1Test.class);
+            addTestSuite(org.apache.jackrabbit.test.api.query.GetLanguageTest.class);
+            addTestSuite(org.apache.jackrabbit.test.api.query.GetPersistentQueryPathLevel1Test.class);
+            addTestSuite(org.apache.jackrabbit.test.api.query.GetStatementTest.class);
+            addTestSuite(org.apache.jackrabbit.test.api.query.GetSupportedQueryLanguagesTest.class);
             // addTestSuite(org.apache.jackrabbit.test.api.query.GetPropertyNamesTest.class);
-            // addTestSuite(org.apache.jackrabbit.test.api.query.PredicatesTest.class);
+            addTestSuite(org.apache.jackrabbit.test.api.query.PredicatesTest.class);
             // addTestSuite(org.apache.jackrabbit.test.api.query.SimpleSelectionTest.class);
 
             // The tests in this suite are level one

Modified: trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrWorkspaceTest.java
===================================================================
--- trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrWorkspaceTest.java	2009-03-24 02:16:34 UTC (rev 788)
+++ trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrWorkspaceTest.java	2009-03-24 02:29:20 UTC (rev 789)
@@ -160,9 +160,9 @@
         workspace.getObservationManager();
     }
 
-    @Test( expected = UnsupportedOperationException.class )
-    public void shouldNotAllowGetQueryManager() throws Exception {
-        workspace.getQueryManager();
+    @Test
+    public void shouldProvideQueryManager() throws Exception {
+        assertThat(workspace.getQueryManager(), notNullValue());
     }
 
     @Test




More information about the dna-commits mailing list