From fcd664ffe3cf805128f09670024dbcf8e55bde3d Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Mon, 26 Nov 2012 15:40:19 +0000 Subject: [PATCH] RM-562 (Add 'Manage Permission' action to unfiled records toolbar) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@43974 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../rm-ui-evaluators-context.xml | 1 + .../jscript/app/JSONConversionComponent.java | 441 +++++++++--------- 2 files changed, 224 insertions(+), 218 deletions(-) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml index 8e9644dbf8..b88367ec75 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-ui-evaluators-context.xml @@ -311,6 +311,7 @@ FILE_PLAN RECORD_CATEGORY RECORD_FOLDER + UNFILED_RECORD_CONTAINER diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java index fce108024a..92c8b5627b 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java @@ -29,6 +29,7 @@ import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.security.AccessStatus; +import org.alfresco.service.namespace.QName; import org.json.simple.JSONArray; import org.json.simple.JSONObject; @@ -39,226 +40,230 @@ import org.json.simple.JSONObject; */ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONConversionComponent { - /** Records management service */ - private RecordsManagementService recordsManagementService; - - /** Record service */ - private RecordService recordService; - - /** Capability service */ - private CapabilityService capabilityService; - - /** Indicators */ - private List indicators = new ArrayList(); - - /** Actions */ - private List actions = new ArrayList(); - - /** - * @param recordsManagementService records management service - */ - public void setRecordsManagementService(RecordsManagementService recordsManagementService) - { - this.recordsManagementService = recordsManagementService; - } - - /** - * @param recordService record service - */ - public void setRecordService(RecordService recordService) - { - this.recordService = recordService; - } - - /** - * @param capabilityService capability service - */ - public void setCapabilityService(CapabilityService capabilityService) - { - this.capabilityService = capabilityService; - } - - /** - * @param indicator registered indicator - */ - public void registerIndicator(BaseEvaluator indicator) - { - indicators.add(indicator); - } - - /** - * @param action registered action - */ - public void registerAction(BaseEvaluator action) - { - actions.add(action); - } + /** Records management service */ + private RecordsManagementService recordsManagementService; - /** - * @see org.alfresco.repo.jscript.app.JSONConversionComponent#setRootValues(org.alfresco.service.cmr.model.FileInfo, org.json.simple.JSONObject, boolean) - */ - @SuppressWarnings("unchecked") - @Override - protected void setRootValues(FileInfo nodeInfo, JSONObject rootJSONObject, boolean useShortQNames) - { - // Set the base root values - super.setRootValues(nodeInfo, rootJSONObject, useShortQNames); - - // Get the node reference for convenience - NodeRef nodeRef = nodeInfo.getNodeRef(); - - if (AccessStatus.ALLOWED.equals(capabilityService.getCapabilityAccessState(nodeRef, RMPermissionModel.VIEW_RECORDS)) == true) - { - // Indicate whether the node is a RM object or not - boolean isFilePlanComponent = recordsManagementService.isFilePlanComponent(nodeInfo.getNodeRef()); - rootJSONObject.put("isRmNode", isFilePlanComponent); - - if (isFilePlanComponent == true) - { - rootJSONObject.put("rmNode", setRmNodeValues(nodeRef, rootJSONObject, useShortQNames)); - } - } - } - - /** - * - * @param nodeRef - * @param rootJSONObject - * @param useShortQName - * @return - */ - @SuppressWarnings("unchecked") - private JSONObject setRmNodeValues(NodeRef nodeRef, JSONObject rootJSONObject, boolean useShortQName) - { - JSONObject rmNodeValues = new JSONObject(); - - // UI convenience type - rmNodeValues.put("uiType", getUIType(nodeRef)); + /** Record service */ + private RecordService recordService; - // Get the 'kind' of the file plan component - FilePlanComponentKind kind = recordsManagementService.getFilePlanComponentKind(nodeRef); - rmNodeValues.put("kind", kind.toString()); - - // File plan node reference - NodeRef filePlan = recordsManagementService.getFilePlan(nodeRef); - rmNodeValues.put("filePlan", filePlan.toString()); - - // Unfiled container node reference - rmNodeValues.put("unfiledRecordContainer", recordService.getUnfiledRecordContainer(filePlan).toString()); - - // Set the indicators array - setIndicators(rmNodeValues, nodeRef); - - // Set the actions array - setActions(rmNodeValues, nodeRef); - - return rmNodeValues; - } - - @SuppressWarnings("unchecked") - private void setIndicators(JSONObject rmNodeValues, NodeRef nodeRef) - { - if (indicators != null && indicators.isEmpty() == false) - { - JSONArray jsonIndicators = new JSONArray(); - - for (BaseEvaluator indicator : indicators) - { - if (indicator.evaluate(nodeRef) == true) - { - jsonIndicators.add(indicator.getName()); - } - } - - rmNodeValues.put("indicators", jsonIndicators); - } - } - - @SuppressWarnings("unchecked") - private void setActions(JSONObject rmNodeValues, NodeRef nodeRef) - { - if (actions != null && actions.isEmpty() == false) - { - JSONArray jsonActions = new JSONArray(); - - for (BaseEvaluator action : actions) - { - if (action.evaluate(nodeRef) == true) - { - jsonActions.add(action.getName()); - } - } + /** Capability service */ + private CapabilityService capabilityService; - rmNodeValues.put("actions", jsonActions); - } - } - - /** - * Gets the rm 'type' used as a UI convenience and compatibility flag. - */ - private String getUIType(NodeRef nodeRef) - { - String result = "unknown"; - - FilePlanComponentKind kind = recordsManagementService.getFilePlanComponentKind(nodeRef); - if (kind != null) - { - switch (kind) + /** Indicators */ + private List indicators = new ArrayList(); + + /** Actions */ + private List actions = new ArrayList(); + + /** + * @param recordsManagementService records management service + */ + public void setRecordsManagementService(RecordsManagementService recordsManagementService) + { + this.recordsManagementService = recordsManagementService; + } + + /** + * @param recordService record service + */ + public void setRecordService(RecordService recordService) + { + this.recordService = recordService; + } + + /** + * @param capabilityService capability service + */ + public void setCapabilityService(CapabilityService capabilityService) + { + this.capabilityService = capabilityService; + } + + /** + * @param indicator registered indicator + */ + public void registerIndicator(BaseEvaluator indicator) + { + indicators.add(indicator); + } + + /** + * @param action registered action + */ + public void registerAction(BaseEvaluator action) + { + actions.add(action); + } + + /** + * @see org.alfresco.repo.jscript.app.JSONConversionComponent#setRootValues(org.alfresco.service.cmr.model.FileInfo, org.json.simple.JSONObject, boolean) + */ + @SuppressWarnings("unchecked") + @Override + protected void setRootValues(FileInfo nodeInfo, JSONObject rootJSONObject, boolean useShortQNames) + { + // Set the base root values + super.setRootValues(nodeInfo, rootJSONObject, useShortQNames); + + // Get the node reference for convenience + NodeRef nodeRef = nodeInfo.getNodeRef(); + + if (AccessStatus.ALLOWED.equals(capabilityService.getCapabilityAccessState(nodeRef, RMPermissionModel.VIEW_RECORDS)) == true) + { + // Indicate whether the node is a RM object or not + boolean isFilePlanComponent = recordsManagementService.isFilePlanComponent(nodeInfo.getNodeRef()); + rootJSONObject.put("isRmNode", isFilePlanComponent); + + if (isFilePlanComponent == true) + { + rootJSONObject.put("rmNode", setRmNodeValues(nodeRef, rootJSONObject, useShortQNames)); + } + } + } + + /** + * + * @param nodeRef + * @param rootJSONObject + * @param useShortQName + * @return + */ + @SuppressWarnings("unchecked") + private JSONObject setRmNodeValues(NodeRef nodeRef, JSONObject rootJSONObject, boolean useShortQName) + { + JSONObject rmNodeValues = new JSONObject(); + + // UI convenience type + rmNodeValues.put("uiType", getUIType(nodeRef)); + + // Get the 'kind' of the file plan component + FilePlanComponentKind kind = recordsManagementService.getFilePlanComponentKind(nodeRef); + rmNodeValues.put("kind", kind.toString()); + + // File plan node reference + NodeRef filePlan = recordsManagementService.getFilePlan(nodeRef); + rmNodeValues.put("filePlan", filePlan.toString()); + + // Unfiled container node reference + NodeRef unfiledRecordContainer = recordService.getUnfiledRecordContainer(filePlan); + rmNodeValues.put("unfiledRecordContainer", unfiledRecordContainer.toString()); + rmNodeValues.put("properties", propertiesToJSON(unfiledRecordContainer, useShortQName)); + QName type = fileFolderService.getFileInfo(unfiledRecordContainer).getType(); + rmNodeValues.put("type", useShortQName ? type.toPrefixString(namespaceService) : type.toString()); + + // Set the indicators array + setIndicators(rmNodeValues, nodeRef); + + // Set the actions array + setActions(rmNodeValues, nodeRef); + + return rmNodeValues; + } + + @SuppressWarnings("unchecked") + private void setIndicators(JSONObject rmNodeValues, NodeRef nodeRef) + { + if (indicators != null && indicators.isEmpty() == false) + { + JSONArray jsonIndicators = new JSONArray(); + + for (BaseEvaluator indicator : indicators) + { + if (indicator.evaluate(nodeRef) == true) { - case FILE_PLAN: - { - result = "fileplan"; - break; - } - case RECORD_CATEGORY: - { - result = "record-category"; - break; - } - case RECORD_FOLDER: - { - if (recordsManagementService.isMetadataStub(nodeRef) == true) - { - result = "metadata-stub-folder"; - } - else - { - result = "record-folder"; - } - break; - } - case RECORD: - { - if (recordsManagementService.isMetadataStub(nodeRef) == true) - { - result = "metadata-stub"; - } - else - { - if (recordService.isDeclared(nodeRef) == true) - { - result = "record"; - } - else - { - result = "undeclared-record"; - } - } - break; - } - case HOLD: - { - result = "hold-container"; - break; - } - case TRANSFER: - { - result = "transfer-container"; - break; - } - } - } - - return result; - } + jsonIndicators.add(indicator.getName()); + } + } + + rmNodeValues.put("indicators", jsonIndicators); + } + } + + @SuppressWarnings("unchecked") + private void setActions(JSONObject rmNodeValues, NodeRef nodeRef) + { + if (actions != null && actions.isEmpty() == false) + { + JSONArray jsonActions = new JSONArray(); + + for (BaseEvaluator action : actions) + { + if (action.evaluate(nodeRef) == true) + { + jsonActions.add(action.getName()); + } + } + + rmNodeValues.put("actions", jsonActions); + } + } + + /** + * Gets the rm 'type' used as a UI convenience and compatibility flag. + */ + private String getUIType(NodeRef nodeRef) + { + String result = "unknown"; + + FilePlanComponentKind kind = recordsManagementService.getFilePlanComponentKind(nodeRef); + if (kind != null) + { + switch (kind) + { + case FILE_PLAN: + { + result = "fileplan"; + break; + } + case RECORD_CATEGORY: + { + result = "record-category"; + break; + } + case RECORD_FOLDER: + { + if (recordsManagementService.isMetadataStub(nodeRef) == true) + { + result = "metadata-stub-folder"; + } + else + { + result = "record-folder"; + } + break; + } + case RECORD: + { + if (recordsManagementService.isMetadataStub(nodeRef) == true) + { + result = "metadata-stub"; + } + else + { + if (recordService.isDeclared(nodeRef) == true) + { + result = "record"; + } + else + { + result = "undeclared-record"; + } + } + break; + } + case HOLD: + { + result = "hold-container"; + break; + } + case TRANSFER: + { + result = "transfer-container"; + break; + } + } + } + + return result; + } }