[exo-jcr-commits] exo-jcr SVN: r2992 - in jcr/trunk/exo.jcr.component.core/src: main/java/org/exoplatform/services/jcr/impl/dataflow and 1 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Aug 26 08:43:57 EDT 2010


Author: sergiykarpenko
Date: 2010-08-26 08:43:55 -0400 (Thu, 26 Aug 2010)
New Revision: 2992

Added:
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/WorkspaceItemDataCopyVisitor.java
   jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/usecases/TestWorkspaceSamenameNodeCopy.java
Modified:
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/WorkspaceImpl.java
Log:
EXOJCR-921: test and new WorkspaceItemDataCopyVisitor added

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/WorkspaceImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/WorkspaceImpl.java	2010-08-26 11:06:23 UTC (rev 2991)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/WorkspaceImpl.java	2010-08-26 12:43:55 UTC (rev 2992)
@@ -33,8 +33,8 @@
 import org.exoplatform.services.jcr.impl.core.query.QueryManagerImpl;
 import org.exoplatform.services.jcr.impl.core.version.VersionImpl;
 import org.exoplatform.services.jcr.impl.dataflow.ItemDataCloneVisitor;
-import org.exoplatform.services.jcr.impl.dataflow.ItemDataCopyVisitor;
 import org.exoplatform.services.jcr.impl.dataflow.ItemDataMoveVisitor;
+import org.exoplatform.services.jcr.impl.dataflow.WorkspaceItemDataCopyVisitor;
 import org.exoplatform.services.jcr.impl.dataflow.session.SessionChangesLog;
 import org.exoplatform.services.jcr.impl.dataflow.session.TransactionableDataManager;
 import org.exoplatform.services.jcr.impl.dataflow.version.VersionHistoryDataHelper;
@@ -208,9 +208,10 @@
          }
       }
 
-      ItemDataCopyVisitor initializer =
-         new ItemDataCopyVisitor((NodeData)destParentNode.getData(), destNodePath.getName().getInternalName(),
-            nodeTypeManager, srcSession.getTransientNodesManager(), false);
+      WorkspaceItemDataCopyVisitor initializer =
+         new WorkspaceItemDataCopyVisitor((NodeData)destParentNode.getData(), destNodePath.getName().getInternalName(),
+            nodeTypeManager, srcSession.getTransientNodesManager(), session.getTransientNodesManager(), false);
+
       srcNode.getData().accept(initializer);
 
       PlainChangesLogImpl changesLog = new PlainChangesLogImpl(initializer.getItemAddStates(), session.getId());
@@ -355,7 +356,7 @@
       InvalidSerializedDataException, RepositoryException
    {
       session.checkLive();
-      
+
       NodeImpl node = (NodeImpl)session.getItem(parentAbsPath);
       if (!node.checkedOut())
       {
@@ -632,8 +633,7 @@
             NodeData vh = (NodeData)dataManager.getItemData(v.getParentIdentifier()); // version
             // parent
             // it's a VH
-            VersionHistoryDataHelper historyHelper =
-               new VersionHistoryDataHelper(vh, dataManager, nodeTypeManager);
+            VersionHistoryDataHelper historyHelper = new VersionHistoryDataHelper(vh, dataManager, nodeTypeManager);
 
             changesLog.addAll(v.restoreLog(destParent, node.getQPath().getName(), historyHelper, session,
                removeExisting, changesLog).getAllStates());
@@ -670,8 +670,7 @@
                NodeData destParent = (NodeData)dataManager.getItemData(node.getParentIdentifier());
                // version parent it's a VH
                NodeData vh = (NodeData)dataManager.getItemData(v.getParentIdentifier());
-               VersionHistoryDataHelper historyHelper =
-                  new VersionHistoryDataHelper(vh, dataManager, nodeTypeManager);
+               VersionHistoryDataHelper historyHelper = new VersionHistoryDataHelper(vh, dataManager, nodeTypeManager);
 
                changesLog.addAll(v.restoreLog(destParent, node.getQPath().getName(), historyHelper, session,
                   removeExisting, changesLog).getAllStates());

Added: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/WorkspaceItemDataCopyVisitor.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/WorkspaceItemDataCopyVisitor.java	                        (rev 0)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/WorkspaceItemDataCopyVisitor.java	2010-08-26 12:43:55 UTC (rev 2992)
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2003-2010 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see<http://www.gnu.org/licenses/>.
+ */
+package org.exoplatform.services.jcr.impl.dataflow;
+
+import org.exoplatform.services.jcr.core.nodetype.NodeTypeDataManager;
+import org.exoplatform.services.jcr.datamodel.InternalQName;
+import org.exoplatform.services.jcr.datamodel.NodeData;
+import org.exoplatform.services.jcr.datamodel.PropertyData;
+import org.exoplatform.services.jcr.impl.core.SessionDataManager;
+
+import javax.jcr.RepositoryException;
+
+/**
+ * This ItemData copy visitor uses two data managers:
+ * <UL>
+ * <LI>srcDataManager - used for service data that comes from source workspace (visit all items on 
+ * source workspace);
+ * <LI>destDataManager - used for adding data to destination workspace (used to check like 
+ * DefaultItemDataVisitor.calculateNewNodePath(), etc);
+ * </UL>
+ * 
+ * Created by The eXo Platform SAS.
+ * 
+ * <br/>Date: 
+ *
+ * @author <a href="karpenko.sergiy at gmail.com">Karpenko Sergiy</a> 
+ * @version $Id: WorkspaceItemDataCopyVisitor.java 111 2010-26-08 11:11:11Z serg $
+ */
+public class WorkspaceItemDataCopyVisitor extends ItemDataCopyVisitor
+{
+   private SessionDataManager srcDataManager;
+
+   /**
+    * Constructor.
+    * 
+    * @param parent - parent node, where copied item tree must be saved;
+    * @param destNodeName - copied nodes destination name;
+    * @param nodeTypeManager - node type manager;
+    * @param srcDataManager - used for service data that comes from source workspace (visit all items
+    *  on source workspace)
+    * @param destDataManager - used for adding data to destination workspace (used to check like
+    *  DefaultItemDataVisitor.calculateNewNodePath(), etc);
+    * @param keepIdentifiers - should we keep items identifiers or not;
+    */
+   public WorkspaceItemDataCopyVisitor(NodeData parent, InternalQName destNodeName,
+      NodeTypeDataManager nodeTypeManager, SessionDataManager srcDataManager, SessionDataManager destDataManager,
+      boolean keepIdentifiers)
+   {
+      super(parent, destNodeName, nodeTypeManager, destDataManager, keepIdentifiers);
+      this.srcDataManager = srcDataManager;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public void visit(NodeData node) throws RepositoryException
+   {
+      try
+      {
+         entering(node, currentLevel);
+         if (maxLevel == -1 || currentLevel < maxLevel)
+         {
+            currentLevel++;
+            for (PropertyData data : srcDataManager.getChildPropertiesData(node))
+               data.accept(this);
+            for (NodeData data : srcDataManager.getChildNodesData(node))
+               data.accept(this);
+            currentLevel--;
+         }
+         leaving(node, currentLevel);
+      }
+      catch (RepositoryException re)
+      {
+         currentLevel = 0;
+         throw re;
+      }
+
+   }
+}

Added: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/usecases/TestWorkspaceSamenameNodeCopy.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/usecases/TestWorkspaceSamenameNodeCopy.java	                        (rev 0)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/usecases/TestWorkspaceSamenameNodeCopy.java	2010-08-26 12:43:55 UTC (rev 2992)
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2003-2010 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see<http://www.gnu.org/licenses/>.
+ */
+package org.exoplatform.services.jcr.usecases;
+
+import org.exoplatform.services.jcr.impl.core.SessionImpl;
+
+import javax.jcr.Item;
+import javax.jcr.Node;
+import javax.jcr.Session;
+
+/**
+ * Created by The eXo Platform SAS.
+ * 
+ * <br/>Date: 
+ *
+ * @author <a href="karpenko.sergiy at gmail.com">Karpenko Sergiy</a> 
+ * @version $Id: TestWorksapceSamenameNodeCopy.java 111 2008-11-11 11:11:11Z serg $
+ */
+public class TestWorkspaceSamenameNodeCopy extends BaseUsecasesTest
+{
+   private String parentNodeName = null;
+
+   public void testWorksapceSamenameNodeCopy() throws Exception
+   {
+      parentNodeName = "myNode";
+
+      // add node to ws workspace
+      Session sessionWS = (SessionImpl)repository.login(credentials, "ws");
+      sessionWS.getRootNode().addNode("myNode", "nt:unstructured");
+      sessionWS.save();
+      assertTrue(sessionWS.itemExists("/myNode"));
+      // copy node to another workspase
+
+      Session sessionWS2 = (SessionImpl)repository.login(credentials, "ws2");
+      sessionWS2.getWorkspace().copy("ws", "/myNode", "/myNode");
+
+      assertTrue(sessionWS2.itemExists("/myNode"));
+   }
+
+   public void tearDown() throws Exception
+   {
+      if (parentNodeName != null)
+      {
+         // clean up workspaces
+         Session sessionWS = (SessionImpl)repository.login(credentials, "ws");
+         Item item = sessionWS.getItem("/" + parentNodeName);
+         item.remove();
+         sessionWS.save();
+
+         Session sessionWS2 = (SessionImpl)repository.login(credentials, "ws2");
+         item = sessionWS2.getItem("/" + parentNodeName);
+         item.remove();
+         sessionWS2.save();
+      }
+      parentNodeName = null;
+      super.tearDown();
+   }
+
+   public void testWorksapceSamenameNodeCopy2() throws Exception
+   {
+      parentNodeName = "parent";
+      // add node to ws workspace
+      Session sessionWS = (SessionImpl)repository.login(credentials, "ws");
+      Node parent1 = sessionWS.getRootNode().addNode("parent");
+      parent1.addNode("myNode", "nt:unstructured");
+      sessionWS.save();
+      assertTrue(sessionWS.itemExists("/parent/myNode"));
+      // copy node to another workspase
+
+      Session sessionWS2 = (SessionImpl)repository.login(credentials, "ws2");
+      Node parent2 = sessionWS2.getRootNode().addNode("parent");
+      sessionWS2.save();
+      sessionWS2.getWorkspace().copy("ws", "/parent/myNode", "/parent/myNode");
+
+      assertTrue(sessionWS2.itemExists("/parent/myNode"));
+   }
+
+   public void testWorksapceSamenameNodeCopyWithSubNodes() throws Exception
+   {
+      parentNodeName = "myNode";
+
+      // add node to ws workspace
+      Session sessionWS = (SessionImpl)repository.login(credentials, "ws");
+      Node n = sessionWS.getRootNode().addNode("myNode", "nt:unstructured");
+      n.addNode("subnode", "nt:unstructured");
+      sessionWS.save();
+      assertTrue(sessionWS.itemExists("/myNode"));
+      assertTrue(sessionWS.itemExists("/myNode/subnode"));
+      // copy node to another workspase
+
+      Session sessionWS2 = (SessionImpl)repository.login(credentials, "ws2");
+      sessionWS2.getWorkspace().copy("ws", "/myNode", "/myNode");
+
+      assertTrue(sessionWS2.itemExists("/myNode"));
+      assertTrue(sessionWS2.itemExists("/myNode/subnode"));
+   }
+}



More information about the exo-jcr-commits mailing list