mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
Merge branch 'feature/RM-4572_CreateRecordResponseContainsWrongName' into 'master'
Feature/rm 4572 create record response contains wrong name See merge request !12
This commit is contained in:
@@ -702,6 +702,13 @@
|
|||||||
<protected>true</protected>
|
<protected>true</protected>
|
||||||
<mandatory>false</mandatory>
|
<mandatory>false</mandatory>
|
||||||
</property>
|
</property>
|
||||||
|
<!-- This aspect can only be used by the system to allow the rma:identifier to be explicitly set in the upload transaction -->
|
||||||
|
<property name="rma:idIsTemporarilyEditable">
|
||||||
|
<title>Record Component Identifier Temporarily Editable Indicator</title>
|
||||||
|
<type>d:boolean</type>
|
||||||
|
<protected>true</protected>
|
||||||
|
<mandatory>false</mandatory>
|
||||||
|
</property>
|
||||||
</properties>
|
</properties>
|
||||||
<mandatory-aspects>
|
<mandatory-aspects>
|
||||||
<aspect>rma:filePlanComponent</aspect>
|
<aspect>rma:filePlanComponent</aspect>
|
||||||
|
@@ -126,6 +126,7 @@ public interface RecordsManagementModel extends RecordsManagementCustomModel
|
|||||||
QName ASPECT_RECORD_COMPONENT_ID = QName.createQName(RM_URI, "recordComponentIdentifier");
|
QName ASPECT_RECORD_COMPONENT_ID = QName.createQName(RM_URI, "recordComponentIdentifier");
|
||||||
QName PROP_IDENTIFIER = QName.createQName(RM_URI, "identifier");
|
QName PROP_IDENTIFIER = QName.createQName(RM_URI, "identifier");
|
||||||
QName PROP_DB_UNIQUENESS_ID = QName.createQName(RM_URI, "dbUniquenessId");
|
QName PROP_DB_UNIQUENESS_ID = QName.createQName(RM_URI, "dbUniquenessId");
|
||||||
|
QName PROP_ID_IS_TEMPORARILY_EDITABLE = QName.createQName(RM_URI, "idIsTemporarilyEditable");
|
||||||
|
|
||||||
// Vital record definition aspect
|
// Vital record definition aspect
|
||||||
QName ASPECT_VITAL_RECORD_DEFINITION = QName.createQName(RM_URI, "vitalRecordDefinition");
|
QName ASPECT_VITAL_RECORD_DEFINITION = QName.createQName(RM_URI, "vitalRecordDefinition");
|
||||||
|
@@ -47,6 +47,7 @@ import org.alfresco.repo.policy.annotation.BehaviourKind;
|
|||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
|
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
|
||||||
import org.alfresco.service.cmr.attributes.AttributeService;
|
import org.alfresco.service.cmr.attributes.AttributeService;
|
||||||
|
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.springframework.extensions.surf.util.I18NUtil;
|
import org.springframework.extensions.surf.util.I18NUtil;
|
||||||
@@ -64,6 +65,7 @@ import org.springframework.extensions.surf.util.I18NUtil;
|
|||||||
public class RecordComponentIdentifierAspect extends BaseBehaviourBean
|
public class RecordComponentIdentifierAspect extends BaseBehaviourBean
|
||||||
implements NodeServicePolicies.OnUpdatePropertiesPolicy,
|
implements NodeServicePolicies.OnUpdatePropertiesPolicy,
|
||||||
NodeServicePolicies.BeforeDeleteNodePolicy,
|
NodeServicePolicies.BeforeDeleteNodePolicy,
|
||||||
|
NodeServicePolicies.OnCreateNodePolicy,
|
||||||
CopyServicePolicies.OnCopyCompletePolicy
|
CopyServicePolicies.OnCopyCompletePolicy
|
||||||
{
|
{
|
||||||
/** I18N */
|
/** I18N */
|
||||||
@@ -127,7 +129,7 @@ public class RecordComponentIdentifierAspect extends BaseBehaviourBean
|
|||||||
if (newIdValue != null)
|
if (newIdValue != null)
|
||||||
{
|
{
|
||||||
String oldIdValue = (String)before.get(PROP_IDENTIFIER);
|
String oldIdValue = (String)before.get(PROP_IDENTIFIER);
|
||||||
if (oldIdValue != null && !oldIdValue.equals(newIdValue))
|
if (oldIdValue != null && !oldIdValue.equals(newIdValue) && !isRecordIdentifierEditable(nodeRef))
|
||||||
{
|
{
|
||||||
throw new IntegrityException(I18NUtil.getMessage(MSG_SET_ID, nodeRef.toString()), null);
|
throw new IntegrityException(I18NUtil.getMessage(MSG_SET_ID, nodeRef.toString()), null);
|
||||||
}
|
}
|
||||||
@@ -140,6 +142,17 @@ public class RecordComponentIdentifierAspect extends BaseBehaviourBean
|
|||||||
}, AuthenticationUtil.getSystemUserName());
|
}, AuthenticationUtil.getSystemUserName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility method that checks if a record's identifier is temporarily editable
|
||||||
|
* @param record the record to check
|
||||||
|
* @return true if it is editable false otherwise
|
||||||
|
*/
|
||||||
|
private boolean isRecordIdentifierEditable(NodeRef record)
|
||||||
|
{
|
||||||
|
Boolean isEditableProperty = (Boolean)nodeService.getProperty(record, RecordsManagementModel.PROP_ID_IS_TEMPORARILY_EDITABLE);
|
||||||
|
return isEditableProperty == null ? false : isEditableProperty;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cleans up the {@link RecordsManagementModel#PROP_IDENTIFIER rma:identifier} property unique triplet.
|
* Cleans up the {@link RecordsManagementModel#PROP_IDENTIFIER rma:identifier} property unique triplet.
|
||||||
*
|
*
|
||||||
@@ -238,4 +251,30 @@ public class RecordComponentIdentifierAspect extends BaseBehaviourBean
|
|||||||
CONTEXT_VALUE, contextNodeRef, afterId);
|
CONTEXT_VALUE, contextNodeRef, afterId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Behaviour
|
||||||
|
(
|
||||||
|
kind = BehaviourKind.CLASS,
|
||||||
|
notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT
|
||||||
|
)
|
||||||
|
@Override
|
||||||
|
public void onCreateNode(final ChildAssociationRef childAssocRef)
|
||||||
|
{
|
||||||
|
AuthenticationUtil.runAsSystem(new RunAsWork<Object>()
|
||||||
|
{
|
||||||
|
public Object doWork()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* When creating a new record the identifier is writable to allow the upload in multiple steps.
|
||||||
|
* On transaction commit make the identifier read only (remove the editable aspect).
|
||||||
|
*/
|
||||||
|
NodeRef newNode = childAssocRef.getChildRef();
|
||||||
|
if(nodeService.exists(newNode))
|
||||||
|
{
|
||||||
|
nodeService.setProperty(newNode, RecordsManagementModel.PROP_ID_IS_TEMPORARILY_EDITABLE, false);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -122,7 +122,8 @@ public class RecordsManagementContainerType extends BaseBehaviourBean
|
|||||||
@Behaviour
|
@Behaviour
|
||||||
(
|
(
|
||||||
kind = BehaviourKind.ASSOCIATION,
|
kind = BehaviourKind.ASSOCIATION,
|
||||||
notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT,
|
// Execute on first event to make all type conversions and set all the properties before transaction ends and response is returned
|
||||||
|
notificationFrequency = NotificationFrequency.EVERY_EVENT,
|
||||||
name = BEHAVIOUR_NAME
|
name = BEHAVIOUR_NAME
|
||||||
)
|
)
|
||||||
public void onCreateChildAssociation(final ChildAssociationRef childAssocRef, boolean isNewNode)
|
public void onCreateChildAssociation(final ChildAssociationRef childAssocRef, boolean isNewNode)
|
||||||
@@ -195,8 +196,10 @@ public class RecordsManagementContainerType extends BaseBehaviourBean
|
|||||||
if (nodeService.hasAspect(nodeRef, ASPECT_FILE_PLAN_COMPONENT) &&
|
if (nodeService.hasAspect(nodeRef, ASPECT_FILE_PLAN_COMPONENT) &&
|
||||||
nodeService.getProperty(nodeRef, PROP_IDENTIFIER) == null)
|
nodeService.getProperty(nodeRef, PROP_IDENTIFIER) == null)
|
||||||
{
|
{
|
||||||
|
// Generate identifier and leave it editable until the transaction ends
|
||||||
String id = identifierService.generateIdentifier(nodeRef);
|
String id = identifierService.generateIdentifier(nodeRef);
|
||||||
nodeService.setProperty(nodeRef, RecordsManagementModel.PROP_IDENTIFIER, id);
|
nodeService.setProperty(nodeRef, RecordsManagementModel.PROP_IDENTIFIER, id);
|
||||||
|
nodeService.setProperty(nodeRef, RecordsManagementModel.PROP_ID_IS_TEMPORARILY_EDITABLE, true);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@@ -218,10 +218,6 @@ public class ReportServiceImplTest extends BaseRMTestCase implements ReportModel
|
|||||||
|
|
||||||
NodeRef recordFolder = recordFolderService.createRecordFolder(recordCategory, GUID.generate());
|
NodeRef recordFolder = recordFolderService.createRecordFolder(recordCategory, GUID.generate());
|
||||||
|
|
||||||
// Set the record folder identifier
|
|
||||||
String identifier = identifierService.generateIdentifier(TYPE_RECORD_FOLDER, recordCategory);
|
|
||||||
nodeService.setProperty(recordFolder, PROP_IDENTIFIER, identifier);
|
|
||||||
|
|
||||||
// Complete event
|
// Complete event
|
||||||
Map<String, Serializable> params = new HashMap<String, Serializable>(1);
|
Map<String, Serializable> params = new HashMap<String, Serializable>(1);
|
||||||
params.put(CompleteEventAction.PARAM_EVENT_NAME, CommonRMTestUtils.DEFAULT_EVENT_NAME);
|
params.put(CompleteEventAction.PARAM_EVENT_NAME, CommonRMTestUtils.DEFAULT_EVENT_NAME);
|
||||||
|
Reference in New Issue
Block a user