/*
* Copyright (C) 2003-2007 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.api.nodetypes;
import org.exoplatform.services.jcr.JcrAPIBaseTest;
import org.exoplatform.services.jcr.impl.core.NodeImpl;
import org.exoplatform.services.jcr.impl.core.SessionImpl;
import java.util.GregorianCalendar;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.version.Version;
/**
* @author <a href="mailto:anatoliy.bazko@gmail.com">Anatoliy Bazko</a>
* @version $Id: TestNodeDefinitionWCM.java 34360 2009-07-22 23:58:59Z tolusha $
*/
public class TestNodeDefinition extends JcrAPIBaseTest
{
public void testNodeTypeWCM1() throws Exception
{
NodeImpl someNode = (NodeImpl)session.getRootNode().addNode("someNode");
someNode.addMixin("mix:referenceable");
NodeImpl exoWebContent = (NodeImpl)session.getRootNode().addNode("exoWebContent", "exo:webContent");
exoWebContent.setProperty("exo:title", "tit");
session.save();
// add nt:file
NodeImpl ntFile1 = (NodeImpl)exoWebContent.addNode("ntFile-1", "nt:file");
NodeImpl jcrContent = (NodeImpl)ntFile1.addNode("jcr:content", "nt:resource");
jcrContent.setProperty("jcr:data", "");
jcrContent.setProperty("jcr:mimeType", "");
jcrContent.setProperty("jcr:lastModified", new GregorianCalendar());
session.save();
exoWebContent.addMixin("exo:actionable");
exoWebContent.setProperty("exo:actions", someNode);
session.save();
// add exo:actionStorage
NodeImpl actionStorage = (NodeImpl)exoWebContent.addNode("actionStorage", "exo:actionStorage");
session.save();
// add nt:file
NodeImpl ntFile2 = (NodeImpl)exoWebContent.addNode("ntFile-2", "nt:file");
jcrContent = (NodeImpl)ntFile2.addNode("jcr:content", "nt:resource");
jcrContent.setProperty("jcr:data", "");
jcrContent.setProperty("jcr:mimeType", "");
jcrContent.setProperty("jcr:lastModified", new GregorianCalendar());
session.save();
SessionImpl session = (SessionImpl)repository.login(credentials, WORKSPACE);
ntFile1 = (NodeImpl)session.getRootNode().getNode("exoWebContent").getNode("ntFile-1");
assertEquals(ntFile1.getDefinition().getRequiredPrimaryTypes()[0].getName(), "nt:base");
ntFile2 = (NodeImpl)session.getRootNode().getNode("exoWebContent").getNode("ntFile-2");
assertEquals(ntFile2.getDefinition().getRequiredPrimaryTypes()[0].getName(), "nt:base");
actionStorage = (NodeImpl)session.getRootNode().getNode("exoWebContent").getNode("actionStorage");
assertEquals(actionStorage.getDefinition().getRequiredPrimaryTypes()[0].getName(), "exo:actionStorage");
}
public void testNodeTypeWCM2() throws Exception
{
Node parent = session.getRootNode().addNode("parent", "exo:newsletterCategory");
parent.addNode("child", "nt:unstructured");
parent.setProperty("exo:newsletterCategoryTitle", "title");
session.save();
}
public void testNTVersionedChild() throws Exception
{
Node folder1 = session.getRootNode().addNode("folder1", "nt:folder");
Node folder2 = folder1.addNode("folder2", "nt:folder");
Node folder3 = folder2.addNode("folder3", "nt:folder");
folder1.addMixin("mix:versionable");
folder3.addMixin("mix:versionable");
session.save();
Version ver1 = folder1.checkin();
folder1.checkout();
folder3 =
(NodeImpl)session.getItem("/jcr:system/jcr:versionStorage/" + ver1.getParent().getUUID()
+ "/1/jcr:frozenNode/folder2/folder3");
try
{
folder3.getDefinition();
}
catch (RepositoryException e)
{
fail();
}
}
public void testNodeTypeNotDeterminedNtFolder() throws Exception
{
Node root = session.getRootNode();
Node folder = root.addNode("abc", "nt:folder");
try
{
folder.addNode("def");
fail("Should be throw ConstraintViolationException, because node type for node \"def\" "
+ "was not defined and default primary type for child nodes in \"nt:folder\" node type is not define.");
}
catch (ConstraintViolationException e)
{
// ok
}
}
public void testNodeTypeNotDeterminedNtFile2() throws Exception
{
Node root = session.getRootNode();
Node folder = root.addNode("abc", "nt:file");
try
{
folder.addNode("jcr:content");
fail("Should be throw ConstraintViolationException, because node type for node \"jcr:content\" "
+ "was not defined and default primary type for child nodes in \"nt:file\" node type is not define.");
}
catch (ConstraintViolationException e)
{
// ok
}
}
/**
* Testing method canSetProperty for class NodeType.
* when we set the multivalue property.......
* @throws Exception some exception that occurred in the test.
*/
public void testSetNotAllowedMultiValueProperty() throws Exception
{
Node n = session.getRootNode().addNode("abc", "nt:folder");
session.save();
assertFalse(n.getPrimaryNodeType().canSetProperty("test", (Value[])null));
}
}