diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java
index 6e54dbcf03..f4fa00e1d0 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java
@@ -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)
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/version/RecordableVersionService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/version/RecordableVersionService.java
index 63aad9852f..d33e5ac532 100755
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/version/RecordableVersionService.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/version/RecordableVersionService.java
@@ -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.
*
* 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.
+ *
+ * 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);
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/version/RecordableVersionServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/version/RecordableVersionServiceImpl.java
index b2508898fb..8463159849 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/version/RecordableVersionServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/version/RecordableVersionServiceImpl.java
@@ -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 autoVersionProperties = new HashMap(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;
+
}
}
diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/version/DeclareAsRecordVersionTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/version/DeclareAsRecordVersionTest.java
index 3e2d83f0f6..6010515860 100644
--- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/version/DeclareAsRecordVersionTest.java
+++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/version/DeclareAsRecordVersionTest.java
@@ -102,9 +102,10 @@ public class DeclareAsRecordVersionTest extends RecordableVersionsBaseTest
}
/**
- * Given versionable content with a recorded latest version
- * When I declare a version record
- * Then nothing happens since the latest version is already recorded And a warning is logged
+ * Given versionable content with a recorded latest version
+ * When I declare a version record
+ * Then nothing happens since the latest version is already recorded
+ * And a warning is logged
*/
public void testDeclareLatestVersionAsRecordButAlreadyRecorded()
{
@@ -215,6 +216,98 @@ public class DeclareAsRecordVersionTest extends RecordableVersionsBaseTest
*
* @see https://issues.alfresco.com/jira/browse/RM-2368
*/
+
+ public void testCreateRecordFromLatestVersionAutoTrue()
+ {
+ doBehaviourDrivenTest(new BehaviourDrivenTest(dmCollaborator)
+ {
+ private NodeRef myDocument;
+ private NodeRef versionedRecord;
+ private Map versionProperties;
+ private Date createdDate;
+ private Date modificationDate;
+ private String record_name = "initial_name";
+ private String AUTO_VERSION_DESCRIPTION = "Auto Version on Record Creation";
+ private boolean autoVersion = true;
+
+ public void given() throws Exception
+ {
+ // create a document
+ myDocument = fileFolderService.create(dmFolder, GUID.generate(), ContentModel.TYPE_CONTENT).getNodeRef();
+ createdDate = (Date) nodeService.getProperty(myDocument, ContentModel.PROP_CREATED);
+ modificationDate = (Date) nodeService.getProperty(myDocument, ContentModel.PROP_MODIFIED);
+ assertTrue("Modified date must be after or on creation date", createdDate.getTime() == modificationDate.getTime());
+
+ // Set initial set of properties
+ Map properties = new HashMap(3);
+ // Ensure default behaviour autoversion on change properties is set to false
+ properties.put(ContentModel.PROP_AUTO_VERSION_PROPS, false);
+ // Set initial name
+ properties.put(ContentModel.PROP_NAME, "initial_name");
+ nodeService.setProperties(myDocument, properties);
+ nodeService.setProperty(myDocument, ContentModel.PROP_DESCRIPTION, DESCRIPTION);
+ nodeService.addAspect(myDocument, ContentModel.ASPECT_OWNABLE, null);
+ // make sure document is versionable
+ nodeService.addAspect(myDocument, ContentModel.ASPECT_VERSIONABLE, null);
+ // Change Type to a custom document
+ nodeService.setType(myDocument, TYPE_CUSTOM_TYPE);
+
+ // setup version properties
+ versionProperties = new HashMap(2);
+ versionProperties.put(Version.PROP_DESCRIPTION, DESCRIPTION);
+ versionProperties.put(VersionModel.PROP_VERSION_TYPE, VersionType.MAJOR);
+
+ // create initial version
+ versionService.createVersion(myDocument, versionProperties);
+ }
+
+ public void when()
+ {
+ // Apply a custom aspect
+ nodeService.addAspect(myDocument, ContentModel.ASPECT_TITLED, null);
+ // Update properties
+ nodeService.setProperty(myDocument, ContentModel.PROP_NAME, "updated_name");
+ nodeService.setProperty(myDocument, ContentModel.PROP_DESCRIPTION, DESCRIPTION);
+ // test RM-2368
+ versionedRecord = recordableVersionService.createRecordFromLatestVersion(filePlan, myDocument, autoVersion);
+ }
+
+ public void then()
+ {
+ // Properties updated / flag as modified
+ // check the created record
+ assertNotNull(versionedRecord);
+ assertTrue(recordService.isRecord(versionedRecord));
+
+ // check the record type is correct
+ assertEquals(TYPE_CUSTOM_TYPE, nodeService.getType(versionedRecord));
+
+ // assert the current version is recorded
+ assertTrue(recordableVersionService.isCurrentVersionRecorded(myDocument));
+
+ // get name of record
+ record_name = (String) nodeService.getProperty(versionedRecord, ContentModel.PROP_NAME);
+
+ // new version is create, current node was modified
+ assertTrue("Name was updated:", record_name.contains("updated_name"));
+ // check record
+ checkRecordedVersion(myDocument, AUTO_VERSION_DESCRIPTION, "1.1");
+
+ }
+
+ });
+
+ }
+
+
+ /**
+ *
+ * Given versionable content with a recorded latest version
+ * When I declare this version record
+ * Then a new minor version is created for document
+ *
+ * @see https://issues.alfresco.com/jira/browse/RM-2368
+ */
public void testCreateRecordFromLatestVersion()
{
doBehaviourDrivenTest(new BehaviourDrivenTest(dmCollaborator)
@@ -223,10 +316,8 @@ public class DeclareAsRecordVersionTest extends RecordableVersionsBaseTest
private NodeRef versionedRecord;
private Map versionProperties;
private Date createdDate;
- private Date frozenModifDate;
private Date modificationDate;
private String record_name = "initial_name";
- private String AUTO_VERSION_DESCRIPTION = "Auto Version on Record Creation";
private boolean autoVersion = false;
public void given() throws Exception
@@ -251,8 +342,6 @@ public class DeclareAsRecordVersionTest extends RecordableVersionsBaseTest
// Change Type to a custom document
nodeService.setType(myDocument, TYPE_CUSTOM_TYPE);
- Date modificationDate1 = (Date) nodeService.getProperty(myDocument, ContentModel.PROP_MODIFIED);
- assertTrue("Frozen modification date", modificationDate.getTime() == modificationDate1.getTime());
// setup version properties
versionProperties = new HashMap(2);
versionProperties.put(Version.PROP_DESCRIPTION, DESCRIPTION);
@@ -260,35 +349,17 @@ public class DeclareAsRecordVersionTest extends RecordableVersionsBaseTest
// create initial version
versionService.createVersion(myDocument, versionProperties);
- Version version = versionService.getCurrentVersion(myDocument);
- frozenModifDate = version.getFrozenModifiedDate();
-
- // get autoversion flag from cofiguratie
- autoVersion = recordableVersionService.isEnableAutoVersionOnRecordCreation();
}
public void when()
{
- // current node is not dirty
- assertFalse(isCurrentVersionDirty(myDocument));
-
- if (autoVersion)
- {
- // Apply a custom aspect
- nodeService.addAspect(myDocument, ContentModel.ASPECT_TITLED, null);
- // Update properties
- nodeService.setProperty(myDocument, ContentModel.PROP_NAME, "updated_name");
- nodeService.setProperty(myDocument, ContentModel.PROP_DESCRIPTION, DESCRIPTION);
- // node should be modified
- assertTrue(isCurrentVersionDirty(myDocument));
- }
- else
- {
- assertFalse(isCurrentVersionDirty(myDocument));
- }
+ // Apply a custom aspect
+ nodeService.addAspect(myDocument, ContentModel.ASPECT_TITLED, null);
+ // Update properties
+ nodeService.setProperty(myDocument, ContentModel.PROP_NAME, "initial_name");
+ nodeService.setProperty(myDocument, ContentModel.PROP_DESCRIPTION, DESCRIPTION);
// test RM-2368
- versionedRecord = recordableVersionService.createRecordFromLatestVersion(filePlan, myDocument);
-
+ versionedRecord = recordableVersionService.createRecordFromLatestVersion(filePlan, myDocument, autoVersion);
}
public void then()
@@ -307,45 +378,16 @@ public class DeclareAsRecordVersionTest extends RecordableVersionsBaseTest
// get name of record
record_name = (String) nodeService.getProperty(versionedRecord, ContentModel.PROP_NAME);
- if (autoVersion)
- {
- // new version is create, current node was modified
- assertTrue("Name was updated:", record_name.contains("updated_name"));
- // check record
- checkRecordedVersion(myDocument, AUTO_VERSION_DESCRIPTION, "1.1");
- }
- else
- {
- // record is created based on existing frozen, which does not contain any modification of node
- assertTrue("Name is not modified: ", record_name.contains("initial_name"));
- checkRecordedVersion(myDocument, DESCRIPTION, "1.0");
- }
- }
-
- public boolean isCurrentVersionDirty(NodeRef nodeRef)
- {
- if (nodeService.hasAspect(nodeRef, ContentModel.ASPECT_VERSIONABLE) == true)
- {
- // get the latest version
- Version currentVersion = versionService.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 (modificationDate.getTime() > frozenModificationDate.getTime()) { return true; }
- }
- else
- {
- return true;
- }
- }
- return false;
+ // record is created based on existing frozen, which does not contain any modification of node
+ assertTrue("Name is not modified: ", record_name.contains("initial_name"));
+ checkRecordedVersion(myDocument, DESCRIPTION, "1.0");
+
}
+
});
}
+
}