/* * 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.hierarchy; import org.apache.jackrabbit.jcr2spi.state.NodeState; import org.apache.jackrabbit.jcr2spi.state.PropertyState; import org.apache.jackrabbit.spi.ItemId; import org.apache.jackrabbit.spi.NodeId; import org.apache.jackrabbit.spi.Path; import org.apache.jackrabbit.spi.PropertyId; import javax.jcr.ItemNotFoundException; import javax.jcr.PathNotFoundException; import javax.jcr.RepositoryException; /** * <code>HierarchyManager</code>... */ public interface HierarchyManager { /** * Dispose this <code>HierarchyManager</code> */ public void dispose(); /** * @return the root entry. */ public NodeEntry getRootEntry(); /** * Lookup of <code>HierarchyEntry</code> by its workspace Id that may be different * if a entry (or any of its ancestors) has been transiently moved or * reordered. * <p> * If the Hierarchy already lists the entry with the given workspaceItemId it is * returned otherwise <code>null</code>. See {@link #getNodeEntry(NodeId)} * or {@link #getPropertyEntry(PropertyId)} for methods that resolves the * ItemId including lookup in the persistence layer if the entry has not been * loaded yet. * * @param workspaceItemId * @return the HierarchyEntry with the given <code>workspaceItemId</code>. */ public HierarchyEntry lookup(ItemId workspaceItemId); /** * Lookup of <code>HierarchyEntry</code> by its workspace path that may be different * if a entry (or any of its ancestors) has been transiently moved or * reordered. * <p> * If the Hierarchy already lists the entry with the given path it is * returned otherwise <code>null</code>. See {@link #getNodeEntry(Path)} * or {@link #getPropertyEntry(Path)} for methods that resolves the path * including lookup in the persistence layer if the entry has not been loaded yet. * * @param workspacePath * @return the HierarchyEntry with the given <code>workspacePath</code>. */ public HierarchyEntry lookup(Path workspacePath); /** * Resolves a itemId into a <code>HierarchyEntry</code>. * * @param nodeId * @return * @throws PathNotFoundException * @throws RepositoryException */ public NodeEntry getNodeEntry(NodeId nodeId) throws ItemNotFoundException, RepositoryException; /** * Resolves a path into a <code>NodeEntry</code>. * * @param qPath * @return * @throws PathNotFoundException * @throws RepositoryException */ public NodeEntry getNodeEntry(Path qPath) throws PathNotFoundException, RepositoryException; /** * Resolves a propertyId into a <code>PropertyEntry</code>. * * @param propertyId * @return * @throws PathNotFoundException * @throws RepositoryException */ public PropertyEntry getPropertyEntry(PropertyId propertyId) throws ItemNotFoundException, RepositoryException; /** * Resolves a path into a <code>PropertyEntry</code>. * * @param qPath * @return * @throws PathNotFoundException * @throws RepositoryException */ public PropertyEntry getPropertyEntry(Path qPath) throws PathNotFoundException, RepositoryException; /** * Retrieves the <code>NodeEntry</code> corresponding to the given * path and resolves it to the underlying <code>NodeState</code>. * * @param qPath * @return * @throws PathNotFoundException * @throws RepositoryException */ public NodeState getNodeState(Path qPath) throws PathNotFoundException, RepositoryException; /** * Retrieves the <code>PropertyEntry</code> corresponding to the given * path and resolves it to the underlying <code>PropertyState</code>. * * @param qPath * @return * @throws PathNotFoundException * @throws RepositoryException */ public PropertyState getPropertyState(Path qPath) throws PathNotFoundException, RepositoryException; /** * Returns the depth of the specified item. The depth reflects the * absolute hierarchy level. * * @param hierarchyEntry * @return the depth of the specified item * @throws RepositoryException if another error occurs */ public int getDepth(HierarchyEntry hierarchyEntry) throws ItemNotFoundException, RepositoryException; /** * Returns the depth of the specified descendant relative to the given * ancestor. If <code>ancestor</code> and <code>descendant</code> * denote the same item 0 is returned. If <code>ancestor</code> does not * denote an ancestor -1 is returned. * * @param ancestor NodeEntry that must be an ancestor of the descendant * @param descendant HierarchyEntry * @return the relative depth; -1 if <code>ancestor</code> does not * denote an ancestor of the item denoted by <code>descendant</code> * (or itself). * @throws ItemNotFoundException If either of the specified id's does not * denote an existing item. * @throws RepositoryException If another error occurs. */ public int getRelativeDepth(NodeEntry ancestor, HierarchyEntry descendant) throws ItemNotFoundException, RepositoryException; }