From 80f7abbad0898c57d8cd519bd06e79cf2138f3d5 Mon Sep 17 00:00:00 2001 From: David Webster Date: Fri, 15 May 2015 10:04:52 +0000 Subject: [PATCH] RM-2197: Create REST GET API to return clearance levels git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@104246 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../rm-webscript-context.xml | 9 +- .../clearancelevels.get.desc.xml | 8 ++ .../clearancelevels.get.json.ftl | 14 +++ .../classification/ClearanceLevelsGet.java | 66 ++++++++++++ .../ClearanceLevelsGetUnitTest.java | 101 ++++++++++++++++++ 5 files changed, 197 insertions(+), 1 deletion(-) create mode 100644 rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/classification/clearancelevels.get.desc.xml create mode 100644 rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/classification/clearancelevels.get.json.ftl create mode 100644 rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClearanceLevelsGet.java create mode 100644 rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClearanceLevelsGetUnitTest.java diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml index b4ec9ac3da..47eeba5a0a 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml @@ -660,7 +660,14 @@ - + + + + + + diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/classification/clearancelevels.get.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/classification/clearancelevels.get.desc.xml new file mode 100644 index 0000000000..cb5eff3dbb --- /dev/null +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/classification/clearancelevels.get.desc.xml @@ -0,0 +1,8 @@ + + Records Management Clearance Levels + Gets the list of clearance levels. + /api/clearance/levels + + user + required + \ No newline at end of file diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/classification/clearancelevels.get.json.ftl b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/classification/clearancelevels.get.json.ftl new file mode 100644 index 0000000000..5a66d44be9 --- /dev/null +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/classification/clearancelevels.get.json.ftl @@ -0,0 +1,14 @@ +{ + "data": + { + "items": + [ + <#list levels as level> + { + "id": "${level.highestClassificationLevel.id?json_string}", + "displayLabel": "${level.displayLabel?json_string}" + }<#if level_has_next>, + + ] + } +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClearanceLevelsGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClearanceLevelsGet.java new file mode 100644 index 0000000000..a95b38ad82 --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClearanceLevelsGet.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2005-2014 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.module.org_alfresco_module_rm.script.classification; + +import org.alfresco.module.org_alfresco_module_rm.classification.SecurityClearanceService; +import org.alfresco.module.org_alfresco_module_rm.script.AbstractRmWebScript; +import org.springframework.extensions.webscripts.Cache; +import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptRequest; + +import java.util.HashMap; +import java.util.Map; + +/** + * Implementation for Java backed webscript to get the clearance levels. + * + * @author David Webster + * @since 3.0 + */ +public class ClearanceLevelsGet extends AbstractRmWebScript +{ + /** Constants */ + private static final String LEVELS = "levels"; + + /** Classification service */ + private SecurityClearanceService securityClearanceService; + + /** + * Sets the classification service + * + * @param securityClearanceService The classification service + */ + public void setSecurityClearanceService(SecurityClearanceService securityClearanceService) + { + this.securityClearanceService = securityClearanceService; + } + + /** + * @see org.springframework.extensions.webscripts.DeclarativeWebScript#executeImpl(org.springframework.extensions.webscripts.WebScriptRequest, + * org.springframework.extensions.webscripts.Status, + * org.springframework.extensions.webscripts.Cache) + */ + @Override + protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) + { + Map result = new HashMap(); + result.put(LEVELS, securityClearanceService.getClearanceLevels()); + return result; + } +} diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClearanceLevelsGetUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClearanceLevelsGetUnitTest.java new file mode 100644 index 0000000000..af0df8c29b --- /dev/null +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/script/classification/ClearanceLevelsGetUnitTest.java @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2005-2015 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ + +package org.alfresco.module.org_alfresco_module_rm.script.classification; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationLevel; +import org.alfresco.module.org_alfresco_module_rm.classification.ClearanceLevel; +import org.alfresco.module.org_alfresco_module_rm.classification.SecurityClearanceService; +import org.alfresco.module.org_alfresco_module_rm.test.util.BaseWebScriptUnitTest; +import org.json.JSONObject; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.springframework.extensions.webscripts.DeclarativeWebScript; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.doReturn; + +/** + * Tests for the get clearance levels API. + * + * @author David Webster + * @since 3.0 + */ +public class ClearanceLevelsGetUnitTest extends BaseWebScriptUnitTest +{ + /** Classpath location of ftl template for web script */ + private static final String WEBSCRIPT_TEMPLATE = WEBSCRIPT_ROOT_RM + "classification/clearancelevels.get.json.ftl"; + + /** ClearanceLevelsGet webscript instance */ + private @Spy @InjectMocks ClearanceLevelsGet webScript; + private @Mock SecurityClearanceService mockSecurityClearanceService; + + private List clearanceLevels; + + /** {@inheritDoc} */ + @Override + protected DeclarativeWebScript getWebScript() + { + return webScript; + } + + /** {@inheritDoc} */ + @Override + protected String getWebScriptTemplate() + { + return WEBSCRIPT_TEMPLATE; + } + + /** + * Test the successful retrieval of two clearance levels. + */ + @Test + public void getClearanceLevels() throws Exception + { + // Create test data. + ClassificationLevel classificationLevelOne = new ClassificationLevel("id1", "classificationLabelKey1"); + ClassificationLevel classificationLevelTwo = new ClassificationLevel("id2", "classificationLabelKey2"); + clearanceLevels = Arrays.asList( + new ClearanceLevel(classificationLevelOne, "labelKey1"), + new ClearanceLevel(classificationLevelTwo, "labelKey2")); + + // setup interactions + doReturn(clearanceLevels).when(mockSecurityClearanceService).getClearanceLevels(); + + // execute web script + JSONObject json = executeJSONWebScript(new HashMap()); + assertNotNull(json); + String actualJSONString = json.toString(); + + // check the JSON result using Jackson to allow easy equality testing. + ObjectMapper mapper = new ObjectMapper(); + String expectedJSONString = "{\"data\":{\"items\":[{\"displayLabel\":\"labelKey1\",\"id\":\"id1\"},{\"displayLabel\":\"labelKey2\",\"id\":\"id2\"}]}}"; + JsonNode expected = mapper.readTree(expectedJSONString); + assertEquals(expected, mapper.readTree(actualJSONString)); + } +}