/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jackrabbit.jcr2spi.nodetype;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.QNodeDefinition;
import org.apache.jackrabbit.spi.QPropertyDefinition;
import org.apache.jackrabbit.spi.QNodeTypeDefinition;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
/**
* <code>EffectiveNodeType</code>...
*/
public interface EffectiveNodeType {
public Name[] getAllNodeTypes();
public Name[] getInheritedNodeTypes();
public Name[] getMergedNodeTypes();
/**
* Determines whether this effective node type representation includes
* (either through inheritance or aggregation) the given node type.
*
* @param nodeTypeName name of node type
* @return <code>true</code> if the given node type is included, otherwise
* <code>false</code>
*/
public boolean includesNodeType(Name nodeTypeName);
/**
* Determines whether this effective node type supports adding
* the specified mixin.
* @param mixin name of mixin type
* @return <code>true</code> if the mixin type is supported, otherwise
* <code>false</code>
*/
public boolean supportsMixin(Name mixin);
/**
* Determines whether this effective node type representation includes
* (either through inheritance or aggregation) all of the given node types.
*
* @param nodeTypeNames array of node type names
* @return <code>true</code> if all of the given node types are included,
* otherwise <code>false</code>
*/
public boolean includesNodeTypes(Name[] nodeTypeNames);
public QNodeDefinition[] getAllQNodeDefinitions();
public QPropertyDefinition[] getAllQPropertyDefinitions();
public QNodeDefinition[] getAutoCreateQNodeDefinitions();
public QPropertyDefinition[] getAutoCreateQPropertyDefinitions();
public QNodeDefinition[] getMandatoryQNodeDefinitions();
public QPropertyDefinition[] getMandatoryQPropertyDefinitions();
public QNodeDefinition[] getNamedQNodeDefinitions(Name name);
public QPropertyDefinition[] getNamedQPropertyDefinitions(Name name);
public QNodeDefinition[] getUnnamedQNodeDefinitions();
public QPropertyDefinition[] getUnnamedQPropertyDefinitions();
/**
* @param name
* @param definitionProvider
* @throws ConstraintViolationException
*/
public void checkAddNodeConstraints(Name name, ItemDefinitionProvider definitionProvider)
throws ConstraintViolationException;
/**
* @param name
* @param nodeTypeDefinition
*@param definitionProvider @throws ConstraintViolationException @throws NoSuchNodeTypeException
*/
public void checkAddNodeConstraints(Name name, QNodeTypeDefinition nodeTypeDefinition, ItemDefinitionProvider definitionProvider)
throws ConstraintViolationException, NoSuchNodeTypeException;
/**
* @param name
* @throws ConstraintViolationException
* @deprecated Use {@link #hasRemoveNodeConstraint(Name)} and
* {@link #hasRemovePropertyConstraint(Name)} respectively.
*/
public void checkRemoveItemConstraints(Name name) throws ConstraintViolationException;
/**
* Returns <code>true</code> if a single node definition matching the
* specified <code>nodeName</code> is either mandatory or protected.
*
* @param nodeName
* @return <code>true</code> if a single node definition matching the
* specified <code>nodeName</code> is either mandatory or protected.
*/
public boolean hasRemoveNodeConstraint(Name nodeName);
/**
* Returns <code>true</code> if a single property definition matching the
* specified <code>propertyName</code> is either mandatory or protected.
*
* @param propertyName
* @return <code>true</code> if a single property definition matching the
* specified <code>propertyName</code> is either mandatory or protected.
*/
public boolean hasRemovePropertyConstraint(Name propertyName);
}