org.modeshape.jcr
Class JcrNodeTypeManager

java.lang.Object
  extended by org.modeshape.jcr.JcrNodeTypeManager
All Implemented Interfaces:
javax.jcr.nodetype.NodeTypeManager

@Immutable
public class JcrNodeTypeManager
extends Object
implements javax.jcr.nodetype.NodeTypeManager

Local implementation of @{link NodeTypeManager}. This class handles translation between Names and Strings based on the namespace registry from the session's execution context in order to support transient namespace remappings. All NodeTypes returned by this implementation are wrapped with the execution context of the session to allow proper ongoing handling of names. This implies that reference equality is not a safe test for node type equivalence.

See Also:
RepositoryNodeTypeManager

Method Summary
 NodeDefinitionTemplate createNodeDefinitionTemplate()
          Returns an empty PropertyDefinitionTemplate which can then be used to create a property definition and attached to a NodeTypeTemplate.
 NodeTypeTemplate createNodeTypeTemplate()
          Returns an empty NodeTypeTemplate which can then be used to define a node type and passed to registerNodeType(NodeTypeDefinition, boolean)
 PropertyDefinitionTemplate createPropertyDefinitionTemplate()
          Returns an empty PropertyDefinitionTemplate which can then be used to create a property definition and attached to a NodeTypeTemplate.
 javax.jcr.nodetype.NodeTypeIterator getAllNodeTypes()
          
 javax.jcr.nodetype.NodeTypeIterator getMixinNodeTypes()
          
 org.modeshape.jcr.JcrNodeType getNodeType(String nodeTypeName)
          
 javax.jcr.nodetype.NodeTypeIterator getPrimaryNodeTypes()
          
 boolean isDerivedFrom(String[] testTypeNames, String primaryTypeName, String[] mixinNames)
          Determine if any of the test type names are equal to or have been derived from the primary type or any of the mixins.
 javax.jcr.nodetype.NodeType registerNodeType(NodeTypeDefinition template, boolean allowUpdate)
          Registers a new node type or updates an existing node type using the specified definition and returns the resulting NodeType object.
 javax.jcr.nodetype.NodeTypeIterator registerNodeTypes(Collection<NodeTypeDefinition> templates, boolean allowUpdates)
          Registers or updates the specified Collection of NodeTypeDefinition objects.
 javax.jcr.nodetype.NodeTypeIterator registerNodeTypes(JcrNodeTypeSource source)
          Registers the node types from the given JcrNodeTypeSource.
 void unregisterNodeType(Collection<String> nodeTypeNames)
          Allows the collection of node types to be unregistered if they are not referenced by other node types as supertypes, default primary types of child nodes, or required primary types of child nodes.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

getAllNodeTypes

public javax.jcr.nodetype.NodeTypeIterator getAllNodeTypes()

Specified by:
getAllNodeTypes in interface javax.jcr.nodetype.NodeTypeManager
See Also:
NodeTypeManager.getAllNodeTypes()

getMixinNodeTypes

public javax.jcr.nodetype.NodeTypeIterator getMixinNodeTypes()

Specified by:
getMixinNodeTypes in interface javax.jcr.nodetype.NodeTypeManager
See Also:
NodeTypeManager.getMixinNodeTypes()

getNodeType

public org.modeshape.jcr.JcrNodeType getNodeType(String nodeTypeName)
                                          throws javax.jcr.nodetype.NoSuchNodeTypeException,
                                                 javax.jcr.RepositoryException

Specified by:
getNodeType in interface javax.jcr.nodetype.NodeTypeManager
Throws:
javax.jcr.nodetype.NoSuchNodeTypeException
javax.jcr.RepositoryException
See Also:
NodeTypeManager.getNodeType(java.lang.String)

getPrimaryNodeTypes

public javax.jcr.nodetype.NodeTypeIterator getPrimaryNodeTypes()

Specified by:
getPrimaryNodeTypes in interface javax.jcr.nodetype.NodeTypeManager
See Also:
NodeTypeManager.getPrimaryNodeTypes()

registerNodeType

public javax.jcr.nodetype.NodeType registerNodeType(NodeTypeDefinition template,
                                                    boolean allowUpdate)
                                             throws InvalidNodeTypeDefinitionException,
                                                    NodeTypeExistsException,
                                                    javax.jcr.UnsupportedRepositoryOperationException,
                                                    javax.jcr.AccessDeniedException,
                                                    javax.jcr.RepositoryException
Registers a new node type or updates an existing node type using the specified definition and returns the resulting NodeType object.

Typically, the object passed to this method will be a NodeTypeTemplate (a subclass of NodeTypeDefinition) acquired from createNodeTypeTemplate() and then filled-in with definition information.

Parameters:
template - the new node type to register
allowUpdate - must be false; ModeShape does not allow updating node types at this time
Returns:
the newly created node type
Throws:
InvalidNodeTypeDefinitionException - if the NodeTypeDefinition is invalid
NodeTypeExistsException - if allowUpdate is false and the NodeTypeDefinition specifies a node type name that already exists
javax.jcr.UnsupportedRepositoryOperationException - if allowUpdate is true; ModeShape does not allow updating node types at this time.
javax.jcr.AccessDeniedException - if the current session does not have the register type permission.
javax.jcr.RepositoryException - if another error occurs

registerNodeTypes

public javax.jcr.nodetype.NodeTypeIterator registerNodeTypes(Collection<NodeTypeDefinition> templates,
                                                             boolean allowUpdates)
                                                      throws InvalidNodeTypeDefinitionException,
                                                             NodeTypeExistsException,
                                                             javax.jcr.UnsupportedRepositoryOperationException,
                                                             javax.jcr.AccessDeniedException,
                                                             javax.jcr.RepositoryException
Registers or updates the specified Collection of NodeTypeDefinition objects. This method is used to register or update a set of node types with mutual dependencies. Returns an iterator over the resulting NodeType objects.

The effect of the method is "all or nothing"; if an error occurs, no node types are registered or updated.

Parameters:
templates - the new node types to register
allowUpdates - must be false; ModeShape does not allow updating node types at this time
Returns:
the newly created node types
Throws:
InvalidNodeTypeDefinitionException - if a NodeTypeDefinition within the collection is invalid
NodeTypeExistsException - if allowUpdate is false and a NodeTypeDefinition within the collection specifies a node type name that already exists
javax.jcr.UnsupportedRepositoryOperationException - if allowUpdate is true; ModeShape does not allow updating node types at this time.
javax.jcr.AccessDeniedException - if the current session does not have the register type permission.
javax.jcr.RepositoryException - if another error occurs

registerNodeTypes

public javax.jcr.nodetype.NodeTypeIterator registerNodeTypes(JcrNodeTypeSource source)
                                                      throws InvalidNodeTypeDefinitionException,
                                                             NodeTypeExistsException,
                                                             javax.jcr.UnsupportedRepositoryOperationException,
                                                             javax.jcr.AccessDeniedException,
                                                             javax.jcr.RepositoryException
Registers the node types from the given JcrNodeTypeSource. This method is used to register or update a set of node types with mutual dependencies. Returns an iterator over the resulting NodeType objects.

The effect of the method is "all or nothing"; if an error occurs, no node types are registered or updated.

Parameters:
source - the new node types to register
Returns:
the newly created node types
Throws:
InvalidNodeTypeDefinitionException - if a NodeTypeDefinition within the collection is invalid
NodeTypeExistsException - if allowUpdate is false and a NodeTypeDefinition within the collection specifies a node type name that already exists
javax.jcr.UnsupportedRepositoryOperationException - if allowUpdate is true; ModeShape does not allow updating node types at this time.
javax.jcr.AccessDeniedException - if the current session does not have the register type permission.
javax.jcr.RepositoryException - if another error occurs

unregisterNodeType

public void unregisterNodeType(Collection<String> nodeTypeNames)
                        throws javax.jcr.nodetype.NoSuchNodeTypeException,
                               InvalidNodeTypeDefinitionException,
                               javax.jcr.RepositoryException
Allows the collection of node types to be unregistered if they are not referenced by other node types as supertypes, default primary types of child nodes, or required primary types of child nodes.

NOTE: This method does not check to see if any of the node types are currently being used. Unregistering a node type that is being used will cause the system to become unstable

Parameters:
nodeTypeNames - the names of the node types to be unregistered
Throws:
javax.jcr.nodetype.NoSuchNodeTypeException - if any of the node type names do not correspond to a registered node type
InvalidNodeTypeDefinitionException - if any of the node types with the given names cannot be unregistered because they are the supertype, one of the required primary types, or a default primary type of a node type that is not being unregistered.
javax.jcr.AccessDeniedException - if the current session does not have the register type permission.
javax.jcr.RepositoryException - if any other error occurs

createNodeTypeTemplate

public NodeTypeTemplate createNodeTypeTemplate()
                                        throws javax.jcr.RepositoryException
Returns an empty NodeTypeTemplate which can then be used to define a node type and passed to registerNodeType(NodeTypeDefinition, boolean)

Returns:
an empty NodeTypeTemplate which can then be used to define a node type and passed to registerNodeType(NodeTypeDefinition, boolean).
Throws:
javax.jcr.RepositoryException - if another error occurs

createNodeDefinitionTemplate

public NodeDefinitionTemplate createNodeDefinitionTemplate()
                                                    throws javax.jcr.RepositoryException
Returns an empty PropertyDefinitionTemplate which can then be used to create a property definition and attached to a NodeTypeTemplate.

Returns:
an empty PropertyDefinitionTemplate which can then be used to create a property definition and attached to a NodeTypeTemplate.
Throws:
javax.jcr.RepositoryException - if another error occurs

createPropertyDefinitionTemplate

public PropertyDefinitionTemplate createPropertyDefinitionTemplate()
                                                            throws javax.jcr.RepositoryException
Returns an empty PropertyDefinitionTemplate which can then be used to create a property definition and attached to a NodeTypeTemplate.

Returns:
an empty PropertyDefinitionTemplate which can then be used to create a property definition and attached to a NodeTypeTemplate.
Throws:
javax.jcr.RepositoryException - if another error occurs

isDerivedFrom

public boolean isDerivedFrom(String[] testTypeNames,
                             String primaryTypeName,
                             String[] mixinNames)
                      throws javax.jcr.RepositoryException
Determine if any of the test type names are equal to or have been derived from the primary type or any of the mixins.

Parameters:
testTypeNames - the names of the types or mixins being tested against (never null)
primaryTypeName - the primary type name (never null)
mixinNames - the mixin names (may be null)
Returns:
true if at least one test type name is equal to or derived from the primary type or one of the mixins
Throws:
javax.jcr.RepositoryException - if there is an exception obtaining node types
IllegalArgumentException - if testTypeNames is null or empty or if primaryTypeName is null or zero length


Copyright © 2008-2010 JBoss, a division of Red Hat. All Rights Reserved.