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

svn commit: r766747 - in /jackrabbit/branches/1.5/jackrabbit-jcr2spi/src: main/java/org/apache/jackrabbit/jcr2spi/nodetype/ test/java/org/apache/jackrabbit/jcr2spi/nodetype/

Author: mduerig
Date: Mon Apr 20 16:41:29 2009
New Revision: 766747

URL: http://svn.apache.org/viewvc?rev=766747&view=rev
Log:
1.5: Backported revision 741509 (JCR-1967)

Added:
    jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImplTest.java   (with props)
Modified:
    jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImpl.java
    jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/TestAll.java

Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImpl.java?rev=766747&r1=766746&r2=766747&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImpl.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImpl.java Mon Apr 20 16:41:29 2009
@@ -45,7 +45,7 @@
 import java.util.ArrayList;
 
 /**
- * A <code>NodeTypeImpl</code> ...
+ * <code>NodeTypeImpl</code> ...
  */
 public class NodeTypeImpl implements NodeType {
 
@@ -66,7 +66,7 @@
      * @param ent        the effective (i.e. merged and resolved) node type representation
      * @param ntd        the definition of this node type
      * @param ntMgr      the node type manager associated with this node type
-     * @param mgrProvider
+     * @param mgrProvider the manager provider
      */
     NodeTypeImpl(EffectiveNodeType ent, QNodeTypeDefinition ntd,
                  NodeTypeManagerImpl ntMgr, ManagerProvider mgrProvider) {
@@ -89,11 +89,14 @@
     }
 
     /**
-     * ValueFactory used to convert JCR values to qualified ones in order to
-     * determine whether a property specified by name and value(s) would be allowed.
+     * ValueFactory used to convert JCR values from one type to another in order
+     * to determine whether a property specified by name and value(s) would be
+     * allowed.
      *
      * @see NodeType#canSetProperty(String, Value)
      * @see NodeType#canSetProperty(String, Value[])
+     * @return ValueFactory used to convert JCR values.
+     * @throws javax.jcr.RepositoryException If an error occurs.
      */
     private ValueFactory valueFactory() throws RepositoryException {
         return mgrProvider.getJcrValueFactory();
@@ -102,6 +105,9 @@
     /**
      * ValueFactory used to convert JCR values to qualified ones in order to
      * determine value constraints within the NodeType interface.
+     *
+     * @return ValueFactory used to convert JCR values to qualified ones.
+     * @throws javax.jcr.RepositoryException If an error occurs.
      */
     private QValueFactory qValueFactory() throws RepositoryException {
         return mgrProvider.getQValueFactory();
@@ -124,15 +130,27 @@
     }
 
     /**
-     * Checks if this node type's name equals the given name or if this nodetype
-     * is directly or indirectly derived from the specified node type.
+     * Test if this nodetype equals or is directly or indirectly derived from
+     * the node type with the specified <code>nodeTypeName</code>, without
+     * checking of a node type of that name really exists.
      *
-     * @param nodeTypeName
-     * @return true if this node type is equal or directly or indirectly derived
-     * from the specified node type, otherwise false.
+     * @param nodeTypeName A node type name.
+     * @return true if this node type represents the type with the given
+     * <code>nodeTypeName</code> or if it is directly or indirectly derived
+     * from it; otherwise <code>false</code>. If no node type exists with the
+     * specified name this method will also return <code>false</code>.
      */
     public boolean isNodeType(Name nodeTypeName) {
-        return getName().equals(nodeTypeName) ||  ent.includesNodeType(nodeTypeName);
+        return ent.includesNodeType(nodeTypeName);
+    }
+
+    /**
+     * Returns the 'internal', i.e. the fully qualified name.
+     *
+     * @return the qualified name
+     */
+    private Name getQName() {
+        return ntd.getName();
     }
 
     /**
@@ -145,27 +163,18 @@
      *
      * @param def    The definiton of the property
      * @param values An array of <code>QValue</code> objects.
-     * @throws ConstraintViolationException
-     * @throws RepositoryException
+     * @throws ConstraintViolationException If a constraint is violated.
+     * @throws RepositoryException If another error occurs.
      */
     private static void checkSetPropertyValueConstraints(QPropertyDefinition def,
                                                         QValue[] values)
             throws ConstraintViolationException, RepositoryException {
         ValueConstraint.checkValueConstraints(def, values);
     }
-
-    /**
-     * Returns the 'internal', i.e. the fully qualified name.
-     *
-     * @return the qualified name
-     */
-    private Name getQName() {
-        return ntd.getName();
-    }
-
+    
     //-----------------------------------------------------------< NodeType >---
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#getName()
      */
     public String getName() {
         try {
@@ -178,7 +187,7 @@
     }
 
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#getPrimaryItemName()
      */
     public String getPrimaryItemName() {
         try {
@@ -196,14 +205,14 @@
     }
 
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#isMixin()
      */
     public boolean isMixin() {
         return ntd.isMixin();
     }
 
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#isNodeType(String)
      */
     public boolean isNodeType(String nodeTypeName) {
         Name ntName;
@@ -220,14 +229,14 @@
     }
 
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#hasOrderableChildNodes()
      */
     public boolean hasOrderableChildNodes() {
         return ntd.hasOrderableChildNodes();
     }
 
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#getSupertypes()
      */
     public NodeType[] getSupertypes() {
         Name[] ntNames = ent.getInheritedNodeTypes();
@@ -245,7 +254,7 @@
     }
 
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#getChildNodeDefinitions()
      */
     public NodeDefinition[] getChildNodeDefinitions() {
         QNodeDefinition[] cnda = ent.getAllQNodeDefinitions();
@@ -257,7 +266,7 @@
     }
 
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#getPropertyDefinitions()
      */
     public PropertyDefinition[] getPropertyDefinitions() {
         QPropertyDefinition[] pda = ent.getAllQPropertyDefinitions();
@@ -269,7 +278,19 @@
     }
 
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#getDeclaredPropertyDefinitions()
+     */
+    public PropertyDefinition[] getDeclaredPropertyDefinitions() {
+        QPropertyDefinition[] pda = ntd.getPropertyDefs();
+        PropertyDefinition[] propDefs = new PropertyDefinition[pda.length];
+        for (int i = 0; i < pda.length; i++) {
+            propDefs[i] = ntMgr.getPropertyDefinition(pda[i]);
+        }
+        return propDefs;
+    }
+
+    /**
+     * @see javax.jcr.nodetype.NodeType#getDeclaredSupertypes()
      */
     public NodeType[] getDeclaredSupertypes() {
         Name[] ntNames = ntd.getSupertypes();
@@ -287,7 +308,7 @@
     }
 
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#getDeclaredChildNodeDefinitions()
      */
     public NodeDefinition[] getDeclaredChildNodeDefinitions() {
         QNodeDefinition[] cnda = ntd.getChildNodeDefs();
@@ -299,7 +320,7 @@
     }
 
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#canSetProperty(String, Value)
      */
     public boolean canSetProperty(String propertyName, Value value) {
         if (value == null) {
@@ -344,7 +365,7 @@
     }
 
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#canSetProperty(String, Value[])
      */
     public boolean canSetProperty(String propertyName, Value[] values) {
         if (values == null) {
@@ -416,7 +437,7 @@
     }
 
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#canAddChildNode(String)
      */
     public boolean canAddChildNode(String childNodeName) {
         try {
@@ -431,7 +452,7 @@
     }
 
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#canAddChildNode(String, String) 
      */
     public boolean canAddChildNode(String childNodeName, String nodeTypeName) {
         try {
@@ -447,7 +468,7 @@
     }
 
     /**
-     * {@inheritDoc}
+     * @see javax.jcr.nodetype.NodeType#canRemoveItem(String) 
      */
     public boolean canRemoveItem(String itemName) {
         try {
@@ -460,16 +481,4 @@
         }
         return false;
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public PropertyDefinition[] getDeclaredPropertyDefinitions() {
-        QPropertyDefinition[] pda = ntd.getPropertyDefs();
-        PropertyDefinition[] propDefs = new PropertyDefinition[pda.length];
-        for (int i = 0; i < pda.length; i++) {
-            propDefs[i] = ntMgr.getPropertyDefinition(pda[i]);
-        }
-        return propDefs;
-    }
 }

Added: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImplTest.java?rev=766747&view=auto
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImplTest.java (added)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImplTest.java Mon Apr 20 16:41:29 2009
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.jcr2spi.nodetype;
+
+import org.apache.jackrabbit.spi.commons.conversion.NameResolver;
+import org.apache.jackrabbit.test.AbstractJCRTest;
+import org.apache.jackrabbit.test.NotExecutableException;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.NodeTypeManager;
+
+/**
+ * <code>NodeTypeImplTest</code>...
+ */
+public class NodeTypeImplTest extends AbstractJCRTest {
+
+    private NodeTypeManager ntMgr;
+    private NodeTypeImpl nodeType;
+    private NameResolver resolver;
+
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        ntMgr = superuser.getWorkspace().getNodeTypeManager();
+        NodeType nt = ntMgr.getNodeType(testNodeType);
+        if (nt instanceof NodeTypeImpl) {
+            nodeType = (NodeTypeImpl) nt;
+        } else {
+            throw new NotExecutableException("NodeTypeImpl expected.");
+        }
+
+        if (superuser instanceof NameResolver) {
+            resolver = (NameResolver) superuser;
+        } else {
+             throw new NotExecutableException();
+        }
+    }
+
+    public void testIsNodeType() throws RepositoryException {
+        NodeType[] superTypes = nodeType.getSupertypes();
+
+        for (int i = 0; i < superTypes.length; i++) {
+            String name = superTypes[i].getName();
+            assertTrue(nodeType.isNodeType(resolver.getQName(name)));
+        }
+
+        // unknown nt
+        String unknownName = "unknown";
+        assertFalse(nodeType.isNodeType(unknownName));
+
+        // all non-mixin node types must be derived from nt base.
+        if (!nodeType.isMixin()) {
+            assertTrue(nodeType.isNodeType("nt:base"));
+        }
+    }
+
+}

Propchange: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImplTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/TestAll.java?rev=766747&r1=766746&r2=766747&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/TestAll.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/TestAll.java Mon Apr 20 16:41:29 2009
@@ -32,6 +32,8 @@
         suite.addTestSuite(RemoveMixinTest.class);
         suite.addTestSuite(MandatoryItemTest.class);
 
+        suite.addTestSuite(NodeTypeImplTest.class);
+
         return suite;
     }
 }