diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/properties.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/properties.get.desc.xml index d1eccf8821..c72ee99f4b 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/properties.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/properties.get.desc.xml @@ -2,6 +2,7 @@ Get Property Definitions Get the collection of property definitions /api/classes/{classname}/properties?nsp={namespacePrefix?}&n={name?} + /api/properties?nsp={namespacePrefix?}&n={name?} argument user required diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/propertydefinition.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/propertydefinition.lib.ftl index a77d26a093..c17c28bf70 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/propertydefinition.lib.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/propertydefinition.lib.ftl @@ -40,7 +40,7 @@ --> ], - "url" : "${"/api/classes/" + url.templateArgs.classname + "/property/" + propertydefs.name.toPrefixString()?replace(":","_")}" + "url" : "${"/api/property/" + propertydefs.name.toPrefixString()?replace(":","_")}" } \ No newline at end of file diff --git a/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryRestApiTest.java b/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryRestApiTest.java index 7a8e94a478..37bae5aa7d 100644 --- a/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryRestApiTest.java +++ b/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryRestApiTest.java @@ -35,6 +35,7 @@ import org.json.JSONArray; public class DictionaryRestApiTest extends BaseWebScriptTest { private static final String URL_SITES = "/api/classes"; + private static final String URL_PROPERTIES = "/api/properties"; @Override protected void setUp() throws Exception @@ -60,7 +61,7 @@ public class DictionaryRestApiTest extends BaseWebScriptTest assertEquals(true, result.get("protected")); assertEquals(true, result.get("indexed")); assertEquals(true, result.get("indexedAtomically")); - assertEquals("/api/classes/cm_auditable/property/cm_created", result.get("url")); + assertEquals("/api/property/cm_created", result.get("url")); } @@ -200,14 +201,10 @@ public class DictionaryRestApiTest extends BaseWebScriptTest GetRequest req = new GetRequest(URL_SITES + "/cm_auditable/properties"); Map< String, String > arguments = new HashMap< String, String >(); arguments.put("nsp", "cm"); - arguments.put("n", "created"); req.setArgs(arguments); Response response = sendRequest(req, 200); assertEquals(200,response.getStatus()); - //JSONObject resultSet = new JSONObject(response.getContentAsString()); - //validatePropertyDef(resultSet); - JSONArray result = new JSONArray(response.getContentAsString()); assertEquals(200,response.getStatus()); assertEquals(5, result.length()); @@ -226,6 +223,37 @@ public class DictionaryRestApiTest extends BaseWebScriptTest } } + // test /api/properties + req = new GetRequest(URL_PROPERTIES); + response = sendRequest(req, 200); + assertEquals(200, response.getStatus()); + result = new JSONArray(response.getContentAsString()); + assertEquals(result.length()>0, true); + for (int i = 0; i < result.length(); i++) + { + if(result.getJSONObject(i).get("name").equals("cm:created")) + { + validatePropertyDef(result.getJSONObject(i)); + } + //System.out.println(result.getJSONObject(i).get("name")); + } + + // test /api/properties?name=cm:name&name=cm:title&name=cm:description + req = new GetRequest(URL_PROPERTIES + "?name=cm:name&name=cm:title&name=cm:description"); + response = sendRequest(req, 200); + assertEquals(200, response.getStatus()); + result = new JSONArray(response.getContentAsString()); + assertEquals(3, result.length()); + //for (int i = 0; i < result.length(); i++) + //{ + //if(result.getJSONObject(i).get("name").equals("cm:created")) + //{ + // validatePropertyDef(result.getJSONObject(i)); + //} + // System.out.println(result.getJSONObject(i).get("name")); + //} + + } public void testGetClassDetail() throws Exception diff --git a/source/java/org/alfresco/repo/web/scripts/dictionary/PropertiesGet.java b/source/java/org/alfresco/repo/web/scripts/dictionary/PropertiesGet.java index 6377a7e700..cdb226cfdc 100644 --- a/source/java/org/alfresco/repo/web/scripts/dictionary/PropertiesGet.java +++ b/source/java/org/alfresco/repo/web/scripts/dictionary/PropertiesGet.java @@ -19,11 +19,13 @@ package org.alfresco.repo.web.scripts.dictionary; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.alfresco.service.cmr.dictionary.PropertyDefinition; +import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; @@ -41,36 +43,67 @@ public class PropertiesGet extends DictionaryWebServiceBase { private static final String MODEL_PROP_KEY_PROPERTY_DETAILS = "propertydefs"; private static final String DICTIONARY_CLASS_NAME = "classname"; + private static final String PARAM_NAME = "name"; private static final String REQ_URL_TEMPL_VAR_NAMESPACE_PREFIX = "nsp"; - + /** * @Override method from DeclarativeWebScript */ protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) { + QName classQName = null; String className = req.getServiceMatch().getTemplateVars().get(DICTIONARY_CLASS_NAME); - if (className == null || className.length() == 0) - { - // Error - throw new WebScriptException(Status.STATUS_NOT_FOUND, "Check the className - " + className + " - parameter in the URL"); - - } - QName classQName = createClassQName(className); - if (classQName == null) - { - // Error - throw new WebScriptException(Status.STATUS_NOT_FOUND, "Check the className - " + className + " - parameter in the URL"); + if (className != null && className.length() != 0) + { + classQName = createClassQName(className); + if (classQName == null) + { + // Error + throw new WebScriptException(Status.STATUS_NOT_FOUND, "Check the className - " + className + " - parameter in the URL"); + } } - String namespacePrefix = req.getParameter(REQ_URL_TEMPL_VAR_NAMESPACE_PREFIX); + String[] names = req.getParameterValues(PARAM_NAME); + String namespacePrefix = req.getParameter(REQ_URL_TEMPL_VAR_NAMESPACE_PREFIX); String namespaceURI = null; if (namespacePrefix != null) { namespaceURI = this.namespaceService.getNamespaceURI(namespacePrefix); } - Map propMap = dictionaryservice.getClass(classQName).getProperties(); + Map propMap = null; + if (classQName == null) + { + if (names != null) + { + propMap = new HashMap(names.length); + for (String name : names) + { + QName propQName = QName.createQName(name, namespaceService); + PropertyDefinition propDef = dictionaryservice.getProperty(propQName); + if (propDef != null) + { + propMap.put(propQName, propDef); + } + } + } + else + { + Collection propQNames = dictionaryservice.getAllProperties(null); + propMap = new HashMap(propQNames.size()); + for (QName propQName : propQNames) + { + propMap.put(propQName, dictionaryservice.getProperty(propQName)); + } + } + + } + else + { + propMap = dictionaryservice.getClass(classQName).getProperties(); + } + List props = new ArrayList(propMap.size()); for (Map.Entry entry : propMap.entrySet()) {