Search in sources :

Example 16 with NodeTypeDefinition

use of javax.jcr.nodetype.NodeTypeDefinition in project jackrabbit by apache.

the class NodeTypeManagerImpl method registerNodeTypes.

// --------------------------------------------------< new JSR 283 methods >
/**
 * Registers or updates the specified <code>Collection</code> of
 * <code>NodeTypeDefinition</code> objects. This method is used to register
 * or update a set of node types with mutual dependencies. Returns an
 * iterator over the resulting <code>NodeType</code> objects.
 * <p>
 * The effect of the method is "all or nothing"; if an error occurs, no node
 * types are registered or updated.
 * <p>
 * Throws an <code>InvalidNodeTypeDefinitionException</code> if a
 * <code>NodeTypeDefinition</code> within the <code>Collection</code> is
 * invalid or if the <code>Collection</code> contains an object of a type
 * other than <code>NodeTypeDefinition</code>.
 * <p>
 * Throws a <code>NodeTypeExistsException</code> if <code>allowUpdate</code>
 * is <code>false</code> and a <code>NodeTypeDefinition</code> within the
 * <code>Collection</code> specifies a node type name that is already
 * registered.
 * <p>
 * Throws an <code>UnsupportedRepositoryOperationException</code> if this
 * implementation does not support node type registration.
 *
 * @param definitions a collection of <code>NodeTypeDefinition</code>s
 * @param allowUpdate a boolean
 * @return the registered node types.
 * @throws InvalidNodeTypeDefinitionException if a
 *  <code>NodeTypeDefinition</code> within the <code>Collection</code> is
 *  invalid or if the <code>Collection</code> contains an object of a type
 *  other than <code>NodeTypeDefinition</code>.
 * @throws NodeTypeExistsException if <code>allowUpdate</code> is
 *  <code>false</code> and a <code>NodeTypeDefinition</code> within the
 *  <code>Collection</code> specifies a node type name that is already
 *  registered.
 * @throws UnsupportedRepositoryOperationException if this implementation
 *  does not support node type registration.
 * @throws RepositoryException if another error occurs.
 * @since JCR 2.0
 */
public NodeTypeIterator registerNodeTypes(NodeTypeDefinition[] definitions, boolean allowUpdate) throws InvalidNodeTypeDefinitionException, NodeTypeExistsException, UnsupportedRepositoryOperationException, RepositoryException {
    // make sure the editing session is allowed to register node types.
    context.getAccessManager().checkRepositoryPermission(Permission.NODE_TYPE_DEF_MNGMT);
    NodeTypeRegistry registry = context.getNodeTypeRegistry();
    // split the node types into new and already registered node types.
    // this way we can register new node types together with already
    // registered node types which make circular dependencies possible
    List<QNodeTypeDefinition> addedDefs = new ArrayList<QNodeTypeDefinition>();
    List<QNodeTypeDefinition> modifiedDefs = new ArrayList<QNodeTypeDefinition>();
    for (NodeTypeDefinition definition : definitions) {
        // convert to QNodeTypeDefinition
        QNodeTypeDefinition def = toNodeTypeDef(definition);
        if (registry.isRegistered(def.getName())) {
            if (allowUpdate) {
                modifiedDefs.add(def);
            } else {
                throw new NodeTypeExistsException(definition.getName());
            }
        } else {
            addedDefs.add(def);
        }
    }
    try {
        ArrayList<NodeType> result = new ArrayList<NodeType>();
        // register new node types
        result.addAll(registerNodeTypes(addedDefs));
        // re-register already existing node types
        for (QNodeTypeDefinition nodeTypeDef : modifiedDefs) {
            registry.reregisterNodeType(nodeTypeDef);
            result.add(getNodeType(nodeTypeDef.getName()));
        }
        return new NodeTypeIteratorAdapter(result);
    } catch (InvalidNodeTypeDefException e) {
        throw new InvalidNodeTypeDefinitionException(e.getMessage(), e);
    }
}
Also used : QNodeTypeDefinition(org.apache.jackrabbit.spi.QNodeTypeDefinition) InvalidNodeTypeDefinitionException(javax.jcr.nodetype.InvalidNodeTypeDefinitionException) NodeTypeExistsException(javax.jcr.nodetype.NodeTypeExistsException) NodeType(javax.jcr.nodetype.NodeType) ArrayList(java.util.ArrayList) QNodeTypeDefinition(org.apache.jackrabbit.spi.QNodeTypeDefinition) NodeTypeDefinition(javax.jcr.nodetype.NodeTypeDefinition) NodeTypeIteratorAdapter(org.apache.jackrabbit.commons.iterator.NodeTypeIteratorAdapter)

Example 17 with NodeTypeDefinition

use of javax.jcr.nodetype.NodeTypeDefinition in project pentaho-platform by pentaho.

the class CredentialsStrategySessionFactory method registerNodeTypes.

/*
   * (non-Javadoc)
   * 
   * @see org.springframework.extensions.jcr.JcrSessionFactory#registerNodeTypes()
   */
protected void registerNodeTypes() throws Exception {
    if (!nodeTypeDefinitionProviders.isEmpty()) {
        Session session = null;
        try {
            session = getAdminSession();
            Workspace ws = session.getWorkspace();
            NodeTypeManager ntMgr = ws.getNodeTypeManager();
            ValueFactory vFac = session.getValueFactory();
            List<NodeTypeDefinition> ntds = new ArrayList<NodeTypeDefinition>();
            for (NodeTypeDefinitionProvider nodeTypeDefinitionProvider : nodeTypeDefinitionProviders) {
                ntds.add(nodeTypeDefinitionProvider.getNodeTypeDefinition(ntMgr, vFac));
            }
            ntMgr.registerNodeTypes(ntds.toArray(new NodeTypeDefinition[0]), true);
        } catch (RepositoryException ex) {
            LOG.error("Error registering nodetypes ", ex.getCause());
        } finally {
            if (session != null) {
                session.logout();
            }
        }
    }
}
Also used : NodeTypeManager(javax.jcr.nodetype.NodeTypeManager) NodeTypeDefinition(javax.jcr.nodetype.NodeTypeDefinition) ArrayList(java.util.ArrayList) RepositoryException(javax.jcr.RepositoryException) ValueFactory(javax.jcr.ValueFactory) Session(javax.jcr.Session) XASession(org.apache.jackrabbit.api.XASession) Workspace(javax.jcr.Workspace)

Aggregations

NodeTypeDefinition (javax.jcr.nodetype.NodeTypeDefinition)17 NodeTypeManager (javax.jcr.nodetype.NodeTypeManager)8 NodeTypeTemplate (javax.jcr.nodetype.NodeTypeTemplate)6 ArrayList (java.util.ArrayList)5 Session (javax.jcr.Session)5 Test (org.junit.Test)5 AbstractRepositoryTest (org.apache.jackrabbit.oak.jcr.AbstractRepositoryTest)4 QNodeTypeDefinition (org.apache.jackrabbit.spi.QNodeTypeDefinition)4 Node (javax.jcr.Node)3 ValueFactory (javax.jcr.ValueFactory)3 ConstraintViolationException (javax.jcr.nodetype.ConstraintViolationException)3 NodeType (javax.jcr.nodetype.NodeType)3 NodeTypeExistsException (javax.jcr.nodetype.NodeTypeExistsException)3 PropertyDefinitionTemplate (javax.jcr.nodetype.PropertyDefinitionTemplate)3 NodeTypeIteratorAdapter (org.apache.jackrabbit.commons.iterator.NodeTypeIteratorAdapter)3 StringReader (java.io.StringReader)2 List (java.util.List)2 Root (org.apache.jackrabbit.oak.api.Root)2 QNodeTypeDefinitionImpl (org.apache.jackrabbit.spi.commons.QNodeTypeDefinitionImpl)2 NodeTypeDefinitionImpl (org.apache.jackrabbit.spi.commons.nodetype.NodeTypeDefinitionImpl)2