From 2b78da7c38217eea2dd1a3f800bdaad159a4011d Mon Sep 17 00:00:00 2001 From: Saravanan Sellathurai Date: Wed, 5 Nov 2008 23:35:56 +0000 Subject: [PATCH] Updates GetClassDetail using classfilter and namespaceprefix for the webscript git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@11712 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../dictionary/assocdefinition.lib.ftl | 4 +- .../dictionary/classdetails.lib.ftl | 150 +++++++++-------- .../dictionary/getclassdetail.get.json.ftl | 11 +- .../dictionary/getclassdetails.get.json.ftl | 7 +- .../dictionary/propertydefinition.lib.ftl | 19 ++- .../web-scripts-application-context.xml | 7 +- .../scripts/dictionary/DictionaryHelper.java | 37 ++++- .../dictionary/DictionaryServiceTest.java | 154 +++++++++++++++++- .../scripts/dictionary/GetClassDetail.java | 76 +++++++-- .../scripts/dictionary/GetClassDetails.java | 26 ++- .../scripts/dictionary/GetPropertyDef.java | 3 +- .../scripts/dictionary/GetPropertyDefs.java | 5 +- 12 files changed, 380 insertions(+), 119 deletions(-) diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/assocdefinition.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/assocdefinition.lib.ftl index aaf6f8638e..f326d82aa3 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/assocdefinition.lib.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/assocdefinition.lib.ftl @@ -33,9 +33,9 @@ "isTargetMany" : ${assocdefs.isTargetMany()?string} }, <#if assocdefs.isChild() == true> - "url" : "${url.serviceContext + "/api/classes/"+ url.templateArgs.classname + "/childassociation/"+ assocdefs.name.toPrefixString()?replace(":","_")}" + "url" : "${"/api/classes/" + url.templateArgs.classname + "/childassociation/" + assocdefs.name.toPrefixString()?replace(":","_")}" <#else> - "url" : "${url.serviceContext + "/api/classes/"+ url.templateArgs.classname + "/association/"+ assocdefs.name.toPrefixString()?replace(":","_")}" + "url" : "${"/api/classes/" + url.templateArgs.classname + "/association/" + assocdefs.name.toPrefixString()?replace(":","_")}" } diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/classdetails.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/classdetails.lib.ftl index 63fc157d8a..4dcf348359 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/classdetails.lib.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/classdetails.lib.ftl @@ -1,74 +1,90 @@ -<#import "propertydefinition.lib.ftl" as propertyDefLib/> -<#import "assocdefinition.lib.ftl" as assocDefLib/> -<#macro classDefJSON classdefs> - <#escape x as jsonUtils.encodeJSONString(x)> - { - <#if classdefs.name?exists> - "name" : "${classdefs.name.toPrefixString()}", +<#macro classDefJSON classdefs key> + <#escape x as jsonUtils.encodeJSONString(x)> + { + <#if classdefs.name?exists> + "name" : "${classdefs.name.toPrefixString()}", - <#if classdefs.isAspect() == true> - "isAspect" : true, - <#else> - "isAspect" : false, - - <#if classdefs.title?exists> - "title" : "${classdefs.title}", + <#if classdefs.isAspect() == true> + "isAspect" : true, + <#else> + "isAspect" : false, + + <#if classdefs.title?exists> + "title" : "${classdefs.title}", <#if classdefs.description?exists> - "description" : "${classdefs.description}", + "description" : "${classdefs.description}", - "properties" : - { - <#list propertydefs as propertydefs> - "${propertydefs.name.toPrefixString()}": - { - <#if propertydefs.name?exists> - "name" : "${propertydefs.name.toPrefixString()}", - - <#if propertydefs.title?exists> - "title" : "${propertydefs.title}", - - "url" : "${url.serviceContext + "/api/classes/" + classdefs.name.toPrefixString()?replace(":","_") + "/property/" + propertydefs.name.toPrefixString()?replace(":","_")}" - }<#if propertydefs_has_next>, - - }, - "associations" : - { - <#list assocdefs as assocdefs> - <#if assocdefs.isChild() == false> - "${assocdefs.name.toPrefixString()}": - { - <#if assocdefs.name?exists> - "name" : "${assocdefs.name.toPrefixString()}", - - <#if assocdefs.title?exists> - "title" : "${assocdefs.title}", - - "url" : "${url.serviceContext + "/api/classes/" + classdefs.name.toPrefixString()?replace(":","_") + "/association/" + assocdefs.name.toPrefixString()?replace(":","_")}" - } - - <#if assocdefs_has_next>, - - }, - "childassociations" : - { - <#list assocdefs as assocdefs> - <#if assocdefs.isChild() == true> - "${assocdefs.name.toPrefixString()}": - { - <#if assocdefs.name?exists> - "name" : "${assocdefs.name.toPrefixString()}", - - <#if assocdefs.title?exists> - "title" : "${assocdefs.title}", - - "url" : "${url.serviceContext + "/api/classes/" + classdefs.name.toPrefixString()?replace(":","_") + "/childassociation/" + assocdefs.name.toPrefixString()?replace(":","_")}" - } - - <#if assocdefs_has_next>, - - }, - "url" : "${url.serviceContext + "/api/classes/" + classdefs.name.toPrefixString()?replace(":","_")}" + "parent" : { + <#if classdefs.parentName?exists> + "name" : "${classdefs.parentName.toPrefixString()}", + "title" : "${classdefs.parentName.getLocalName()}", + "url" : "${"/api/classes/" + classdefs.parentName.toPrefixString()?replace(":","_")}" + + }, + "defaultAspects" : { + <#if classdefs.defaultAspects?exists> + <#list classdefs.defaultAspects as aspectdefs> + "${aspectdefs.name.toPrefixString()}" : { + "name" : "${aspectdefs.name}", + <#if aspectdefs.title?exists> + "title" : "${aspectdefs.title}", + + "url" : "${"/api/classes/" + classdefs.name.toPrefixString()?replace(":","_") + "/property/" + aspectdefs.name.toPrefixString()?replace(":","_")}" + }<#if aspectdefs_has_next>, + + + }, + "properties" : { + <#list propertydefs[key] as propertydefs> + "${propertydefs.name.toPrefixString()}": { + <#if propertydefs.name?exists> + "name" : "${propertydefs.name.toPrefixString()}", + + <#if propertydefs.title?exists> + "title" : "${propertydefs.title}", + + "url" : "${"/api/classes/" + classdefs.name.toPrefixString()?replace(":","_") + "/property/" + propertydefs.name.toPrefixString()?replace(":","_")}" + }<#if propertydefs_has_next>, + + }, + "associations" : { + <#assign flag = false> + <#list assocdefs[key] as assocdefs> + <#if (assocdefs.isChild()==false)&&(flag== true)><#assign flag = false>, + <#if assocdefs.isChild() == false> + <#assign flag=true> + "${assocdefs.name.toPrefixString()}": { + <#if assocdefs.name?exists> + "name" : "${assocdefs.name.toPrefixString()}", + + <#if assocdefs.title?exists> + "title" : "${assocdefs.title}", + + "url" : "${"/api/classes/" + classdefs.name.toPrefixString()?replace(":","_") + "/association/" + assocdefs.name.toPrefixString()?replace(":","_")}" + } + + + }, + "childassociations" : { + <#assign flag = false> + <#list assocdefs[key] as assocdefs> + <#if (assocdefs.isChild()==true)&&(flag== true)><#assign flag = false>, + <#if assocdefs.isChild() == true> + <#assign flag=true> + "${assocdefs.name.toPrefixString()}": { + <#if assocdefs.name?exists> + "name" : "${assocdefs.name.toPrefixString()}", + + <#if assocdefs.title?exists> + "title" : "${assocdefs.title}", + + "url" : "${"/api/classes/" + classdefs.name.toPrefixString()?replace(":","_") + "/childassociation/" + assocdefs.name.toPrefixString()?replace(":","_")}" + } + + + }, + "url" : "${"/api/classes/" + classdefs.name.toPrefixString()?replace(":","_")}" } diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/getclassdetail.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/getclassdetail.get.json.ftl index 88af28847a..b6dd6516e2 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/getclassdetail.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/getclassdetail.get.json.ftl @@ -1,4 +1,7 @@ -<#import "definitions.lib.ftl" as classDefLib/> - -<@classDefLib.classDefJSON classdefs=classdefs/> - \ No newline at end of file +<#import "classdetails.lib.ftl" as classdetailsDefLib/> +[ +<#list classdefs as classdefs> + <@classdetailsDefLib.classDefJSON classdefs=classdefs key = classdefs_index/> + <#if classdefs_has_next>, + +] diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/getclassdetails.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/getclassdetails.get.json.ftl index 1ac2325ebd..146af2830e 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/getclassdetails.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/dictionary/getclassdetails.get.json.ftl @@ -1,4 +1,5 @@ <#import "classdetails.lib.ftl" as classdetailsDefLib/> - -<@classdetailsDefLib.classDefJSON classdefs=classdefs/> - \ No newline at end of file +<#list classdefs as classdefs> + <@classdetailsDefLib.classDefJSON classdefs=classdefs key = classdefs_index/> + <#if classdefs_has_next>, + \ No newline at end of file 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 3aa23b9811..761c23cd5a 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 @@ -16,23 +16,24 @@ "defaultValues" : "", <#if propertydefs.dataType?exists> - "dataType" : "${propertydefs.dataType.title}", + "dataType" : "${propertydefs.dataType.name.toPrefixString()}", - "multiValued" : "${propertydefs.multiValued?string}", - "mandatory" : "${propertydefs.mandatory?string}", - "enforced" : "${propertydefs.mandatoryEnforced?string}", - "protected" : "${propertydefs.protected?string}", - "indexed" : "${propertydefs.indexed?string}", - "indexedAtomically" : "${propertydefs.indexedAtomically?string}", + "multiValued" : ${propertydefs.multiValued?string}, + "mandatory" : ${propertydefs.mandatory?string}, + "enforced" : ${propertydefs.mandatoryEnforced?string}, + "protected" : ${propertydefs.protected?string}, + "indexed" : ${propertydefs.indexed?string}, + "indexedAtomically" : ${propertydefs.indexedAtomically?string}, "constraints" : [ + <#-- <#if propertydefs.constraints?exists> <#list propertydefs.constraints as constraintdefs> "name" : "${constraintdefs.name}" - + --> ], - "url" : "${url.serviceContext + "/api/classes/" + url.templateArgs.classname + "/property/" + propertydefs.name.toPrefixString()?replace(":","_")}" + "url" : "${"/api/classes/" + url.templateArgs.classname + "/property/" + propertydefs.name.toPrefixString()?replace(":","_")}" } diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index e41a9f6b8a..b2f5b722aa 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -559,6 +559,11 @@ + + + + + @@ -596,10 +601,10 @@ - + diff --git a/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryHelper.java b/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryHelper.java index a01a75af5b..b2a086abc1 100644 --- a/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryHelper.java +++ b/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryHelper.java @@ -24,7 +24,9 @@ */ package org.alfresco.repo.web.scripts.dictionary; +import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.namespace.NamespaceService; +import org.alfresco.service.namespace.QName; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -41,6 +43,7 @@ public class DictionaryHelper private Map prefixesAndUrlsMap; private Map urlsAndPrefixesMap; private Collection prefixes; + private DictionaryService dictionaryservice; /** * Set the namespaceService property. @@ -52,6 +55,16 @@ public class DictionaryHelper this.namespaceservice = namespaceservice; } + /** + * Set the dictionaryService property. + * + * @param dictionaryService The dictionary service instance to set + */ + public void setDictionaryService(DictionaryService dictionaryService) + { + this.dictionaryservice = dictionaryService; + } + /** * Init method. */ @@ -68,6 +81,11 @@ public class DictionaryHelper } } + public String getNamespaceURIfromQname(QName qname){ + return qname.getNamespaceURI(); + + + } /** * * @param className the class name as cm_person @@ -83,13 +101,26 @@ public class DictionaryHelper return result; } + /** + * + * @param className the class name as cm_person + * @return String the full name in the following format {namespaceuri}shorname + */ + public String getNamespaceURIfromPrefix(String prefix) + { + String result = null; + if(this.isValidPrefix(prefix)) result = this.prefixesAndUrlsMap.get(prefix); + return result; + } + /* * checks whether the classname (eg.cm_author) is a valid one */ public boolean isValidClassname(String classname) { boolean result = false; - if(this.isValidPrefix(this.getPrefix(classname))) result = true; + QName qname = QName.createQName(this.getFullNamespaceURI(classname)); + if(this.isValidPrefix(this.getPrefix(classname))&& this.dictionaryservice.getClass(qname)!=null) result = true; return result; } @@ -137,7 +168,7 @@ public class DictionaryHelper /* * returns a string map or prefixes and urls - with prefix as the key */ - public Map prefixesAndUrlsMap() + public Map getPrefixesAndUrlsMap() { return prefixesAndUrlsMap; } @@ -145,7 +176,7 @@ public class DictionaryHelper /* * returns a string map of urls and prefixes - with url as the key */ - public Map urlsAndPrefixesMap() + public Map getUrlsAndPrefixesMap() { return urlsAndPrefixesMap; } diff --git a/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryServiceTest.java b/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryServiceTest.java index aafab202d9..59d71c66d7 100644 --- a/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryServiceTest.java +++ b/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryServiceTest.java @@ -30,6 +30,7 @@ import org.alfresco.web.scripts.TestWebScriptServer.Response; import java.util.HashMap; import java.util.Map; import org.json.JSONObject; +import org.json.JSONArray; /* * Unit Test for Dictionaryervice @@ -60,13 +61,13 @@ public class DictionaryServiceTest extends BaseWebScriptTest assertEquals("cm:created", result.get("name")); assertEquals("Created Date", result.get("title")); assertEquals("Created Date", result.get("description")); - assertEquals("Date and Time", result.get("dataType")); - assertEquals("false", result.get("multiValued")); - assertEquals("true", result.get("mandatory")); - assertEquals("true", result.get("enforced")); - assertEquals("true", result.get("protected")); - assertEquals("true", result.get("indexed")); - assertEquals("true", result.get("indexedAtomically")); + assertEquals("d:datetime", result.get("dataType")); + assertEquals(false, result.get("multiValued")); + assertEquals(true, result.get("mandatory")); + assertEquals(true, result.get("enforced")); + assertEquals(true, result.get("protected")); + assertEquals(true, result.get("indexed")); + assertEquals(true, result.get("indexedAtomically")); response = sendRequest(new GetRequest("/api/classes/cm_hi/property/cm_welcome"), 404); assertEquals(404,response.getStatus()); @@ -91,6 +92,145 @@ public class DictionaryServiceTest extends BaseWebScriptTest assertEquals(404,response.getStatus()); } +//TODO individual check of all elements + + public void testGetClassDetails() throws Exception + { + GetRequest req = new GetRequest(URL_SITES); + Map< String, String > arguments = new HashMap< String, String >(); + arguments.put("cf", "aspect"); + arguments.put("nsp", "cm"); + arguments.put("n", "dublincore"); + req.setArgs(arguments); + Response response = sendRequest(req, 200); + assertEquals(200,response.getStatus()); + + //check for all aspects under cm without option=>name + arguments.clear(); + arguments.put("cf", "type"); + arguments.put("nsp", "wca"); + arguments.put("n", "rendition"); + req.setArgs(arguments); + response = sendRequest(req, 200); + assertEquals(200,response.getStatus()); + + //check for all aspects under cm without option=>name + arguments.clear(); + arguments.put("cf", "type"); + arguments.put("nsp", "wca"); + arguments.put("n", "rendition"); + req.setArgs(arguments); + response = sendRequest(req, 200); + assertEquals(200,response.getStatus()); + + //check for all aspects under cm without option=>name + arguments.clear(); + arguments.put("cf", "aspect"); + arguments.put("nsp", "cm"); + req.setArgs(arguments); + response = sendRequest(req, 200); + assertEquals(200,response.getStatus()); + + //check for all types under cm without option=>name + arguments.clear(); + arguments.put("cf", "type"); + arguments.put("nsp", "cm"); + req.setArgs(arguments); + response = sendRequest(req, 200); + assertEquals(200,response.getStatus()); + + //check for all data under cm without option=>name + arguments.clear(); + arguments.put("cf", "all"); + arguments.put("nsp", "cm"); + req.setArgs(arguments); + response = sendRequest(req, 200); + assertEquals(200,response.getStatus()); + + //check for all dictionary data without option=>name and option=>namespaceprefix + arguments.clear(); + arguments.put("cf", "all"); + req.setArgs(arguments); + response = sendRequest(req, 200); + assertEquals(200,response.getStatus()); + + //check for all aspect dictionary data without option=>name and option=>namespaceprefix + arguments.clear(); + arguments.put("cf", "aspect"); + req.setArgs(arguments); + response = sendRequest(req, 200); + assertEquals(200,response.getStatus()); + + //check for all types dictionary data without option=>name and option=>namespaceprefix + arguments.clear(); + arguments.put("cf", "type"); + req.setArgs(arguments); + response = sendRequest(req, 200); + assertEquals(200,response.getStatus()); + + + // Test with wrong data + //check for all aspects under cm without option=>name + arguments.clear(); + arguments.put("cf", "aspects"); + arguments.put("nsp", "cm"); + req.setArgs(arguments); + response = sendRequest(req, 404); + assertEquals(404,response.getStatus()); + + //check for all types under cm without option=>name + arguments.clear(); + arguments.put("cf", "types"); + arguments.put("nsp", "cmd"); + req.setArgs(arguments); + response = sendRequest(req, 404); + assertEquals(404,response.getStatus()); + + //check for all data under cm without option=>name + arguments.clear(); + arguments.put("cf", "all"); + arguments.put("nsp", "cmbb"); + req.setArgs(arguments); + response = sendRequest(req, 404); + assertEquals(404,response.getStatus()); + + //check for all dictionary data without option=>name and option=>namespaceprefix + arguments.clear(); + arguments.put("cf", "allsara"); + req.setArgs(arguments); + response = sendRequest(req, 404); + assertEquals(404,response.getStatus()); + + //check for all aspect dictionary data without option=>name and option=>namespaceprefix + arguments.clear(); + arguments.put("cf", "aspectb"); + req.setArgs(arguments); + response = sendRequest(req, 404); + assertEquals(404,response.getStatus()); + + //check for all types dictionary data without option=>name and option=>namespaceprefix + arguments.clear(); + arguments.put("cf", "typesa"); + req.setArgs(arguments); + response = sendRequest(req, 404); + assertEquals(404,response.getStatus()); + + //check for aspects under cm with an invalid name dublincoresara + arguments.clear(); + arguments.put("cf", "aspectss"); + arguments.put("nsp", "cmsd"); + arguments.put("n", "dublincoresara"); + req.setArgs(arguments); + response = sendRequest(req, 404); + assertEquals(404,response.getStatus()); + + //check for all types dictionary data without option=>name and option=>namespaceprefix and option=>classfilter + arguments.clear(); + req.setArgs(arguments); + response = sendRequest(req, 200); + assertEquals(200,response.getStatus()); + } + //TODO individual check of all elements public void testGetAssociatoinDef() throws Exception { diff --git a/source/java/org/alfresco/repo/web/scripts/dictionary/GetClassDetail.java b/source/java/org/alfresco/repo/web/scripts/dictionary/GetClassDetail.java index 9bfd6b397d..4479869cf2 100644 --- a/source/java/org/alfresco/repo/web/scripts/dictionary/GetClassDetail.java +++ b/source/java/org/alfresco/repo/web/scripts/dictionary/GetClassDetail.java @@ -31,10 +31,13 @@ import org.alfresco.web.scripts.WebScriptRequest; import org.alfresco.service.namespace.QName; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.ClassDefinition; +import org.alfresco.service.cmr.dictionary.PropertyDefinition; +import org.alfresco.service.cmr.dictionary.AssociationDefinition; +import java.util.Collection; import java.util.HashMap; import java.util.Map; -/* +/** * Webscript to get the Classdefinitions using classfilter , namespaceprefix and name * @author Saravanan Sellathurai */ @@ -42,13 +45,17 @@ import java.util.Map; public class GetClassDetail extends DeclarativeWebScript { private DictionaryService dictionaryservice; - private ClassDefinition classdefinition; private DictionaryHelper dictionaryhelper; private static final String MODEL_PROP_KEY_CLASS_DEFS = "classdefs"; private static final String MODEL_PROP_KEY_PROPERTY_DETAILS = "propertydefs"; private static final String MODEL_PROP_KEY_ASSOCIATION_DETAILS = "assocdefs"; - private static final String REQ_URL_TEMPL_VAR_CLASS_FILTER = "cf"; + + private static final String CLASS_FILTER_OPTION_TYPE1 = "all"; + private static final String CLASS_FILTER_OPTION_TYPE2 = "aspect"; + private static final String CLASS_FILTER_OPTION_TYPE3 = "type"; + + private static final String REQ_URL_TEMPL_VAR_CLASS_FILTER = "cf"; private static final String REQ_URL_TEMPL_VAR_NAMESPACE_PREFIX = "nsp"; private static final String REQ_URL_TEMPL_VAR_NAME = "n"; @@ -81,23 +88,66 @@ public class GetClassDetail extends DeclarativeWebScript String namespaceprefix = req.getParameter(REQ_URL_TEMPL_VAR_NAMESPACE_PREFIX); String name = req.getParameter(REQ_URL_TEMPL_VAR_NAME); String classname = null; - + + Map classdef = new HashMap(); + Map> propdef = new HashMap>(); + Map> assocdef = new HashMap>(); Map model = new HashMap(); - QName qname = null; + boolean cfGiven = (classfilter != null) && (classfilter.length() > 0); boolean nspGiven = (namespaceprefix != null) && (namespaceprefix.length() > 0); boolean nameGiven = (name != null) && (name.length() > 0); + boolean ignoreCheck , hasNothing ,isValidClassfilter ,isValidTriples, isValidTwins ,hasData = false; - if(cfGiven && nspGiven && nameGiven) - { - classname = namespaceprefix + "_" + name; - qname = QName.createQName(this.dictionaryhelper.getFullNamespaceURI(classname)); - } - classdefinition = this.dictionaryservice.getClass(qname); + classname = namespaceprefix + "_" + name; + isValidClassfilter = (cfGiven ) && (classfilter.equals(CLASS_FILTER_OPTION_TYPE1) || classfilter.equals(CLASS_FILTER_OPTION_TYPE2) || classfilter.equals(CLASS_FILTER_OPTION_TYPE3)); + hasNothing = (!cfGiven && !nspGiven && !nameGiven); + ignoreCheck =(cfGiven && !nspGiven && !nameGiven) && isValidClassfilter; + isValidTriples = (cfGiven && nspGiven && nameGiven) && this.dictionaryhelper.isValidPrefix(namespaceprefix) && isValidClassfilter && this.dictionaryhelper.isValidClassname(classname); + isValidTwins = (cfGiven && nspGiven)&& isValidClassfilter && this.dictionaryhelper.isValidPrefix(namespaceprefix); - if(this.classdefinition != null) + if ((isValidTriples) || (isValidTwins) || (ignoreCheck) || (hasNothing)) + { + Collection qname = null; + int maxIteration = 1; + if (hasNothing || classfilter.equalsIgnoreCase(CLASS_FILTER_OPTION_TYPE1)) maxIteration = 2; + else if(classfilter.equalsIgnoreCase(CLASS_FILTER_OPTION_TYPE3)) qname = this.dictionaryservice.getAllTypes(); + else if (classfilter.equalsIgnoreCase(CLASS_FILTER_OPTION_TYPE2)) qname = this.dictionaryservice.getAllAspects(); + + boolean flag = true; + + for (int i=0; icm_author * @author Saravanan Sellathurai */ @@ -44,7 +48,6 @@ public class GetClassDetails extends DeclarativeWebScript private DictionaryService dictionaryservice; private DictionaryHelper dictionaryhelper; - private ClassDefinition classdefinition; private static final String MODEL_PROP_KEY_CLASS_DETAILS = "classdefs"; private static final String MODEL_PROP_KEY_PROPERTY_DETAILS = "propertydefs"; @@ -80,19 +83,26 @@ public class GetClassDetails extends DeclarativeWebScript Map model = new HashMap(); QName qname = null; + Map classdef = new HashMap(); + Map> propdef = new HashMap>(); + Map> assocdef = new HashMap>(); boolean classnameGiven = (classname != null) && (classname.length() > 0); + boolean hasData = false; - if(classnameGiven) + if(classnameGiven && this.dictionaryhelper.isValidClassname(classname)) { qname = QName.createQName(this.dictionaryhelper.getFullNamespaceURI(classname)); + hasData = true; + classdef.put(qname, this.dictionaryservice.getClass(qname)); + propdef.put(qname, this.dictionaryservice.getClass(qname).getProperties().values()); + assocdef.put(qname, this.dictionaryservice.getClass(qname).getAssociations().values()); } - classdefinition = this.dictionaryservice.getClass(qname); - if(this.classdefinition != null) + if(hasData) { - model.put(MODEL_PROP_KEY_CLASS_DETAILS, this.classdefinition); - model.put(MODEL_PROP_KEY_PROPERTY_DETAILS, this.classdefinition.getProperties().values()); - model.put(MODEL_PROP_KEY_ASSOCIATION_DETAILS, this.classdefinition.getAssociations().values()); + model.put(MODEL_PROP_KEY_CLASS_DETAILS, classdef.values()); + model.put(MODEL_PROP_KEY_PROPERTY_DETAILS, propdef.values()); + model.put(MODEL_PROP_KEY_ASSOCIATION_DETAILS, assocdef.values()); return model; } else diff --git a/source/java/org/alfresco/repo/web/scripts/dictionary/GetPropertyDef.java b/source/java/org/alfresco/repo/web/scripts/dictionary/GetPropertyDef.java index 7867361a94..3e84847326 100644 --- a/source/java/org/alfresco/repo/web/scripts/dictionary/GetPropertyDef.java +++ b/source/java/org/alfresco/repo/web/scripts/dictionary/GetPropertyDef.java @@ -34,8 +34,9 @@ import org.alfresco.service.cmr.dictionary.ClassDefinition; import java.util.HashMap; import java.util.Map; -/* +/** * Webscript to get the Propertydefinition for a given classname and propname + * * @author Saravanan Sellathurai */ diff --git a/source/java/org/alfresco/repo/web/scripts/dictionary/GetPropertyDefs.java b/source/java/org/alfresco/repo/web/scripts/dictionary/GetPropertyDefs.java index 8b22d545c8..718e9a1a5f 100644 --- a/source/java/org/alfresco/repo/web/scripts/dictionary/GetPropertyDefs.java +++ b/source/java/org/alfresco/repo/web/scripts/dictionary/GetPropertyDefs.java @@ -34,8 +34,10 @@ import org.alfresco.service.cmr.dictionary.ClassDefinition; import java.util.HashMap; import java.util.Map; -/* +/** + * * Webscript to get the Propertydefinitions for a given classname eg. =>cm_person + * * @author Saravanan Sellathurai */ @@ -85,6 +87,7 @@ public class GetPropertyDefs extends DeclarativeWebScript qname = QName.createQName(this.dictionaryhelper.getFullNamespaceURI(classname)); } classdefinition = this.dictionaryservice.getClass(qname); + if(this.classdefinition != null) { model.put(MODEL_PROP_KEY_PROPERTY_DETAILS, this.classdefinition.getProperties().values());