You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ju...@apache.org on 2013/05/02 17:56:44 UTC

svn commit: r1478420 - /jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/core/RepositoryUpgrade.java

Author: jukka
Date: Thu May  2 15:56:40 2013
New Revision: 1478420

URL: http://svn.apache.org/r1478420
Log:
OAK-806: Content migration from Jackrabbit to Oak

Improve the node type migration code. WIP...

Modified:
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/core/RepositoryUpgrade.java

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/core/RepositoryUpgrade.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/core/RepositoryUpgrade.java?rev=1478420&r1=1478419&r2=1478420&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/core/RepositoryUpgrade.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/core/RepositoryUpgrade.java Thu May  2 15:56:40 2013
@@ -16,29 +16,62 @@
  */
 package org.apache.jackrabbit.core;
 
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Lists.newArrayListWithCapacity;
+import static java.util.Arrays.asList;
+import static org.apache.jackrabbit.JcrConstants.JCR_AUTOCREATED;
+import static org.apache.jackrabbit.JcrConstants.JCR_HASORDERABLECHILDNODES;
+import static org.apache.jackrabbit.JcrConstants.JCR_ISMIXIN;
+import static org.apache.jackrabbit.JcrConstants.JCR_MANDATORY;
+import static org.apache.jackrabbit.JcrConstants.JCR_MULTIPLE;
+import static org.apache.jackrabbit.JcrConstants.JCR_NAME;
 import static org.apache.jackrabbit.JcrConstants.JCR_NODETYPENAME;
+import static org.apache.jackrabbit.JcrConstants.JCR_ONPARENTVERSION;
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYITEMNAME;
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
+import static org.apache.jackrabbit.JcrConstants.JCR_PROPERTYDEFINITION;
+import static org.apache.jackrabbit.JcrConstants.JCR_PROTECTED;
+import static org.apache.jackrabbit.JcrConstants.JCR_REQUIREDTYPE;
+import static org.apache.jackrabbit.JcrConstants.JCR_SUPERTYPES;
 import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM;
+import static org.apache.jackrabbit.JcrConstants.JCR_VALUECONSTRAINTS;
 import static org.apache.jackrabbit.JcrConstants.JCR_VERSIONSTORAGE;
+import static org.apache.jackrabbit.JcrConstants.NT_NODETYPE;
+import static org.apache.jackrabbit.JcrConstants.NT_PROPERTYDEFINITION;
+import static org.apache.jackrabbit.oak.api.Type.NAME;
+import static org.apache.jackrabbit.oak.api.Type.NAMES;
+import static org.apache.jackrabbit.oak.api.Type.STRINGS;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_AVAILABLE_QUERY_OPERATORS;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_ABSTRACT;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_FULLTEXT_SEARCHABLE;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_QUERYABLE;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_QUERY_ORDERABLE;
 import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.List;
 
 import javax.jcr.NamespaceException;
 import javax.jcr.NamespaceRegistry;
 import javax.jcr.RepositoryException;
+import javax.jcr.version.OnParentVersionAction;
 
 import org.apache.jackrabbit.core.RepositoryContext;
 import org.apache.jackrabbit.core.RepositoryImpl;
 import org.apache.jackrabbit.core.RepositoryImpl.WorkspaceInfo;
 import org.apache.jackrabbit.core.config.RepositoryConfig;
 import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
+import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStoreBranch;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.QNodeTypeDefinition;
+import org.apache.jackrabbit.spi.QPropertyDefinition;
+import org.apache.jackrabbit.spi.QValue;
+import org.apache.jackrabbit.spi.QValueConstraint;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -185,11 +218,102 @@ public class RepositoryUpgrade {
         for (Name name : sourceRegistry.getRegisteredNodeTypes()) {
             QNodeTypeDefinition def = sourceRegistry.getNodeTypeDef(name);
             NodeBuilder type = types.child(getOakName(name));
-            type.setProperty(JCR_NODETYPENAME, getOakName(name));
-            // TODO ...
+            copyNodeType(def, type);
         }
     }
 
+    private void copyNodeType(QNodeTypeDefinition def, NodeBuilder builder)
+            throws NamespaceException {
+        builder.setProperty(JCR_PRIMARYTYPE, NT_NODETYPE, NAME);
+
+        // - jcr:nodeTypeName (NAME) protected mandatory
+        builder.setProperty(JCR_NODETYPENAME, getOakName(def.getName()), NAME);
+        // - jcr:supertypes (NAME) protected multiple
+        Name[] supertypes = def.getSupertypes();
+        if (supertypes != null && supertypes.length > 0) {
+            List<String> names = newArrayList();
+            for (Name supertype : supertypes) {
+                names.add(getOakName(supertype));
+            }
+            builder.setProperty(JCR_SUPERTYPES, names, NAMES);
+        }
+        // - jcr:isAbstract (BOOLEAN) protected mandatory
+        builder.setProperty(JCR_IS_ABSTRACT, def.isAbstract());
+        // - jcr:isQueryable (BOOLEAN) protected mandatory
+        builder.setProperty(JCR_IS_QUERYABLE, def.isQueryable());
+        // - jcr:isMixin (BOOLEAN) protected mandatory
+        builder.setProperty(JCR_ISMIXIN, def.isMixin());
+        // - jcr:hasOrderableChildNodes (BOOLEAN) protected mandatory
+        builder.setProperty(
+                JCR_HASORDERABLECHILDNODES, def.hasOrderableChildNodes());
+        // - jcr:primaryItemName (NAME) protected
+        Name primary = def.getPrimaryItemName();
+        if (primary != null) {
+            builder.setProperty(
+                    JCR_PRIMARYITEMNAME, getOakName(primary), NAME);
+        }
+
+        // + jcr:propertyDefinition (nt:propertyDefinition) = nt:propertyDefinition protected sns
+        QPropertyDefinition[] properties = def.getPropertyDefs();
+        for (int i = 0; i < properties.length; i++) {
+            String name = JCR_PROPERTYDEFINITION + '[' + i + ']';
+            copyPropertyDefinition(properties[i], builder.child(name));
+        }
+
+        // + jcr:childNodeDefinition (nt:childNodeDefinition) = nt:childNodeDefinition protected sns
+    }
+
+    private void copyPropertyDefinition(
+            QPropertyDefinition def, NodeBuilder builder)
+            throws NamespaceException {
+        builder.setProperty(JCR_PRIMARYTYPE, NT_PROPERTYDEFINITION, NAME);
+
+        // - jcr:name (NAME) protected
+        builder.setProperty(JCR_NAME, getOakName(def.getName()), NAME);
+        // - jcr:autoCreated (BOOLEAN) protected mandatory
+        builder.setProperty(JCR_AUTOCREATED, def.isAutoCreated());
+        // - jcr:mandatory (BOOLEAN) protected mandatory
+        builder.setProperty(JCR_MANDATORY, def.isMandatory());
+        // - jcr:onParentVersion (STRING) protected mandatory
+        //   < 'COPY', 'VERSION', 'INITIALIZE', 'COMPUTE', 'IGNORE', 'ABORT'
+        builder.setProperty(
+                JCR_ONPARENTVERSION,
+                OnParentVersionAction.nameFromValue(def.getOnParentVersion()));
+        // - jcr:protected (BOOLEAN) protected mandatory
+        builder.setProperty(JCR_PROTECTED, def.isProtected());
+        // - jcr:requiredType (STRING) protected mandatory
+        //   < 'STRING', 'URI', 'BINARY', 'LONG', 'DOUBLE',
+        //     'DECIMAL', 'BOOLEAN', 'DATE', 'NAME', 'PATH',
+        //     'REFERENCE', 'WEAKREFERENCE', 'UNDEFINED'
+        builder.setProperty(
+                JCR_REQUIREDTYPE,
+                Type.fromTag(def.getRequiredType(), false).toString());
+        // - jcr:valueConstraints (STRING) protected multiple
+        QValueConstraint[] constraints = def.getValueConstraints();
+        if (constraints != null && constraints.length > 0) {
+            List<String> strings = newArrayListWithCapacity(constraints.length);
+            for (QValueConstraint constraint : constraints) {
+                strings.add(constraint.getString());
+            }
+            builder.setProperty(JCR_VALUECONSTRAINTS, strings, STRINGS);
+        }
+        // - jcr:defaultValues (UNDEFINED) protected multiple
+        QValue[] values = def.getDefaultValues();
+        if (values != null) {
+            // TODO
+        }
+        // - jcr:multiple (BOOLEAN) protected mandatory
+        builder.setProperty(JCR_MULTIPLE, def.isMultiple());
+        // - jcr:availableQueryOperators (NAME) protected mandatory multiple
+        List<String> operators = asList(def.getAvailableQueryOperators());
+        builder.setProperty(JCR_AVAILABLE_QUERY_OPERATORS, operators, NAMES);
+        // - jcr:isFullTextSearchable (BOOLEAN) protected mandatory
+        builder.setProperty(
+                JCR_IS_FULLTEXT_SEARCHABLE, def.isFullTextSearchable());
+        // - jcr:isQueryOrderable (BOOLEAN) protected mandatory
+        builder.setProperty(JCR_IS_QUERY_ORDERABLE, def.isQueryOrderable());
+    }
+
     private void copyVersionStore(NodeBuilder root)
             throws RepositoryException, IOException {
         logger.info("Copying version histories");