RM-2368 Initial version record does not inherit document type and

aspects from original document
This commit is contained in:
Mihai Cozma
2016-10-06 13:03:40 +03:00
parent cf602aa9e1
commit 98ca0abe19
4 changed files with 156 additions and 101 deletions

View File

@@ -1039,7 +1039,7 @@ public class RecordServiceImpl extends BaseBehaviourBean
NodeRef versionRecord = null;
recordableVersionService.createFreezeVersion(nodeRef);
recordableVersionService.createSnapshotVersion(nodeRef);
// wire record up to previous record
VersionHistory versionHistory = versionService.getVersionHistory(nodeRef);
if (versionHistory != null)

View File

@@ -64,7 +64,7 @@ public interface RecordableVersionService
Version getRecordedVersion(NodeRef record);
/**
* Creates a record from the latest version, marking it as recorded.
* Creates a record from the latest frozen version, marking it as recorded.
* <p>
* Does not create a record if the node is not versionable or the latest version is already recorded.
*
@@ -72,6 +72,19 @@ public interface RecordableVersionService
* @return NodeRef node reference to the created record.
*/
NodeRef createRecordFromLatestVersion(NodeRef filePlan, NodeRef nodeRef);
/**
* Creates a record from the latest version, marking it as recorded.
* <p>
* Does not create a record if the node is not versionable or the latest version is already recorded.
*
* @param nodeRef parent node reference
* @param nodeRef node reference
* @param autoVersion true, create new record version from latest version, false creates a record from the latest frozen version
* @return NodeRef node reference to the created record.
*
*/
NodeRef createRecordFromLatestVersion(NodeRef filePlan, NodeRef nodeRef, boolean autoVersion);
/**
* Indicates whether a record version is destroyed or not.
@@ -91,17 +104,16 @@ public interface RecordableVersionService
void destroyRecordedVersion(Version version);
/**
* Flag that indicate to create new version on record creation if current state of node is modified
* Flag that indicate to create new version on record creation if current node is modified
*
* @return boolean
* @return boolean true to auto-version on record creation, false to use latest versioned version
*/
public boolean isEnableAutoVersionOnRecordCreation();
boolean isEnableAutoVersionOnRecordCreation();
/**
* Create a snapshot - 'freeze' version of current node
* Create a snapshot version of current node
*
* @param nodeRef node reference
* @return version version or null
*/
Version createFreezeVersion(NodeRef nodeRef);
void createSnapshotVersion(NodeRef nodeRef);
}

View File

@@ -673,6 +673,17 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
{
return new NodeRef(convertStoreRef(nodeRef.getStoreRef()), nodeRef.getId());
}
/**
* @see org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionService#createRecordFromLatestVersion(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef, autoVersion)
*/
@Override
public NodeRef createRecordFromLatestVersion(final NodeRef filePlan, final NodeRef nodeRef, final boolean isEnableAutoVersionOnRecordCreation)
{
setEnableAutoVersionOnRecordCreation(isEnableAutoVersionOnRecordCreation);
return createRecordFromLatestVersion(filePlan, nodeRef);
}
/**
* @see org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionService#createRecordFromLatestVersion(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef)
@@ -688,7 +699,7 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
// check for versionable aspect
if (nodeService.hasAspect(nodeRef, ContentModel.ASPECT_VERSIONABLE))
{
createFreezeVersion(nodeRef);
createSnapshotVersion(nodeRef);
// get the latest version
final Version currentVersion = getCurrentVersion(nodeRef);
@@ -902,37 +913,27 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
*/
public boolean isCurrentVersionDirty(NodeRef nodeRef)
{
if (!nodeService.hasAspect(nodeRef, ContentModel.ASPECT_VERSIONABLE)) { return false; }
if (nodeService.hasAspect(nodeRef, ContentModel.ASPECT_VERSIONABLE) == true)
{
// get the latest version
Version currentVersion = getCurrentVersion(nodeRef);
Date modificationDate = (Date) nodeService.getProperty(nodeRef, ContentModel.PROP_MODIFIED);
if (currentVersion != null)
{
// grab the frozen state
NodeRef currentFrozenState = currentVersion.getFrozenStateNodeRef();
Date frozenModificationDate = (Date) nodeService.getProperty(currentFrozenState, ContentModel.PROP_MODIFIED);
if (frozenModificationDate != null)
{
if (modificationDate.getTime() > frozenModificationDate.getTime()) { return true; }
}
}
else
{
return true;
}
// get the latest version
Version currentVersion = getCurrentVersion(nodeRef);
Date modificationDate = (Date) nodeService.getProperty(nodeRef, ContentModel.PROP_MODIFIED);
}
return false;
if (currentVersion == null) { return true; }
// grab the frozen state
NodeRef currentFrozenState = currentVersion.getFrozenStateNodeRef();
Date frozenModificationDate = (Date) nodeService.getProperty(currentFrozenState, ContentModel.PROP_MODIFIED);
boolean versionStoreOutdated = ((frozenModificationDate != null) && (modificationDate.getTime() > frozenModificationDate.getTime()));
return versionStoreOutdated;
}
/**
* @see RecordableVersionService#createFreezeVersion(NodeRef)
* @see RecordableVersionService#createSnapshotVersion(NodeRef)
*/
public Version createFreezeVersion(NodeRef nodeRef)
public void createSnapshotVersion(NodeRef nodeRef)
{
Version newVersion = null;
boolean autoVersion = isEnableAutoVersionOnRecordCreation();
// if the flag autoversion on record creation set, create new version on dirty nodes
if (autoVersion && isCurrentVersionDirty(nodeRef))
@@ -940,8 +941,8 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
Map<String, Serializable> autoVersionProperties = new HashMap<String, Serializable>(2);
autoVersionProperties.put(VersionModel.PROP_VERSION_TYPE, VersionType.MINOR);
autoVersionProperties.put(VersionModel.PROP_DESCRIPTION, I18NUtil.getMessage(AUTO_VERSION_ON_RECORD_CREATION));
newVersion = createVersion(nodeRef, autoVersionProperties);
createVersion(nodeRef, autoVersionProperties);
}
return newVersion;
}
}