Author: jukka
Date: Fri Feb 28 18:22:38 2014
New Revision: 1573023

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

Use the namespace mappings directly instead of going through
NamespaceRegistry. This is one fewer strict jackrabbit-core
dependency in the upgrade code.

Modified:
    
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
    
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java?rev=1573023&r1=1573022&r2=1573023&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
 Fri Feb 28 18:22:38 2014
@@ -26,9 +26,9 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 import javax.jcr.Binary;
-import javax.jcr.NamespaceRegistry;
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
 
@@ -67,28 +67,26 @@ class JackrabbitNodeState extends Abstra
     private final PersistenceManager source;
 
     /**
-     * Source namespace registry.
+     * Source namespace mappings (URI -< prefix).
      */
-    private final NamespaceRegistry registry;
+    private final Map<String, String> uriToPrefix;
 
     private final NodeState state;
 
     private final boolean useBinaryReferences;
 
-    private JackrabbitNodeState(
-            PersistenceManager source, NamespaceRegistry registry,
-            NodeState state, boolean useBinaryReferences) {
-        this.source = source;
-        this.registry = registry;
+    private JackrabbitNodeState(JackrabbitNodeState parent, NodeState state) {
+        this.source = parent.source;
+        this.uriToPrefix = parent.uriToPrefix;
         this.state = state;
-        this.useBinaryReferences = useBinaryReferences;
+        this.useBinaryReferences = parent.useBinaryReferences;
     }
 
     JackrabbitNodeState(
-            PersistenceManager source, NamespaceRegistry registry,
+            PersistenceManager source, Map<String, String> uriToPrefix,
             NodeId id, boolean useBinaryReferences) {
         this.source = source;
-        this.registry = registry;
+        this.uriToPrefix = uriToPrefix;
         try {
             this.state = source.load(id);
         } catch (ItemStateException e) {
@@ -160,8 +158,8 @@ class JackrabbitNodeState extends Abstra
 
             try {
                 NodeState childState = source.load(entry.getId());
-                JackrabbitNodeState child = new JackrabbitNodeState(
-                        source, registry, childState, useBinaryReferences);
+                JackrabbitNodeState child =
+                        new JackrabbitNodeState(this, childState);
                 entries.add(new MemoryChildNodeEntry(name, child));
             } catch (ItemStateException e) {
                 warn("Unable to access child entry " + name, e);
@@ -354,10 +352,11 @@ class JackrabbitNodeState extends Abstra
         if (uri == null || uri.isEmpty()) {
             return local;
         } else {
-            try {
-                return registry.getPrefix(uri) + ":" + local;
-            } catch (RepositoryException e) {
-                warn("Unable to create Oak name from " + name, e);
+            String prefix = uriToPrefix.get(uri);
+            if (prefix != null) {
+                return prefix + ":" + local;
+            } else {
+                warn("No prefix mapping found for " + name);
                 return "{" + uri + "}" + local;
             }
         }

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java?rev=1573023&r1=1573022&r2=1573023&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
 Fri Feb 28 18:22:38 2014
@@ -23,12 +23,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import javax.jcr.NamespaceException;
-import javax.jcr.NamespaceRegistry;
 import javax.jcr.RepositoryException;
 import javax.jcr.security.Privilege;
 import javax.jcr.version.OnParentVersionAction;
 
-import org.apache.jackrabbit.core.NamespaceRegistryImpl;
 import org.apache.jackrabbit.core.RepositoryContext;
 import org.apache.jackrabbit.core.config.RepositoryConfig;
 import org.apache.jackrabbit.core.config.UserManagerConfig;
@@ -216,11 +214,13 @@ public class RepositoryUpgrade {
             // init target repository first
             new InitialContent().initialize(builder);
 
-            Map<Integer, String> idxToPrefix = copyNamespaces(builder);
+            Map<String, String> uriToPrefix = newHashMap();
+            Map<Integer, String> idxToPrefix = newHashMap();
+            copyNamespaces(builder, uriToPrefix, idxToPrefix);
             copyNodeTypes(builder);
             copyPrivileges(builder);
-            copyVersionStore(builder, idxToPrefix);
-            copyWorkspaces(builder, idxToPrefix);
+            copyVersionStore(builder, uriToPrefix, idxToPrefix);
+            copyWorkspaces(builder, uriToPrefix, idxToPrefix);
 
             String groupsPath;
             UserManagerConfig userConfig = 
config.getSecurityConfig().getSecurityManagerConfig().getUserManagerConfig();
@@ -258,13 +258,14 @@ public class RepositoryUpgrade {
      * the internal namespace index mapping used in bundle serialization.
      *
      * @param root root builder
-     * @return index to prefix mapping
+     * @param uriToPrefix namespace URI to prefix mapping
+     * @param idxToPrefix index to prefix mapping
      * @throws RepositoryException
      */
-    private Map<Integer, String> copyNamespaces(NodeBuilder root)
+    private void copyNamespaces(
+            NodeBuilder root,
+            Map<String, String> uriToPrefix, Map<Integer, String> idxToPrefix)
             throws RepositoryException {
-        Map<Integer, String> idxToPrefix = newHashMap();
-
         NodeBuilder system = root.child(JCR_SYSTEM);
         NodeBuilder namespaces = 
system.child(NamespaceConstants.REP_NAMESPACES);
 
@@ -298,12 +299,11 @@ public class RepositoryUpgrade {
                 } while (idxToPrefix.containsKey(idx));
             }
 
+            checkState(uriToPrefix.put(uri, prefix) == null);
             checkState(idxToPrefix.put(idx, prefix) == null);
         }
 
         Namespaces.buildIndexNode(namespaces);
-
-        return idxToPrefix;
     }
 
     private Properties loadProperties(String path) throws RepositoryException {
@@ -537,23 +537,24 @@ public class RepositoryUpgrade {
     }
 
     private void copyVersionStore(
-            NodeBuilder root, Map<Integer, String> idxToPrefix)
+            NodeBuilder root,
+            Map<String, String> uriToPrefix, Map<Integer, String> idxToPrefix)
             throws RepositoryException, IOException {
         logger.info("Copying version histories");
 
         PersistenceManager pm =
                 source.getInternalVersionManager().getPersistenceManager();
-        NamespaceRegistry nr =source.getNamespaceRegistry();
 
         NodeBuilder system = root.child(JCR_SYSTEM);
         system.setChildNode(JCR_VERSIONSTORAGE, new JackrabbitNodeState(
-                pm, nr, VERSION_STORAGE_NODE_ID, copyBinariesByReference));
+                pm, uriToPrefix, VERSION_STORAGE_NODE_ID, 
copyBinariesByReference));
         system.setChildNode("jcr:activities", new JackrabbitNodeState(
-                pm, nr, ACTIVITIES_NODE_ID, copyBinariesByReference));
+                pm, uriToPrefix, ACTIVITIES_NODE_ID, copyBinariesByReference));
     }   
 
     private void copyWorkspaces(
-            NodeBuilder root, Map<Integer, String> idxToPrefix)
+            NodeBuilder root,
+            Map<String, String> uriToPrefix, Map<Integer, String> idxToPrefix)
             throws RepositoryException, IOException {
         logger.info("Copying default workspace");
 
@@ -563,10 +564,9 @@ public class RepositoryUpgrade {
 
         PersistenceManager pm =
                 source.getWorkspaceInfo(name).getPersistenceManager();
-        NamespaceRegistryImpl nr = source.getNamespaceRegistry();
 
         NodeState state = new JackrabbitNodeState(
-                pm, nr, ROOT_NODE_ID, copyBinariesByReference);
+                pm, uriToPrefix, ROOT_NODE_ID, copyBinariesByReference);
         for (PropertyState property : state.getProperties()) {
             root.setProperty(property);
         }


Reply via email to