/*
 * 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@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"));
   }
}
