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 2006/03/07 23:45:57 UTC

svn commit: r384044 - in /incubator/jackrabbit/branches/1.0/jackrabbit/src/main/java/org/apache/jackrabbit: api/JackrabbitNodeTypeManager.java core/nodetype/NodeTypeManagerImpl.java

Author: jukka
Date: Tue Mar  7 14:45:56 2006
New Revision: 384044

URL: http://svn.apache.org/viewcvs?rev=384044&view=rev
Log:
1.0: Backported the CND support for NodeTypeManagerImpl.

Modified:
    incubator/jackrabbit/branches/1.0/jackrabbit/src/main/java/org/apache/jackrabbit/api/JackrabbitNodeTypeManager.java
    incubator/jackrabbit/branches/1.0/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeManagerImpl.java

Modified: incubator/jackrabbit/branches/1.0/jackrabbit/src/main/java/org/apache/jackrabbit/api/JackrabbitNodeTypeManager.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/branches/1.0/jackrabbit/src/main/java/org/apache/jackrabbit/api/JackrabbitNodeTypeManager.java?rev=384044&r1=384043&r2=384044&view=diff
==============================================================================
--- incubator/jackrabbit/branches/1.0/jackrabbit/src/main/java/org/apache/jackrabbit/api/JackrabbitNodeTypeManager.java (original)
+++ incubator/jackrabbit/branches/1.0/jackrabbit/src/main/java/org/apache/jackrabbit/api/JackrabbitNodeTypeManager.java Tue Mar  7 14:45:56 2006
@@ -42,6 +42,12 @@
     String TEXT_XML = "text/xml";
 
     /**
+     * The experimental content type for the compact node type definition
+     * files. 
+     */
+    String TEXT_X_JCR_CND = "text/x-jcr-cnd";
+
+    /**
      * Registers node types from the given node type XML stream.
      *
      * @param in node type XML stream

Modified: incubator/jackrabbit/branches/1.0/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/branches/1.0/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeManagerImpl.java?rev=384044&r1=384043&r2=384044&view=diff
==============================================================================
--- incubator/jackrabbit/branches/1.0/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeManagerImpl.java (original)
+++ incubator/jackrabbit/branches/1.0/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeManagerImpl.java Tue Mar  7 14:45:56 2006
@@ -23,6 +23,8 @@
 import org.apache.jackrabbit.name.UnknownPrefixException;
 import org.apache.jackrabbit.util.IteratorHelper;
 import org.apache.jackrabbit.api.JackrabbitNodeTypeManager;
+import org.apache.jackrabbit.core.nodetype.compact.CompactNodeTypeDefReader;
+import org.apache.jackrabbit.core.nodetype.compact.ParseException;
 import org.apache.jackrabbit.core.nodetype.xml.NodeTypeReader;
 import org.apache.jackrabbit.core.util.Dumpable;
 import org.apache.log4j.Logger;
@@ -36,12 +38,14 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.PrintStream;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -301,8 +305,29 @@
     //--------------------------------------------< JackrabbitNodeTypeManager >
 
     /**
-     * Registers the node types defined in the given XML stream. This is a
-     * trivial implementation that just invokes the existing
+     * Internal helper method for registering a list of node type definitions.
+     * Returns an array containing the registered node types. 
+     */
+    private NodeType[] registerNodeTypes(List defs)
+            throws InvalidNodeTypeDefException, RepositoryException {
+        ntReg.registerNodeTypes(defs);
+
+        Set types = new HashSet();
+        Iterator iterator = defs.iterator();
+        while (iterator.hasNext()) {
+            try {
+                NodeTypeDef def = (NodeTypeDef) iterator.next();
+                types.add(getNodeType(def.getName()));
+            } catch (NoSuchNodeTypeException e) {
+                // ignore
+            }
+        }
+        return (NodeType[]) types.toArray(new NodeType[types.size()]);
+    }
+
+    /**
+     * Registers the node types defined in the given XML stream.  This
+     * is a trivial implementation that just invokes the existing
      * {@link NodeTypeReader} and {@link NodeTypeRegistry} methods and
      * heuristically creates the returned node type array.
      *
@@ -312,17 +337,7 @@
             throws SAXException, RepositoryException {
         try {
             NodeTypeDef[] defs = NodeTypeReader.read(in.getByteStream());
-            ntReg.registerNodeTypes(Arrays.asList(defs));
-
-            Set types = new HashSet();
-            for (int i = 0; i < defs.length; i++) {
-                try {
-                    types.add(getNodeType(defs[i].getName()));
-                } catch (NoSuchNodeTypeException e) {
-                    // ignore
-                }
-            }
-            return (NodeType[]) types.toArray(new NodeType[types.size()]);
+            return registerNodeTypes(Arrays.asList(defs));
         } catch (InvalidNodeTypeDefException e) {
             throw new RepositoryException("Invalid node type definition", e);
         } catch (IOException e) {
@@ -335,16 +350,25 @@
     /** {@inheritDoc} */
     public NodeType[] registerNodeTypes(InputStream in, String contentType)
             throws IOException, RepositoryException {
-        if (contentType.equalsIgnoreCase(JackrabbitNodeTypeManager.TEXT_XML)
-            || contentType.equalsIgnoreCase(APPLICATION_XML)) {
-            try {
+        try {
+            if (contentType.equalsIgnoreCase(JackrabbitNodeTypeManager.TEXT_XML)
+                    || contentType.equalsIgnoreCase(APPLICATION_XML)) {
                 return registerNodeTypes(new InputSource(in));
-            } catch (SAXException e) {
-                throw new IOException(e.getMessage());
+            } else if (contentType.equalsIgnoreCase(
+                    JackrabbitNodeTypeManager.TEXT_X_JCR_CND)) {
+                CompactNodeTypeDefReader reader = new CompactNodeTypeDefReader(
+                        new InputStreamReader(in), "cnd input stream");
+                return registerNodeTypes(reader.getNodeTypeDefs());
+            } else {
+                throw new UnsupportedOperationException(
+                        "Unsupported content type: " + contentType);
             }
-        } else {
-            throw new UnsupportedOperationException(
-                    "Unsupported content type: " + contentType);
+        } catch (InvalidNodeTypeDefException e) {
+            throw new RepositoryException("Invalid node type definition", e);
+        } catch (SAXException e) {
+            throw new IOException(e.getMessage());
+        } catch (ParseException e) {
+            throw new IOException(e.getMessage());
         }
     }