You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2008/05/16 16:13:10 UTC

svn commit: r657073 - in /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype: ./ compact/

Author: stefan
Date: Fri May 16 07:13:09 2008
New Revision: 657073

URL: http://svn.apache.org/viewvc?rev=657073&view=rev
Log:
JCR-1591: JSR 283: NodeType Management

Added:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeDefinitionImpl.java
Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ItemDefinitionImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeDefinitionImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeTemplateImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/PropertyDefinitionImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ItemDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ItemDefinitionImpl.java?rev=657073&r1=657072&r2=657073&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ItemDefinitionImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ItemDefinitionImpl.java Fri May 16 07:13:09 2008
@@ -64,7 +64,7 @@
      *
      * @param itemDef    item definition
      * @param ntMgr      node type manager
-     * @param resolver
+     * @param resolver   name resolver
      */
     ItemDefinitionImpl(ItemDef itemDef, NodeTypeManagerImpl ntMgr,
                        NamePathResolver resolver) {

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeDefinitionImpl.java?rev=657073&r1=657072&r2=657073&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeDefinitionImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeDefinitionImpl.java Fri May 16 07:13:09 2008
@@ -45,7 +45,7 @@
      *
      * @param nodeDef    child node definition
      * @param ntMgr      node type manager
-     * @param resolver
+     * @param resolver   name resolver
      */
     NodeDefinitionImpl(NodeDef nodeDef, NodeTypeManagerImpl ntMgr,
                        NamePathResolver resolver) {
@@ -70,6 +70,9 @@
         if (ntName == null) {
             return null;
         }
+        if (ntMgr == null) {
+            return null;
+        }
         try {
             return ntMgr.getNodeType(ntName);
         } catch (NoSuchNodeTypeException e) {
@@ -83,6 +86,9 @@
      * {@inheritDoc}
      */
     public NodeType[] getRequiredPrimaryTypes() {
+        if (ntMgr == null) {
+            return null;
+        }
         Name[] ntNames = ((NodeDef) itemDef).getRequiredPrimaryTypes();
         try {
             if (ntNames == null || ntNames.length == 0) {

Added: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeDefinitionImpl.java?rev=657073&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeDefinitionImpl.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeDefinitionImpl.java Fri May 16 07:13:09 2008
@@ -0,0 +1,164 @@
+/*
+ * 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.core.nodetype;
+
+import org.apache.jackrabbit.api.jsr283.nodetype.NodeTypeDefinition;
+import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jcr.NamespaceException;
+import javax.jcr.nodetype.NodeDefinition;
+import javax.jcr.nodetype.PropertyDefinition;
+
+/**
+ * This class implements the <code>NodeTypeDefinition</code> interface.
+ * All method calls are delegated to the wrapped {@link NodeTypeDef},
+ * performing the translation from <code>Name</code>s to JCR names
+ * (and vice versa) where necessary.
+ */
+public class NodeTypeDefinitionImpl implements NodeTypeDefinition {
+
+    private static Logger log = LoggerFactory.getLogger(NodeTypeDefinitionImpl.class);
+
+    private final NodeTypeDef ntd;
+    // resolver used to translate qualified names to JCR names
+    private final NamePathResolver resolver;
+
+    public NodeTypeDefinitionImpl(NodeTypeDef ntd, NamePathResolver resolver) {
+        this.ntd = ntd;
+        this.resolver = resolver;
+    }
+
+    //---------------------------------------------------< NodeTypeDefinition >
+    /**
+     * {@inheritDoc}
+     */
+    public String getName() {
+        try {
+            return resolver.getJCRName(ntd.getName());
+        } catch (NamespaceException e) {
+            // should never get here
+            log.error("encountered unregistered namespace in node type name", e);
+            return ntd.getName().toString();
+        }
+    }
+
+    /**
+     * Returns the names of the supertypes actually declared in this node type.
+     * <p/>
+     * In implementations that support node type registration, if this
+     * <code>NodeTypeDefinition</code> object is actually a newly-created empty
+     * <code>NodeTypeTemplate</code>, then this method will return an array
+     * containing a single string indicating the node type
+     * <code>nt:base</code>.
+     *
+     * @return an array of <code>String</code>s
+     * @since JCR 2.0
+     */
+    public String[] getDeclaredSupertypeNames() {
+        Name[] ntNames = ntd.getSupertypes();
+        String[] supertypes = new String[ntNames.length];
+        for (int i = 0; i < ntNames.length; i++) {
+            try {
+                supertypes[i] = resolver.getJCRName(ntd.getName());
+            } catch (NamespaceException e) {
+                // should never get here
+                log.error("encountered unregistered namespace in node type name", e);
+                supertypes[i] = ntd.getName().toString();
+            }
+        }
+        return supertypes;
+    }
+
+    /**
+     * Returns <code>true</code> if this is an abstract node type; returns
+     * <code>false</code> otherwise.
+     * <p/>
+     * An abstract node type is one that cannot be assigned as the primary or
+     * mixin type of a node but can be used in the definitions of other node
+     * types as a superclass.
+     * <p/>
+     * In implementations that support node type registration, if this
+     * <code>NodeTypeDefinition</code> object is actually a newly-created empty
+     * <code>NodeTypeTemplate</code>, then this method will return
+     * <code>false</code>.
+     *
+     * @return a <code>boolean</code>
+     * @since JCR 2.0
+     */
+    public boolean isAbstract() {
+        return ntd.isAbstract();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isMixin() {
+        return ntd.isMixin();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean hasOrderableChildNodes() {
+        return ntd.hasOrderableChildNodes();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getPrimaryItemName() {
+        try {
+            Name piName = ntd.getPrimaryItemName();
+            if (piName != null) {
+                return resolver.getJCRName(piName);
+            } else {
+                return null;
+            }
+        } catch (NamespaceException e) {
+            // should never get here
+            log.error("encountered unregistered namespace in name of primary item", e);
+            return ntd.getName().toString();
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public NodeDefinition[] getDeclaredChildNodeDefinitions() {
+        NodeDef[] cnda = ntd.getChildNodeDefs();
+        NodeDefinition[] nodeDefs = new NodeDefinition[cnda.length];
+        for (int i = 0; i < cnda.length; i++) {
+            nodeDefs[i] = new NodeDefinitionImpl(cnda[i], null, resolver);
+        }
+        return nodeDefs;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public PropertyDefinition[] getDeclaredPropertyDefinitions() {
+        PropDef[] pda = ntd.getPropertyDefs();
+        PropertyDefinition[] propDefs = new PropertyDefinition[pda.length];
+        for (int i = 0; i < pda.length; i++) {
+            propDefs[i] = new PropertyDefinitionImpl(pda[i], null, resolver);
+        }
+        return propDefs;
+    }
+}

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeTemplateImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeTemplateImpl.java?rev=657073&r1=657072&r2=657073&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeTemplateImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeTemplateImpl.java Fri May 16 07:13:09 2008
@@ -17,9 +17,9 @@
 package org.apache.jackrabbit.core.nodetype;
 
 import org.apache.commons.collections.list.TypedList;
-import org.apache.jackrabbit.api.jsr283.nodetype.NodeDefinitionTemplate;
-import org.apache.jackrabbit.api.jsr283.nodetype.NodeTypeDefinition;
 import org.apache.jackrabbit.api.jsr283.nodetype.NodeTypeTemplate;
+import org.apache.jackrabbit.api.jsr283.nodetype.NodeTypeDefinition;
+import org.apache.jackrabbit.api.jsr283.nodetype.NodeDefinitionTemplate;
 import org.apache.jackrabbit.api.jsr283.nodetype.PropertyDefinitionTemplate;
 
 import javax.jcr.nodetype.NodeDefinition;
@@ -45,10 +45,6 @@
      * Package private constructor
      */
     NodeTypeTemplateImpl() {
-        nodeDefinitionTemplates = TypedList.decorate(
-                new ArrayList(), NodeDefinitionTemplate.class);
-        propertyDefinitionTemplates = TypedList.decorate(
-                new ArrayList(), PropertyDefinitionTemplate.class);
     }
 
     /**
@@ -64,12 +60,18 @@
         mixin = def.isMixin();
         orderableChildNodes = def.hasOrderableChildNodes();
         NodeDefinition[] nodeDefs = def.getDeclaredChildNodeDefinitions();
-        for (int i = 0; i < nodeDefs.length; i++) {
-            nodeDefinitionTemplates.add(new NodeDefinitionTemplateImpl(nodeDefs[i]));
+        if (nodeDefs != null) {
+            List list = getNodeDefinitionTemplates();
+            for (int i = 0; i < nodeDefs.length; i++) {
+                list.add(new NodeDefinitionTemplateImpl(nodeDefs[i]));
+            }
         }
         PropertyDefinition[] propDefs = def.getDeclaredPropertyDefinitions();
-        for (int i = 0; i < propDefs.length; i++) {
-            propertyDefinitionTemplates.add(new PropertyDefinitionTemplateImpl(propDefs[i]));
+        if (propDefs != null) {
+            List list = getPropertyDefinitionTemplates();
+            for (int i = 0; i < propDefs.length; i++) {
+                list.add(new PropertyDefinitionTemplateImpl(propDefs[i]));
+            }
         }
     }
 
@@ -120,6 +122,10 @@
      * {@inheritDoc}
      */
     public List getPropertyDefinitionTemplates() {
+        if (propertyDefinitionTemplates == null) {
+            propertyDefinitionTemplates = TypedList.decorate(
+                    new ArrayList(), PropertyDefinitionTemplate.class);
+        }
         return propertyDefinitionTemplates;
     }
 
@@ -127,6 +133,10 @@
      * {@inheritDoc}
      */
     public List getNodeDefinitionTemplates() {
+        if (nodeDefinitionTemplates == null) {
+            nodeDefinitionTemplates = TypedList.decorate(
+                    new ArrayList(), NodeDefinitionTemplate.class);
+        }
         return nodeDefinitionTemplates;
     }
 
@@ -177,15 +187,23 @@
      * {@inheritDoc}
      */
     public PropertyDefinition[] getDeclaredPropertyDefinitions() {
-        return (PropertyDefinition[]) propertyDefinitionTemplates.toArray(
-                new PropertyDefinition[propertyDefinitionTemplates.size()]);
+        if (propertyDefinitionTemplates == null) {
+            return null;
+        } else {
+            return (PropertyDefinition[]) propertyDefinitionTemplates.toArray(
+                    new PropertyDefinition[propertyDefinitionTemplates.size()]);
+        }
     }
 
     /**
      * {@inheritDoc}
      */
     public NodeDefinition[] getDeclaredChildNodeDefinitions() {
-        return (NodeDefinition[]) nodeDefinitionTemplates.toArray(
-                new NodeDefinition[nodeDefinitionTemplates.size()]);
+        if (nodeDefinitionTemplates == null) {
+            return null;
+        } else {
+            return (NodeDefinition[]) nodeDefinitionTemplates.toArray(
+                    new NodeDefinition[nodeDefinitionTemplates.size()]);
+        }
     }
 }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/PropertyDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/PropertyDefinitionImpl.java?rev=657073&r1=657072&r2=657073&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/PropertyDefinitionImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/PropertyDefinitionImpl.java Fri May 16 07:13:09 2008
@@ -44,7 +44,7 @@
      *
      * @param propDef    property definition
      * @param ntMgr      node type manager
-     * @param resolver
+     * @param resolver   name resolver
      */
     PropertyDefinitionImpl(PropDef propDef, NodeTypeManagerImpl ntMgr,
                            NamePathResolver resolver) {

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java?rev=657073&r1=657072&r2=657073&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java Fri May 16 07:13:09 2008
@@ -24,10 +24,12 @@
 import org.apache.jackrabbit.core.nodetype.PropDef;
 import org.apache.jackrabbit.core.nodetype.PropDefImpl;
 import org.apache.jackrabbit.core.nodetype.ValueConstraint;
+import org.apache.jackrabbit.core.nodetype.NodeTypeDefinitionImpl;
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.spi.commons.conversion.NameException;
 import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
 import org.apache.jackrabbit.spi.commons.conversion.DefaultNamePathResolver;
+import org.apache.jackrabbit.spi.commons.conversion.NameResolver;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.commons.name.NameConstants;
 import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
@@ -46,6 +48,7 @@
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Iterator;
 
 /**
  * CompactNodeTypeDefReader. Parses node type definitions written in the compact
@@ -188,6 +191,20 @@
     }
 
     /**
+     * Returns the list of parsed node type definitions.
+     *
+     * @param resolver name resolver
+     * @return a List of NodeTypeDefinitions objects
+     */
+    public List getNodeTypeDefinitions(NamePathResolver resolver) {
+        List l = new ArrayList(nodeTypeDefs.size());
+        for (Iterator iter = nodeTypeDefs.iterator(); iter.hasNext();) {
+            l.add(new NodeTypeDefinitionImpl((NodeTypeDef) iter.next(), resolver));
+        }
+        return l;
+    }
+
+    /**
      * Returns the namespace mapping.
      *
      * @return a NamespaceMapping object.