[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