org.exoplatform.services.jcr.api.namespaces.TestNamespaceRegistry.java Source code

Java tutorial

Introduction

Here is the source code for org.exoplatform.services.jcr.api.namespaces.TestNamespaceRegistry.java

Source

/*
 * 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.api.namespaces;

import org.apache.commons.lang.ArrayUtils;
import org.apache.lucene.search.BooleanQuery;
import org.exoplatform.services.jcr.JcrAPIBaseTest;
import org.exoplatform.services.jcr.core.WorkspaceContainerFacade;
import org.exoplatform.services.jcr.impl.core.ExtendedNamespaceRegistry;
import org.exoplatform.services.jcr.impl.core.NamespaceRegistryImpl;
import org.exoplatform.services.jcr.impl.core.NodeImpl;
import org.exoplatform.services.jcr.impl.core.query.RepositoryIndexSearcherHolder;

import java.util.Arrays;
import java.util.Set;

import javax.jcr.NamespaceException;
import javax.jcr.Node;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;

/**
 * Created by The eXo Platform SAS.
 * 
 * @author <a href="mailto:gennady.azarenkov@exoplatform.com">Gennady
 *         Azarenkov</a>
 * @version $Id: TestNamespaceRegistry.java 11907 2008-03-13 15:36:21Z ksm $
 */
public class TestNamespaceRegistry extends JcrAPIBaseTest {

    protected ExtendedNamespaceRegistry namespaceRegistry;
    private RepositoryIndexSearcherHolder indexSearcherHolder;

    public void initRepository() throws RepositoryException {
        workspace = session.getWorkspace();
        namespaceRegistry = (ExtendedNamespaceRegistry) workspace.getNamespaceRegistry();
        try {
            namespaceRegistry.getURI("newMapping");
        } catch (NamespaceException e) {
            // not found
            namespaceRegistry.registerNamespace("newMapping", "http://dumb.uri/jcr");
        }
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        WorkspaceContainerFacade wsc = repository.getWorkspaceContainer(session.getWorkspace().getName());

        indexSearcherHolder = (RepositoryIndexSearcherHolder) wsc.getComponent(RepositoryIndexSearcherHolder.class);

        //indexSearcherHolder = (RepositoryIndexSearcherHolder)container.getComponentInstanceOfType(RepositoryIndexSearcherHolder.class);

    }

    public void testGetPrefixes() throws RepositoryException {
        // namespaceRegistry.registerNamespace("newMapping", "http://dumb.uri/jcr");
        String[] namespaces = { "jcr", "nt", "mix", "", "sv", "exo", "newMapping" };

        String[] prefixes = namespaceRegistry.getPrefixes();

        for (int i = 0; i < namespaces.length; i++) {

            String namespace = namespaces[i];
            assertTrue("not found " + namespace, ArrayUtils.contains(prefixes, namespace));
        }
        assertTrue(prefixes.length >= 7);

        assertTrue(Arrays.asList(session.getWorkspace().getNamespaceRegistry().getPrefixes())
                .containsAll(Arrays.asList(namespaceRegistry.getPrefixes())));
    }

    public void testGetURIs() throws RepositoryException {
        // namespaceRegistry.registerNamespace("newMapping", "http://dumb.uri/jcr");
        String[] namespacesURIs = { "http://www.jcp.org/jcr/1.0", "http://www.jcp.org/jcr/nt/1.0",
                "http://www.jcp.org/jcr/mix/1.0", "", "http://www.jcp.org/jcr/sv/1.0",
                "http://www.exoplatform.com/jcr/exo/1.0", "http://dumb.uri/jcr" };

        String[] uris = namespaceRegistry.getURIs();
        for (int i = 0; i < namespacesURIs.length; i++) {
            String namespacesURI = namespacesURIs[i];
            assertTrue("not found " + namespacesURI, ArrayUtils.contains(uris, namespacesURI));
        }
    }

    public void testGetURI() throws RepositoryException {
        // namespaceRegistry.registerNamespace("newMapping", "http://dumb.uri/jcr");

        assertNotNull(namespaceRegistry.getURI("mix"));
        assertNotNull(namespaceRegistry.getURI("newMapping"));
    }

    public void testGetPrefix() throws RepositoryException {
        // namespaceRegistry.registerNamespace("newMapping", "http://dumb.uri/jcr");

        assertNotNull(namespaceRegistry.getPrefix("http://www.jcp.org/jcr/mix/1.0"));
        assertEquals("mix", namespaceRegistry.getPrefix("http://www.jcp.org/jcr/mix/1.0"));
        assertNotNull(namespaceRegistry.getPrefix("http://dumb.uri/jcr"));

        try {
            namespaceRegistry.getPrefix("http://dumb.uri/jcr2");
            fail("exception should have been thrown");
        } catch (RepositoryException e) {
        }

    }

    // ///////////////// LEVEL 2

    public void testBuiltInNamespace() throws RepositoryException {
        try {
            namespaceRegistry.registerNamespace("jcr", null);
            fail("exception should have been thrown");
        } catch (NamespaceException e) {
        }
        try {
            namespaceRegistry.registerNamespace("nt", null);
            fail("exception should have been thrown");
        } catch (NamespaceException e) {
        }
        try {
            namespaceRegistry.registerNamespace("mix", null);
            fail("exception should have been thrown");
        } catch (NamespaceException e) {
        }

        try {
            namespaceRegistry.registerNamespace("sv", null);
            fail("exception should have been thrown");
        } catch (NamespaceException e) {
        }

        try {
            namespaceRegistry.registerNamespace("jcr", "http://dumb.uri/jcr");
            fail("exception should have been thrown");
        } catch (NamespaceException e) {
        }

        try {
            namespaceRegistry.registerNamespace("xml-started", "http://dumb.uri/jcr");
            fail("exception should have been thrown");
        } catch (NamespaceException e) {
        }

        try {
            namespaceRegistry.unregisterNamespace("jcr");
            fail("exception should have been thrown");
        } catch (NamespaceException e) {
        }
    }

    public void testRegisterNamespace() throws RepositoryException {
        // namespaceRegistry.registerNamespace("newMapping", "http://dumb.uri/jcr");
        assertNotNull(namespaceRegistry.getURI("newMapping"));
        assertEquals("http://dumb.uri/jcr", namespaceRegistry.getURI("newMapping"));

        NodeImpl n = (NodeImpl) root.addNode("newMapping:test", "nt:unstructured");
        root.save();
        n = (NodeImpl) root.getNode("newMapping:test");
        n.remove();
        root.save();

        // [PN] Unregisteration of node types its not supported in eXo JCR.
        // (see http://jira.exoplatform.org/browse/JCR-43)
        namespaceRegistry.unregisterNamespace("newMapping");
        try {
            root.addNode("newMapping:test1", "nt:unstructured");
            root.save();
            fail("exception should have been thrown");
        } catch (RepositoryException e) {
        }

        try {
            assertNull(namespaceRegistry.getURI("newMapping"));
            fail("exception should have been thrown");
        } catch (NamespaceException e) {
        }

    }

    public void testReRegiterNamespace() throws RepositoryException {

        // (see http://jira.exoplatform.org/browse/JCR-43)

        namespaceRegistry.registerNamespace("newMapping", "http://dumb.uri/jcr");
        namespaceRegistry.registerNamespace("newMapping2", "http://dumb.uri/jcr");
        try {
            assertNull(namespaceRegistry.getURI("newMapping"));
            fail("exception should have been thrown");
        } catch (NamespaceException e) {
        }
        assertNotNull(namespaceRegistry.getURI("newMapping2"));
        assertEquals("http://dumb.uri/jcr", namespaceRegistry.getURI("newMapping2"));
    }

    public void testQueryNsPropName() throws Exception {
        namespaceRegistry.registerNamespace("testuri", "http://testquery.uri/www");
        namespaceRegistry.registerNamespace("blahtesturi", "http://blahtesturi.uri/www");
        Node test1 = root.addNode("NodeName1");
        test1.setProperty("testuriprop", "v1");
        Node test2 = root.addNode("nodeName2");
        test2.setProperty("testuri:prop", "v2");
        Node test3 = root.addNode("nodeName3");
        test3.setProperty("blahtesturi:prop", "v2");
        test3.setProperty("blahtesturi", "v2");
        session.save();

        Set<String> nodes = indexSearcherHolder.getNodesByUri("http://testquery.uri/www"); //((NamespaceRegistryImpl)namespaceRegistry).getNodes("testuri");
        assertEquals(1, nodes.size());
        assertFalse(nodes.contains(((NodeImpl) test1).getData().getIdentifier()));
        assertFalse(nodes.contains(((NodeImpl) test3).getData().getIdentifier()));
        assertTrue(nodes.contains(((NodeImpl) test2).getData().getIdentifier()));
    }

    public void testQueryNsNodeName() throws Exception {
        Node test1 = root.addNode("testuri:testNodeName");
        Node test2 = root.addNode("testuriNodeName1");
        Node test3 = root.addNode("blahtesturiNodeName1");
        session.save();

        Set<String> nodes = indexSearcherHolder.getNodesByUri("http://testquery.uri/www"); //((NamespaceRegistryImpl)namespaceRegistry).getNodes("testuri");
        assertEquals(1, nodes.size());
        assertTrue(nodes.contains(((NodeImpl) test1).getData().getIdentifier()));
        assertFalse(nodes.contains(((NodeImpl) test2).getData().getIdentifier()));
        assertFalse(nodes.contains(((NodeImpl) test3).getData().getIdentifier()));

    }

    public void testQueryNsNodePathValue() throws Exception {
        Node test1 = root.addNode("NodeName1");
        test1.setProperty("tprop", valueFactory.createValue("/rr/testuri:node/", PropertyType.PATH));
        Node test2 = root.addNode("nodeName2");
        test2.setProperty("prop", "v2");
        session.save();

        Set<String> nodes = indexSearcherHolder.getNodesByUri("http://testquery.uri/www"); //((NamespaceRegistryImpl)namespaceRegistry).getNodes("testuri");
        assertEquals(1, nodes.size());
        assertTrue(nodes.contains(((NodeImpl) test1).getData().getIdentifier()));
        assertFalse(nodes.contains(((NodeImpl) test2).getData().getIdentifier()));
    }

    public void testQueryNsNodeNameValue() throws Exception {
        Node test1 = root.addNode("NodeName1");
        test1.setProperty("tprop", valueFactory.createValue("testuri:node", PropertyType.NAME));
        Node test2 = root.addNode("nodeName2");
        test2.setProperty("prop", "v2");

        Node test3 = root.addNode("nodeName2");
        test3.setProperty("prop", "blablatesturi:v2");
        session.save();

        Set<String> nodes = indexSearcherHolder.getNodesByUri("http://testquery.uri/www"); //((NamespaceRegistryImpl)namespaceRegistry).getNodes("testuri");
        assertEquals(1, nodes.size());
        assertTrue(nodes.contains(((NodeImpl) test1).getData().getIdentifier()));
        assertFalse(nodes.contains(((NodeImpl) test2).getData().getIdentifier()));
        assertFalse(nodes.contains(((NodeImpl) test3).getData().getIdentifier()));
    }

    public void testTooManyFields() {
        try {
            namespaceRegistry.registerNamespace("tmf", "http://www.tmf.org/jcr");

            int defClausesCount = BooleanQuery.getMaxClauseCount();
            Node tr = root.addNode("testRoot");
            for (int i = 0; i < defClausesCount + 10; i++) {
                tr.setProperty("prop" + i, i);
            }
            session.save();
            // ok
        } catch (RepositoryException e) {
            e.printStackTrace();
            fail();
        }
        try {
            namespaceRegistry.unregisterNamespace("tmf");
        } catch (NamespaceException e) {
            e.printStackTrace();
            fail();
        } catch (RepositoryException e) {
            e.printStackTrace();
            fail();
        }
    }

    public void testIsDefaultPrefix() {
        assertTrue(((NamespaceRegistryImpl) namespaceRegistry).isDefaultPrefix("nt"));
        assertFalse(((NamespaceRegistryImpl) namespaceRegistry).isDefaultPrefix("somePrefix"));
    }

    public void testIsDefaultNamespace() throws NamespaceException, RepositoryException {
        NamespaceRegistryImpl nameSpace = (NamespaceRegistryImpl) namespaceRegistry;
        String uri = workspace.getNamespaceRegistry().getURI("nt");

        assertTrue(nameSpace.isDefaultNamespace(uri));
        assertFalse(nameSpace.isDefaultNamespace(" "));
    }

    public void testValidateNamespace() throws RepositoryException {
        try {
            ((NamespaceRegistryImpl) namespaceRegistry).validateNamespace("some:text", "");
            fail();
        } catch (RepositoryException e) {
        }

        try {
            ((NamespaceRegistryImpl) namespaceRegistry).validateNamespace("nt", null);
            fail();
        } catch (NamespaceException e) {
        }
    }
}