/*
* 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.QPropertyDefinition;
import org.apache.jackrabbit.spi.QNodeDefinition;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.PropertyId;
import org.apache.jackrabbit.spi.NodeId;
import javax.jcr.RepositoryException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.nodetype.ConstraintViolationException;
/**
* <code>ItemDefinitionProvider</code>...
*/
public interface ItemDefinitionProvider {
/**
* Returns the <code>QNodeDefinition</code> for the root node.
*
* @return the <code>QNodeDefinition</code> for the root node.
* @throws RepositoryException
*/
public QNodeDefinition getRootNodeDefinition() throws RepositoryException;
/**
* Returns the <code>QNodeDefinition</code> for the specified node state.
*
* @param parentNodeTypeNames
* @param nodeName
* @param ntName
* @param nodeId
* @return the <code>QNodeDefinition</code> for the specified node state.
* @throws RepositoryException
*/
public QNodeDefinition getQNodeDefinition(Name[] parentNodeTypeNames,
Name nodeName, Name ntName,
NodeId nodeId) throws RepositoryException;
/**
* Returns the applicable child node definition for a child node with the
* specified name and node type.
*
* @param parentNodeTypeNames
* @param name
* @param nodeTypeName
* @return
* @throws NoSuchNodeTypeException
* @throws ConstraintViolationException if no applicable child node definition
* could be found
*/
public QNodeDefinition getQNodeDefinition(Name[] parentNodeTypeNames,
Name name, Name nodeTypeName)
throws NoSuchNodeTypeException, ConstraintViolationException;
/**
* Returns the applicable child node definition for a child node with the
* specified name and node type.
*
* @param ent
* @param name
* @param nodeTypeName
* @return
* @throws NoSuchNodeTypeException
* @throws ConstraintViolationException if no applicable child node definition
* could be found
*/
public QNodeDefinition getQNodeDefinition(EffectiveNodeType ent,
Name name, Name nodeTypeName)
throws NoSuchNodeTypeException, ConstraintViolationException;
/**
* Returns the <code>QPropertyDefinition</code> for the specified property state.
* @param propertyState
* @return the <code>QPropertyDefinition</code> for the specified property state.
* @throws RepositoryException
*/
/**
* Returns the <code>QPropertyDefinition</code> for the specified parameters.
*
* @param parentNodeTypeNames
* @param propertyName
* @param propertyType
* @param isMultiValued
* @param propertyId Used to retrieve the definition from the persistent
* layer if it cannot be determined from the information present.
* @return
* @throws RepositoryException
*/
public QPropertyDefinition getQPropertyDefinition(Name[] parentNodeTypeNames,
Name propertyName,
int propertyType,
boolean isMultiValued,
PropertyId propertyId) throws RepositoryException;
/**
* Returns the applicable property definition for a property with the
* specified name, type and multiValued characteristic. If there more than
* one applicable definitions that would apply to the given params a
* ConstraintViolationException is thrown.
*
* @param ntName
* @param propName
* @param type
* @param multiValued
* @return
* @throws NoSuchNodeTypeException If no node type with name <code>ntName</code>
* exists.
* @throws ConstraintViolationException if no applicable property definition
* could be found
*/
public QPropertyDefinition getQPropertyDefinition(Name ntName,
Name propName, int type,
boolean multiValued)
throws ConstraintViolationException, NoSuchNodeTypeException;
/**
* Returns the applicable property definition for a property with the
* specified name, type and multiValued characteristic. If there more than
* one applicable definitions then the following rules are applied:
* <ul>
* <li>named definitions are preferred to residual definitions</li>
* <li>definitions with specific required type are preferred to definitions
* with required type UNDEFINED</li>
* </ul>
*
* @param parentNodeTypeNames
* @param name
* @param type
* @param multiValued
* @return
* @throws ConstraintViolationException if no applicable property definition
* could be found.
*/
public QPropertyDefinition getQPropertyDefinition(Name[] parentNodeTypeNames,
Name name, int type,
boolean multiValued)
throws ConstraintViolationException, NoSuchNodeTypeException;
/**
* Returns the applicable property definition for a property with the
* specified name and type. The multiValued flag is not taken into account
* in the selection algorithm. Other than
* <code>{@link #getQPropertyDefinition(Name[], Name, int, boolean)}</code>
* this method does not take the multiValued flag into account in the
* selection algorithm. If there more than one applicable definitions then
* the following rules are applied:
* <ul>
* <li>named definitions are preferred to residual definitions</li>
* <li>definitions with specific required type are preferred to definitions
* with required type UNDEFINED</li>
* <li>single-value definitions are preferred to multiple-value definitions</li>
* </ul>
*
* @param parentNodeTypeNames
* @param name
* @param type
* @return
* @throws ConstraintViolationException if no applicable property definition
* could be found
*/
public QPropertyDefinition getQPropertyDefinition(Name[] parentNodeTypeNames,
Name name, int type)
throws ConstraintViolationException, NoSuchNodeTypeException;
}