RM-1862 (Reference to rejected record is remaining)

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.3@97058 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Tuna Aksoy
2015-02-13 17:09:46 +00:00
parent eef05aea17
commit 2ee573c5ba
9 changed files with 204 additions and 91 deletions

View File

@@ -49,4 +49,8 @@ public interface RecordsManagementCustomModel
// Some Custom references which are present on system startup.
QName CUSTOM_REF_VERSIONS = QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "versions");
QName CUSTOM_REF_SUPERSEDES = QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "supersedes");
QName CUSTOM_REF_OBSOLETES = QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "obsoletes");
QName CUSTOM_REF_SUPPORTS = QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "supports");
QName CUSTOM_REF_CROSSREFERENCE = QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "crossreference");
QName CUSTOM_REF_RENDITION = QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "rendition");
}

View File

@@ -25,7 +25,6 @@ import java.util.Set;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementPolicies;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementCustomModel;
import org.alfresco.module.org_alfresco_module_rm.model.behaviour.AbstractDisposableItem;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.module.org_alfresco_module_rm.security.ExtendedSecurityService;
@@ -150,7 +149,7 @@ public class RecordAspect extends AbstractDisposableItem
public void onCreateReference(NodeRef fromNodeRef, NodeRef toNodeRef, QName reference)
{
// Deal with versioned records
if (reference.equals(QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "versions")))
if (reference.equals(CUSTOM_REF_VERSIONS))
{
// Apply the versioned aspect to the from node
nodeService.addAspect(fromNodeRef, ASPECT_VERSIONED_RECORD, null);
@@ -172,7 +171,7 @@ public class RecordAspect extends AbstractDisposableItem
public void onRemoveReference(NodeRef fromNodeRef, NodeRef toNodeRef, QName reference)
{
// Deal with versioned records
if (reference.equals(QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "versions")))
if (reference.equals(CUSTOM_REF_VERSIONS))
{
// Apply the versioned aspect to the from node
nodeService.removeAspect(fromNodeRef, ASPECT_VERSIONED_RECORD);

View File

@@ -893,7 +893,7 @@ public class RecordServiceImpl extends BaseBehaviourBean
nodeService.addAspect(nodeRef, RecordableVersionModel.ASPECT_VERSION_RECORD, versionRecordProps);
// link to previous version
relationshipService.addRelationship("versions", nodeRef, latestVersionRecord);
relationshipService.addRelationship(CUSTOM_REF_VERSIONS.getLocalName(), nodeRef, latestVersionRecord);
}
if (isLinked)
@@ -1280,6 +1280,14 @@ public class RecordServiceImpl extends BaseBehaviourBean
ruleService.disableRules();
try
{
// get the latest version record, if there is one
NodeRef latestVersionRecord = getLatestVersionRecord(nodeRef);
if (latestVersionRecord != null)
{
relationshipService.removeRelationship(CUSTOM_REF_VERSIONS.getLocalName(), nodeRef, latestVersionRecord);
}
// get record property values
final Map<QName, Serializable> properties = nodeService.getProperties(nodeRef);
final String recordId = (String)properties.get(PROP_IDENTIFIER);

View File

@@ -18,6 +18,7 @@
*/
package org.alfresco.module.org_alfresco_module_rm.version;
import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementCustomModel.CUSTOM_REF_VERSIONS;
import static org.codehaus.plexus.util.StringUtils.isNotBlank;
import java.io.Serializable;
@@ -406,7 +407,7 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
public Void doWork() throws Exception
{
// indicate that the new record versions the previous record
relationshipService.addRelationship("versions", record, latestRecordVersion);
relationshipService.addRelationship(CUSTOM_REF_VERSIONS.getLocalName(), record, latestRecordVersion);
return null;
}
});

View File

@@ -54,7 +54,7 @@ public class RM1814Test extends BaseRMTestCase
@Override
public Void run()
{
relationshipService.addRelationship("versions", recordOne, recordThree);
relationshipService.addRelationship(CUSTOM_REF_VERSIONS.getLocalName(), recordOne, recordThree);
return null;
}
});
@@ -67,7 +67,7 @@ public class RM1814Test extends BaseRMTestCase
@Override
public void run() throws Exception
{
relationshipService.addRelationship("obsoletes", recordOne, recordTwo);
relationshipService.addRelationship(CUSTOM_REF_OBSOLETES.getLocalName(), recordOne, recordTwo);
}
});
@@ -76,7 +76,7 @@ public class RM1814Test extends BaseRMTestCase
@Override
public Void run()
{
relationshipService.addRelationship("supports", recordOne, recordFour);
relationshipService.addRelationship(CUSTOM_REF_SUPPORTS.getLocalName(), recordOne, recordFour);
return null;
}
});

View File

@@ -18,15 +18,34 @@
*/
package org.alfresco.module.org_alfresco_module_rm.test.integration.record;
import static org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionModel.PROP_FILE_PLAN;
import static org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionModel.PROP_RECORDABLE_VERSION_POLICY;
import static org.alfresco.service.cmr.version.VersionType.MINOR;
import static org.springframework.extensions.webscripts.GUID.generate;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.relationship.Relationship;
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
import org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionModel;
import org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionPolicy;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.version.VersionModel;
import org.alfresco.service.cmr.coci.CheckOutCheckInService;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.version.Version;
import org.alfresco.service.cmr.version.VersionHistory;
import org.alfresco.service.cmr.version.VersionService;
import org.alfresco.util.PropertyMap;
import org.springframework.extensions.surf.util.I18NUtil;
import org.springframework.extensions.webscripts.GUID;
/**
@@ -38,8 +57,10 @@ import org.springframework.extensions.webscripts.GUID;
public class RejectRecordTest extends BaseRMTestCase
{
private VersionService versionService;
private CheckOutCheckInService checkOutCheckInService;
private static final String REASON = GUID.generate();
private static final String FINAL_VERSION = "rm.service.final-version";
@Override
protected boolean isUserTest()
@@ -58,7 +79,8 @@ public class RejectRecordTest extends BaseRMTestCase
{
super.initServices();
versionService = (VersionService)applicationContext.getBean("VersionService");
versionService = (VersionService) applicationContext.getBean("VersionService");
checkOutCheckInService = (CheckOutCheckInService) applicationContext.getBean("CheckOutCheckInService");
}
/**
@@ -91,7 +113,7 @@ public class RejectRecordTest extends BaseRMTestCase
assertTrue(recordService.isRecord(dmDocument));
assertTrue(permissionService.getInheritParentPermissions(dmDocument));
// declare record
// reject record
recordService.rejectRecord(dmDocument, REASON);
}
@@ -114,7 +136,7 @@ public class RejectRecordTest extends BaseRMTestCase
public void testRevertAfterReject() throws Exception
{
doBehaviourDrivenTest(new BehaviourDrivenTest()
{;
{
private NodeRef document;
public void given()
@@ -189,4 +211,83 @@ public class RejectRecordTest extends BaseRMTestCase
}
});
}
public void testRelationshipAfterRevertingRecord()
{
doBehaviourDrivenTest(new BehaviourDrivenTest()
{
// Test document
private NodeRef document;
public void given()
{
// Create a test document
NodeRef folder = fileFolderService.create(documentLibrary, generate(), TYPE_FOLDER).getNodeRef();
document = fileFolderService.create(folder, generate(), TYPE_CONTENT).getNodeRef();
// Set Auto-Declare Versions to "For all major and minor versions"
PropertyMap recordableVersionProperties = new PropertyMap(2);
recordableVersionProperties.put(PROP_RECORDABLE_VERSION_POLICY, RecordableVersionPolicy.ALL);
recordableVersionProperties.put(PROP_FILE_PLAN, filePlan);
nodeService.addAspect(document, ASPECT_VERSIONABLE, recordableVersionProperties);
// Upload New Version
document = checkOutCheckInService.checkout(document);
Map<String, Serializable> props = new HashMap<String, Serializable>(2);
props.put(Version.PROP_DESCRIPTION, generate());
props.put(VersionModel.PROP_VERSION_TYPE, MINOR);
document = checkOutCheckInService.checkin(document, props);
// Check the declared version
List<ChildAssociationRef> childAssocs = nodeService.getChildAssocs(unfiledContainer);
assertEquals(1, childAssocs.size());
// Declare document as record
recordService.createRecord(filePlan, document);
// Check the declared versions
childAssocs = nodeService.getChildAssocs(unfiledContainer);
assertEquals(2, childAssocs.size());
// Check that the document is a file plan component
assertTrue(nodeService.hasAspect(document, ASPECT_FILE_PLAN_COMPONENT));
// Get the final version
NodeRef finalVersion = null;
for (ChildAssociationRef childAssociationRef : nodeService.getChildAssocs(unfiledContainer))
{
NodeRef childRef = childAssociationRef.getChildRef();
String label = (String) nodeService.getProperty(document, RecordableVersionModel.PROP_VERSION_LABEL);
if (label.equals(I18NUtil.getMessage(FINAL_VERSION)))
{
finalVersion = childRef;
break;
}
}
// The final version should be the declared record
assertEquals(document, finalVersion);
// Check the relationship
Set<Relationship> relationships = relationshipService.getRelationshipsFrom(document);
assertEquals(1, relationships.size());
Relationship relationship = relationships.iterator().next();
assertEquals(CUSTOM_REF_VERSIONS.getLocalName(), relationship.getUniqueName());
}
public void when()
{
// Reject record
recordService.rejectRecord(document, generate());
}
public void then()
{
// Check the relationship
Set<Relationship> relationships = relationshipService.getRelationshipsFrom(document);
assertEquals(0, relationships.size());
}
});
}
}

View File

@@ -40,7 +40,7 @@ public class DeleteRelationshipTest extends BaseRMTestCase
/** test data */
NodeRef sourceNode;
NodeRef targetNode;
String associationName = "obsoletes";
String associationName = CUSTOM_REF_OBSOLETES.getLocalName();
public void given()
{

View File

@@ -139,7 +139,7 @@ public class AutoRecordableVersions extends RecordableVersionsBaseTest
assertEquals(1, relationships.size());
for (Relationship relationship : relationships)
{
if (relationship.getUniqueName().equals("versions"))
if (relationship.getUniqueName().equals(CUSTOM_REF_VERSIONS.getLocalName()))
{
NodeRef previousVersionRecord = relationship.getTarget();
assertNotNull(previousVersionRecord);

View File

@@ -431,7 +431,7 @@ public class RmRestApiTest extends BaseRMWebScriptTestCase implements RecordsMan
// GET a specific custom reference definition.
// Here, we're using one of the built-in references
// qname = rmc:versions
rsp = sendRequest(new GetRequest(RMA_CUSTOM_REFS_DEFINITIONS_URL + "/" + "versions"), expectedStatus);
rsp = sendRequest(new GetRequest(RMA_CUSTOM_REFS_DEFINITIONS_URL + "/" + CUSTOM_REF_VERSIONS.getLocalName()), expectedStatus);
jsonRsp = new JSONObject(new JSONTokener(rsp.getContentAsString()));
@@ -597,7 +597,7 @@ public class RmRestApiTest extends BaseRMWebScriptTestCase implements RecordsMan
}
// Add a supersedes ref instance between them
final String supersedesRefLocalName = "supersedes";
final String supersedesRefLocalName = CUSTOM_REF_SUPERSEDES.getLocalName();
String jsonString = new JSONStringer().object()
.key("toNode").value(testRecord2.toString())
.key("refId").value(supersedesRefLocalName)