/* * Copyright (C) 2009 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.services.jcr.usecases.version; import org.exoplatform.services.jcr.usecases.BaseUsecasesTest; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import javax.jcr.ImportUUIDBehavior; import javax.jcr.Node; import javax.jcr.version.Version; /** * Created by The eXo Platform SARL Author : Anh Nguyen ntuananh.vn@gmail.com Dec 24, 2007 */ public class ErrorsRelateToRestoreVersionTest extends BaseUsecasesTest { private boolean runTest = false; public void testImportVersionableNodeThenRestore() throws Exception { // Case 2 in ECM JIRA // http://jira.exoplatform.org/browse/ECM-1160 runTest = false; if (!runTest) { return; } Node node1 = root.addNode("Node1", "nt:unstructured"); node1.addMixin("mix:versionable"); root.save(); // Create 1 versions Version node1ver1 = node1.checkin(); node1.checkout(); // export node ByteArrayOutputStream bos = new ByteArrayOutputStream(); session.exportDocumentView(node1.getPath(), bos, false, false); // create new node Node node2 = root.addNode("Node2", "nt:unstructured"); // import docview of node1 to new node ByteArrayInputStream xmlInputStream = new ByteArrayInputStream(bos.toByteArray()); session.importXML(node2.getPath(), xmlInputStream, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW); session.save(); // Create 1 version for node2 Node node1clone = node2.getNode("Node1"); Version node2ver1 = node1clone.checkin(); node1clone.checkout(); // Create 1 version for node1 Version node1newver = node1.checkin(); node1.checkout(); // Resore Node1 to version 2 Version node1ver2 = node1.getVersionHistory().getVersion("2"); // Error node1.restore(node1ver2, true); // Remove node1 node1.remove(); root.save(); } public void testCase9() throws Exception { runTest = true; if (!runTest) { return; } Node testNode = root.addNode("Test", "nt:unstructured"); root.save(); // Create sub node Node doc1 = testNode.addNode("Doc1", "nt:unstructured"); root.save(); // Create 1 versions for Doc1 Node doc1.addMixin("mix:versionable"); doc1.save(); root.save(); // Create 2 version Version ver1doc = doc1.checkin(); doc1.checkout(); Version ver2doc = doc1.checkin(); doc1.checkout(); root.save(); // Restore ver 1 doc1.restore(ver1doc, true); // Create 1 versions for Test Node testNode.addMixin("mix:versionable"); testNode.save(); root.save(); // Create 2 version Version ver1test = testNode.checkin(); testNode.checkout(); Version ver2test = testNode.checkin(); testNode.checkout(); root.save(); // Restore ver 1 testNode.restore(ver1test, true); // Test rename testNode String newName = "_new"; try { // Error here session.move(testNode.getPath(), testNode.getPath() + newName); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); } } public void testVersionMovedSubnode() throws Exception { // Case 5 in ECM JIRA // http://jira.exoplatform.org/browse/ECM-1160 runTest = false; if (!runTest) { return; } Node testNode = root.addNode("Test", "nt:unstructured"); root.save(); // Create 1 versions for Test Node testNode.addMixin("mix:versionable"); testNode.save(); root.save(); // Create version 1 testNode.checkin(); testNode.checkout(); root.save(); // Create sub node Node doc2 = testNode.addNode("Doc2", "nt:unstructured"); Node doc1 = testNode.addNode("Doc1", "nt:unstructured"); root.save(); // Create Versions 2,3 for Test Node testNode.checkin(); testNode.checkout(); Version ver3 = testNode.checkin(); testNode.checkout(); root.save(); // Test rename testNode String testName = "_test"; try { // OK session.move(testNode.getPath(), testNode.getPath() + testName); } catch (Exception e) { e.printStackTrace(); } // Move subnodes Node tempNode = root.addNode("Temp"); root.save(); try { session.getWorkspace().move(doc1.getPath(), tempNode.getPath() + "new"); session.getWorkspace().move(doc2.getPath(), tempNode.getPath() + "new"); session.save(); } catch (Exception e) { e.printStackTrace(); } // Create version 4 Version ver4 = testNode.checkin(); testNode.checkout(); root.save(); // Restore testNode to version3 try { testNode.restore(ver3, true); root.save(); session.save(); } catch (Exception e) { e.printStackTrace(); } // Test rename testNode String newName = "_new"; try { // Error here session.move(testNode.getPath(), testNode.getPath() + newName); } catch (Exception e) { e.printStackTrace(); } } public void testActiveVersionSubnode() throws Exception { // Case 10 in ECM JIRA // http://jira.exoplatform.org/browse/ECM-1160 runTest = false; if (!runTest) { return; } Node testNode = root.addNode("Test", "nt:unstructured"); root.save(); // Create sub node Node doc1 = testNode.addNode("Doc1", "nt:unstructured"); root.save(); // Create 1 versions for Test Node testNode.addMixin("mix:versionable"); testNode.save(); Version testNodVer1 = testNode.checkin(); testNode.checkout(); root.save(); assertFalse(doc1.isNodeType("mix:versionable")); assertTrue(doc1.canAddMixin("mix:versionable")); // Create 2 versions for Sub Node doc1.addMixin("mix:versionable"); doc1.save(); doc1.checkin(); doc1.checkout(); doc1.checkin(); doc1.checkout(); root.save(); // Create version 2 for Test Node Version testNodVer2 = testNode.checkin(); testNode.checkout(); assertTrue(doc1.isNodeType("mix:versionable")); assertFalse(doc1.canAddMixin("mix:versionable")); // Restore testNode to version1 testNode.restore(testNodVer1, true); root.save(); session.save(); doc1 = root.getNode("Test").getNode("Doc1"); assertFalse(doc1.isNodeType("mix:versionable")); assertTrue(doc1.canAddMixin("mix:versionable")); // Add mix:versionable for this node // doc1.addMixin("mix:versionable"); // Clean testNode.remove(); root.save(); } public void testImportNodeThenRestore() throws Exception { // Case 11 in ECM JIRA // http://jira.exoplatform.org/browse/ECM-1160 runTest = false; if (!runTest) { return; } Node node1 = root.addNode("Node1", "nt:unstructured"); // Active vesrion to node node1.addMixin("mix:versionable"); root.save(); // Create some nodes to node1 node1.addNode("Node1_1", "nt:unstructured"); node1.addNode("Node1_2", "nt:unstructured"); node1.save(); // Create 1 versions Version ver1 = node1.checkin(); node1.checkout(); node1.save(); // export node ByteArrayOutputStream bos = new ByteArrayOutputStream(); session.exportDocumentView(node1.getPath(), bos, false, false); // import docview of node1 ByteArrayInputStream xmlInputStream = new ByteArrayInputStream(bos.toByteArray()); session.importXML(node1.getPath(), xmlInputStream, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW); session.save(); // Create version 2 for node1 Version ver2 = node1.checkin(); node1.checkout(); node1.save(); assertNotNull(node1.getNode("Node1")); assertNotNull(node1.getNode("Node1").getNode("Node1_1")); assertNotNull(node1.getNode("Node1").getNode("Node1_2")); // Resore Node1 to version 1 node1.restore(ver1, true); // Resore Node1 to version 2 node1.restore(ver2, true); assertNotNull(node1.getNode("Node1")); assertNotNull(node1.getNode("Node1").getNode("Node1_1")); assertNotNull(node1.getNode("Node1").getNode("Node1_2")); // Clean node1.remove(); root.save(); } }