/* * 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.nodetypes; import org.exoplatform.services.jcr.core.nodetype.NodeTypeDataManager; import org.exoplatform.services.jcr.impl.core.nodetype.NodeTypeManagerImpl; import org.exoplatform.services.jcr.usecases.BaseUsecasesTest; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import javax.jcr.Node; /** * * HOW-TO: It's not simply to run this test, as we need differents in nodes UUIDs in data container. * * Testing with source distribution. Run test once (like 'mvn clean test') its create repository and * register node types. Change source file MultiDbJDBCConnection.java in FIND_NODES_BY_PARENTID * variable use " order by I.ID DESC" instead " order by I.ID ". Be careful to revert changes back * after test. And run the repository software again on existed and initialized database (like 'mvn * test'). On the second phase you'll see repository startup printout with messages like: '>>> Node * types registration cycle X started' '<<< Node types registration cycle X finished' where X is * cycle number of node types registration. More one cycle can be. It's depends on nodetypes count * referenced one-by-one with forward declaration of dependent type. * * Another way to perform test it's change order of nodes returned by data container on * getChildNodesData(). This can be done by direct change of UUIDs in the data storage (database). * * Created by The eXo Platform SAS * * @author <a href="mailto:peter.nedonosko@exoplatform.com.ua">Peter Nedonosko</a> * @version $Id: TestNodeTypeRegisterReferenced.java 11907 2008-03-13 15:36:21Z ksm $ */ public class TestNodeTypeRegisterReferenced extends BaseUsecasesTest { public void testRegisterNodeTypesRelated() throws Exception { byte[] xmlData = readXmlContent("/org/exoplatform/services/jcr/usecases/nodetypes/nodetypes-usecase-test.xml"); ByteArrayInputStream xmlInput = new ByteArrayInputStream(xmlData); NodeTypeManagerImpl ntManager = (NodeTypeManagerImpl)session.getWorkspace().getNodeTypeManager(); ntManager.registerNodeTypes(xmlInput, 0, NodeTypeDataManager.TEXT_XML); String ntName = "exojcrtest:testNodeType__1"; assertNotNull(ntManager.getNodeType(ntName)); Node ntRoot = (Node)repository.getSystemSession().getItem(NodeTypeManagerImpl.NODETYPES_ROOT); assertTrue(ntRoot.hasNode(ntName)); session.getRootNode().addNode("test1", ntName); session.save(); ntName = "exojcrtest:testNodeType__2"; assertNotNull(ntManager.getNodeType(ntName)); ntRoot = (Node)repository.getSystemSession().getItem(NodeTypeManagerImpl.NODETYPES_ROOT); assertTrue(ntRoot.hasNode(ntName)); session.getRootNode().addNode("test2", ntName); session.save(); ntName = "exojcrtest:testNodeType__3"; assertNotNull(ntManager.getNodeType(ntName)); ntRoot = (Node)repository.getSystemSession().getItem(NodeTypeManagerImpl.NODETYPES_ROOT); assertTrue(ntRoot.hasNode(ntName)); Node test3 = session.getRootNode().addNode("test3", ntName); test3.addNode("somePrimaryItem", "exojcrtest:testNodeType_required"); session.save(); ntName = "exojcrtest:testNodeType__4"; assertNotNull(ntManager.getNodeType(ntName)); ntRoot = (Node)repository.getSystemSession().getItem(NodeTypeManagerImpl.NODETYPES_ROOT); assertTrue(ntRoot.hasNode(ntName)); Node test4 = session.getRootNode().addNode("test4", ntName); test4.addNode("somePrimaryItem", "exojcrtest:testNodeType_required"); session.save(); } private byte[] readXmlContent(String fileName) { try { InputStream is = TestNodeTypeRegisterReferenced.class.getResourceAsStream(fileName); ByteArrayOutputStream output = new ByteArrayOutputStream(); int r = is.available(); byte[] bs = new byte[r]; while (r > 0) { r = is.read(bs); if (r > 0) { output.write(bs, 0, r); } r = is.available(); } is.close(); return output.toByteArray(); } catch (Exception e) { log.error("Error read file '" + fileName + "' with NodeTypes. Error:" + e); return null; } } }