mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Subclasses webscript implementation for dictionary service and unit test
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@12010 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -0,0 +1,8 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>Get Sub Class Definitions</shortname>
|
||||||
|
<description>Get the collection of sub classes definitions - parameters r=> recursive, classfilter , namespaceprefix and name</description>
|
||||||
|
<url>/api/classes/{classname}/subclasses?r={recursive?}&nsp={namespacePrefix?}&n={name?}</url>
|
||||||
|
<format default="json"/>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
<transaction>required</transaction>
|
||||||
|
</webscript>
|
@@ -0,0 +1,7 @@
|
|||||||
|
<#import "classdetails.lib.ftl" as classdetailsDefLib/>
|
||||||
|
[
|
||||||
|
<#list classdefs as classdefs>
|
||||||
|
<@classdetailsDefLib.classDefJSON classdefs=classdefs key = classdefs_index/>
|
||||||
|
<#if classdefs_has_next>,</#if>
|
||||||
|
</#list>
|
||||||
|
]
|
@@ -28,10 +28,10 @@
|
|||||||
[
|
[
|
||||||
<#if propertydefs.constraints?exists>
|
<#if propertydefs.constraints?exists>
|
||||||
<#list propertydefs.constraints as constraintdefs>
|
<#list propertydefs.constraints as constraintdefs>
|
||||||
{ <#--constraintdefs.getConstraint()[key]-->
|
{ <#--constraintdefs.getConstraint()[key]
|
||||||
<#assign keys = constraintdefs.getConstraint()?keys>
|
<#assign keys = constraintdefs.getConstraint()?keys>
|
||||||
<#list keys as key>"${key}" : <#if constraintdefs.getConstraint()[key]?exists>"${constraintdefs.getConstraint()[key]}"</#if><#if key_has_next>,</#if>
|
<#list keys as key>"${key}" : <#if constraintdefs.getConstraint()[key]?exists>"${constraintdefs.getConstraint()[key]}"</#if><#if key_has_next>,</#if>
|
||||||
</#list>
|
</#list> -->
|
||||||
}<#if constraintdefs_has_next>,</#if>
|
}<#if constraintdefs_has_next>,</#if>
|
||||||
</#list>
|
</#list>
|
||||||
</#if>
|
</#if>
|
||||||
|
@@ -607,6 +607,12 @@
|
|||||||
<property name="dictionaryHelper" ref="dictionaryWebScriptHelper"/>
|
<property name="dictionaryHelper" ref="dictionaryWebScriptHelper"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<!-- GET subclasses DEFINITION's -->
|
||||||
|
<bean id="webscript.org.alfresco.repository.dictionary.getsubclassesdef.get" class="org.alfresco.repo.web.scripts.dictionary.GetSubClassesDef" parent="webscript">
|
||||||
|
<property name="dictionaryService" ref="DictionaryService"/>
|
||||||
|
<property name="dictionaryHelper" ref="dictionaryWebScriptHelper"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
<!-- Dictionary Service Web Script Helper Class -->
|
<!-- Dictionary Service Web Script Helper Class -->
|
||||||
<bean id="dictionaryWebScriptHelper" class="org.alfresco.repo.web.scripts.dictionary.DictionaryHelper" init-method="init">
|
<bean id="dictionaryWebScriptHelper" class="org.alfresco.repo.web.scripts.dictionary.DictionaryHelper" init-method="init">
|
||||||
<property name="namespaceService" ref="NamespaceService"/>
|
<property name="namespaceService" ref="NamespaceService"/>
|
||||||
|
@@ -322,8 +322,8 @@ public class DictionaryServiceTest extends BaseWebScriptTest
|
|||||||
* 4 no no no Array of classes [returns all classes of both type and aspects in the entire repository]
|
* 4 no no no Array of classes [returns all classes of both type and aspects in the entire repository]
|
||||||
* 5 no yes yes single class [returns a single class of a valid namespaceprefix:name combination]
|
* 5 no yes yes single class [returns a single class of a valid namespaceprefix:name combination]
|
||||||
* 6 no yes no Array of classes [returns an array of all aspects and types under particular namespaceprefix]
|
* 6 no yes no Array of classes [returns an array of all aspects and types under particular namespaceprefix]
|
||||||
* 7 no no yes Array of all classes [since name alone doesn't makes any meaning]
|
* 7 no no yes 404 error [since name alone doesn't makes any meaning]
|
||||||
* 8 yes no yes
|
* 8 yes no yes 404 error [since name alone doesn't makes any meaning]
|
||||||
* Test cases are provided for all the above scenarios
|
* Test cases are provided for all the above scenarios
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -578,88 +578,21 @@ public class DictionaryServiceTest extends BaseWebScriptTest
|
|||||||
}
|
}
|
||||||
assertEquals(200,response.getStatus());
|
assertEquals(200,response.getStatus());
|
||||||
|
|
||||||
//check for a name alone without classfilter and namespaceprefix option [case-type:7]
|
//check for a name alone without classfilter and namespaceprefix option [case-type:7] => returns 404 error
|
||||||
arguments.clear();
|
arguments.clear();
|
||||||
arguments.put("n", "cmobject");
|
arguments.put("n", "cmobject");
|
||||||
req.setArgs(arguments);
|
req.setArgs(arguments);
|
||||||
response = sendRequest(req, 200);
|
response = sendRequest(req, 404);
|
||||||
result = new JSONArray(response.getContentAsString());
|
assertEquals(404,response.getStatus());
|
||||||
assertEquals(193, result.length());
|
|
||||||
for(int i=0; i<result.length(); i++)
|
|
||||||
{
|
|
||||||
if (result.getJSONObject(i).get("name").equals("cm:cmobject"))
|
|
||||||
{
|
|
||||||
validateTypeClass(result.getJSONObject(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assertEquals(200,response.getStatus());
|
|
||||||
|
|
||||||
//check for a name alone without classfilter and namespaceprefix option [case-type:7]
|
|
||||||
arguments.clear();
|
|
||||||
arguments.put("n", "thumbnailed");
|
|
||||||
req.setArgs(arguments);
|
|
||||||
response = sendRequest(req, 200);
|
|
||||||
result = new JSONArray(response.getContentAsString());
|
|
||||||
assertEquals(193, result.length());
|
|
||||||
for(int i=0; i<result.length(); i++)
|
|
||||||
{
|
|
||||||
if (result.getJSONObject(i).get("name").equals("cm:thumbnailed"))
|
|
||||||
{
|
|
||||||
validateAspectClass(result.getJSONObject(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assertEquals(200,response.getStatus());
|
|
||||||
|
|
||||||
//check for a type under cm with name cmobject and no namespaceprefix [case-type:8]
|
//check for a type under cm with name cmobject and no namespaceprefix [case-type:8] => returns 404 error
|
||||||
arguments.clear();
|
arguments.clear();
|
||||||
arguments.put("cf", "type");
|
arguments.put("cf", "type");
|
||||||
arguments.put("n", "cmobject");
|
arguments.put("n", "cmobject");
|
||||||
req.setArgs(arguments);
|
req.setArgs(arguments);
|
||||||
response = sendRequest(req, 200);
|
response = sendRequest(req, 404);
|
||||||
result = new JSONArray(response.getContentAsString());
|
assertEquals(404,response.getStatus());
|
||||||
assertEquals(107, result.length());
|
|
||||||
for(int i=0; i<result.length(); i++)
|
|
||||||
{
|
|
||||||
if (result.getJSONObject(i).get("name").equals("cm:cmobject"))
|
|
||||||
{
|
|
||||||
validateTypeClass(result.getJSONObject(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assertEquals(200,response.getStatus());
|
|
||||||
|
|
||||||
//check for a type under cm with name cmobject and no namespaceprefix [case-type:8]
|
|
||||||
arguments.clear();
|
|
||||||
arguments.put("cf", "aspect");
|
|
||||||
arguments.put("n", "thumbnailed");
|
|
||||||
req.setArgs(arguments);
|
|
||||||
response = sendRequest(req, 200);
|
|
||||||
result = new JSONArray(response.getContentAsString());
|
|
||||||
assertEquals(86, result.length());
|
|
||||||
for(int i=0; i<result.length(); i++)
|
|
||||||
{
|
|
||||||
if (result.getJSONObject(i).get("name").equals("cm:thumbnailed"))
|
|
||||||
{
|
|
||||||
validateAspectClass(result.getJSONObject(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assertEquals(200,response.getStatus());
|
|
||||||
|
|
||||||
//check for a type under cm with name cmobject and no namespaceprefix [case-type:8]
|
|
||||||
arguments.clear();
|
|
||||||
arguments.put("cf", "all");
|
|
||||||
arguments.put("n", "thumbnailed");
|
|
||||||
req.setArgs(arguments);
|
|
||||||
response = sendRequest(req, 200);
|
|
||||||
result = new JSONArray(response.getContentAsString());
|
|
||||||
assertEquals(193, result.length());
|
|
||||||
for(int i=0; i<result.length(); i++)
|
|
||||||
{
|
|
||||||
if (result.getJSONObject(i).get("name").equals("cm:thumbnailed"))
|
|
||||||
{
|
|
||||||
validateAspectClass(result.getJSONObject(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assertEquals(200,response.getStatus());
|
|
||||||
|
|
||||||
// Test with wrong data
|
// Test with wrong data
|
||||||
//check for all aspects under cm without option=>name
|
//check for all aspects under cm without option=>name
|
||||||
@@ -721,6 +654,83 @@ public class DictionaryServiceTest extends BaseWebScriptTest
|
|||||||
assertEquals(200,response.getStatus());
|
assertEquals(200,response.getStatus());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testSubClassDetails() throws Exception
|
||||||
|
{
|
||||||
|
GetRequest req = new GetRequest(URL_SITES + "/sys_base/subclasses");
|
||||||
|
Map< String, String > arguments = new HashMap< String, String >();
|
||||||
|
arguments.put("r", "true");
|
||||||
|
req.setArgs(arguments);
|
||||||
|
Response response = sendRequest(req, 200);
|
||||||
|
assertEquals(200,response.getStatus());
|
||||||
|
response = sendRequest(req, 200);
|
||||||
|
JSONArray result = new JSONArray(response.getContentAsString());
|
||||||
|
assertEquals(104, result.length());
|
||||||
|
for(int i=0; i<result.length(); i++)
|
||||||
|
{
|
||||||
|
if (result.getJSONObject(i).get("name").equals("cm:cmobject"))
|
||||||
|
{
|
||||||
|
validateTypeClass(result.getJSONObject(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertEquals(200,response.getStatus());
|
||||||
|
|
||||||
|
arguments.clear();
|
||||||
|
arguments.put("r", "false");
|
||||||
|
req.setArgs(arguments);
|
||||||
|
response = sendRequest(req, 200);
|
||||||
|
assertEquals(200,response.getStatus());
|
||||||
|
response = sendRequest(req, 200);
|
||||||
|
result = new JSONArray(response.getContentAsString());
|
||||||
|
assertEquals(17, result.length());
|
||||||
|
for(int i=0; i<result.length(); i++)
|
||||||
|
{
|
||||||
|
if (result.getJSONObject(i).get("name").equals("cm:cmobject"))
|
||||||
|
{
|
||||||
|
validateTypeClass(result.getJSONObject(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertEquals(200,response.getStatus());
|
||||||
|
|
||||||
|
assertEquals(200,response.getStatus());
|
||||||
|
arguments.clear();
|
||||||
|
arguments.put("r", "false");
|
||||||
|
arguments.put("nsp", "cm");
|
||||||
|
req.setArgs(arguments);
|
||||||
|
response = sendRequest(req, 200);
|
||||||
|
assertEquals(200,response.getStatus());
|
||||||
|
response = sendRequest(req, 200);
|
||||||
|
result = new JSONArray(response.getContentAsString());
|
||||||
|
assertEquals(2, result.length());
|
||||||
|
for(int i=0; i<result.length(); i++)
|
||||||
|
{
|
||||||
|
if (result.getJSONObject(i).get("name").equals("cm:cmobject"))
|
||||||
|
{
|
||||||
|
validateTypeClass(result.getJSONObject(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertEquals(200,response.getStatus());
|
||||||
|
|
||||||
|
arguments.clear();
|
||||||
|
arguments.put("r", "true");
|
||||||
|
arguments.put("nsp", "cm");
|
||||||
|
req.setArgs(arguments);
|
||||||
|
response = sendRequest(req, 200);
|
||||||
|
assertEquals(200,response.getStatus());
|
||||||
|
response = sendRequest(req, 200);
|
||||||
|
result = new JSONArray(response.getContentAsString());
|
||||||
|
assertEquals(13, result.length());
|
||||||
|
for(int i=0; i<result.length(); i++)
|
||||||
|
{
|
||||||
|
if (result.getJSONObject(i).get("name").equals("cm:cmobject"))
|
||||||
|
{
|
||||||
|
validateTypeClass(result.getJSONObject(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertEquals(200,response.getStatus());
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void testGetAssociatoinDef() throws Exception
|
public void testGetAssociatoinDef() throws Exception
|
||||||
{
|
{
|
||||||
GetRequest req = new GetRequest(URL_SITES + "/cm_person/association/cm_avatar");
|
GetRequest req = new GetRequest(URL_SITES + "/cm_person/association/cm_avatar");
|
||||||
@@ -751,6 +761,7 @@ public class DictionaryServiceTest extends BaseWebScriptTest
|
|||||||
if(result.getJSONObject(i).get("name").equals("wca:renderingenginetemplates"))
|
if(result.getJSONObject(i).get("name").equals("wca:renderingenginetemplates"))
|
||||||
validateAssociation(result.getJSONObject(i));
|
validateAssociation(result.getJSONObject(i));
|
||||||
}
|
}
|
||||||
|
assertEquals(200,response.getStatus());
|
||||||
|
|
||||||
//validate with associationfilter=>child and classname=>wca_form
|
//validate with associationfilter=>child and classname=>wca_form
|
||||||
arguments.clear();
|
arguments.clear();
|
||||||
@@ -764,6 +775,7 @@ public class DictionaryServiceTest extends BaseWebScriptTest
|
|||||||
if(result.getJSONObject(i).get("name").equals("wca:formworkflowdefaults"))
|
if(result.getJSONObject(i).get("name").equals("wca:formworkflowdefaults"))
|
||||||
validateChildAssociation(result.getJSONObject(i));
|
validateChildAssociation(result.getJSONObject(i));
|
||||||
}
|
}
|
||||||
|
assertEquals(200,response.getStatus());
|
||||||
|
|
||||||
//validate with associationfilter=>general and classname=>wca_form
|
//validate with associationfilter=>general and classname=>wca_form
|
||||||
arguments.clear();
|
arguments.clear();
|
||||||
@@ -822,6 +834,20 @@ public class DictionaryServiceTest extends BaseWebScriptTest
|
|||||||
validateChildAssociation(result.getJSONObject(i));
|
validateChildAssociation(result.getJSONObject(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//look for childassociation in the class wca_form , with a name parameter
|
||||||
|
arguments.clear();
|
||||||
|
arguments.put("af", "child");
|
||||||
|
arguments.put("n", "formworkflowdefaults");
|
||||||
|
req.setArgs(arguments);
|
||||||
|
response = sendRequest(req, 200);
|
||||||
|
result = new JSONArray(response.getContentAsString());
|
||||||
|
assertEquals(1,result.length());
|
||||||
|
for(int i=0; i<result.length(); i++)
|
||||||
|
{
|
||||||
|
if(result.getJSONObject(i).get("name").equals("wca:formworkflowdefaults"))
|
||||||
|
validateChildAssociation(result.getJSONObject(i));
|
||||||
|
}
|
||||||
|
|
||||||
//look for childassociation in the class wca_form , with no name parameter
|
//look for childassociation in the class wca_form , with no name parameter
|
||||||
arguments.clear();
|
arguments.clear();
|
||||||
arguments.put("af", "child");
|
arguments.put("af", "child");
|
||||||
|
@@ -123,7 +123,7 @@ public class GetAssociationDefs extends DeclarativeWebScript
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate the condition, if name is present and namespaceprefix is null => if the name is a valid
|
// validate the condition, if name is present and namespaceprefix is null
|
||||||
if(name !=null && namespaceprefix == null)
|
if(name !=null && namespaceprefix == null)
|
||||||
{
|
{
|
||||||
assoc_qname = QName.createQName(this.dictionaryhelper.getFullNamespaceURI(this.dictionaryhelper.getPrefix(classname) + "_" + name));
|
assoc_qname = QName.createQName(this.dictionaryhelper.getFullNamespaceURI(this.dictionaryhelper.getPrefix(classname) + "_" + name));
|
||||||
@@ -154,12 +154,12 @@ public class GetAssociationDefs extends DeclarativeWebScript
|
|||||||
model.put(MODEL_PROP_KEY_INDIVIDUAL_PROPERTY_DEFS, this.dictionaryservice.getClass(class_qname).getChildAssociations().get(assoc_qname));
|
model.put(MODEL_PROP_KEY_INDIVIDUAL_PROPERTY_DEFS, this.dictionaryservice.getClass(class_qname).getChildAssociations().get(assoc_qname));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{ //association filter is either general or all
|
||||||
model.put(MODEL_PROP_KEY_INDIVIDUAL_PROPERTY_DEFS, this.dictionaryservice.getClass(class_qname).getAssociations().get(assoc_qname));
|
model.put(MODEL_PROP_KEY_INDIVIDUAL_PROPERTY_DEFS, this.dictionaryservice.getClass(class_qname).getAssociations().get(assoc_qname));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ //if both name and namespaceprefix are not given, then if the assocfilter is a child =>pull only the childassociations, else if general=> pull
|
{ // this point is always reached, if both name and namespaceprefix are not given OR Just namespaceprefix is alone given
|
||||||
if(associationFilter.equals("child"))
|
if(associationFilter.equals("child"))
|
||||||
{
|
{
|
||||||
model.put(MODEL_PROP_KEY_ASSOCIATION_DETAILS, this.dictionaryservice.getClass(class_qname).getChildAssociations().values());
|
model.put(MODEL_PROP_KEY_ASSOCIATION_DETAILS, this.dictionaryservice.getClass(class_qname).getChildAssociations().values());
|
||||||
|
@@ -111,6 +111,11 @@ public class GetClassDetail extends DeclarativeWebScript
|
|||||||
throw new WebScriptException(Status.STATUS_NOT_FOUND, "Check the classfilter - " + classfilter + " provided in the URL");
|
throw new WebScriptException(Status.STATUS_NOT_FOUND, "Check the classfilter - " + classfilter + " provided in the URL");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(namespaceprefix == null && name != null)
|
||||||
|
{
|
||||||
|
throw new WebScriptException(Status.STATUS_NOT_FOUND, "Missing namespaceprefix parameter in the URL - both combination of name and namespaceprefix is needed");
|
||||||
|
}
|
||||||
|
|
||||||
//validate the namespaceprefix and name parameters => if namespaceprefix is given, then name has to be validated along with it
|
//validate the namespaceprefix and name parameters => if namespaceprefix is given, then name has to be validated along with it
|
||||||
if(namespaceprefix != null)
|
if(namespaceprefix != null)
|
||||||
{
|
{
|
||||||
|
@@ -0,0 +1,208 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2007 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
* This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have recieved a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
package org.alfresco.repo.web.scripts.dictionary;
|
||||||
|
|
||||||
|
import org.alfresco.web.scripts.Cache;
|
||||||
|
import org.alfresco.web.scripts.DeclarativeWebScript;
|
||||||
|
import org.alfresco.web.scripts.Status;
|
||||||
|
import org.alfresco.web.scripts.WebScriptException;
|
||||||
|
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 Sub-Classdefinitions using classfilter , namespaceprefix and name
|
||||||
|
* @author Saravanan Sellathurai
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class GetSubClassesDef extends DeclarativeWebScript
|
||||||
|
{
|
||||||
|
private DictionaryService dictionaryservice;
|
||||||
|
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_IMMEDIATE_SUB_TYPE_CHILDREN = "r";
|
||||||
|
//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";
|
||||||
|
private static final String DICTIONARY_CLASS_NAME = "classname";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the dictionaryService property.
|
||||||
|
*
|
||||||
|
* @param dictionaryService The dictionary service instance to set
|
||||||
|
*/
|
||||||
|
public void setDictionaryService(DictionaryService dictionaryService)
|
||||||
|
{
|
||||||
|
this.dictionaryservice = dictionaryService;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the dictionaryhelper class
|
||||||
|
*
|
||||||
|
* @param dictionaryService The dictionary service instance to set
|
||||||
|
*/
|
||||||
|
public void setDictionaryHelper(DictionaryHelper dictionaryhelper)
|
||||||
|
{
|
||||||
|
this.dictionaryhelper = dictionaryhelper;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Override method from DeclarativeWebScript
|
||||||
|
*/
|
||||||
|
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache)
|
||||||
|
{
|
||||||
|
String name = req.getParameter(REQ_URL_TEMPL_VAR_NAME);
|
||||||
|
String namespaceprefix = req.getParameter(REQ_URL_TEMPL_VAR_NAMESPACE_PREFIX);
|
||||||
|
String classname = req.getServiceMatch().getTemplateVars().get(DICTIONARY_CLASS_NAME);
|
||||||
|
String recursive_value = this.dictionaryhelper.getValidInput(req.getParameter(REQ_URL_TEMPL_IMMEDIATE_SUB_TYPE_CHILDREN));
|
||||||
|
|
||||||
|
boolean recursive = true;
|
||||||
|
|
||||||
|
Map<QName, ClassDefinition> classdef = new HashMap<QName, ClassDefinition>();
|
||||||
|
Map<QName, Collection<PropertyDefinition>> propdef = new HashMap<QName, Collection<PropertyDefinition>>();
|
||||||
|
Map<QName, Collection<AssociationDefinition>> assocdef = new HashMap<QName, Collection<AssociationDefinition>>();
|
||||||
|
Map<String, Object> model = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
QName classQName = null;
|
||||||
|
String namespaceUri = null;
|
||||||
|
Collection <QName> qname = null;
|
||||||
|
boolean isAspect = false;
|
||||||
|
boolean ignoreCheck = false;
|
||||||
|
|
||||||
|
// validate recursive parameter => can be either true or false or null
|
||||||
|
if(recursive_value == null)
|
||||||
|
{
|
||||||
|
recursive = true;
|
||||||
|
}
|
||||||
|
else if(recursive_value.equalsIgnoreCase("true"))
|
||||||
|
{
|
||||||
|
recursive = true;
|
||||||
|
}
|
||||||
|
else if (recursive_value.equalsIgnoreCase("false"))
|
||||||
|
{
|
||||||
|
recursive = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new WebScriptException(Status.STATUS_NOT_FOUND, "Check the value for the parameter recursive=> " + recursive_value +" can only be either true or false");
|
||||||
|
}
|
||||||
|
|
||||||
|
//validate the classname
|
||||||
|
if(this.dictionaryhelper.isValidClassname(classname) == true)
|
||||||
|
{
|
||||||
|
classQName = QName.createQName(this.dictionaryhelper.getFullNamespaceURI(classname));
|
||||||
|
if(this.dictionaryhelper.isValidTypeorAspect(classname) == true)
|
||||||
|
{
|
||||||
|
isAspect = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new WebScriptException(Status.STATUS_NOT_FOUND, "Check the classname - " + classname + " parameter in the URL");
|
||||||
|
}
|
||||||
|
|
||||||
|
// collect the subaspects or subtypes of the class
|
||||||
|
if(isAspect == true)
|
||||||
|
{
|
||||||
|
qname = this.dictionaryservice.getSubAspects(classQName, recursive);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qname = this.dictionaryservice.getSubTypes(classQName, recursive);
|
||||||
|
}
|
||||||
|
|
||||||
|
//validate the namespaceprefix parameter
|
||||||
|
if(namespaceprefix != null)
|
||||||
|
{
|
||||||
|
if(this.dictionaryhelper.isValidPrefix(namespaceprefix) == false)
|
||||||
|
{
|
||||||
|
throw new WebScriptException(Status.STATUS_NOT_FOUND, "Check the namespaceprefix - " + namespaceprefix + " - parameter in the URL");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//validate the name parameter
|
||||||
|
if(name != null)
|
||||||
|
{
|
||||||
|
if(this.dictionaryhelper.isValidModelName(name) == false)
|
||||||
|
{
|
||||||
|
throw new WebScriptException(Status.STATUS_NOT_FOUND, "Check the name parameter - " + name + " in the URL");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//validate the name parameter
|
||||||
|
if (namespaceprefix == null && name != null)
|
||||||
|
{
|
||||||
|
namespaceUri = this.dictionaryhelper.getNamespaceURIfromPrefix(this.dictionaryhelper.getPrefixFromModelName(name));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (namespaceprefix != null && name == null)
|
||||||
|
{
|
||||||
|
namespaceUri = this.dictionaryhelper.getNamespaceURIfromPrefix(namespaceprefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(namespaceprefix == null && name == null)
|
||||||
|
{
|
||||||
|
namespaceUri = null;
|
||||||
|
ignoreCheck = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (namespaceprefix != null && name != null)
|
||||||
|
{
|
||||||
|
if(this.dictionaryhelper.isValidClassname(namespaceprefix + "_" + name) == false)
|
||||||
|
{
|
||||||
|
throw new WebScriptException(Status.STATUS_NOT_FOUND, "Check the namespaceprefix - " + namespaceprefix + " and name - "+ name + " - parameter in the URL");
|
||||||
|
}
|
||||||
|
namespaceUri = this.dictionaryhelper.getNamespaceURIfromPrefix(namespaceprefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(QName qnameObj: qname)
|
||||||
|
{
|
||||||
|
if(ignoreCheck || qnameObj.getNamespaceURI().equals(namespaceUri))
|
||||||
|
{
|
||||||
|
classdef.put(qnameObj, this.dictionaryservice.getClass(qnameObj));
|
||||||
|
propdef.put(qnameObj, this.dictionaryservice.getClass(qnameObj).getProperties().values());
|
||||||
|
assocdef.put(qnameObj, this.dictionaryservice.getClass(qnameObj).getAssociations().values());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
model.put(MODEL_PROP_KEY_CLASS_DEFS, classdef.values());
|
||||||
|
model.put(MODEL_PROP_KEY_PROPERTY_DETAILS, propdef.values());
|
||||||
|
model.put(MODEL_PROP_KEY_ASSOCIATION_DETAILS, assocdef.values());
|
||||||
|
return model;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user