RM-1124 (RM user can create a folder within the unfiled records area)

RM-1125 (RM user can delete a folder within the unfiled records area)
RM-1126 (RM user can edit the meta-data of a folder within the unfiled records area)
RM-1127 (RM user can view the details of a folder in the unfiled records area)

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@59986 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Tuna Aksoy
2014-01-15 23:16:32 +00:00
parent 15db8ab128
commit 21cc1e28b6
10 changed files with 194 additions and 126 deletions

View File

@@ -32,6 +32,7 @@
<list> <list>
<value>RECORD_CATEGORY</value> <value>RECORD_CATEGORY</value>
<value>RECORD_FOLDER</value> <value>RECORD_FOLDER</value>
<value>UNFILED_RECORD_CONTAINER</value>
</list> </list>
</property> </property>
<property name="conditions"> <property name="conditions">

View File

@@ -59,6 +59,7 @@
<bean id="rma.recordsManagementContainer" class="org.alfresco.module.org_alfresco_module_rm.model.rma.type.RecordsManagementContainerType" parent="rm.baseBehaviour"> <bean id="rma.recordsManagementContainer" class="org.alfresco.module.org_alfresco_module_rm.model.rma.type.RecordsManagementContainerType" parent="rm.baseBehaviour">
<property name="identifierService" ref="recordsManagementIdentifierService"/> <property name="identifierService" ref="recordsManagementIdentifierService"/>
<property name="recordService" ref="RecordService" />
</bean> </bean>
<bean id="rma.filePlan" class="org.alfresco.module.org_alfresco_module_rm.model.rma.type.FilePlanType" parent="rm.baseBehaviour"> <bean id="rma.filePlan" class="org.alfresco.module.org_alfresco_module_rm.model.rma.type.FilePlanType" parent="rm.baseBehaviour">

View File

@@ -1240,6 +1240,7 @@
org.alfresco.module.org_alfresco_module_rm.record.RecordService.isPropertyEditable=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.record.RecordService.isPropertyEditable=RM.Read.0
org.alfresco.module.org_alfresco_module_rm.record.RecordService.isMetadataStub=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.record.RecordService.isMetadataStub=RM.Read.0
org.alfresco.module.org_alfresco_module_rm.record.RecordService.getRecords=RM.Read.0,AFTER_RM.FilterNode org.alfresco.module.org_alfresco_module_rm.record.RecordService.getRecords=RM.Read.0,AFTER_RM.FilterNode
org.alfresco.module.org_alfresco_module_rm.record.RecordService.makeRecord=RM_ALLOW
org.alfresco.module.org_alfresco_module_rm.record.RecordService.*=RM_DENY org.alfresco.module.org_alfresco_module_rm.record.RecordService.*=RM_DENY
]]> ]]>
</value> </value>

View File

@@ -317,6 +317,7 @@
<property name="kinds"> <property name="kinds">
<set> <set>
<value>RECORD_FOLDER</value> <value>RECORD_FOLDER</value>
<value>UNFILED_RECORD_CONTAINER</value>
</set> </set>
</property> </property>
<property name="capability" value ="FileRecords"/> <property name="capability" value ="FileRecords"/>
@@ -573,6 +574,7 @@
<property name="kinds"> <property name="kinds">
<set> <set>
<value>RECORD_CATEGORY</value> <value>RECORD_CATEGORY</value>
<value>UNFILED_RECORD_CONTAINER</value>
</set> </set>
</property> </property>
<property name="capability" value ="CreateModifyDestroyFolders"/> <property name="capability" value ="CreateModifyDestroyFolders"/>

View File

@@ -165,7 +165,14 @@ Filters.getFilterParams = function RecordsManagementFilter_getFilterParams(filte
case "unfiledRecords": case "unfiledRecords":
filterParams.variablePath = false; filterParams.variablePath = false;
if (filterData == null)
{
filterParams.query = ""; filterParams.query = "";
}
else
{
filterParams.query = "+PARENT:\"" + filterData + "\"";
}
break; break;
default: default:

View File

@@ -27,6 +27,7 @@ import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanComponentKind
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
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.cmr.security.AccessStatus; import org.alfresco.service.cmr.security.AccessStatus;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
@@ -155,6 +156,9 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC
rmNodeValues.put("type", useShortQName ? type.toPrefixString(namespaceService) : type.toString()); rmNodeValues.put("type", useShortQName ? type.toPrefixString(namespaceService) : type.toString());
} }
// Find out if it is an unfiled record container child
rmNodeValues.put("isUnfileRecordContainerChild", isUnfileRecordContainerChild(nodeRef));
// Set the indicators array // Set the indicators array
setIndicators(rmNodeValues, nodeRef); setIndicators(rmNodeValues, nodeRef);
@@ -164,6 +168,25 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC
return rmNodeValues; return rmNodeValues;
} }
private boolean isUnfileRecordContainerChild(NodeRef nodeRef)
{
boolean isUnfileRecordContainerChild = false;
List<ChildAssociationRef> parentAssocs = nodeService.getParentAssocs(nodeRef);
if (parentAssocs.size() == 1)
{
NodeRef parentNodeRef = parentAssocs.iterator().next().getParentRef();
FilePlanComponentKind filePlanComponentKind = filePlanService.getFilePlanComponentKind(parentNodeRef);
if (filePlanComponentKind != null && filePlanComponentKind.equals(FilePlanComponentKind.RECORD_CATEGORY) == false)
{
isUnfileRecordContainerChild = true;
}
}
return isUnfileRecordContainerChild;
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private void setIndicators(JSONObject rmNodeValues, NodeRef nodeRef) private void setIndicators(JSONObject rmNodeValues, NodeRef nodeRef)
{ {

View File

@@ -22,7 +22,6 @@ import java.io.Serializable;
import java.util.Map; import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean; import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean;
import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RecordsManagementSearchBehaviour; import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RecordsManagementSearchBehaviour;
@@ -239,12 +238,6 @@ public class RecordFolderType extends BaseBehaviourBean
NodeRef nodeRef = childAssocRef.getChildRef(); NodeRef nodeRef = childAssocRef.getChildRef();
if (nodeService.exists(nodeRef) == true) if (nodeService.exists(nodeRef) == true)
{ {
// ensure folders are never added to a record folder
if (instanceOf(nodeRef, ContentModel.TYPE_FOLDER) == true)
{
throw new AlfrescoRuntimeException("You can't create a folder within an exisiting record folder.");
}
// ensure nothing is being added to a closed record folder // ensure nothing is being added to a closed record folder
NodeRef recordFolder = childAssocRef.getParentRef(); NodeRef recordFolder = childAssocRef.getParentRef();
Boolean isClosed = (Boolean) nodeService.getProperty(recordFolder, PROP_IS_CLOSED); Boolean isClosed = (Boolean) nodeService.getProperty(recordFolder, PROP_IS_CLOSED);

View File

@@ -22,6 +22,7 @@ import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.identifier.IdentifierService; import org.alfresco.module.org_alfresco_module_rm.identifier.IdentifierService;
import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean; import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.repo.node.NodeServicePolicies; import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.policy.Behaviour.NotificationFrequency; import org.alfresco.repo.policy.Behaviour.NotificationFrequency;
import org.alfresco.repo.policy.annotation.Behaviour; import org.alfresco.repo.policy.annotation.Behaviour;
@@ -49,6 +50,9 @@ public class RecordsManagementContainerType extends BaseBehaviourBean
/** identifier service */ /** identifier service */
protected IdentifierService identifierService; protected IdentifierService identifierService;
/** record service */
protected RecordService recordService;
/** /**
* @param identifierService identifier service * @param identifierService identifier service
*/ */
@@ -57,6 +61,14 @@ public class RecordsManagementContainerType extends BaseBehaviourBean
this.identifierService = identifierService; this.identifierService = identifierService;
} }
/**
* @param recordService record service
*/
public void setRecordService(RecordService recordService)
{
this.recordService = recordService;
}
/** /**
* @see org.alfresco.module.org_alfresco_module_rm.model.BaseTypeBehaviour#onCreateChildAssociation(org.alfresco.service.cmr.repository.ChildAssociationRef, boolean) * @see org.alfresco.module.org_alfresco_module_rm.model.BaseTypeBehaviour#onCreateChildAssociation(org.alfresco.service.cmr.repository.ChildAssociationRef, boolean)
*/ */
@@ -102,6 +114,24 @@ public class RecordsManagementContainerType extends BaseBehaviourBean
setIdenifierProperty(child); setIdenifierProperty(child);
} }
} }
else
{
NodeRef parentRef = childAssocRef.getParentRef();
QName parentType = nodeService.getType(parentRef);
boolean isContentSubType = dictionaryService.isSubClass(childType, ContentModel.TYPE_CONTENT);
boolean isUnfiledRecordContainerSubType = dictionaryService.isSubClass(parentType, RecordsManagementModel.TYPE_UNFILED_RECORD_CONTAINER);
if (isContentSubType == true && isUnfiledRecordContainerSubType == true)
{
if (nodeService.hasAspect(child, ASPECT_FILE_PLAN_COMPONENT) == false)
{
nodeService.addAspect(child, ASPECT_FILE_PLAN_COMPONENT, null);
}
if (nodeService.hasAspect(child, ASPECT_RECORD) == false)
{
recordService.makeRecord(child);
}
}
}
} }
return null; return null;

View File

@@ -161,4 +161,11 @@ public interface RecordService
* @param typeQName Type to add * @param typeQName Type to add
*/ */
void addRecordType(NodeRef nodeRef, QName typeQName); void addRecordType(NodeRef nodeRef, QName typeQName);
/**
* Creates a record from the given document
*
* @param nodeRef The document node reference from which a record will be created
*/
void makeRecord(NodeRef nodeRef);
} }

View File

@@ -774,8 +774,11 @@ public class RecordServiceImpl implements RecordService,
* *
* @param document the document from which a record will be created * @param document the document from which a record will be created
*/ */
private void makeRecord(NodeRef document) @Override
public void makeRecord(NodeRef document)
{ {
ParameterCheck.mandatory("document", document);
ruleService.disableRules(); ruleService.disableRules();
try try
{ {