Class ReadOnlyNodeTypeManager
- java.lang.Object
-
- org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager
-
- All Implemented Interfaces:
NodeTypeManager
,DefinitionProvider
,EffectiveNodeTypeProvider
- Direct Known Subclasses:
ReadWriteNodeTypeManager
public abstract class ReadOnlyNodeTypeManager extends Object implements NodeTypeManager, EffectiveNodeTypeProvider, DefinitionProvider
Base implementation of aNodeTypeManager
with support for reading node types from theTree
returned bygetTypes()
. Methods related to node type modifications throwUnsupportedRepositoryOperationException
.
-
-
Constructor Summary
Constructors Constructor Description ReadOnlyNodeTypeManager()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description NodeDefinitionTemplate
createNodeDefinitionTemplate()
Returns an emptyNodeDefinitionTemplate
which can then be used to create a child node definition and attached to aNodeTypeTemplate
.NodeTypeTemplate
createNodeTypeTemplate()
Returns an emptyNodeTypeTemplate
which can then be used to define a node type and passed toNodeTypeManager.registerNodeType
.NodeTypeTemplate
createNodeTypeTemplate(NodeTypeDefinition ntd)
Returns aNodeTypeTemplate
holding the specified node type definition.PropertyDefinitionTemplate
createPropertyDefinitionTemplate()
Returns an emptyPropertyDefinitionTemplate
which can then be used to create a property definition and attached to aNodeTypeTemplate
.NodeTypeIterator
getAllNodeTypes()
Returns an iterator over all available node types (primary and mixin).@NotNull NodeDefinition
getDefinition(@NotNull Tree parent, @NotNull String nodeName)
Returns the node definition for a child node ofparent
namednodeName
with a default primary type.@NotNull PropertyDefinition
getDefinition(@NotNull Tree parent, @NotNull PropertyState property, boolean exactTypeMatch)
Calculates the applicable definition for the property state under the given parent tree.@NotNull NodeDefinition
getDefinition(@NotNull Tree parent, @NotNull Tree targetNode)
Calculates the applicable definition for the child node under the given parent node.@NotNull EffectiveNodeType
getEffectiveNodeType(@NotNull Node node)
Returns all the node types of the given node, in a breadth-first traversal order of the type hierarchy.@NotNull EffectiveNodeType
getEffectiveNodeType(@NotNull Tree tree)
Calculates and returns the effective node types of the given tree.static @NotNull ReadOnlyNodeTypeManager
getInstance(Root root, NamePathMapper namePathMapper)
Return a new instance ofReadOnlyNodeTypeManager
that reads node type information from the tree atNodeTypeConstants.NODE_TYPES_PATH
.NodeTypeIterator
getMixinNodeTypes()
Returns an iterator over all available mixin node types.NodeType
getNodeType(String name)
Returns the named node type.NodeTypeIterator
getPrimaryNodeTypes()
Returns an iterator over all available primary node types.@NotNull NodeDefinition
getRootDefinition()
boolean
hasNodeType(String name)
Returnstrue
if a node type with the specified name is registered.boolean
isNodeType(@NotNull String typeName, @NotNull String superName)
Returnstrue
iftypeName
is of the specified primary node type or mixin type, or a subtype thereof.boolean
isNodeType(@NotNull Tree tree, @NotNull String oakNtName)
Returnstrue
if this tree is of the specified primary node type or mixin type, or a subtype thereof respecting the effective node type of thetree
.boolean
isNodeType(@Nullable String primaryTypeName, @NotNull Iterable<String> mixinTypes, @NotNull String nodeTypeName)
Returnstrue
iftypeName
is of the specified primary node type or mixin type, or a subtype thereof.NodeType
registerNodeType(NodeTypeDefinition ntd, boolean allowUpdate)
This implementation always throws aUnsupportedRepositoryOperationException
.NodeTypeIterator
registerNodeTypes(NodeTypeDefinition[] ntds, boolean allowUpdate)
This implementation always throws aUnsupportedRepositoryOperationException
.void
unregisterNodeType(String name)
This implementation always throws aUnsupportedRepositoryOperationException
.void
unregisterNodeTypes(String[] names)
This implementation always throws aUnsupportedRepositoryOperationException
.-
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.jackrabbit.oak.spi.nodetype.EffectiveNodeTypeProvider
isNodeType
-
-
-
-
Method Detail
-
getInstance
@NotNull public static @NotNull ReadOnlyNodeTypeManager getInstance(Root root, NamePathMapper namePathMapper)
Return a new instance ofReadOnlyNodeTypeManager
that reads node type information from the tree atNodeTypeConstants.NODE_TYPES_PATH
.- Parameters:
root
- The root to read node types from.namePathMapper
- TheNamePathMapper
to use.- Returns:
- a new instance of
ReadOnlyNodeTypeManager
.
-
hasNodeType
public boolean hasNodeType(String name) throws RepositoryException
Description copied from interface:NodeTypeManager
Returnstrue
if a node type with the specified name is registered. Returnsfalse
otherwise.- Specified by:
hasNodeType
in interfaceNodeTypeManager
- Parameters:
name
- aString
.- Returns:
- a
boolean
- Throws:
RepositoryException
- if an error occurs.
-
getNodeType
public NodeType getNodeType(String name) throws RepositoryException
Description copied from interface:NodeTypeManager
Returns the named node type.- Specified by:
getNodeType
in interfaceNodeTypeManager
- Parameters:
name
- the name of an existing node type.- Returns:
- A
NodeType
object. - Throws:
NoSuchNodeTypeException
- if no node type by the given name exists.RepositoryException
- if another error occurs.
-
getAllNodeTypes
public NodeTypeIterator getAllNodeTypes() throws RepositoryException
Description copied from interface:NodeTypeManager
Returns an iterator over all available node types (primary and mixin).- Specified by:
getAllNodeTypes
in interfaceNodeTypeManager
- Returns:
- An
NodeTypeIterator
. - Throws:
RepositoryException
- if an error occurs.
-
getPrimaryNodeTypes
public NodeTypeIterator getPrimaryNodeTypes() throws RepositoryException
Description copied from interface:NodeTypeManager
Returns an iterator over all available primary node types.- Specified by:
getPrimaryNodeTypes
in interfaceNodeTypeManager
- Returns:
- An
NodeTypeIterator
. - Throws:
RepositoryException
- if an error occurs.
-
getMixinNodeTypes
public NodeTypeIterator getMixinNodeTypes() throws RepositoryException
Description copied from interface:NodeTypeManager
Returns an iterator over all available mixin node types. If none are available, an empty iterator is returned.- Specified by:
getMixinNodeTypes
in interfaceNodeTypeManager
- Returns:
- An
NodeTypeIterator
. - Throws:
RepositoryException
- if an error occurs.
-
createNodeTypeTemplate
public NodeTypeTemplate createNodeTypeTemplate() throws RepositoryException
Description copied from interface:NodeTypeManager
Returns an emptyNodeTypeTemplate
which can then be used to define a node type and passed toNodeTypeManager.registerNodeType
.- Specified by:
createNodeTypeTemplate
in interfaceNodeTypeManager
- Returns:
- A
NodeTypeTemplate
. - Throws:
UnsupportedRepositoryOperationException
- if this implementation does not support node type registration.RepositoryException
- if another error occurs.
-
createNodeTypeTemplate
public NodeTypeTemplate createNodeTypeTemplate(NodeTypeDefinition ntd) throws RepositoryException
Description copied from interface:NodeTypeManager
Returns aNodeTypeTemplate
holding the specified node type definition. This template can then be altered and passed toNodeTypeManager.registerNodeType
.- Specified by:
createNodeTypeTemplate
in interfaceNodeTypeManager
- Parameters:
ntd
- aNodeTypeDefinition
.- Returns:
- A
NodeTypeTemplate
. - Throws:
UnsupportedRepositoryOperationException
- if this implementation does not support node type registration.RepositoryException
- if another error occurs.
-
createNodeDefinitionTemplate
public NodeDefinitionTemplate createNodeDefinitionTemplate() throws RepositoryException
Description copied from interface:NodeTypeManager
Returns an emptyNodeDefinitionTemplate
which can then be used to create a child node definition and attached to aNodeTypeTemplate
.- Specified by:
createNodeDefinitionTemplate
in interfaceNodeTypeManager
- Returns:
- A
NodeDefinitionTemplate
. - Throws:
UnsupportedRepositoryOperationException
- if this implementation does not support node type registration.RepositoryException
- if another error occurs.
-
createPropertyDefinitionTemplate
public PropertyDefinitionTemplate createPropertyDefinitionTemplate() throws RepositoryException
Description copied from interface:NodeTypeManager
Returns an emptyPropertyDefinitionTemplate
which can then be used to create a property definition and attached to aNodeTypeTemplate
.- Specified by:
createPropertyDefinitionTemplate
in interfaceNodeTypeManager
- Returns:
- A
PropertyDefinitionTemplate
. - Throws:
UnsupportedRepositoryOperationException
- if this implementation does not support node type registration.RepositoryException
- if another error occurs.
-
registerNodeType
public NodeType registerNodeType(NodeTypeDefinition ntd, boolean allowUpdate) throws RepositoryException
This implementation always throws aUnsupportedRepositoryOperationException
.- Specified by:
registerNodeType
in interfaceNodeTypeManager
- Parameters:
ntd
- anNodeTypeDefinition
.allowUpdate
- a boolean- Returns:
- the registered node type
- Throws:
InvalidNodeTypeDefinitionException
- if theNodeTypeDefinition
is invalid.NodeTypeExistsException
- ifallowUpdate
isfalse
and theNodeTypeDefinition
specifies a node type name that is already registered.UnsupportedRepositoryOperationException
- if this implementation does not support node type registration.RepositoryException
- if another error occurs.
-
registerNodeTypes
public NodeTypeIterator registerNodeTypes(NodeTypeDefinition[] ntds, boolean allowUpdate) throws RepositoryException
This implementation always throws aUnsupportedRepositoryOperationException
.- Specified by:
registerNodeTypes
in interfaceNodeTypeManager
- Parameters:
ntds
- a collection ofNodeTypeDefinition
sallowUpdate
- a boolean- Returns:
- the registered node types.
- Throws:
InvalidNodeTypeDefinitionException
- if aNodeTypeDefinition
within theCollection
is invalid or if theCollection
contains an object of a type other thanNodeTypeDefinition
.NodeTypeExistsException
- ifallowUpdate
isfalse
and aNodeTypeDefinition
within theCollection
specifies a node type name that is already registered.UnsupportedRepositoryOperationException
- if this implementation does not support node type registration.RepositoryException
- if another error occurs.
-
unregisterNodeType
public void unregisterNodeType(String name) throws RepositoryException
This implementation always throws aUnsupportedRepositoryOperationException
.- Specified by:
unregisterNodeType
in interfaceNodeTypeManager
- Parameters:
name
- aString
.- Throws:
UnsupportedRepositoryOperationException
- if this implementation does not support node type registration.NoSuchNodeTypeException
- if no registered node type exists with the specified name.RepositoryException
- if another error occurs.
-
unregisterNodeTypes
public void unregisterNodeTypes(String[] names) throws RepositoryException
This implementation always throws aUnsupportedRepositoryOperationException
.- Specified by:
unregisterNodeTypes
in interfaceNodeTypeManager
- Parameters:
names
- aString
array- Throws:
UnsupportedRepositoryOperationException
- if this implementation does not support node type registration.NoSuchNodeTypeException
- if one of the names listed is not a registered node type.RepositoryException
- if another error occurs.
-
isNodeType
public boolean isNodeType(@NotNull @NotNull Tree tree, @NotNull @NotNull String oakNtName)
Description copied from interface:EffectiveNodeTypeProvider
Returnstrue
if this tree is of the specified primary node type or mixin type, or a subtype thereof respecting the effective node type of thetree
. Returnsfalse
otherwise. Note: caution must be taken while calling this api because it doesn't offer the same strict guarantees as theNode#isNodeType(String)
method in the case where the session doesn't have access to thejcr:mixinTypes
property.- Specified by:
isNodeType
in interfaceEffectiveNodeTypeProvider
- Parameters:
tree
- The tree to be tested.oakNtName
- The internal oak name of the node type to be tested.- Returns:
- true if the specified node is of the given node type.
-
isNodeType
public boolean isNodeType(@Nullable @Nullable String primaryTypeName, @NotNull @NotNull Iterable<String> mixinTypes, @NotNull @NotNull String nodeTypeName)
Description copied from interface:EffectiveNodeTypeProvider
Returnstrue
iftypeName
is of the specified primary node type or mixin type, or a subtype thereof. Returnsfalse
otherwise.- Specified by:
isNodeType
in interfaceEffectiveNodeTypeProvider
- Parameters:
primaryTypeName
- the internal oak name of the node to testmixinTypes
- the internal oak names of the node to test.nodeTypeName
- The internal oak name of the node type to be tested.- Returns:
true
if the specified node type is of the given node type.
-
isNodeType
public boolean isNodeType(@NotNull @NotNull String typeName, @NotNull @NotNull String superName)
Description copied from interface:EffectiveNodeTypeProvider
Returnstrue
iftypeName
is of the specified primary node type or mixin type, or a subtype thereof. Returnsfalse
otherwise.- Specified by:
isNodeType
in interfaceEffectiveNodeTypeProvider
- Parameters:
typeName
- the internal oak name of the node type to testsuperName
- The internal oak name of the super type to be tested for.- Returns:
true
if the specified node type is of the given node type.
-
getEffectiveNodeType
@NotNull public @NotNull EffectiveNodeType getEffectiveNodeType(@NotNull @NotNull Node node) throws RepositoryException
Returns all the node types of the given node, in a breadth-first traversal order of the type hierarchy.- Specified by:
getEffectiveNodeType
in interfaceEffectiveNodeTypeProvider
- Parameters:
node
- node instance- Returns:
- all types of the given node
- Throws:
RepositoryException
- if the type information can not be accessed- See Also:
- JCR 2.0 Specification, Section 3.7.6.5
-
getEffectiveNodeType
@NotNull public @NotNull EffectiveNodeType getEffectiveNodeType(@NotNull @NotNull Tree tree) throws RepositoryException
Description copied from interface:EffectiveNodeTypeProvider
Calculates and returns the effective node types of the given tree. Also see JCR 2.0 Specification, Section 3.7.6.5 for the definition of the effective node type.- Specified by:
getEffectiveNodeType
in interfaceEffectiveNodeTypeProvider
- Parameters:
tree
- the tree- Returns:
- all node types of the given tree
- Throws:
RepositoryException
- if the type information can not be accessed,- See Also:
- JCR 2.0 Specification, Section 3.7.6.5
-
getRootDefinition
@NotNull public @NotNull NodeDefinition getRootDefinition() throws RepositoryException
- Specified by:
getRootDefinition
in interfaceDefinitionProvider
- Throws:
RepositoryException
-
getDefinition
@NotNull public @NotNull NodeDefinition getDefinition(@NotNull @NotNull Tree parent, @NotNull @NotNull String nodeName) throws RepositoryException
Description copied from interface:DefinitionProvider
Returns the node definition for a child node ofparent
namednodeName
with a default primary type. First the non-residual child node definitions ofparent
are checked matching the given node name. Then the residual definitions are checked.- Specified by:
getDefinition
in interfaceDefinitionProvider
- Parameters:
parent
- the parent node.nodeName
- The internal oak name of the child node.- Returns:
- the applicable node definition.
- Throws:
ConstraintViolationException
- If no matching definition can be found.RepositoryException
- If another error occurs.
-
getDefinition
@NotNull public @NotNull NodeDefinition getDefinition(@NotNull @NotNull Tree parent, @NotNull @NotNull Tree targetNode) throws RepositoryException
Description copied from interface:DefinitionProvider
Calculates the applicable definition for the child node under the given parent node.- Specified by:
getDefinition
in interfaceDefinitionProvider
- Parameters:
parent
- The parent node.targetNode
- The child node for which the definition is calculated.- Returns:
- the definition of the target node.
- Throws:
ConstraintViolationException
- If no matching definition can be found.RepositoryException
- If another error occurs.
-
getDefinition
@NotNull public @NotNull PropertyDefinition getDefinition(@NotNull @NotNull Tree parent, @NotNull @NotNull PropertyState property, boolean exactTypeMatch) throws RepositoryException
Description copied from interface:DefinitionProvider
Calculates the applicable definition for the property state under the given parent tree.- Specified by:
getDefinition
in interfaceDefinitionProvider
- Parameters:
parent
- The parent tree.property
- The target property.- Returns:
- the definition for the target property.
- Throws:
ConstraintViolationException
- If no matching definition can be found.RepositoryException
- If another error occurs.
-
-