org.apache.jackrabbit.spi.RepositoryService Maven / Gradle / Ivy
Show all versions of aem-sdk-api Show documentation
/*
* 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.spi;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Map;
import javax.jcr.AccessDeniedException;
import javax.jcr.Credentials;
import javax.jcr.InvalidItemStateException;
import javax.jcr.ItemExistsException;
import javax.jcr.ItemNotFoundException;
import javax.jcr.LoginException;
import javax.jcr.MergeException;
import javax.jcr.NamespaceException;
import javax.jcr.NoSuchWorkspaceException;
import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
import javax.jcr.ReferentialIntegrityException;
import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.ValueFormatException;
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.nodetype.InvalidNodeTypeDefinitionException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.nodetype.NodeTypeExistsException;
import javax.jcr.query.InvalidQueryException;
import javax.jcr.version.Version;
import javax.jcr.version.VersionException;
/**
* The RepositoryService
interface defines methods used to
* retrieve information from the persistent layer of the repository as well
* as the methods that modify its persistent state.
* The implementation of this interface is intended to hold only the state of
* the persistent layer, no session-related state should be held. Consequently,
* each method that alters persistent state always includes all the information
* necessary to fully specify and authorize a change.
*
* For example, consider the method
*
* void RepositoryService.copy(SessionInfo sessionInfo,
* String srcWorkspaceName,
* NodeId srcNodeId, NodeId destParentNodeId,
* Name destName)
*
* This method performs an immediate persistent copy of the node identified by
* srcNodeId and that node's subtree to a position as child of the node
* identified by destParentNodeId and assigns the newly copied node the name
* destName.
* The SessionInfo
object provides user and workspace identification
* as well as eventual lock tokens required to execute the copy.
* If srcWorkspaceName
differs from the workspace name present with
* the SessionInfo, the copy is corresponds to a copy across workspaces.
* The source and destination of the copy operation are specified by
* {@link NodeId}s. The Name
holds the new name. Taken together,
* this information is sufficient to completely specify and authorize the copy
* operations.
*
* The RepositoryService in addition allows to create and submit {@link Batch}
* objects, that cover lists of operations that have to be applied to the
* persistent layer at once.
*/
public interface RepositoryService {
/**
* Return the IdFactory
.
*
* @return The IdFactory
.
* @throws RepositoryException If an error occurs.
*/
public IdFactory getIdFactory() throws RepositoryException;
/**
* Return the NameFactory
.
*
* @return The NameFactory
.
* @throws RepositoryException If an error occurs.
*/
public NameFactory getNameFactory() throws RepositoryException;
/**
* Return the PathFactory
.
*
* @return The PathFactory
.
* @throws RepositoryException If an error occurs.
*/
public PathFactory getPathFactory() throws RepositoryException;
/**
* Return the QValueFactory
defined with this SPI implementation.
*
* @return The QValueFactory
.
* @throws RepositoryException If an error occurs.
*/
public QValueFactory getQValueFactory() throws RepositoryException;
/**
* Returns a {@link ItemInfoCache} for the given SessionInfo
.
* @param sessionInfo
* @return
* @throws RepositoryException
*/
public ItemInfoCache getItemInfoCache(SessionInfo sessionInfo) throws RepositoryException;
//--------------------------------------------------------------------------
/**
* Returns all property descriptors that can be exposed with the
* {@link javax.jcr.Repository Repository} implementation built on top of
* this RepositoryService
.
*
* @return key-value pairs for repository descriptor keys and values.
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Repository#getDescriptorKeys()
* @see javax.jcr.Repository#getDescriptor(String)
*/
public Map getRepositoryDescriptors() throws RepositoryException;
//-----------------------------------< SessionInfo creation and release >---
/**
* Returns a SessionInfo
that will be used by other methods
* on the RepositoryService
.
* An implementation may choose to authenticate the user using the supplied
* credentials
.
*
* @param credentials the credentials of the user.
* @param workspaceName the name of the workspace the SessionInfo
* should be built for. If the specified workspaceName is null
* the implementation should select a default workspace.
* @return a SessionInfo
if authentication was successful.
* @throws LoginException if authentication of the user fails.
* @throws NoSuchWorkspaceException if the specified workspaceName
* is not recognized.
* @throws RepositoryException if an error occurs.
*/
public SessionInfo obtain(Credentials credentials, String workspaceName)
throws LoginException, NoSuchWorkspaceException, RepositoryException;
/**
* Returns a new SessionInfo
for the given workspace name that
* will be used by other methods on the RepositoryService
.
*
* @param sessionInfo for another workspace
* @param workspaceName the name of the workspace the new SessionInfo
* should be built for. If the specified workspaceName is null
* the implementation should select a default workspace.
* @return a SessionInfo
if authentication was successful.
* @throws LoginException if authentication of the user fails.
* @throws NoSuchWorkspaceException if the specified workspaceName
* is not recognized.
* @throws RepositoryException if an error occurs.
*/
public SessionInfo obtain(SessionInfo sessionInfo, String workspaceName)
throws LoginException, NoSuchWorkspaceException, RepositoryException;
/**
* Returns a SessionInfo
that will be used by other methods
* on the RepositoryService
.
*
* @param sessionInfo
* @param credentials
* @return a SessionInfo
if impersonate was successful.
* @throws LoginException
* @throws RepositoryException
* @see javax.jcr.Session#impersonate(javax.jcr.Credentials)
*/
public SessionInfo impersonate(SessionInfo sessionInfo, Credentials credentials) throws LoginException, RepositoryException;
/**
* Indicates to the RepositoryService
, that the given SessionInfo
* will not be used any more.
*
* @param sessionInfo
* @throws javax.jcr.RepositoryException
*/
public void dispose(SessionInfo sessionInfo) throws RepositoryException;
//--------------------------------------------------------------------------
/**
* Return all workspace names available for the given SessionInfo
.
*
* @param sessionInfo
* @return An array of workspace names.
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Workspace#getAccessibleWorkspaceNames()
* @see javax.jcr.Workspace#getName()
*/
public String[] getWorkspaceNames(SessionInfo sessionInfo) throws RepositoryException;
//-----------------------------------------------------< Access Control >---
/**
* Returns true if all actions defined in the specified array are granted
* to given SessionInfo
. False otherwise.
*
* @param sessionInfo
* @param itemId
* @param actions
* @return true if the session with the given SessionInfo
has
* the specified rights for the given item.
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Session#checkPermission(String, String)
* @see javax.jcr.Session#hasPermission(String, String)
*/
public boolean isGranted(SessionInfo sessionInfo, ItemId itemId, String[] actions) throws RepositoryException;
/**
* TODO
*
*
* @param sessionInfo
* @return
* @throws RepositoryException
*/
public PrivilegeDefinition[] getPrivilegeDefinitions(SessionInfo sessionInfo) throws RepositoryException;
/**
* TODO
*
*
* @param sessionInfo
* @param id
* @return
* @throws RepositoryException
*/
public Name[] getPrivilegeNames(SessionInfo sessionInfo, NodeId id) throws RepositoryException;
/**
* TODO
*
* @param sessionInfo
* @param nodeId
* @return
* @throws RepositoryException
*/
public PrivilegeDefinition[] getSupportedPrivileges(SessionInfo sessionInfo, NodeId nodeId) throws RepositoryException;
//------------------------------------------------------< Reading items >---
/**
* Returns the QNodeDefinition
for the Node
* identified by the given id. This method should only be used if the
* caller is not able to unambiguously determine the applicable definition
* from the parent node type definition or if no parent exists (i.e. for
* the root).
*
* @param sessionInfo
* @param nodeId
* @return The node definition applicable to the Node
identified
* by the given id.
* @throws javax.jcr.RepositoryException
*/
public QNodeDefinition getNodeDefinition(SessionInfo sessionInfo, NodeId nodeId) throws RepositoryException;
/**
* Returns the QPropertyDefinition
for the Property
* identified by the given id. This method should only be used if the
* caller is not able to unambiguously determine the applicable definition
* from the parent node type definition.
*
* @param sessionInfo
* @param propertyId
* @return The property definition applicable for the Property
* identified by the given id.
* @throws javax.jcr.RepositoryException
*/
public QPropertyDefinition getPropertyDefinition(SessionInfo sessionInfo, PropertyId propertyId) throws RepositoryException;
/**
* Retrieve the NodeInfo
for the node identified by the given
* NodeId
. See {@link #getItemInfos(SessionInfo, ItemId)} for
* a similar method that in addition may return ItemInfo
s of
* children Item
s.
*
* @param sessionInfo
* @param nodeId
* @return The NodeInfo
for the node identified by the given id.
* @throws javax.jcr.ItemNotFoundException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Session#getItem(String)
* @see javax.jcr.Node#getNode(String)
* @see javax.jcr.version.VersionHistory#getAllVersions()
* @see javax.jcr.version.VersionHistory#getVersion(String)
* @see javax.jcr.version.VersionHistory#getVersionByLabel(String)
* @see javax.jcr.version.VersionHistory#getRootVersion()
* @see javax.jcr.Node#getBaseVersion()
* @see javax.jcr.Node#getVersionHistory()
* @see javax.jcr.version.Version#getContainingHistory()
* @deprecated Use {@link #getItemInfos(SessionInfo, ItemId)}
*/
public NodeInfo getNodeInfo(SessionInfo sessionInfo, NodeId nodeId) throws ItemNotFoundException, RepositoryException;
/**
* Method used to 'batch-read' from the persistent storage. It returns the
* ItemInfo
for the given ItemId
as the first
* element in the Iterator
. In addition the iterator may contain
* arbitrary ItemInfo
s.
*
* @param sessionInfo
* @param itemId
* @return An Iterator
of ItemInfo
s containing
* at least a single element: the ItemInfo
that represents
* the Item identified by the given ItemId
. If the Iterator
* contains multiple elements, the first is expected to represent the Item
* identified by the given ItemId
.
* @throws javax.jcr.ItemNotFoundException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Session#getItem(String)
* @see javax.jcr.Node#getNode(String)
* @see javax.jcr.version.VersionHistory#getAllVersions()
* @see javax.jcr.version.VersionHistory#getVersion(String)
* @see javax.jcr.version.VersionHistory#getVersionByLabel(String)
* @see javax.jcr.version.VersionHistory#getRootVersion()
* @see javax.jcr.Node#getBaseVersion()
* @see javax.jcr.Node#getVersionHistory()
* @see javax.jcr.version.Version#getContainingHistory()
*/
public Iterator extends ItemInfo> getItemInfos(SessionInfo sessionInfo, ItemId itemId) throws ItemNotFoundException, RepositoryException;
/**
* Returns an Iterator of ChildInfo
s present on the
* Node represented by the given parentId.
*
* @param sessionInfo
* @param parentId
* @return An Iterator of ChildInfo
s present on the
* Node represented by the given parentId.
* @throws ItemNotFoundException
* @throws RepositoryException
*/
public Iterator getChildInfos(SessionInfo sessionInfo, NodeId parentId) throws ItemNotFoundException, RepositoryException;
/**
* Returns the {@link PropertyId Id}s of the properties that are referencing
* the node identified by the given nodeId
. If
* weakReferences
is true
the ids of
* {@link javax.jcr.PropertyType#WEAKREFERENCE WEAKREFERENCE} properties are
* returned, otherwise the property must be of type {@link javax.jcr.PropertyType#REFERENCE REFERENCE}.
*
* @param sessionInfo
* @param nodeId
* @param propertyName name filter of referring properties to be returned;
* if null
then all references are returned.
* @param weakReferences If true
the properties must be of type
* {@link javax.jcr.PropertyType#WEAKREFERENCE}, otherwise of type
* {@link javax.jcr.PropertyType#REFERENCE}.
* @return An Iterator of {@link PropertyId Id}s of the properties that are
* referencing the node identified by the given nodeId
or an
* empty iterator if the node is not referenceable or no references exist.
* @throws ItemNotFoundException
* @throws RepositoryException
* @see PropertyInfo#getId()
* @since JCR 2.0
*/
public Iterator getReferences(SessionInfo sessionInfo, NodeId nodeId, Name propertyName, boolean weakReferences) throws ItemNotFoundException, RepositoryException;
/**
* Returns the PropertyInfo
for the Property
* identified by the given id.
*
* @param sessionInfo
* @param propertyId
* @return The PropertyInfo
for the Property
* identified by the given id.
* @throws javax.jcr.ItemNotFoundException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Session#getItem(String)
* @see javax.jcr.Node#getProperty(String)
* @deprecated Use {@link #getItemInfos(SessionInfo, ItemId)}
*/
public PropertyInfo getPropertyInfo(SessionInfo sessionInfo, PropertyId propertyId) throws ItemNotFoundException, RepositoryException;
//-----------------------------------------------< general modification >---
/**
* Indicates the start of a set of operations that cause modifications
* on the underlying persistence layer. All modification called on the
* {@link Batch} must be executed at once or non must be executed upon
* calling {@link #submit(Batch)}.
*
* @param sessionInfo
* @param itemId Id of the Item that is a common ancestor of all
* Item
s affected upon batch execution. This Item
* might itself be modified within the scope of the Batch
.
* @return A Batch indicating the start of a set of transient modifications
* that will be execute at once upon {@link #submit(Batch)}.
* @throws RepositoryException
* @see javax.jcr.Item#save()
* @see javax.jcr.Session#save()
* @see Batch
*/
public Batch createBatch(SessionInfo sessionInfo, ItemId itemId) throws RepositoryException;
/**
* Completes the given {@link Batch} or discard all the previous modifications.
* See {@link #createBatch(SessionInfo,ItemId)} for additional information
* regarding batch creation.
*
* @param batch
* @throws PathNotFoundException
* @throws ItemNotFoundException
* @throws NoSuchNodeTypeException
* @throws ValueFormatException
* @throws VersionException
* @throws LockException
* @throws ConstraintViolationException
* @throws AccessDeniedException
* @throws UnsupportedRepositoryOperationException
* @throws RepositoryException
* @see Batch
*/
public void submit(Batch batch) throws PathNotFoundException, ItemNotFoundException, NoSuchNodeTypeException, ValueFormatException, VersionException, LockException, ConstraintViolationException, AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException;
/**
* Creates a new {@code Tree} that can be populated and later on be applied
* to the specified {@code Batch} by calling {@code #setTree}.
*
* @param nodeName
* @param primaryTypeName
* @param uniqueId
* @return a new {@code Tree} instance.
* @throws RepositoryException
*/
public Tree createTree(SessionInfo sessionInfo, Batch batch, Name nodeName, Name primaryTypeName, String uniqueId) throws RepositoryException;
//-------------------------------------------------------------< Import >---
/**
* Imports the data present in the given InputStream
into the
* persistent layer. Note, that the implementation is responsible for
* validating the data presented and for the integrity of the repository
* upon completion.
*
* @param sessionInfo
* @param parentId
* @param xmlStream
* @param uuidBehaviour
* @throws ItemExistsException
* @throws PathNotFoundException
* @throws VersionException
* @throws ConstraintViolationException
* @throws LockException
* @throws AccessDeniedException
* @throws UnsupportedRepositoryOperationException
* @throws RepositoryException
* @see javax.jcr.Workspace#importXML(String, java.io.InputStream, int)
*/
public void importXml(SessionInfo sessionInfo, NodeId parentId, InputStream xmlStream, int uuidBehaviour) throws ItemExistsException, PathNotFoundException, VersionException, ConstraintViolationException, LockException, AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException;
//---------------------------------------------------------< Copy, Move >---
/**
* Moves the node identified by the given srcNodeId
(and its
* entire subtree) to the new location defined by destParentNodeId
* and a new name (destName
).
*
* @param sessionInfo
* @param srcNodeId
* @param destParentNodeId
* @param destName
* @throws javax.jcr.ItemExistsException
* @throws javax.jcr.PathNotFoundException
* @throws javax.jcr.version.VersionException
* @throws javax.jcr.nodetype.ConstraintViolationException
* @throws javax.jcr.lock.LockException
* @throws javax.jcr.AccessDeniedException
* @throws javax.jcr.UnsupportedRepositoryOperationException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Workspace#move(String, String)
*/
public void move(SessionInfo sessionInfo, NodeId srcNodeId, NodeId destParentNodeId, Name destName) throws ItemExistsException, PathNotFoundException, VersionException, ConstraintViolationException, LockException, AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException;
/**
* Clone the subtree identified by the given srcNodeId
* in workspace named srcWorkspaceName
to the destination
* in the workspace specified by the given SessionInfo
. The
* destination is composed by the given parent id and the new name
* as indicated by destName
.
*
* Note, that srcWorkspaceName
may be the same as the one
* specified within the SessionInfo
. In this case the copy
* corresponds to a copy within a single workspace.
*
* @param sessionInfo
* @param srcWorkspaceName
* @param srcNodeId
* @param destParentNodeId
* @param destName
* @throws javax.jcr.NoSuchWorkspaceException
* @throws javax.jcr.nodetype.ConstraintViolationException
* @throws javax.jcr.version.VersionException
* @throws javax.jcr.AccessDeniedException
* @throws javax.jcr.PathNotFoundException
* @throws javax.jcr.ItemExistsException
* @throws javax.jcr.lock.LockException
* @throws javax.jcr.UnsupportedRepositoryOperationException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Workspace#copy(String, String)
* @see javax.jcr.Workspace#copy(String, String, String)
*/
public void copy(SessionInfo sessionInfo, String srcWorkspaceName, NodeId srcNodeId, NodeId destParentNodeId, Name destName) throws NoSuchWorkspaceException, ConstraintViolationException, VersionException, AccessDeniedException, PathNotFoundException, ItemExistsException, LockException, UnsupportedRepositoryOperationException, RepositoryException;
//------------------------------------------------------< Update, Clone >---
/**
* Updates the node identified by the given NodeId
replacing
* it (an the complete subtree) with a clone of its corresponding node
* present in the workspace with the given srcWorkspaceName
.
*
* @param sessionInfo
* @param nodeId
* @param srcWorkspaceName
* @throws javax.jcr.NoSuchWorkspaceException
* @throws javax.jcr.AccessDeniedException
* @throws javax.jcr.lock.LockException
* @throws javax.jcr.InvalidItemStateException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Node#update(String)
*/
public void update(SessionInfo sessionInfo, NodeId nodeId, String srcWorkspaceName) throws NoSuchWorkspaceException, AccessDeniedException, LockException, InvalidItemStateException, RepositoryException;
/**
* Clone the subtree identified by the given srcNodeId
* in workspace named srcWorkspaceName
to the destination
* in the workspace specified by the given SessionInfo
. The
* destination is composed by the given parent id and the new name
* as indicated by destName
.
*
* @param sessionInfo
* @param srcWorkspaceName
* @param srcNodeId
* @param destParentNodeId
* @param destName
* @param removeExisting
* @throws javax.jcr.NoSuchWorkspaceException
* @throws javax.jcr.nodetype.ConstraintViolationException
* @throws javax.jcr.version.VersionException
* @throws javax.jcr.AccessDeniedException
* @throws javax.jcr.PathNotFoundException
* @throws javax.jcr.ItemExistsException
* @throws javax.jcr.lock.LockException
* @throws javax.jcr.UnsupportedRepositoryOperationException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Workspace#clone(String, String, String, boolean)
*/
public void clone(SessionInfo sessionInfo, String srcWorkspaceName, NodeId srcNodeId, NodeId destParentNodeId, Name destName, boolean removeExisting) throws NoSuchWorkspaceException, ConstraintViolationException, VersionException, AccessDeniedException, PathNotFoundException, ItemExistsException, LockException, UnsupportedRepositoryOperationException, RepositoryException;
//------------------------------------------------------------< Locking >---
/**
* Returns the lock information that applies to Node
identified
* by the given NodeId
or null
. If the implementation
* does not support locking at all, this method always returns null
.
*
* @param sessionInfo
* @param nodeId
* @return The lock information for the Node identified by the given
* nodeId
or null
if no lock applies to that Node.
* @throws javax.jcr.AccessDeniedException
* @throws javax.jcr.RepositoryException If some other error occurs.
* @see Node#getLock()
*/
public LockInfo getLockInfo(SessionInfo sessionInfo, NodeId nodeId) throws AccessDeniedException, RepositoryException;
/**
* Create a lock on the Node
identified by the given id.
*
* @param sessionInfo
* @param nodeId
* @param deep
* @param sessionScoped
* @return The LockInfo
associated with the new lock
* that has been created.
* @throws javax.jcr.UnsupportedRepositoryOperationException If this SPI
* implementation does not support locking at all.
* @throws javax.jcr.lock.LockException If the Node identified by the given
* id cannot be locked due to an existing lock or due to missing mixin type.
* @throws javax.jcr.AccessDeniedException
* @throws javax.jcr.RepositoryException If another error occurs.
* @see javax.jcr.Node#lock(boolean, boolean)
*/
public LockInfo lock(SessionInfo sessionInfo, NodeId nodeId, boolean deep, boolean sessionScoped) throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException;
/**
* Create a lock on the Node
identified by the given id.
*
* @param sessionInfo
* @param nodeId
* @param deep
* @param sessionScoped
* @param timeoutHint long indicating the desired lock timeout in seconds.
* The implementation is free to ignore the hint.
* @param ownerHint String indicating the desired lockOwner info. The
* implementation is free to ignore the hint.
* @return The LockInfo
associated with the new lock
* that has been created.
* @throws javax.jcr.UnsupportedRepositoryOperationException If this SPI
* implementation does not support locking at all.
* @throws javax.jcr.lock.LockException If the Node identified by the given
* id cannot be locked due to an existing lock or due to missing mixin type.
* @throws javax.jcr.AccessDeniedException
* @throws javax.jcr.RepositoryException If another error occurs.
* @see javax.jcr.lock.LockManager#lock(String, boolean, boolean, long, String)
* @since JCR 2.0
*/
public LockInfo lock(SessionInfo sessionInfo, NodeId nodeId, boolean deep, boolean sessionScoped, long timeoutHint, String ownerHint) throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException;
/**
* Explicit refresh of an existing lock. Existing locks should be refreshed
* implicitly with all read and write methods listed here.
*
* @param sessionInfo
* @param nodeId
* @throws javax.jcr.UnsupportedRepositoryOperationException If this SPI
* implementation does not support locking at all.
* @throws javax.jcr.lock.LockException If the Node identified by the given
* id is not locked (any more) or if the SessionInfo
does not
* contain the token associated with the lock to be refreshed.
* @throws javax.jcr.AccessDeniedException
* @throws javax.jcr.RepositoryException If another error occurs.
* @see javax.jcr.lock.Lock
*/
public void refreshLock(SessionInfo sessionInfo, NodeId nodeId) throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException;
/**
* Releases the lock on the Node
identified by the given
* NodeId
.
*
* Please note, that on {@link javax.jcr.Session#logout() logout} all
* session-scoped locks must be released by calling unlock.
*
* @param sessionInfo
* @param nodeId
* @throws javax.jcr.UnsupportedRepositoryOperationException If this SPI
* implementation does not support locking at all.
* @throws javax.jcr.lock.LockException If the Node identified by the given
* id is not locked or if the SessionInfo
does not contain the
* token associated with the lock to be released.
* @throws javax.jcr.AccessDeniedException
* @throws javax.jcr.RepositoryException If another error occurs.
* @see javax.jcr.Node#unlock()
*/
public void unlock(SessionInfo sessionInfo, NodeId nodeId) throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException;
//---------------------------------------------------------< Versioning >---
/**
* Performs a checkin for the Node
identified by the given
* NodeId
.
*
* @param sessionInfo
* @param nodeId
* @return NodeId
of newly created version
* @throws javax.jcr.version.VersionException
* @throws javax.jcr.UnsupportedRepositoryOperationException
* @throws javax.jcr.InvalidItemStateException
* @throws javax.jcr.lock.LockException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Node#checkin()
*/
public NodeId checkin(SessionInfo sessionInfo, NodeId nodeId) throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException;
/**
* Performs a checkout for the Node
identified by the given
* NodeId
. Same as {@link #checkout(SessionInfo, NodeId, NodeId)}
* where the activityId
is null
.
*
* @param sessionInfo
* @param nodeId
* @throws javax.jcr.UnsupportedRepositoryOperationException
* @throws javax.jcr.lock.LockException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Node#checkout()
*/
public void checkout(SessionInfo sessionInfo, NodeId nodeId) throws UnsupportedRepositoryOperationException, LockException, RepositoryException;
/**
* Performs a checkout for the Node
identified by the given
* NodeId
and for activity identified by the specified
* activityId
. If the activityId
is null
* this corresponds to {@link #checkout(SessionInfo, NodeId)}
*
* @param sessionInfo
* @param nodeId
* @param activityId Id of the activity node set to the editing session or
* null
if no activity is in effect.
* @throws UnsupportedRepositoryOperationException
* @throws LockException
* @throws RepositoryException
* @since JCR 2.0
*/
public void checkout(SessionInfo sessionInfo, NodeId nodeId, NodeId activityId) throws UnsupportedRepositoryOperationException, LockException, RepositoryException;
/**
* Performs a checkpoint for the Node
identified by the given
* NodeId
.
*
* @param sessionInfo
* @param nodeId
* @return NodeId
of newly created version
* @throws javax.jcr.UnsupportedRepositoryOperationException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.version.VersionManager#checkpoint(String)
* @since JCR 2.0
*/
public NodeId checkpoint(SessionInfo sessionInfo, NodeId nodeId) throws UnsupportedRepositoryOperationException, RepositoryException;
/**
* Performs a checkpoint for the Node
identified by the given
* NodeId
. For the checkout part the specified activityId
* is taken into account as specified in {@link #checkout(SessionInfo, NodeId, NodeId)}.
*
* @param sessionInfo
* @param nodeId
* @param activityId Id of the activity node set to the editing session or
* null
if no activity is in effect.
* @throws UnsupportedRepositoryOperationException
* @throws LockException
* @throws RepositoryException
* @since JCR 2.0
*/
public NodeId checkpoint(SessionInfo sessionInfo, NodeId nodeId, NodeId activityId) throws UnsupportedRepositoryOperationException, RepositoryException;
/**
* Remove the version identified by the specified versionId
.
*
* @param sessionInfo
* @param versionHistoryId NodeId
identifying the version
* history the version identified by versionId
belongs to.
* @param versionId
* @throws ReferentialIntegrityException
* @throws AccessDeniedException
* @throws UnsupportedRepositoryOperationException
* @throws VersionException
* @throws RepositoryException
* @see javax.jcr.version.VersionHistory#removeVersion(String)
*/
public void removeVersion(SessionInfo sessionInfo, NodeId versionHistoryId, NodeId versionId) throws ReferentialIntegrityException, AccessDeniedException, UnsupportedRepositoryOperationException, VersionException, RepositoryException;
/**
* Restores the node identified by nodeId
to the state defined
* by the version with the specified versionId
.
*
* @param sessionInfo
* @param nodeId
* @param versionId
* @param removeExisting boolean flag indicating how to deal with an
* identifier collision that may occur if a node exists outside the subtree
* to be restored with the same identified as a node that would be
* introduces by the restore. If the removeExisting
is
* true
the restored node takes precedence and the
* existing node is removed. Otherwise the restore fails.
* @throws javax.jcr.version.VersionException
* @throws javax.jcr.PathNotFoundException
* @throws javax.jcr.ItemExistsException
* @throws javax.jcr.UnsupportedRepositoryOperationException
* @throws javax.jcr.lock.LockException
* @throws javax.jcr.InvalidItemStateException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Node#restore(String, boolean)
* @see javax.jcr.Node#restore(javax.jcr.version.Version, boolean)
* @see javax.jcr.Node#restore(javax.jcr.version.Version, String, boolean)
* @see javax.jcr.Node#restoreByLabel(String, boolean)
*/
public void restore(SessionInfo sessionInfo, NodeId nodeId, NodeId versionId, boolean removeExisting) throws VersionException, PathNotFoundException, ItemExistsException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException;
/**
* Restore multiple versions at once. The versions to be restored are
* identified by the given array of NodeId
s.
*
* @param sessionInfo
* @param versionIds
* @param removeExisting boolean flag indicating how to deal with an
* identifier collision that may occur if a node exists outside the subtrees
* to be restored with the same identified as any node that would be
* introduces by the restore. If the removeExisting
is
* true
the node to be restored takes precedence and the
* existing node is removed. Otherwise the restore fails.
* @throws javax.jcr.ItemExistsException
* @throws javax.jcr.UnsupportedRepositoryOperationException
* @throws javax.jcr.version.VersionException
* @throws javax.jcr.lock.LockException
* @throws javax.jcr.InvalidItemStateException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Workspace#restore(javax.jcr.version.Version[], boolean)
*/
public void restore(SessionInfo sessionInfo, NodeId[] versionIds, boolean removeExisting) throws ItemExistsException, UnsupportedRepositoryOperationException, VersionException, LockException, InvalidItemStateException, RepositoryException;
/**
* Merge the node identified by the given NodeId
and its subtree
* with the corresponding node present in the workspace with the name of
* srcWorkspaceName
.
*
* @param sessionInfo
* @param nodeId
* @param srcWorkspaceName
* @param bestEffort
* @return an Iterator
over the {@link NodeId}s of all nodes that
* received a merge result of "fail" in the course of this operation.
* @throws javax.jcr.NoSuchWorkspaceException
* @throws javax.jcr.AccessDeniedException
* @throws javax.jcr.MergeException
* @throws javax.jcr.lock.LockException
* @throws javax.jcr.InvalidItemStateException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Node#merge(String, boolean)
*/
public Iterator merge(SessionInfo sessionInfo, NodeId nodeId, String srcWorkspaceName, boolean bestEffort) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException;
/**
* Merge the node identified by the given NodeId
and its subtree
* with the corresponding node present in the workspace with the name of
* srcWorkspaceName
.
*
* @param sessionInfo
* @param nodeId
* @param srcWorkspaceName
* @param bestEffort
* @return an Iterator
over the {@link NodeId}s of all nodes that
* received a merge result of "fail" in the course of this operation.
* @throws javax.jcr.NoSuchWorkspaceException
* @throws javax.jcr.AccessDeniedException
* @throws javax.jcr.MergeException
* @throws javax.jcr.lock.LockException
* @throws javax.jcr.InvalidItemStateException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.version.VersionManager#merge(String, String, boolean, boolean)
* @since JCR 2.0
*/
public Iterator merge(SessionInfo sessionInfo, NodeId nodeId, String srcWorkspaceName, boolean bestEffort, boolean isShallow) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException;
/**
* Resolve an existing merge conflict present with the node identified by
* the given NodeId
.
*
* @param sessionInfo
* @param nodeId
* @param mergeFailedIds The NodeId
s remaining in the jcr:mergeFailed
* REFERENCE property. The version id(s) to be resolved were removed from the
* array and added to the predecessor ids in case of {@link Node#doneMerge(Version)}.
* In case of a {@link Node#cancelMerge(Version)} the version id only gets
* removed from the list.
* @param predecessorIds The complete set of predecessor id including those
* that have been added in order to resolve a merge conflict.
* @throws javax.jcr.version.VersionException
* @throws javax.jcr.InvalidItemStateException
* @throws javax.jcr.UnsupportedRepositoryOperationException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Node#cancelMerge(javax.jcr.version.Version)
* @see javax.jcr.Node#doneMerge(javax.jcr.version.Version)
*/
public void resolveMergeConflict(SessionInfo sessionInfo, NodeId nodeId, NodeId[] mergeFailedIds, NodeId[] predecessorIds) throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException;
/**
* Add the given version label in the persistent layer.
*
* @param sessionInfo
* @param versionHistoryId NodeId
identifying the version
* history the version identified by versionId
belongs to.
* @param versionId NodeId
identifying the version the
* label belongs to.
* @param label The label to be added.
* @param moveLabel If the label is already assigned to a version within
* the same version history this parameter has the following effect: If true
* the label already present gets moved to be now be a label of the version
* indicated by versionId
. If false
this method
* fails and the label remains with the original version.
* @throws javax.jcr.version.VersionException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.version.VersionHistory#addVersionLabel(String, String, boolean)
*/
public void addVersionLabel(SessionInfo sessionInfo, NodeId versionHistoryId, NodeId versionId, Name label, boolean moveLabel) throws VersionException, RepositoryException;
/**
* Remove the given version label in the persistent layer.
*
* @param sessionInfo
* @param versionHistoryId NodeId
identifying the version
* history the version identified by versionId
belongs to.
* @param versionId NodeId
identifying the version the
* label belongs to.
* @param label The label to be removed.
* @throws javax.jcr.version.VersionException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.version.VersionHistory#removeVersionLabel(String)
*/
public void removeVersionLabel(SessionInfo sessionInfo, NodeId versionHistoryId, NodeId versionId, Name label) throws VersionException, RepositoryException;
/**
* Create a new activity.
*
* @param sessionInfo
* @param title
* @return the NodeId
of the new activity node.
* @throws javax.jcr.UnsupportedRepositoryOperationException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.version.VersionManager#createActivity(String)
* @since JCR 2.0
*/
public NodeId createActivity(SessionInfo sessionInfo, String title) throws UnsupportedRepositoryOperationException, RepositoryException;
/**
* Removes the activity identified by the specified activityId
.
*
* @param sessionInfo
* @param activityId
* @throws javax.jcr.UnsupportedRepositoryOperationException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.version.VersionManager#removeActivity(Node)
* @since JCR 2.0
*/
public void removeActivity(SessionInfo sessionInfo, NodeId activityId) throws UnsupportedRepositoryOperationException, RepositoryException;
/**
* Merges the activity identified by the given activityId
into
* the workspace the specified sessionInfo
has been created for.
*
* @param sessionInfo
* @param activityId
* @return an Iterator
over the {@link NodeId}s of all nodes that
* received a merge result of "fail" in the course of this operation.
* @throws UnsupportedRepositoryOperationException
* @throws RepositoryException
*/
public Iterator mergeActivity(SessionInfo sessionInfo, NodeId activityId) throws UnsupportedRepositoryOperationException, RepositoryException;
/**
*
* @param sessionInfo
* @param nodeId
* @return
* @throws UnsupportedRepositoryOperationException
* @throws RepositoryException
* @see javax.jcr.version.VersionManager#createConfiguration(String)
*/
public NodeId createConfiguration(SessionInfo sessionInfo, NodeId nodeId) throws UnsupportedRepositoryOperationException, RepositoryException;
//----------------------------------------------------------< Searching >---
/**
* Returns a String array identifying all query languages supported by this
* SPI implementation.
*
* @param sessionInfo
* @return String array identifying all query languages supported by this
* SPI implementation.
* @throws javax.jcr.RepositoryException
* @see javax.jcr.query.QueryManager#getSupportedQueryLanguages()
*/
public String[] getSupportedQueryLanguages(SessionInfo sessionInfo) throws RepositoryException;
/**
* Checks if the query statement
is valid according to the
* specified query language
and returns the bind variable
* names found in the query statement.
*
* @param sessionInfo the session info.
* @param statement the query statement to check.
* @param language the query language.
* @param namespaces the locally re-mapped namespace which may be used in
* the query statement
.
* @return the bind variable names.
* @throws InvalidQueryException if the query statement is invalid or the
* language is not supported.
* @throws RepositoryException if an error occurs while checking the
* statement.
* @see javax.jcr.query.QueryManager#createQuery(String, String)
*/
public String[] checkQueryStatement(SessionInfo sessionInfo, String statement, String language, Map namespaces) throws InvalidQueryException, RepositoryException;
/**
* Execute the given query statement with the specified query language. The
* additional namespaces
parameter provides a mapping of prefix
* to namespace uri in order to be able to properly resolve prefix:localname
* patterns present within the query statement.
*
* @param sessionInfo the session info that wants to execute the query.
* @param statement the query statement to be execute.
* @param language the query language used to parse the query
* statement
.
* @param namespaces the locally re-mapped namespace which may be used in
* the query statement
.
* @param limit The maximum result size or -1
is no
* maximum is set.
* @param offset The offset in the total result set or -1
* is no offset is set.
* @param values A Map of name/value pairs collected upon calls to
* {@link javax.jcr.query.Query#bindValue(String,
* javax.jcr.Value)}.
* @return The query info.
* @throws RepositoryException if an error occurs.
* @see javax.jcr.query.Query#execute()
*/
public QueryInfo executeQuery(SessionInfo sessionInfo,
String statement,
String language,
Map namespaces,
long limit,
long offset,
Map values)
throws RepositoryException;
//--------------------------------------------------------< Observation >---
/**
* Creates an event filter. If the repository supports observation, the
* filter created is based on the parameters available in {@link
* javax.jcr.observation.ObservationManager#addEventListener}.
*
* Note, that an SPI implementation may support observation even if
* the corresponding {@link javax.jcr.Repository#OPTION_OBSERVATION_SUPPORTED repository descriptor}
* does not return 'true'.
*
* @param sessionInfo the session info which requests an event filter.
* @param eventTypes A combination of one or more event type constants
* encoded as a bitmask.
* @param absPath An absolute path.
* @param isDeep A boolean
.
* @param uuid Array of jcr:uuid properties.
* @param nodeTypeName Array of node type names.
* @param noLocal A boolean
.
* @return the event filter instance with the given parameters.
* @throws UnsupportedRepositoryOperationException if this SPI implementation
* does not allow to create event filters.
* @throws RepositoryException if an error occurs while creating the
* EventFilter.
* @see javax.jcr.observation.ObservationManager#addEventListener(javax.jcr.observation.EventListener, int, String, boolean, String[], String[], boolean)
*/
public EventFilter createEventFilter(SessionInfo sessionInfo, int eventTypes,
Path absPath, boolean isDeep,
String[] uuid, Name[] nodeTypeName,
boolean noLocal)
throws UnsupportedRepositoryOperationException, RepositoryException;
/**
* Creates a new {@link Subscription} for events with an initial set of
* {@link EventFilter}s. The returned subscription must provide events from
* the time when the subscription was created. If an empty array of filters
* is passed no events will be available through the created subscription
* unless the filters are later updated by calling
* {@link RepositoryService#updateEventFilters(Subscription, EventFilter[])}.
*
* @param sessionInfo the session info.
* @param filters the initial event filters for the subscription.
* @return
* @throws UnsupportedRepositoryOperationException
* if this SPI implementation does not support
* observation.
* @throws RepositoryException if an error occurs while creating the
* Subscription.
*/
public Subscription createSubscription(SessionInfo sessionInfo, EventFilter[] filters)
throws UnsupportedRepositoryOperationException, RepositoryException;
/**
* Updates events filters on the subscription. When this method returns all
* events that go through the passed subscription and have been generated
* after this method call must be filtered using the passed
* filters
.
*
* An implementation is required to accept at least event filter instances
* created by {@link RepositoryService#createEventFilter}. Optionally an
* implementation may also support event filters instanciated by the client
* itself. An implementation may require special deployment in that case,
* e.g. to make the event filter implementation class available to the
* repository server.
*
* Note on thread-safety: it is permissible to call this methods
* while another thread is blocked in calling {@link
* RepositoryService#getEvents(Subscription, long)} using the same
* subscription instance as a parameter.
*
* @param subscription the subscription where the event filters are
* applied.
* @param filters the filters that are applied to the events as they
* occurred on the repository. An event is included in an
* event bundle if it is {@link EventFilter#accept(Event,
* boolean) accept}ed by at least one of the supplied
* filters. If an empty array is passed none of the potential
* events are include in an event bundle. This allows a
* client to skip or ignore events for a certain period of
* time.
* @throws RepositoryException if an error occurs while updating the event
* filters.
*/
public void updateEventFilters(Subscription subscription, EventFilter[] filters)
throws RepositoryException;
/**
* Retrieves the events that occurred since the last call to this method for
* the passed subscription.
*
* Note, that an SPI implementation may support observation even if the
* corresponding {@link javax.jcr.Repository#OPTION_OBSERVATION_SUPPORTED
* repository descriptor} does return 'false'.
*
* An implementation should un-block a calling thread and let it return if
* the associated subscription is disposed by another thread.
*
* @param subscription a subscription.
* @param timeout a timeout in milliseconds to wait at most for an
* event bundle. If timeout
is up and no
* event occurred meanwhile an empty array is returned.
* @return an array of EventBundle
s representing the events
* that occurred.
* @throws RepositoryException if an error occurs while retrieving the
* event bundles.
* @throws InterruptedException if the calling thread is interrupted while
* waiting for events within the specified
* timeout
.
*/
public EventBundle[] getEvents(Subscription subscription, long timeout)
throws RepositoryException, InterruptedException;
/**
* Returns events from the EventJournal
after a given point in
* time. The returned event bundle may only contain events up to a given
* time. In order to retrieve more events a client must call this method
* again with the timestamp from the last event bundle. An empty bundle
* indicates that there are no more events.
*
* @param sessionInfo the session info.
* @param filter the event filter to apply. Please note: the
* noLocal
flag is ignored.
* @param after retrieve events that occurred after the given
* timestamp.
* @return the event bundle.
* @throws RepositoryException if an error occurs.
* @throws UnsupportedRepositoryOperationException
* if the underlying implementation does not
* support event journaling.
*/
public EventBundle getEvents(SessionInfo sessionInfo, EventFilter filter, long after)
throws RepositoryException, UnsupportedRepositoryOperationException;
/**
* Indicates that the passed subscription is no longer needed.
*
* Note on thread-safety: it is permissible to call this methods
* while another thread is blocked in calling {@link
* RepositoryService#getEvents(Subscription, long)} using the same
* subscription instance as a parameter.
*
* @throws RepositoryException if an error occurs while the subscription is
* disposed.
*/
public void dispose(Subscription subscription) throws RepositoryException;
//---------------------------------------------------------< Namespaces >---
/**
* Retrieve all registered namespaces. The namespace to prefix mapping is
* done using the prefix as key and the namespace as value in the Map.
*
* @param sessionInfo
* @return
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Workspace#getNamespaceRegistry()
* @see javax.jcr.NamespaceRegistry#getPrefixes()
* @see javax.jcr.NamespaceRegistry#getURIs()
*/
public Map getRegisteredNamespaces(SessionInfo sessionInfo) throws RepositoryException;
/**
* Returns the namespace URI for the given namespace prefix
.
*
* @param sessionInfo the session info.
* @param prefix a namespace prefix to resolve.
* @return the namespace URI for the given namespace prefix
.
* @throws NamespaceException if prefix is not mapped to a namespace URI.
* @throws RepositoryException if another error occurs.
* @see javax.jcr.NamespaceRegistry#getURI(String)
*/
public String getNamespaceURI(SessionInfo sessionInfo, String prefix)
throws NamespaceException, RepositoryException;
/**
* Returns the namespace prefix for the given namespace uri
.
*
* @param sessionInfo the session info.
* @param uri the namespace URI.
* @return the namespace prefix.
* @throws NamespaceException if the URI unknown.
* @throws RepositoryException if another error occurs.
* @see javax.jcr.NamespaceRegistry#getPrefix(String)
*/
public String getNamespacePrefix(SessionInfo sessionInfo, String uri)
throws NamespaceException, RepositoryException;
/**
* Register a new namespace with the given prefix and uri.
*
* @param sessionInfo
* @param prefix Prefix of the namespace to be registered.
* @param uri Namespace URI to be registered.
* @throws javax.jcr.NamespaceException
* @throws javax.jcr.UnsupportedRepositoryOperationException
* @throws javax.jcr.AccessDeniedException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.NamespaceRegistry#registerNamespace(String, String)
*/
public void registerNamespace(SessionInfo sessionInfo, String prefix, String uri) throws NamespaceException, UnsupportedRepositoryOperationException, AccessDeniedException, RepositoryException;
/**
* Unregister the namespace identified by the given uri
*
* @param sessionInfo
* @param uri Namespace URI to be unregistered.
* @throws javax.jcr.NamespaceException
* @throws javax.jcr.UnsupportedRepositoryOperationException
* @throws javax.jcr.AccessDeniedException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.NamespaceRegistry#unregisterNamespace(String)
*/
public void unregisterNamespace(SessionInfo sessionInfo, String uri) throws NamespaceException, UnsupportedRepositoryOperationException, AccessDeniedException, RepositoryException;
//----------------------------------------------------------< NodeTypes >---
/**
* Retrieve the QNodeTypeDefinition
s of all registered nodetypes.
*
* @param sessionInfo
* @return Iterator of {@link QNodeTypeDefinition}s.
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Workspace#getNodeTypeManager()
* @see javax.jcr.nodetype.NodeTypeManager#getAllNodeTypes()
* @see javax.jcr.nodetype.NodeTypeManager#getMixinNodeTypes()
* @see javax.jcr.nodetype.NodeTypeManager#getPrimaryNodeTypes()
* @see javax.jcr.nodetype.NodeTypeManager#getNodeType(String)
*/
public Iterator getQNodeTypeDefinitions(SessionInfo sessionInfo) throws RepositoryException;
/**
* Retrieve QNodeTypeDefinition
s for the given names. The
* implementation is free to return additional definitions which will (probably)
* be needed by the caller due to node type inheritance. The caller must be
* able to deal with any kind of additional QNodeTypeDefinition
s
* present in the Iterator
irrespective whether they have been
* loaded before or not.
*
* @param sessionInfo
* @param nodetypeNames names of node types to retrieve
* @return {@link QNodeTypeDefinition}
* @throws javax.jcr.nodetype.NoSuchNodeTypeException if for any of the given
* names no QNodeTypeDefinition
exists.
* @throws javax.jcr.RepositoryException
* @see javax.jcr.Workspace#getNodeTypeManager()
* @see javax.jcr.nodetype.NodeTypeManager#getAllNodeTypes()
* @see javax.jcr.nodetype.NodeTypeManager#getMixinNodeTypes()
* @see javax.jcr.nodetype.NodeTypeManager#getPrimaryNodeTypes()
* @see javax.jcr.nodetype.NodeTypeManager#getNodeType(String)
*/
public Iterator getQNodeTypeDefinitions(SessionInfo sessionInfo, Name[] nodetypeNames) throws RepositoryException;
/**
* Registers the node types with the specified QNodeTypeDefinition
s.
* If allowUpdate
is true
this method may also be
* used to reregister existing node types with a modified definition, otherwise
* this method will fail with NodeTypeExistsException
if any of
* the specified definition has the name of an already registered node type.
*
* @param sessionInfo
* @param nodeTypeDefinitions
* @param allowUpdate
* @throws InvalidNodeTypeDefinitionException If any of the specified definitions
* is invalid.
* @throws NodeTypeExistsException If any of the specified definitions has the
* name of an already registered node type and allowUpdate
is false
.
* @throws UnsupportedRepositoryOperationException If registering node types
* is not supported.
* @throws RepositoryException If another error occurs.
* @see javax.jcr.nodetype.NodeTypeManager#registerNodeTypes(javax.jcr.nodetype.NodeTypeDefinition[], boolean)
*/
public void registerNodeTypes(SessionInfo sessionInfo, QNodeTypeDefinition[] nodeTypeDefinitions, boolean allowUpdate) throws InvalidNodeTypeDefinitionException, NodeTypeExistsException, UnsupportedRepositoryOperationException, RepositoryException;
/**
* Unregisters the node types with the specified names
.
*
* @param sessionInfo
* @param nodeTypeNames
* @throws UnsupportedRepositoryOperationException If unregistering node types
* is not supported.
* @throws NoSuchNodeTypeException If any of the specified names has no
* corresponding registered node type.
* @throws RepositoryException If another error occurs.
* @see javax.jcr.nodetype.NodeTypeManager#unregisterNodeTypes(String[])
*/
public void unregisterNodeTypes(SessionInfo sessionInfo, Name[] nodeTypeNames) throws UnsupportedRepositoryOperationException, NoSuchNodeTypeException, RepositoryException;
//-----------------------------------------------< Workspace Management >---
/**
* Create a new workspace with the specified name
. If
* srcWorkspaceName
isn't null
the content of
* that workspace is 'cloned' to the new workspace as inital content,
* otherwise an empty workspace will be created.
*
* @param sessionInfo
* @param name The name of the new workspace.
* @param srcWorkspaceName The name of the workspace from which the initial
* content of the new workspace will be 'cloned'.
* @throws AccessDeniedException
* @throws UnsupportedRepositoryOperationException
* @throws NoSuchWorkspaceException
* @throws RepositoryException
* @see javax.jcr.Workspace#createWorkspace(String)
* @see javax.jcr.Workspace#createWorkspace(String, String)
* @since JCR 2.0
*/
public void createWorkspace(SessionInfo sessionInfo, String name, String srcWorkspaceName) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException;
/**
* Deletes the workspace with the specified name
.
*
* @param sessionInfo
* @param name The name of the workspace to be deleted.
* @throws AccessDeniedException
* @throws UnsupportedRepositoryOperationException
* @throws NoSuchWorkspaceException
* @throws RepositoryException
* @see javax.jcr.Workspace#deleteWorkspace(String)
* @since JCR 2.0
*/
public void deleteWorkspace(SessionInfo sessionInfo, String name) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException;
}