annotate WebServiceExtensionsV1.1/WebServiceToolWorkflow_REST_SOAP/lib/SAWADLParser/src/edu/uga/cs/lsdis/meteors/wadls/util/SchemaUtils.java @ 0:049760c677de default tip

Galaxy WSExtensions added successfully
author uga-galaxy-group
date Tue, 05 Jul 2011 19:34:18 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
1 /*
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
2 * Created on Apr 10, 2005
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
3 *
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
4 */
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
5 package edu.uga.cs.lsdis.meteors.wadls.util;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
6
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
7 import java.util.ArrayList;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
8 import java.util.Iterator;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
9 import java.util.List;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
10 import java.util.Map;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
11
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
12 import javax.wadls.Grammars;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
13 import javax.wadls.Params;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
14 import javax.wadls.WADLSException;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
15 import javax.wadls.extensions.schema.Schema;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
16 import javax.xml.namespace.QName;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
17
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
18 import org.w3c.dom.DOMException;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
19 import org.w3c.dom.Element;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
20 import org.w3c.dom.Node;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
21 import org.w3c.dom.NodeList;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
22
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
23 import edu.uga.cs.lsdis.meteors.wadls.Constants;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
24 import edu.uga.cs.lsdis.meteors.wadls.extensions.schema.SchemaConstants;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
25 import edu.uga.cs.lsdis.meteors.wadls.util.xml.QNameUtils;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
26 import edu.uga.cs.lsdis.meteors.wadls.util.xml.XPathUtils;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
27
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
28 /**
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
29 * This file is a collection of utilities which find the location of a XML/XSD Element by using the given path.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
30 * @author Zixin Wu
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
31 *
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
32 */
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
33
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
34 public class SchemaUtils {
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
35
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
36 /**
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
37 * Search an XML element in the schemas contained in the given Types.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
38 * @param types Search in the schemas contained in this WSDLS Types.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
39 * @param tagName XML Element name of the desired element.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
40 * @param elementName The value of the attribute "name" of the desired element.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
41 * @return An XML element whose XML Element name is "tagName" and whose attribute "name" is "elementName".
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
42 * @throws WADLSException
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
43 */
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
44 public static Element findXMLEleInSchemas(Grammars grammars, String tagName, QName elementName) throws WADLSException{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
45 Map schemas = grammars.getSchemas();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
46 Iterator it = schemas.values().iterator();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
47 while(it.hasNext()){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
48 Schema schema = (Schema)(it.next());
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
49 Element schemaEle = schema.getElement();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
50 if (schemaEle.getAttribute(Constants.ATTR_TARGET_NAMESPACE).equals(elementName.getNamespaceURI())){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
51 Element foundEle = findXMLEleByName(schemaEle, tagName, elementName);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
52 if (foundEle != null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
53 return foundEle;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
54 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
55 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
56 return null;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
57 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
58
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
59 /**
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
60 * Search the element whose XML Element name is "tagName" and whose attribute "name" is "elementName",
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
61 * in the startElement, search in only one level depth.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
62 * @param startElement Start searching from this XML Element.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
63 * @param tagName XML Element name of the desired element.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
64 * @param elementName The value of the attribute "name" of the desired element.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
65 * @return An XML element whose XML Element name is "tagName" and whose attribute "name" is "elementName".
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
66 * @throws WADLSException
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
67 */
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
68 public static Element findXMLEleByName(Element startElement, String tagName, QName elementName) throws WADLSException{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
69 NodeList nodeList = startElement.getChildNodes();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
70 //find the element with the required name as an attribute
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
71 int listLength = nodeList.getLength();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
72 for(int i=0;i<listLength;i++){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
73 Node currentNode = nodeList.item(i);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
74 if (currentNode.getNodeType() != Node.ELEMENT_NODE) continue;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
75 Element currentElement = (Element)nodeList.item(i);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
76 //get the "name" attribute
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
77 String nameAttr = currentElement.getAttribute(SchemaConstants.ATTR_NAME);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
78 QName qNameAttr = QNameUtils.getQName(nameAttr, currentElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
79 //compare both namespaceURI and localname of the "name" attribute
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
80 if (elementName == null || qNameAttr.equals(elementName)){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
81 //compare localname of the tag, and check namespace of the tag is XSD
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
82 QName currentTagQName = QNameUtils.getQName(currentElement.getTagName(), currentElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
83 if (SchemaConstants.XSD_STR_LIST.contains(currentTagQName.getNamespaceURI())
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
84 && tagName.equals(currentTagQName.getLocalPart())){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
85 //this is the element we are looking for.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
86 return currentElement;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
87 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
88 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
89 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
90 return null;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
91 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
92
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
93
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
94 /**
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
95 * Return a list of XSD elements contained in the startElement (XSD Element), search in only 1 level depth.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
96 * @param startElement Start search from this XSD element.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
97 * @param types WSDLS Types
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
98 * @return A list of XSD elements contained in the startElement. If no XSD element is contained, the list has 0 element.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
99 * @throws WADLSException
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
100 */
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
101 public static List listXSDElesInEle(Element startElement, Grammars grammars) throws WADLSException{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
102 String refAttr = startElement.getAttribute(SchemaConstants.ATTR_REF);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
103 if (refAttr != ""){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
104 //look for the referenced element
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
105 QName elementQName = QNameUtils.getQName(refAttr, startElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
106 Element refenecedElement = findXMLEleInSchemas(grammars, SchemaConstants.ELEM_ELEMENT, elementQName);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
107 if (refenecedElement != null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
108 return listXSDElesInEle(refenecedElement, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
109 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
110 throw new DOMException(DOMException.NOT_FOUND_ERR, "Cannot find referenced element");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
111 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
112 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
113 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
114 Element complexElement = null;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
115 String typeAttr = startElement.getAttribute(SchemaConstants.ATTR_TYPE);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
116 if (typeAttr != ""){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
117 //get the QName of typeAttr
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
118 QName typeQName = QNameUtils.getQName(typeAttr, startElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
119 if (SchemaConstants.XSD_STR_LIST.contains(typeQName.getNamespaceURI()))
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
120 //primitive data type
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
121 return new ArrayList();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
122 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
123 //ComplexType or SimpleType
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
124 complexElement = findXMLEleInSchemas(grammars, SchemaConstants.ELEM_COMPLEXTYPE, typeQName);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
125 if (complexElement == null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
126 //simpleType
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
127 return new ArrayList();;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
128 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
129 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
130 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
131 //No type, look for complexType in the subNodes
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
132 complexElement = findXMLEleByName(startElement, SchemaConstants.ELEM_COMPLEXTYPE, null);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
133 if (complexElement == null){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
134 WADLSException wsdlsExc = new WADLSException(WADLSException.NOT_FOUND_ELE_BY_PATH,
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
135 "cannot find complexType matching the path");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
136 wsdlsExc.setLocation(XPathUtils.getXPathExprFromNode(startElement));
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
137 throw wsdlsExc;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
138 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
139 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
140
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
141 //we got the complexType element so far.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
142 //we need to collect all the elements
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
143 return listXSDElesInComplexType(complexElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
144 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
145 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
146
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
147 public static List listXSDElesInEle(Element startElement, Params params) throws WADLSException{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
148 /*String refAttr = startElement.getAttribute(SchemaConstants.ATTR_REF);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
149 if (refAttr != ""){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
150 //look for the referenced element
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
151 QName elementQName = QNameUtils.getQName(refAttr, startElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
152 Element refenecedElement = findXMLEleInSchemas(grammars, SchemaConstants.ELEM_ELEMENT, elementQName);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
153 if (refenecedElement != null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
154 return listXSDElesInEle(refenecedElement, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
155 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
156 throw new DOMException(DOMException.NOT_FOUND_ERR, "Cannot find referenced element");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
157 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
158 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
159 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
160 Element complexElement = null;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
161 String typeAttr = startElement.getAttribute(SchemaConstants.ATTR_TYPE);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
162 if (typeAttr != ""){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
163 //get the QName of typeAttr
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
164 QName typeQName = QNameUtils.getQName(typeAttr, startElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
165 if (SchemaConstants.XSD_STR_LIST.contains(typeQName.getNamespaceURI()))
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
166 //primitive data type
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
167 return new ArrayList();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
168 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
169 //ComplexType or SimpleType
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
170 complexElement = findXMLEleInSchemas(grammars, SchemaConstants.ELEM_COMPLEXTYPE, typeQName);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
171 if (complexElement == null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
172 //simpleType
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
173 return new ArrayList();;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
174 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
175 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
176 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
177 //No type, look for complexType in the subNodes
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
178 complexElement = findXMLEleByName(startElement, SchemaConstants.ELEM_COMPLEXTYPE, null);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
179 if (complexElement == null){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
180 WADLSException wsdlsExc = new WADLSException(WADLSException.NOT_FOUND_ELE_BY_PATH,
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
181 "cannot find complexType matching the path");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
182 wsdlsExc.setLocation(XPathUtils.getXPathExprFromNode(startElement));
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
183 throw wsdlsExc;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
184 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
185 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
186
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
187 //we got the complexType element so far.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
188 //we need to collect all the elements
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
189 return listXSDElesInComplexType(complexElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
190 }*/
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
191
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
192 List temp = null;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
193 temp.set(1, startElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
194 return temp;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
195
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
196 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
197
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
198 /**
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
199 * Return a list of XSD elements contained in the complexElement (XSD complexType), search in only 1 level depth.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
200 * @param complexElement Start search from this XSD complexType.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
201 * @return A list of XSD elements contained in the startElement. If no XSD element is contained, the list has 0 element.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
202 * @throws WADLSException
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
203 */
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
204 public static List listXSDElesInComplexType(Element complexElement) throws WADLSException{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
205 List subElements = new ArrayList();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
206
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
207 NodeList subNodes = complexElement.getChildNodes();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
208 int length = subNodes.getLength();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
209 for(int i=0;i<length;i++){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
210 Node currentNode = subNodes.item(i);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
211 if (currentNode.getNodeType() != Node.ELEMENT_NODE) continue;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
212 Element currentElement = (Element)currentNode;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
213 String tagName = currentElement.getTagName();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
214 QName tagQName = QNameUtils.getQName(tagName, currentElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
215 String localPart = tagQName.getLocalPart();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
216 if (!SchemaConstants.XSD_STR_LIST.contains(tagQName.getNamespaceURI()))
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
217 continue;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
218 if (localPart.equals(SchemaConstants.ELEM_ELEMENT))
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
219 subElements.add(currentElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
220 else if
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
221 (localPart.equals(SchemaConstants.ELEM_ALL)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
222 || localPart.equals(SchemaConstants.ELEM_SEQUENCE)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
223 || localPart.equals(SchemaConstants.ELEM_CHOICE)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
224 || localPart.equals(SchemaConstants.ELEM_COMPLEXCONTENT)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
225 || localPart.equals(SchemaConstants.ELEM_RESTRICTION)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
226 )
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
227 //Just skip it, call this method recursively.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
228 subElements.addAll(listXSDElesInComplexType(currentElement));
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
229 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
230 return subElements;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
231 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
232
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
233 /**
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
234 * Search an XSD element located by the startElement and path.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
235 * @param startElement Start search from this XSD element.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
236 * @param path
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
237 * @param types WSDLS Types
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
238 * @return An XSD element
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
239 * @throws WADLSException
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
240 */
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
241 public static Element findXSDEleOnEle(Element startElement, String path, Grammars grammars) throws WADLSException{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
242 String refAttr = startElement.getAttribute(SchemaConstants.ATTR_REF);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
243 if (refAttr != ""){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
244 //look for the referenced element
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
245 QName elementQName = QNameUtils.getQName(refAttr, startElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
246 Element refenecedElement = findXMLEleInSchemas(grammars, SchemaConstants.ELEM_ELEMENT, elementQName);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
247 if (refenecedElement != null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
248 return findXSDEleOnEle(refenecedElement, path, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
249 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
250 throw new DOMException(DOMException.NOT_FOUND_ERR, "Cannot find referenced element");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
251 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
252 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
253 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
254 if (path == "")
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
255 return startElement;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
256
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
257 String typeAttr = startElement.getAttribute(SchemaConstants.ATTR_TYPE);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
258 if (typeAttr != ""){ //<... type="...">
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
259 //get the QName of typeAttr
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
260 QName typeQName = QNameUtils.getQName(typeAttr, startElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
261 if (SchemaConstants.XSD_STR_LIST.contains(typeQName.getNamespaceURI())){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
262 //primitive data type
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
263 WADLSException wsdlsExc = new WADLSException(WADLSException.PATH_ERROR,
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
264 "Primitive type cannot has path");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
265 wsdlsExc.setLocation(XPathUtils.getXPathExprFromNode(startElement));
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
266 throw wsdlsExc;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
267 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
268 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
269 //find the complexType with the given type QName
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
270 Element complexTypeElement = findXMLEleInSchemas(grammars, SchemaConstants.ELEM_COMPLEXTYPE, typeQName);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
271 if (complexTypeElement != null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
272 return findXSDEleOnComplexType(complexTypeElement, path, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
273 else
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
274 //cannot find in complexType
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
275 throw new DOMException(DOMException.NOT_FOUND_ERR, "cannot find complexType by the given path");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
276 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
277 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
278 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
279 //No type, look for complexType in the subNodes
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
280 Element complexElement = findXMLEleByName(startElement, SchemaConstants.ELEM_COMPLEXTYPE, null);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
281 if (complexElement != null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
282 return findXSDEleOnComplexType(complexElement, path, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
283 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
284 WADLSException wsdlsExc = new WADLSException(WADLSException.NOT_FOUND_ELE_BY_PATH,
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
285 "cannot find complexType matching the path");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
286 wsdlsExc.setLocation(XPathUtils.getXPathExprFromNode(startElement));
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
287 throw wsdlsExc;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
288 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
289 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
290 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
291 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
292
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
293 public static Element findXSDEleOnEle(Element startElement, String path, Params params) throws WADLSException{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
294 /*String refAttr = startElement.getAttribute(SchemaConstants.ATTR_REF);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
295 if (refAttr != ""){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
296 //look for the referenced element
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
297 QName elementQName = QNameUtils.getQName(refAttr, startElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
298 Element refenecedElement = findXMLEleInSchemas(params, SchemaConstants.ELEM_ELEMENT, elementQName);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
299 if (refenecedElement != null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
300 return findXSDEleOnEle(refenecedElement, path, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
301 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
302 throw new DOMException(DOMException.NOT_FOUND_ERR, "Cannot find referenced element");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
303 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
304 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
305 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
306 if (path == "")
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
307 return startElement;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
308
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
309 String typeAttr = startElement.getAttribute(SchemaConstants.ATTR_TYPE);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
310 if (typeAttr != ""){ //<... type="...">
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
311 //get the QName of typeAttr
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
312 QName typeQName = QNameUtils.getQName(typeAttr, startElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
313 if (SchemaConstants.XSD_STR_LIST.contains(typeQName.getNamespaceURI())){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
314 //primitive data type
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
315 WADLSException wsdlsExc = new WADLSException(WADLSException.PATH_ERROR,
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
316 "Primitive type cannot has path");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
317 wsdlsExc.setLocation(XPathUtils.getXPathExprFromNode(startElement));
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
318 throw wsdlsExc;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
319 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
320 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
321 //find the complexType with the given type QName
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
322 Element complexTypeElement = findXMLEleInSchemas(grammars, SchemaConstants.ELEM_COMPLEXTYPE, typeQName);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
323 if (complexTypeElement != null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
324 return findXSDEleOnComplexType(complexTypeElement, path, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
325 else
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
326 //cannot find in complexType
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
327 throw new DOMException(DOMException.NOT_FOUND_ERR, "cannot find complexType by the given path");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
328 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
329 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
330 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
331 //No type, look for complexType in the subNodes
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
332 Element complexElement = findXMLEleByName(startElement, SchemaConstants.ELEM_COMPLEXTYPE, null);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
333 if (complexElement != null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
334 return findXSDEleOnComplexType(complexElement, path, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
335 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
336 WADLSException wsdlsExc = new WADLSException(WADLSException.NOT_FOUND_ELE_BY_PATH,
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
337 "cannot find complexType matching the path");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
338 wsdlsExc.setLocation(XPathUtils.getXPathExprFromNode(startElement));
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
339 throw wsdlsExc;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
340 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
341 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
342 }*/
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
343 return startElement;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
344 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
345
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
346 /**
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
347 * Search an XSD Element from the XSD complexType.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
348 * @param complexTypeElement Start searching from this XSD ComplexType
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
349 * @param path
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
350 * @param types WSDLS Types
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
351 * @return An XSD Element
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
352 * @throws WADLSException
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
353 */
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
354 public static Element findXSDEleOnComplexType(Element complexTypeElement, String path, Grammars grammars) throws WADLSException{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
355 if (path == null || path == "")
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
356 return null;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
357 //look for the matching element.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
358 String splitedPath[] = splitPath(path);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
359 String elementName = splitedPath[0];
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
360 path = splitedPath[1];
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
361 Element targetElement = findXSDEleInComplexType(complexTypeElement, elementName, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
362 if (targetElement != null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
363 return findXSDEleOnEle(targetElement, path, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
364 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
365 WADLSException wsdlsExc = new WADLSException(WADLSException.NOT_FOUND_ELE_BY_PATH,
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
366 "Cannot find the element matching the path");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
367 wsdlsExc.setLocation(XPathUtils.getXPathExprFromNode(complexTypeElement));
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
368 throw wsdlsExc;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
369 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
370 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
371
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
372 public static Element findXSDEleOnComplexType(Element complexTypeElement, String path, Params params) throws WADLSException{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
373 /*if (path == null || path == "")
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
374 return null;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
375 //look for the matching element.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
376 String splitedPath[] = splitPath(path);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
377 String elementName = splitedPath[0];
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
378 path = splitedPath[1];
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
379 Element targetElement = findXSDEleInComplexType(complexTypeElement, elementName, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
380 if (targetElement != null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
381 return findXSDEleOnEle(targetElement, path, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
382 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
383 WADLSException wsdlsExc = new WADLSException(WADLSException.NOT_FOUND_ELE_BY_PATH,
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
384 "Cannot find the element matching the path");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
385 wsdlsExc.setLocation(XPathUtils.getXPathExprFromNode(complexTypeElement));
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
386 throw wsdlsExc;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
387 }*/
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
388 return complexTypeElement;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
389 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
390
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
391 /**
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
392 * Search an XSD Element recursively inside of the complexType.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
393 * @param startElement
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
394 * @param elementName The desired attribute "name"
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
395 * @param types WSDL Types
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
396 * @return A XSD Element
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
397 * @throws WADLSException
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
398 */
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
399 public static Element findXSDEleInComplexType(Element startElement, String elementName, Grammars grammars) throws WADLSException{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
400 NodeList subNodes = startElement.getChildNodes();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
401 int length = subNodes.getLength();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
402 for(int i=0;i<length;i++){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
403 Node currentNode = subNodes.item(i);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
404 if (currentNode.getNodeType() != Node.ELEMENT_NODE) continue;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
405 Element currentElement = (Element)currentNode;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
406 String tagName = currentElement.getTagName();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
407 QName tagQName = QNameUtils.getQName(tagName, currentElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
408 String localPart = tagQName.getLocalPart();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
409 if (!SchemaConstants.XSD_STR_LIST.contains(tagQName.getNamespaceURI()))
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
410 continue;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
411 if (localPart.equals(SchemaConstants.ELEM_ELEMENT)){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
412 String refAttr = currentElement.getAttribute(SchemaConstants.ATTR_REF);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
413 if (refAttr != ""){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
414 if (refAttr.equals(elementName)){ //TODO need to compare the namespaces
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
415 //look for the referenced element
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
416 QName elementQName = QNameUtils.getQName(refAttr, currentElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
417 Element refenecedElement = findXMLEleInSchemas(grammars, SchemaConstants.ELEM_ELEMENT, elementQName);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
418 return refenecedElement;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
419 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
420 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
421 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
422 String nameAttr = currentElement.getAttribute(SchemaConstants.ATTR_NAME);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
423 // if (nameAttr == "") continue;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
424 if (nameAttr.equals(elementName)) //TODO need to compare the namespaces
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
425 //this is the element we are looking for.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
426 return currentElement;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
427 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
428 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
429 else if
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
430 (localPart.equals(SchemaConstants.ELEM_ALL)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
431 || localPart.equals(SchemaConstants.ELEM_SEQUENCE)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
432 || localPart.equals(SchemaConstants.ELEM_CHOICE)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
433 || localPart.equals(SchemaConstants.ELEM_COMPLEXCONTENT)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
434 || localPart.equals(SchemaConstants.ELEM_RESTRICTION)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
435 ){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
436 //Just skip it, call this method recursively.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
437 return findXSDEleInComplexType(currentElement, elementName, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
438 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
439 else if (localPart.equals(SchemaConstants.ELEM_EXTENSION)){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
440 //try to find it inside the <xsd:extension>
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
441 Element returnElement = findXSDEleInComplexType(currentElement, elementName, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
442 if (returnElement != null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
443 return returnElement;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
444 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
445 String baseAttr = currentElement.getAttribute(SchemaConstants.ATTR_BASE);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
446 QName baseQName = QNameUtils.getQName(baseAttr, currentElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
447 Element baseElement = findXMLEleInSchemas(grammars, SchemaConstants.ELEM_COMPLEXTYPE, baseQName);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
448 return findXSDEleInComplexType(baseElement, elementName, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
449 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
450 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
451 else if (localPart.equals(SchemaConstants.ELEM_GROUP)){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
452 //find <group>.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
453 String refAttr = currentElement.getAttribute(SchemaConstants.ATTR_REF);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
454 if (refAttr != ""){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
455 //look for the referenced <group>
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
456 QName groupQName = QNameUtils.getQName(refAttr, currentElement);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
457 Element groupElement = findXMLEleInSchemas(grammars, SchemaConstants.ELEM_GROUP, groupQName);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
458 if (groupElement != null){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
459 //try to find it in the referenced <group>
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
460 Element returnElement = findXSDEleInComplexType(groupElement, elementName, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
461 if (returnElement != null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
462 return returnElement;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
463 else
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
464 //Not in the referenced <group>
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
465 continue;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
466 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
467 else
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
468 throw new DOMException(DOMException.NOT_FOUND_ERR, "Cannot find the referenced group");
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
469 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
470 else
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
471 //Just skip it, call this method recursively.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
472 return findXSDEleInComplexType(currentElement, elementName, grammars);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
473 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
474 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
475 return null;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
476 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
477
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
478 /**
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
479 * return the first schema in the given extensible elements.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
480 * @param extElements Search the first schema in this extensible elements.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
481 * @return The first schema in the given extensible elements.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
482 * @throws WADLSException
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
483 */
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
484 public static Schema getFirstSchema(List extElements){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
485 if (extElements == null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
486 return null;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
487 Object schemaObj = extElements.iterator().next();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
488 if (schemaObj == null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
489 return null;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
490 /* ExtensibilityElement schemaEE = (ExtensibilityElement) schemaObj;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
491 if (SchemaConstants.XSD_QNAME_LIST.contains(schemaEE.getElementType()))
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
492 return (Schema)schemaObj;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
493 else*/
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
494 return null;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
495 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
496
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
497 /**
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
498 * return all schemas in the given extensible elements.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
499 * @param extElements Search the first schema in this extensible elements.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
500 * @return All schemas in the given extensible elements.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
501 * @throws WADLSException
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
502 */
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
503 public static List getSchemas(List extElements){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
504 List schemas = new ArrayList();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
505 if (extElements != null){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
506 Iterator it = extElements.iterator();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
507 while(it.hasNext()){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
508 Object schemaObj = it.next();
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
509 if (schemaObj == null)
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
510 continue;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
511 /*ExtensibilityElement schemaEE = (ExtensibilityElement) schemaObj;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
512 if (SchemaConstants.XSD_QNAME_LIST.contains(schemaEE.getElementType()))
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
513 schemas.add((Schema)schemaObj);*/
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
514 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
515 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
516 return schemas;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
517 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
518
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
519 /**
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
520 * This method split the path string, return a string array,
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
521 * whose first dim is the string before the first '/' ,
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
522 * and the second dim is the remaining string.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
523 * @param path The path to be splitted.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
524 * @return The splitted string.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
525 */
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
526 public static String[] splitPath(String path){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
527 String returnStr[] = new String[2]; //the string before '/'
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
528 int slashPosition = path.indexOf('/');
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
529 if (slashPosition == -1){
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
530 //no deeper path
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
531 returnStr[0] = path;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
532 returnStr[1] = "";
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
533 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
534 else{
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
535 returnStr[0] = path.substring(0, slashPosition);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
536 returnStr[1] = path.substring(slashPosition+1);
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
537 //if the remaining path is "/", empty it.
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
538 if (returnStr[1] == "/") returnStr[1] = "";
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
539 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
540 return returnStr;
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
541 }
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
542
049760c677de Galaxy WSExtensions added successfully
uga-galaxy-group
parents:
diff changeset
543 }