org.alfresco.repo.version
Class VersionServiceImpl

java.lang.Object
  extended by org.alfresco.repo.version.common.AbstractVersionServiceImpl
      extended by org.alfresco.repo.version.VersionServiceImpl
All Implemented Interfaces:
VersionBaseModel, VersionModel, VersionService
Direct Known Subclasses:
Version2ServiceImpl

public class VersionServiceImpl
extends AbstractVersionServiceImpl
implements VersionService, VersionModel

Version1 Service - implements lightWeightVersionStore


Field Summary
protected  org.alfresco.service.cmr.repository.NodeService dbNodeService
          The db node service, used as the version store implementation
protected static java.lang.String MSGID_ERR_NO_BRANCHES
           
protected static java.lang.String MSGID_ERR_NOT_FOUND
          Error message I18N id's
protected static java.lang.String MSGID_ERR_ONE_PRECEEDING
           
protected static java.lang.String MSGID_ERR_RESTORE_EXISTS
           
protected static java.lang.String MSGID_ERR_RESTORE_NO_VERSION
           
protected static java.lang.String MSGID_ERR_REVERT_MISMATCH
           
protected  BehaviourFilter policyBehaviourFilter
          Policy behaviour filter
protected  org.alfresco.service.cmr.search.SearchService searcher
          The repository searcher
 
Fields inherited from class org.alfresco.repo.version.common.AbstractVersionServiceImpl
dictionaryService, nodeService, policyComponent
 
Fields inherited from interface org.alfresco.service.cmr.version.VersionService
VERSION_STORE_PROTOCOL
 
Fields inherited from interface org.alfresco.repo.version.VersionModel
ASPECT_VERSION_STORE_ROOT, ASSOC_ROOT_VERSION, ASSOC_SUCCESSOR, CHILD_QNAME_VERSION_HISTORIES, CHILD_QNAME_VERSION_META_DATA, CHILD_QNAME_VERSIONED_ASSOCS, CHILD_QNAME_VERSIONED_ATTRIBUTES, CHILD_QNAME_VERSIONED_CHILD_ASSOCS, CHILD_QNAME_VERSIONS, CHILD_VERSION_META_DATA, CHILD_VERSIONED_ATTRIBUTES, CHILD_VERSIONED_CHILD_ASSOCS, NAMESPACE_URI, PROP_ASSOC_QNAME, PROP_ASSOC_TYPE_QNAME, PROP_FROZEN_ASPECTS, PROP_FROZEN_NODE_ID, PROP_FROZEN_NODE_STORE_ID, PROP_FROZEN_NODE_STORE_PROTOCOL, PROP_FROZEN_NODE_TYPE, PROP_IS_MULTI_VALUE, PROP_IS_PRIMARY, PROP_META_DATA_NAME, PROP_META_DATA_VALUE, PROP_MULTI_VALUE, PROP_NTH_SIBLING, PROP_QNAME, PROP_QNAME_ASSOC_QNAME, PROP_QNAME_ASSOC_TYPE_QNAME, PROP_QNAME_FROZEN_ASPECTS, PROP_QNAME_FROZEN_NODE_ID, PROP_QNAME_FROZEN_NODE_STORE_ID, PROP_QNAME_FROZEN_NODE_STORE_PROTOCOL, PROP_QNAME_FROZEN_NODE_TYPE, PROP_QNAME_IS_MULTI_VALUE, PROP_QNAME_IS_PRIMARY, PROP_QNAME_META_DATA_NAME, PROP_QNAME_META_DATA_VALUE, PROP_QNAME_MULTI_VALUE, PROP_QNAME_NTH_SIBLING, PROP_QNAME_QNAME, PROP_QNAME_TRANSLATION_VERSIONS, PROP_QNAME_VALUE, PROP_QNAME_VERSION_LABEL, PROP_QNAME_VERSION_NUMBER, PROP_QNAME_VERSIONED_NODE_ID, PROP_VALUE, STORE_ID, TYPE_QNAME_VERSION, TYPE_QNAME_VERSION_HISTORY, TYPE_QNAME_VERSION_META_DATA_VALUE, TYPE_QNAME_VERSIONED_ASSOC, TYPE_QNAME_VERSIONED_CHILD_ASSOC, TYPE_QNAME_VERSIONED_PROPERTY, TYPE_VERSION, TYPE_VERSION_META_DATA_VALUE, TYPE_VERSIONED_CHILD_ASSOC, TYPE_VERSIONED_PROPERTY
 
Fields inherited from interface org.alfresco.repo.version.VersionBaseModel
ASPECT_LOCALNAME_VERSION_STORE_ROOT, ASSOC_LOCALNAME_ROOT_VERSION, CHILD_VERSION_HISTORIES, CHILD_VERSIONED_ASSOCS, CHILD_VERSIONS, PROP_CREATED_DATE, PROP_CREATOR, PROP_DESCRIPTION, PROP_TRANSLATION_VERSIONS, PROP_VERSION_DESCRIPTION, PROP_VERSION_LABEL, PROP_VERSION_NUMBER, PROP_VERSION_TYPE, PROP_VERSIONED_NODE_ID, STORE_PROTOCOL, TYPE_VERSION_HISTORY, TYPE_VERSIONED_ASSOC
 
Constructor Summary
VersionServiceImpl()
           
 
Method Summary
protected  VersionHistory buildVersionHistory(org.alfresco.service.cmr.repository.NodeRef versionHistoryRef, org.alfresco.service.cmr.repository.NodeRef nodeRef)
          Builds a version history object from the version history reference.
 java.util.Collection createVersion(java.util.Collection nodeRefs, java.util.Map versionProperties)
          Note: we can't control the order of the list, so if we have children and parents in the list and the parents get versioned before the children and the children are not already versioned then the parents child references will be pointing to the node ref, rather than the verison history.
 Version createVersion(org.alfresco.service.cmr.repository.NodeRef nodeRef, java.util.Map versionProperties)
          Creates a new version based on the referenced node.
 java.util.Collection createVersion(org.alfresco.service.cmr.repository.NodeRef nodeRef, java.util.Map versionProperties, boolean versionChildren)
          The version's are created from the children upwards with the parent being created first.
protected  Version createVersion(org.alfresco.service.cmr.repository.NodeRef nodeRef, java.util.Map origVersionProperties, int versionNumber)
          Creates a new version of the passed node assigning the version properties accordingly.
protected  void defaultOnCreateVersion(org.alfresco.service.namespace.QName classRef, org.alfresco.service.cmr.repository.NodeRef nodeRef, java.util.Map versionProperties, PolicyScope nodeDetails)
          Default implementation of the on create version policy.
 void deleteVersion(org.alfresco.service.cmr.repository.NodeRef nodeRef, Version version)
          Delete a specific version associated with a node reference.
 void deleteVersionHistory(org.alfresco.service.cmr.repository.NodeRef nodeRef)
          Delete the version history associated with a node reference.
 void ensureVersioningEnabled(org.alfresco.service.cmr.repository.NodeRef nodeRef, java.util.Map versionProperties)
          Ensures that a node has the versionable aspect applied to it, and has at least an initial entry in the version store.
 Version getCurrentVersion(org.alfresco.service.cmr.repository.NodeRef nodeRef)
          Gets the version object for the current version of the node reference passed.
protected  org.alfresco.service.cmr.repository.NodeRef getRootNode()
          Gets the version stores root node
protected  Version getVersion(org.alfresco.service.cmr.repository.NodeRef versionRef)
          Constructs the a version object to contain the version information from the version node ref.
 VersionHistory getVersionHistory(org.alfresco.service.cmr.repository.NodeRef nodeRef)
          Gets the version history information for a node.
protected  org.alfresco.service.cmr.repository.NodeRef getVersionHistoryNodeRef(org.alfresco.service.cmr.repository.NodeRef nodeRef)
          Gets a reference to the version history node for a given 'real' node.
protected  java.util.Map getVersionMetaData(org.alfresco.service.cmr.repository.NodeRef versionNodeRef)
           
 org.alfresco.service.cmr.repository.StoreRef getVersionStoreReference()
          Gets the reference to the version store
 void initialise()
          Initialise method
protected  void initialiseWithoutBind()
           
 void registerVersionLabelPolicy(org.alfresco.service.namespace.QName typeQName, VersionServicePolicies.CalculateVersionLabelPolicy policy)
          Register version label policy for the specified type
 org.alfresco.service.cmr.repository.NodeRef restore(org.alfresco.service.cmr.repository.NodeRef nodeRef, org.alfresco.service.cmr.repository.NodeRef parentNodeRef, org.alfresco.service.namespace.QName assocTypeQName, org.alfresco.service.namespace.QName assocQName)
          By default a deep restore is performed.
 org.alfresco.service.cmr.repository.NodeRef restore(org.alfresco.service.cmr.repository.NodeRef nodeRef, org.alfresco.service.cmr.repository.NodeRef parentNodeRef, org.alfresco.service.namespace.QName assocTypeQName, org.alfresco.service.namespace.QName assocQName, boolean deep)
          Restores a node not currently present in the store, but that has a version history.
 void revert(org.alfresco.service.cmr.repository.NodeRef nodeRef)
          The node reference will be reverted to the current version.
 void revert(org.alfresco.service.cmr.repository.NodeRef nodeRef, boolean deep)
          The node reference will be reverted to the current version.
 void revert(org.alfresco.service.cmr.repository.NodeRef nodeRef, Version version)
          A deep revert will take place by default.
 void revert(org.alfresco.service.cmr.repository.NodeRef nodeRef, Version version, boolean deep)
          Revert the state of the node to the specified version.
 void setDbNodeService(org.alfresco.service.cmr.repository.NodeService nodeService)
          Sets the db node service, used as the version store implementation
 void setPolicyBehaviourFilter(BehaviourFilter policyBehaviourFilter)
          Set the policy behaviour filter
 void setSearcher(org.alfresco.service.cmr.search.SearchService searcher)
           
 
Methods inherited from class org.alfresco.repo.version.common.AbstractVersionServiceImpl
invokeAfterCreateVersion, invokeBeforeCreateVersion, invokeCalculateVersionLabel, invokeOnCreateVersion, setDictionaryService, setNodeService, setPolicyComponent
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MSGID_ERR_NOT_FOUND

protected static final java.lang.String MSGID_ERR_NOT_FOUND
Error message I18N id's

See Also:
Constant Field Values

MSGID_ERR_NO_BRANCHES

protected static final java.lang.String MSGID_ERR_NO_BRANCHES
See Also:
Constant Field Values

MSGID_ERR_RESTORE_EXISTS

protected static final java.lang.String MSGID_ERR_RESTORE_EXISTS
See Also:
Constant Field Values

MSGID_ERR_ONE_PRECEEDING

protected static final java.lang.String MSGID_ERR_ONE_PRECEEDING
See Also:
Constant Field Values

MSGID_ERR_RESTORE_NO_VERSION

protected static final java.lang.String MSGID_ERR_RESTORE_NO_VERSION
See Also:
Constant Field Values

MSGID_ERR_REVERT_MISMATCH

protected static final java.lang.String MSGID_ERR_REVERT_MISMATCH
See Also:
Constant Field Values

dbNodeService

protected org.alfresco.service.cmr.repository.NodeService dbNodeService
The db node service, used as the version store implementation


policyBehaviourFilter

protected BehaviourFilter policyBehaviourFilter
Policy behaviour filter


searcher

protected org.alfresco.service.cmr.search.SearchService searcher
The repository searcher

Constructor Detail

VersionServiceImpl

public VersionServiceImpl()
Method Detail

setDbNodeService

public void setDbNodeService(org.alfresco.service.cmr.repository.NodeService nodeService)
Sets the db node service, used as the version store implementation

Parameters:
nodeService - the node service

setSearcher

public void setSearcher(org.alfresco.service.cmr.search.SearchService searcher)
Parameters:
searcher - the searcher

setPolicyBehaviourFilter

public void setPolicyBehaviourFilter(BehaviourFilter policyBehaviourFilter)
Set the policy behaviour filter

Parameters:
policyBehaviourFilter - the policy behaviour filter

registerVersionLabelPolicy

public void registerVersionLabelPolicy(org.alfresco.service.namespace.QName typeQName,
                                       VersionServicePolicies.CalculateVersionLabelPolicy policy)
Register version label policy for the specified type

Specified by:
registerVersionLabelPolicy in interface VersionService
Parameters:
typeQName -
policy -

initialise

public void initialise()
Initialise method

Overrides:
initialise in class AbstractVersionServiceImpl

initialiseWithoutBind

protected void initialiseWithoutBind()

getVersionStoreReference

public org.alfresco.service.cmr.repository.StoreRef getVersionStoreReference()
Gets the reference to the version store

Specified by:
getVersionStoreReference in interface VersionService
Specified by:
getVersionStoreReference in class AbstractVersionServiceImpl
Returns:
reference to the version store

createVersion

public Version createVersion(org.alfresco.service.cmr.repository.NodeRef nodeRef,
                             java.util.Map versionProperties)
                      throws ReservedVersionNameException,
                             AspectMissingException
Description copied from interface: VersionService
Creates a new version based on the referenced node.

If the node has not previously been versioned then a version history and initial version will be created.

If the node referenced does not or can not have the version aspect applied to it then an exception will be raised.

The version properties are stored as version meta-data against the newly created version.

Specified by:
createVersion in interface VersionService
Parameters:
nodeRef - a node reference
versionProperties - the version properties that are stored with the newly created version, or null if there are no relevant properties
Returns:
the created version object
Throws:
ReservedVersionNameException - thrown if a reserved property name is used int he version properties provided
AspectMissingException - thrown if the version aspect is missing
See Also:
VersionCounterService#nextVersionNumber(StoreRef)

createVersion

public java.util.Collection createVersion(org.alfresco.service.cmr.repository.NodeRef nodeRef,
                                          java.util.Map versionProperties,
                                          boolean versionChildren)
                                   throws ReservedVersionNameException,
                                          AspectMissingException
The version's are created from the children upwards with the parent being created first. This will ensure that the child version references in the version node will point to the version history nodes for the (possibly) newly created version histories.

Specified by:
createVersion in interface VersionService
Parameters:
nodeRef - a node reference
versionProperties - the version properties that are stored with the newly created version
versionChildren - if true then the children of the referenced node are also versioned, false otherwise
Returns:
the created version object(s)
Throws:
ReservedVersionNameException - thrown if a reserved property name is used int he version properties provided
AspectMissingException - thrown if the version aspect is missing

createVersion

public java.util.Collection createVersion(java.util.Collection nodeRefs,
                                          java.util.Map versionProperties)
                                   throws ReservedVersionNameException,
                                          AspectMissingException
Note: we can't control the order of the list, so if we have children and parents in the list and the parents get versioned before the children and the children are not already versioned then the parents child references will be pointing to the node ref, rather than the verison history.

Specified by:
createVersion in interface VersionService
Parameters:
nodeRefs - a list of node references
versionProperties - version property values
Returns:
a collection of newly created versions
Throws:
ReservedVersionNameException - thrown if a reserved property name is used in the version properties provided
AspectMissingException - thrown if the version aspect is missing

createVersion

protected Version createVersion(org.alfresco.service.cmr.repository.NodeRef nodeRef,
                                java.util.Map origVersionProperties,
                                int versionNumber)
                         throws ReservedVersionNameException
Creates a new version of the passed node assigning the version properties accordingly.

Parameters:
nodeRef - a node reference
versionProperties - the version properties
versionNumber - the version number
Returns:
the newly created version
Throws:
ReservedVersionNameException - thrown if there is a name clash in the version properties

getVersionHistory

public VersionHistory getVersionHistory(org.alfresco.service.cmr.repository.NodeRef nodeRef)
Description copied from interface: VersionService
Gets the version history information for a node.

If the node has not been versioned then null is returned.

If the node referenced does not or can not have the version aspect applied to it then an exception will be raised.

Specified by:
getVersionHistory in interface VersionService
Parameters:
nodeRef - a node reference
Returns:
the version history information
See Also:
VersionService.getVersionHistory(NodeRef)

getCurrentVersion

public Version getCurrentVersion(org.alfresco.service.cmr.repository.NodeRef nodeRef)
Description copied from interface: VersionService
Gets the version object for the current version of the node reference passed.

Returns null if the node is not versionable or has not been versioned.

Specified by:
getCurrentVersion in interface VersionService
Parameters:
nodeRef - the node reference
Returns:
the version object for the current version
See Also:
VersionService.getCurrentVersion(NodeRef)

getVersionMetaData

protected java.util.Map getVersionMetaData(org.alfresco.service.cmr.repository.NodeRef versionNodeRef)

getRootNode

protected org.alfresco.service.cmr.repository.NodeRef getRootNode()
Gets the version stores root node

Returns:
the node ref to the root node of the version store

buildVersionHistory

protected VersionHistory buildVersionHistory(org.alfresco.service.cmr.repository.NodeRef versionHistoryRef,
                                             org.alfresco.service.cmr.repository.NodeRef nodeRef)
Builds a version history object from the version history reference.

The node ref is passed to enable the version history to be scoped to the appropriate branch in the version history.

Parameters:
versionHistoryRef - the node ref for the version history
nodeRef - the node reference
Returns:
a constructed version history object

getVersion

protected Version getVersion(org.alfresco.service.cmr.repository.NodeRef versionRef)
Constructs the a version object to contain the version information from the version node ref.

Parameters:
versionRef - the version reference
Returns:
object containing verison data

getVersionHistoryNodeRef

protected org.alfresco.service.cmr.repository.NodeRef getVersionHistoryNodeRef(org.alfresco.service.cmr.repository.NodeRef nodeRef)
Gets a reference to the version history node for a given 'real' node.

Parameters:
nodeRef - a node reference
Returns:
a reference to the version history node, null of none

ensureVersioningEnabled

public void ensureVersioningEnabled(org.alfresco.service.cmr.repository.NodeRef nodeRef,
                                    java.util.Map versionProperties)
Description copied from interface: VersionService
Ensures that a node has the versionable aspect applied to it, and has at least an initial entry in the version store. If any of these requirements are missing, then they will be fixed.

Specified by:
ensureVersioningEnabled in interface VersionService
Parameters:
nodeRef - the node reference
versionProperties - the version properties to apply if versioning isn't currently enabled for the node
See Also:
org.alfresco.cms.version.VersionService#ensureVersioningEnabled(NodeRef,Map)

revert

public void revert(org.alfresco.service.cmr.repository.NodeRef nodeRef)
Description copied from interface: VersionService
The node reference will be reverted to the current version.

A deep revert will be performed.

Specified by:
revert in interface VersionService
Parameters:
nodeRef - the node reference
See Also:
org.alfresco.cms.version.VersionService#revert(NodeRef)

revert

public void revert(org.alfresco.service.cmr.repository.NodeRef nodeRef,
                   boolean deep)
Description copied from interface: VersionService
The node reference will be reverted to the current version.

Specified by:
revert in interface VersionService
Parameters:
nodeRef - the node reference
deep - true if a deep revert is to be performed, flase otherwise
See Also:
VersionService.revert(org.alfresco.service.cmr.repository.NodeRef, boolean)

revert

public void revert(org.alfresco.service.cmr.repository.NodeRef nodeRef,
                   Version version)
Description copied from interface: VersionService
A deep revert will take place by default.

Specified by:
revert in interface VersionService
Parameters:
nodeRef - the node reference
version - the version to revert to
See Also:
VersionService.revert(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.version.Version)

revert

public void revert(org.alfresco.service.cmr.repository.NodeRef nodeRef,
                   Version version,
                   boolean deep)
Description copied from interface: VersionService
Revert the state of the node to the specified version.

Any changes made to the node will be lost and the state of the node will reflect that of the version specified.

The version label property on the node reference will remain unchanged.

If the node is further versioned then the new version will be created at the head of the version history graph. A branch will not be created.

If a deep revert is to be performed then any child nodes that are no longer present will be deep restored (if appropriate) otherwise child associations to deleted, versioned nodes will not be restored.

Specified by:
revert in interface VersionService
Parameters:
nodeRef - the node reference
version - the version to revert to
deep - true is a deep revert is to be performed, false otherwise.
See Also:
VersionService.revert(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.version.Version, boolean)

restore

public org.alfresco.service.cmr.repository.NodeRef restore(org.alfresco.service.cmr.repository.NodeRef nodeRef,
                                                           org.alfresco.service.cmr.repository.NodeRef parentNodeRef,
                                                           org.alfresco.service.namespace.QName assocTypeQName,
                                                           org.alfresco.service.namespace.QName assocQName)
Description copied from interface: VersionService
By default a deep restore is performed.

Specified by:
restore in interface VersionService
Parameters:
nodeRef - the node reference to a node that no longer exists in the store
parentNodeRef - the new parent of the restored node
assocTypeQName - the assoc type qname
assocQName - the assoc qname
Returns:
the newly restored node reference
See Also:
VersionService.restore(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, org.alfresco.service.namespace.QName)

restore

public org.alfresco.service.cmr.repository.NodeRef restore(org.alfresco.service.cmr.repository.NodeRef nodeRef,
                                                           org.alfresco.service.cmr.repository.NodeRef parentNodeRef,
                                                           org.alfresco.service.namespace.QName assocTypeQName,
                                                           org.alfresco.service.namespace.QName assocQName,
                                                           boolean deep)
Description copied from interface: VersionService
Restores a node not currently present in the store, but that has a version history.

The restored node will be at the head (most resent version).

Restoration will fail if there is no version history for the specified node id in the specified store.

If the node already exists in the store then an exception will be raised.

Once the node is restored it is reverted to the head version in the appropriate version history tree. If deep is set to true then this will be a deep revert, false otherwise.

Specified by:
restore in interface VersionService
Parameters:
nodeRef - the node reference to a node that no longer exists in the store
parentNodeRef - the new parent of the restored node
assocTypeQName - the assoc type qname
assocQName - the assoc qname
deep - true is a deep revert should be performed once the node has been restored, false otherwise
Returns:
the newly restored node reference
See Also:
VersionService.restore(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, org.alfresco.service.namespace.QName, boolean)

deleteVersionHistory

public void deleteVersionHistory(org.alfresco.service.cmr.repository.NodeRef nodeRef)
                          throws AspectMissingException
Description copied from interface: VersionService
Delete the version history associated with a node reference.

This operation is permanent, all versions in the version history are deleted and cannot be retrieved.

The current version label for the node reference is reset and any subsequent versions of the node will result in a new version history being created.

Specified by:
deleteVersionHistory in interface VersionService
Parameters:
nodeRef - the node reference
Throws:
AspectMissingException - thrown if the version aspect is missing
See Also:
org.alfresco.cms.version.VersionService#deleteVersionHistory(NodeRef)

deleteVersion

public void deleteVersion(org.alfresco.service.cmr.repository.NodeRef nodeRef,
                          Version version)
Description copied from interface: VersionService
Delete a specific version associated with a node reference.

This operation is permanent, the specific version in the version history is deleted and cannot be retrieved.

If this is the last version, then the current version label for the node reference is reset and any subsequent versions of the node will result in a new version history being created.

Specified by:
deleteVersion in interface VersionService
Parameters:
nodeRef - the node reference
version - the version to delete

defaultOnCreateVersion

protected void defaultOnCreateVersion(org.alfresco.service.namespace.QName classRef,
                                      org.alfresco.service.cmr.repository.NodeRef nodeRef,
                                      java.util.Map versionProperties,
                                      PolicyScope nodeDetails)
Description copied from class: AbstractVersionServiceImpl
Default implementation of the on create version policy. Override if you wish to supply your own policy.

Specified by:
defaultOnCreateVersion in class AbstractVersionServiceImpl


Copyright © 2005 - 2010 Alfresco Software, Inc. All Rights Reserved.