org.apache.jackrabbit.core.version
Class VersionManagerImpl

java.lang.Object
  extended byorg.apache.jackrabbit.core.version.AbstractVersionManager
      extended byorg.apache.jackrabbit.core.version.VersionManagerImpl
All Implemented Interfaces:
EventStateCollectionFactory, VersionManager

public class VersionManagerImpl
extends org.apache.jackrabbit.core.version.AbstractVersionManager
implements EventStateCollectionFactory

This Class implements a VersionManager.


Field Summary
protected  org.apache.jackrabbit.core.version.NodeStateEx historyRoot
          Persistent root node of the version histories.
protected  LocalItemStateManager stateMgr
          State manager for the version storage.
 
Constructor Summary
VersionManagerImpl(PersistenceManager pMgr, NodeTypeRegistry ntReg, DelegatingObservationDispatcher obsMgr, NodeId rootId, NodeId rootParentId)
          Creates a bew vesuion manager
 
Method Summary
protected  InternalVersion checkin(org.apache.jackrabbit.core.version.InternalVersionHistoryImpl history, NodeImpl node)
          Checks in a node
 Version checkin(NodeImpl node)
          invokes the checkin() on the persistent version manager and remaps the newly created version objects.

This method must not be synchronized since it could cause deadlocks with item-reading listeners in the observation thread.

 void close()
          Close this version manager. After having closed a persistence manager, further operations on this object are treated as illegal and throw
 EventStateCollection createEventStateCollection()
          Creates an EventStateCollection.

This object uses one instance of a LocalItemStateManager to update data on behalf of many sessions.

 VersionHistory createVersionHistory(Session session, NodeState node)
          Creates a new version history. This action is needed either when creating a new 'mix:versionable' node or when adding the 'mix:versionable' mixin to a node.

This method must not be synchronized since it could cause deadlocks with item-reading listeners in the observation thread.

protected  InternalVersionItem getItem(NodeId id)
          Returns the item with the given persistent id. Subclass responsibility.
protected  List getItemReferences(InternalVersionItem item)
          Returns the item references that reference the given version item. Subclass responsiblity.
 InternalVersion getVersion(NodeId id)
          Returns the version with the given id
 InternalVersionHistory getVersionHistory(NodeId id)
          Returns the version history with the given id
 VersionHistory getVersionHistory(Session session, NodeState node)
          Returns the version history of the specified node or null if the given node doesn't (yet) have an associated version history.
 VirtualItemStateProvider getVirtualItemStateProvider()
          returns the virtual item state provider that exposes the internal versions as items.
 boolean hasItem(NodeId id)
          Return a flag indicating if the item specified exists. Subclass responsibility.
 boolean hasVersion(NodeId id)
          Checks if the version with the given id exists
 boolean hasVersionHistory(NodeId id)
          Checks if the version history with the given id exists
 void itemsUpdated(Collection items)
          Invoked by some external source to indicate that some items in the versions tree were updated.
protected  void removeVersion(org.apache.jackrabbit.core.version.InternalVersionHistoryImpl history, QName name)
          Removes the specified version from the history
 void removeVersion(VersionHistory history, QName name)
          Removes the specified version from the given version history.

This method must not be synchronized since it could cause deadlocks with item-reading listeners in the observation thread.

 void setItemReferences(InternalVersionItem item, List references)
          {@inheritDoc}
 boolean setNodeReferences(NodeReferences refs)
           
protected  InternalVersion setVersionLabel(org.apache.jackrabbit.core.version.InternalVersionHistoryImpl history, QName version, QName label, boolean move)
          Set version label on the specified version.
 Version setVersionLabel(VersionHistory history, QName version, QName label, boolean move)
          Sets the version label to the given version. If the label is already assigned to another version, a VersionException is thrown unless move is true. If version is null, the label is removed from the respective version. In either case, the version the label was previously assigned is returned, or null of the label was not moved.

This method must not be synchronized since it could cause deadlocks with item-reading listeners in the observation thread.

protected  void versionCreated(InternalVersion version)
          Invoked when a new internal item has been created.
protected  void versionDestroyed(InternalVersion version)
          Invoked when a new internal item has been destroyed.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

stateMgr

protected LocalItemStateManager stateMgr
State manager for the version storage.


historyRoot

protected org.apache.jackrabbit.core.version.NodeStateEx historyRoot
Persistent root node of the version histories.

Constructor Detail

VersionManagerImpl

public VersionManagerImpl(PersistenceManager pMgr,
                          NodeTypeRegistry ntReg,
                          DelegatingObservationDispatcher obsMgr,
                          NodeId rootId,
                          NodeId rootParentId)
                   throws RepositoryException
Creates a bew vesuion manager

Method Detail

getVirtualItemStateProvider

public VirtualItemStateProvider getVirtualItemStateProvider()
returns the virtual item state provider that exposes the internal versions as items.

Specified by:
getVirtualItemStateProvider in interface VersionManager
Returns:
the virtual item state provider.

close

public void close()
           throws Exception
Close this version manager. After having closed a persistence manager, further operations on this object are treated as illegal and throw

Specified by:
close in interface VersionManager
Throws:
Exception - if an error occurs

createVersionHistory

public VersionHistory createVersionHistory(Session session,
                                           NodeState node)
                                    throws RepositoryException
Creates a new version history. This action is needed either when creating a new 'mix:versionable' node or when adding the 'mix:versionable' mixin to a node.

This method must not be synchronized since it could cause deadlocks with item-reading listeners in the observation thread.

Specified by:
createVersionHistory in interface VersionManager
Parameters:
node -
Returns:
Throws:
RepositoryException
See Also:
VersionManager.getVersionHistory(Session, NodeState)

hasItem

public boolean hasItem(NodeId id)
Return a flag indicating if the item specified exists. Subclass responsibility.

Parameters:
id - the id of the item
Returns:
true if the item exists; false otherwise

getItem

protected InternalVersionItem getItem(NodeId id)
                               throws RepositoryException
Returns the item with the given persistent id. Subclass responsibility.

Parameters:
id - the id of the item
Returns:
version item
Throws:
RepositoryException - if an error occurs

checkin

public Version checkin(NodeImpl node)
                throws RepositoryException
invokes the checkin() on the persistent version manager and remaps the newly created version objects.

This method must not be synchronized since it could cause deadlocks with item-reading listeners in the observation thread.

Specified by:
checkin in interface VersionManager
Parameters:
node -
Returns:
Throws:
RepositoryException

removeVersion

public void removeVersion(VersionHistory history,
                          QName name)
                   throws VersionException,
                          RepositoryException
Removes the specified version from the given version history.

This method must not be synchronized since it could cause deadlocks with item-reading listeners in the observation thread.

Specified by:
removeVersion in interface VersionManager
Parameters:
history -
name -
Throws:
RepositoryException
VersionException

setVersionLabel

public Version setVersionLabel(VersionHistory history,
                               QName version,
                               QName label,
                               boolean move)
                        throws RepositoryException
Sets the version label to the given version. If the label is already assigned to another version, a VersionException is thrown unless move is true. If version is null, the label is removed from the respective version. In either case, the version the label was previously assigned is returned, or null of the label was not moved.

This method must not be synchronized since it could cause deadlocks with item-reading listeners in the observation thread.

Specified by:
setVersionLabel in interface VersionManager
Parameters:
history -
version -
label -
move -
Returns:
Throws:
RepositoryException

itemsUpdated

public void itemsUpdated(Collection items)
Invoked by some external source to indicate that some items in the versions tree were updated. Version manager should flush its own caches.

Parameters:
items - items updated

setNodeReferences

public boolean setNodeReferences(NodeReferences refs)

setItemReferences

public void setItemReferences(InternalVersionItem item,
                              List references)
{@inheritDoc}


getItemReferences

protected List getItemReferences(InternalVersionItem item)
Returns the item references that reference the given version item. Subclass responsiblity.

Parameters:
item - version item
Returns:
list of item references, may be empty.

createEventStateCollection

public EventStateCollection createEventStateCollection()
                                                throws RepositoryException
Creates an EventStateCollection.

This object uses one instance of a LocalItemStateManager to update data on behalf of many sessions. In order to maintain the association between update operation and session who actually invoked the update, an internal event source is used.

Specified by:
createEventStateCollection in interface EventStateCollectionFactory
Returns:
a new EventStateCollection
Throws:
RepositoryException - if creation fails for some reason

getVersion

public InternalVersion getVersion(NodeId id)
                           throws RepositoryException
Returns the version with the given id

Specified by:
getVersion in interface VersionManager
Parameters:
id -
Returns:
the version.
Throws:
RepositoryException

getVersionHistory

public InternalVersionHistory getVersionHistory(NodeId id)
                                         throws RepositoryException
Returns the version history with the given id

Specified by:
getVersionHistory in interface VersionManager
Parameters:
id -
Returns:
the version history.
Throws:
RepositoryException

hasVersionHistory

public boolean hasVersionHistory(NodeId id)
Checks if the version history with the given id exists

Specified by:
hasVersionHistory in interface VersionManager
Parameters:
id -
Returns:
true if the version history exists.

hasVersion

public boolean hasVersion(NodeId id)
Checks if the version with the given id exists

Specified by:
hasVersion in interface VersionManager
Parameters:
id -
Returns:
true if the version exists.

getVersionHistory

public VersionHistory getVersionHistory(Session session,
                                        NodeState node)
                                 throws RepositoryException
Returns the version history of the specified node or null if the given node doesn't (yet) have an associated version history.

Specified by:
getVersionHistory in interface VersionManager
Parameters:
session -
node - node whose version history should be returned
Returns:
the version history of the specified node or null if the given node doesn't (yet) have an associated version history.
Throws:
RepositoryException - if an error occurs
See Also:
VersionManager.createVersionHistory(Session, NodeState)

checkin

protected InternalVersion checkin(org.apache.jackrabbit.core.version.InternalVersionHistoryImpl history,
                                  NodeImpl node)
                           throws RepositoryException
Checks in a node

Parameters:
node - node to checkin
Returns:
internal version
Throws:
RepositoryException - if an error occurs
See Also:
Node.checkin()

removeVersion

protected void removeVersion(org.apache.jackrabbit.core.version.InternalVersionHistoryImpl history,
                             QName name)
                      throws VersionException,
                             RepositoryException
Removes the specified version from the history

Parameters:
history - the version history from where to remove the version.
name - the name of the version to remove.
Throws:
VersionException - if the version history does not have a version with name.
RepositoryException - if any other error occurs.

setVersionLabel

protected InternalVersion setVersionLabel(org.apache.jackrabbit.core.version.InternalVersionHistoryImpl history,
                                          QName version,
                                          QName label,
                                          boolean move)
                                   throws RepositoryException
Set version label on the specified version.

Parameters:
history - version history
version - version name
label - version label
move - true to move from existing version; false otherwise
Throws:
RepositoryException - if an error occurs

versionCreated

protected void versionCreated(InternalVersion version)
Invoked when a new internal item has been created.

Parameters:
version - internal version item

versionDestroyed

protected void versionDestroyed(InternalVersion version)
Invoked when a new internal item has been destroyed.

Parameters:
version - internal version item


Copyright © 2004-2006 The Apache Software Foundation. All Rights Reserved.