Mercurial > repos > ganjoo > webservice_toolsuite
comparison WebServiceToolWorkflow/ParserForWADL/src/lsdis/WADLParser.java @ 0:e7482c82796e default tip
Migrated tool version 1.0.0 from old tool shed archive to new tool shed repository
author | ganjoo |
---|---|
date | Tue, 07 Jun 2011 17:34:26 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:e7482c82796e |
---|---|
1 /* | |
2 * Copyright (c) 2009 Srikalyan Swayampakula.. All rights reserved. | |
3 * | |
4 * Author : Srikalyan Swayampakula. . | |
5 * Name of the File : WADLParser.java . | |
6 * Created on : Nov 22, 2009 at 5:30:47 PM . | |
7 * | |
8 * Redistribution and use in source and binary forms, with or without | |
9 * modification, are permitted provided that the following conditions | |
10 * are met: | |
11 * | |
12 * 1. Redistributions of source code must retain the above | |
13 * copyright notice, this list of conditions and the following | |
14 * disclaimer. | |
15 * 2. Redistributions in binary form must reproduce the above | |
16 * copyright notice, this list of conditions and the following | |
17 * disclaimer in the documentation and/or other materials | |
18 * provided with the distribution. | |
19 * 3. Neither the name of the University of Georgia nor the names | |
20 * of its contributors may be used to endorse or promote | |
21 * products derived from this software without specific prior | |
22 * written permission. | |
23 * | |
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |
25 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |
26 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
27 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |
29 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | |
31 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
32 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | |
35 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | |
36 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
37 */ | |
38 package lsdis; | |
39 | |
40 import java.io.File; | |
41 import java.net.URI; | |
42 import java.net.URL; | |
43 import java.util.ArrayList; | |
44 import java.util.List; | |
45 import org.jdom.Attribute; | |
46 import org.jdom.Document; | |
47 import org.jdom.Element; | |
48 import org.jdom.Namespace; | |
49 import org.jdom.input.SAXBuilder; | |
50 import org.xml.sax.Attributes; | |
51 | |
52 /** | |
53 * | |
54 * @author Srikalyan Swayampakula. | |
55 */ | |
56 public class WADLParser | |
57 { | |
58 | |
59 static Document currentDocument; | |
60 static Element rootElement; | |
61 static Namespace wadlNamespace; | |
62 public Application application; | |
63 | |
64 public WADLParser(URL fileURL) throws Exception | |
65 { | |
66 currentDocument = generateDocumentation(fileURL); | |
67 rootElement = currentDocument.getRootElement(); | |
68 wadlNamespace = rootElement.getNamespace(); | |
69 application = getApplication(); | |
70 } | |
71 | |
72 public Application getApplicationOfWADL() | |
73 { | |
74 return application; | |
75 } | |
76 | |
77 private Document generateDocumentation(URL fileName) throws Exception | |
78 { | |
79 Document doc = null; | |
80 SAXBuilder builder = new SAXBuilder(); | |
81 //doc = builder.build(new File(fileName.toURI())); | |
82 doc = builder.build(fileName); | |
83 return doc; | |
84 } | |
85 | |
86 private Application getApplication() throws Exception | |
87 { | |
88 List<Doc> docs = getDocs(rootElement); | |
89 List<Resources> resources = getResources(rootElement); | |
90 Grammar grammar = getGrammar(rootElement); | |
91 return new Application(resources, docs, grammar, null); | |
92 } | |
93 | |
94 /*** | |
95 * used to get docs list for an element eg. applicaiton. | |
96 * @param e | |
97 * @return | |
98 */ | |
99 private List<Doc> getDocs(Element e) | |
100 { | |
101 if (e == null) | |
102 { | |
103 return null; | |
104 } | |
105 List<Doc> docs = null; | |
106 List<Element> xmlDoc = e.getChildren(WADLConstant.DOC, wadlNamespace); | |
107 if (xmlDoc != null) | |
108 { | |
109 docs = new ArrayList<Doc>(); | |
110 for (Element e1 : xmlDoc) | |
111 { | |
112 Doc tempDoc = getDoc(e1); | |
113 if (tempDoc != null) | |
114 { | |
115 docs.add(tempDoc); | |
116 } | |
117 } | |
118 } | |
119 return docs; | |
120 } | |
121 | |
122 private Doc getDoc(Element e) | |
123 { | |
124 if (e == null) | |
125 { | |
126 return null; | |
127 } | |
128 String title = e.getAttributeValue(WADLConstant.DOC_TITLE); | |
129 | |
130 String lang = e.getAttributeValue(WADLConstant.DOC_LANG); | |
131 if (lang == null) | |
132 { | |
133 List<Attribute> temp = e.getAttributes(); | |
134 for (Attribute temp1 : temp) | |
135 { | |
136 if((temp1.getName()).equals(WADLConstant.DOC_LANG)) | |
137 lang=temp1.getValue(); | |
138 } | |
139 } | |
140 String innerText = e.getText(); | |
141 return new Doc(title, lang, innerText); | |
142 } | |
143 | |
144 private Grammar getGrammar(Element e) throws Exception | |
145 { | |
146 if (e == null) | |
147 { | |
148 return null; | |
149 } | |
150 List<Doc> docs = getDocs(e); | |
151 List<Include> includes = getIncludes(e); | |
152 return new Grammar(docs, includes); | |
153 } | |
154 | |
155 private List<Include> getIncludes(Element e) throws Exception | |
156 { | |
157 if (e == null) | |
158 { | |
159 return null; | |
160 } | |
161 List<Include> includes = null; | |
162 List<Element> xmlIncludes = e.getChildren(WADLConstant.INCLUDE, wadlNamespace); | |
163 if (xmlIncludes != null) | |
164 { | |
165 includes = new ArrayList<Include>(); | |
166 for (Element xmlInclude : xmlIncludes) | |
167 { | |
168 Include tempInclude = getInclude(xmlInclude); | |
169 if (tempInclude != null) | |
170 { | |
171 includes.add(tempInclude); | |
172 } | |
173 } | |
174 } | |
175 return includes; | |
176 } | |
177 | |
178 private Include getInclude(Element e) throws Exception | |
179 { | |
180 if (e == null) | |
181 { | |
182 return null; | |
183 } | |
184 List<Doc> docs = getDocs(e); | |
185 URI href = null; | |
186 String tempHref = e.getAttributeValue(WADLConstant.INCLUDE_HREF); | |
187 if (tempHref != null) | |
188 { | |
189 href = new URI(tempHref); | |
190 } | |
191 return new Include(docs, href); | |
192 } | |
193 | |
194 private List<Resources> getResources(Element e) throws Exception | |
195 { | |
196 if (e == null) | |
197 { | |
198 return null; | |
199 } | |
200 | |
201 List<Resources> resources = null; | |
202 List<Element> xmlResources = e.getChildren(WADLConstant.RESOURCES, wadlNamespace); | |
203 if (xmlResources != null) | |
204 { | |
205 resources = new ArrayList<Resources>(); | |
206 for (Element tempResources : xmlResources) | |
207 { | |
208 Resources tempResource = getResourcesInstance(tempResources); | |
209 if (tempResource != null) | |
210 { | |
211 resources.add(tempResource); | |
212 } | |
213 } | |
214 } | |
215 | |
216 return resources; | |
217 | |
218 } | |
219 | |
220 private Resources getResourcesInstance(Element e) throws Exception | |
221 { | |
222 if (e == null) | |
223 { | |
224 return null; | |
225 } | |
226 String tempBase = e.getAttributeValue(WADLConstant.RESOURCES_BASE);//, wadlNamespace); | |
227 URI base = null; | |
228 if (tempBase != null) | |
229 { | |
230 base = new URI(tempBase); | |
231 } | |
232 List<Doc> docs = getDocs(e); | |
233 List<Resource> subResources = getSubResources(e); | |
234 return new Resources(docs, subResources, base); | |
235 } | |
236 | |
237 private List<Resource> getSubResources(Element e) throws Exception | |
238 { | |
239 if (e == null) | |
240 { | |
241 return null; | |
242 | |
243 } | |
244 List<Resource> subResources = null; | |
245 List<Element> xmlSubResources = e.getChildren(WADLConstant.RESOURCE, wadlNamespace); | |
246 if (xmlSubResources != null) | |
247 { | |
248 subResources = new ArrayList<Resource>(); | |
249 for (Element xmlSubResource : xmlSubResources) | |
250 { | |
251 Resource subResource = getSubResource(xmlSubResource); | |
252 if (subResource != null) | |
253 { | |
254 subResources.add(subResource); | |
255 } | |
256 } | |
257 } | |
258 | |
259 return subResources; | |
260 | |
261 } | |
262 | |
263 private Resource getSubResource(Element e) throws Exception | |
264 { | |
265 if (e == null) | |
266 { | |
267 return null; | |
268 } | |
269 List<Doc> docs = getDocs(e); | |
270 List<Param> params = getParams(e); | |
271 List<Method> methods = getMethods(e); | |
272 List<Resource> resources = getSubResources(e); | |
273 String id = e.getAttributeValue(WADLConstant.RESOURCE_ID);//, wadlNamespace); | |
274 String queryType = e.getAttributeValue(WADLConstant.RESOURCE_QUERY_TYPE);//, wadlNamespace); | |
275 String path = e.getAttributeValue(WADLConstant.RESOURCE_PATH); | |
276 //System.out.println("the path is " + path + " wadlNampeSpace is " + wadlNamespace); | |
277 return new Resource(docs, params, methods, resources, id, queryType, path); | |
278 } | |
279 | |
280 private List<Param> getParams(Element e) throws Exception | |
281 { | |
282 if (e == null) | |
283 { | |
284 return null; | |
285 | |
286 } | |
287 List<Param> params = null; | |
288 List<Element> xmlParams = e.getChildren(WADLConstant.PARAM, wadlNamespace); | |
289 if (xmlParams != null) | |
290 { | |
291 params = new ArrayList<Param>(); | |
292 for (Element xmlParam : xmlParams) | |
293 { | |
294 Param param = getParam(xmlParam); | |
295 if (param != null) | |
296 { | |
297 params.add(param); | |
298 | |
299 } | |
300 } | |
301 } | |
302 return params; | |
303 } | |
304 | |
305 private Param getParam(Element e) throws Exception | |
306 { | |
307 if (e == null) | |
308 { | |
309 return null; | |
310 } | |
311 List<Doc> docs = getDocs(e); | |
312 List<Option> options = getOptions(e); | |
313 Link link = getLink(e.getChild(WADLConstant.LINK, wadlNamespace)); | |
314 String tempHref = e.getAttributeValue(WADLConstant.PARAM_HREF);//, wadlNamespace); | |
315 URI href = null; | |
316 if (tempHref != null) | |
317 { | |
318 href = new URI(tempHref); | |
319 } | |
320 String name = e.getAttributeValue(WADLConstant.PARAM_NAME);//, wadlNamespace); | |
321 String style = e.getAttributeValue(WADLConstant.PARAM_STYLE);//, wadlNamespace); | |
322 String id = e.getAttributeValue(WADLConstant.PARAM_ID);//, wadlNamespace); | |
323 String type = e.getAttributeValue(WADLConstant.PARAM_TYPE);//, wadlNamespace); | |
324 String default1 = e.getAttributeValue(WADLConstant.PARAM_DEFAULT);//, wadlNamespace); | |
325 String tempRequired = e.getAttributeValue(WADLConstant.PARAM_REQUIRED);//, wadlNamespace); | |
326 boolean required = false; | |
327 if (tempRequired != null) | |
328 { | |
329 required = Boolean.valueOf(tempRequired); | |
330 } | |
331 String tempRepeating = e.getAttributeValue(WADLConstant.PARAM_REPEATING);//, wadlNamespace); | |
332 boolean repeating = false; | |
333 if (tempRepeating != null) | |
334 { | |
335 repeating = Boolean.valueOf(tempRepeating); | |
336 } | |
337 String fixed = e.getAttributeValue(WADLConstant.PARAM_FIXED);//, wadlNamespace); | |
338 String path = e.getAttributeValue(WADLConstant.PARAM_PATH);//, wadlNamespace); | |
339 return new Param(docs, options, link, href, name, style, id, type, default1, fixed, path,required); | |
340 } | |
341 | |
342 private List<Option> getOptions(Element e) | |
343 { | |
344 System.out.println(e.getName()); | |
345 if (e == null) | |
346 { | |
347 return null; | |
348 } | |
349 List<Option> options = null; | |
350 List<Element> xmlOptions = e.getChildren(WADLConstant.OPTION, wadlNamespace); | |
351 if (xmlOptions != null) | |
352 { | |
353 options = new ArrayList<Option>(); | |
354 for (Element xmlOption : xmlOptions) | |
355 { | |
356 Option option = getOption(xmlOption); | |
357 if (option != null) | |
358 { | |
359 options.add(option); | |
360 } | |
361 } | |
362 } | |
363 return options; | |
364 } | |
365 | |
366 private Option getOption(Element e) | |
367 { | |
368 if (e == null) | |
369 { | |
370 return null; | |
371 } | |
372 List<Doc> docs = getDocs(e); | |
373 String value = e.getAttributeValue(WADLConstant.OPTION_VALUE);//, wadlNamespace); | |
374 String mediaType = e.getAttributeValue(WADLConstant.OPTION_MEDIA_TYPE);//, wadlNamespace); | |
375 return new Option(docs, value, mediaType); | |
376 } | |
377 | |
378 private Link getLink(Element e) | |
379 { | |
380 if (e == null) | |
381 { | |
382 return null; | |
383 } | |
384 List<Doc> docs = getDocs(e); | |
385 String resourceType = e.getAttributeValue(WADLConstant.LINK_RESOURCE_TYPE);//, wadlNamespace); | |
386 String rel = e.getAttributeValue(WADLConstant.LINK_REL);//, wadlNamespace); | |
387 String rev = e.getAttributeValue(WADLConstant.LINK_REV);//, wadlNamespace); | |
388 return new Link(docs, resourceType, rel, rev); | |
389 } | |
390 | |
391 private List<Method> getMethods(Element e) throws Exception | |
392 { | |
393 if (e == null) | |
394 { | |
395 return null; | |
396 } | |
397 List<Method> methods = null; | |
398 List<Element> xmlMethods = e.getChildren(WADLConstant.METHOD, wadlNamespace); | |
399 if (xmlMethods != null) | |
400 { | |
401 methods = new ArrayList<Method>(); | |
402 for (Element xmlMethod : xmlMethods) | |
403 { | |
404 Method method = getMethod(xmlMethod); | |
405 if (method != null) | |
406 { | |
407 methods.add(method); | |
408 } | |
409 } | |
410 } | |
411 return methods; | |
412 } | |
413 | |
414 private Method getMethod(Element e) throws Exception | |
415 { | |
416 if (e == null) | |
417 { | |
418 return null; | |
419 } | |
420 List<Doc> docs = getDocs(e); | |
421 Request request = getRequest(e.getChild(WADLConstant.REQUEST, wadlNamespace)); | |
422 List<Response> responses = getResponses(e); | |
423 String id = e.getAttributeValue(WADLConstant.METHOD_ID);//, wadlNamespace); | |
424 String tempHref = e.getAttributeValue(WADLConstant.METHOD_HREF);//, wadlNamespace); | |
425 URI href = null; | |
426 if (tempHref != null) | |
427 { | |
428 href = new URI(tempHref); | |
429 } | |
430 String name = e.getAttributeValue(WADLConstant.METHOD_NAME);//, wadlNamespace); | |
431 return new Method(docs, request, responses, id, name, href); | |
432 } | |
433 | |
434 private Request getRequest(Element e) throws Exception | |
435 { | |
436 if (e == null) | |
437 { | |
438 return null; | |
439 } | |
440 List<Doc> docs = getDocs(e); | |
441 List<Param> params = getParams(e); | |
442 List<Representation> representations = getRepresentations(e); | |
443 return new Request(docs, params, representations); | |
444 } | |
445 | |
446 private List<Representation> getRepresentations(Element e) throws Exception | |
447 { | |
448 if (e == null) | |
449 { | |
450 return null; | |
451 } | |
452 List<Representation> representations = null; | |
453 List<Element> xmlRepresentations = e.getChildren(WADLConstant.REPRESENTATION, wadlNamespace); | |
454 if (xmlRepresentations != null) | |
455 { | |
456 representations = new ArrayList<Representation>(); | |
457 for (Element xmlRepresentation : xmlRepresentations) | |
458 { | |
459 Representation representation = getRepresentation(e); | |
460 if (representation != null) | |
461 { | |
462 representations.add(representation); | |
463 } | |
464 } | |
465 } | |
466 return representations; | |
467 } | |
468 | |
469 private Representation getRepresentation(Element e) throws Exception | |
470 { | |
471 if (e == null) | |
472 { | |
473 return null; | |
474 } | |
475 List<Doc> docs = getDocs(e); | |
476 List<Param> params = getParams(e); | |
477 String id = e.getAttributeValue(WADLConstant.REPRESENTATION_ID);//, wadlNamespace); | |
478 String element = e.getAttributeValue(WADLConstant.REPRESENTATION_ELEMENT);//, wadlNamespace); | |
479 String mediaType = e.getAttributeValue(WADLConstant.REPRESENTATION_MEDIA_TYPE);//, wadlNamespace); | |
480 String tempHref = e.getAttributeValue(WADLConstant.REPRESENTATION_HREF);//, wadlNamespace); | |
481 URI href = null; | |
482 if (tempHref != null) | |
483 { | |
484 href = new URI(tempHref); | |
485 } | |
486 String profile = e.getAttributeValue(WADLConstant.REPRESENTATION_PROFILE);//, wadlNamespace); | |
487 return new Representation(docs, params, id, element, mediaType, href, profile); | |
488 } | |
489 | |
490 private List<Response> getResponses(Element e) throws Exception | |
491 { | |
492 if (e == null) | |
493 { | |
494 return null; | |
495 } | |
496 List<Response> responses = null; | |
497 List<Element> xmlResponses = e.getChildren(WADLConstant.RESPONSE, wadlNamespace); | |
498 if (xmlResponses != null) | |
499 { | |
500 responses = new ArrayList<Response>(); | |
501 for (Element xmlResponse : xmlResponses) | |
502 { | |
503 Response response = getResponse(e); | |
504 if (response != null) | |
505 { | |
506 responses.add(response); | |
507 } | |
508 } | |
509 } | |
510 return responses; | |
511 } | |
512 | |
513 private Response getResponse(Element e) throws Exception | |
514 { | |
515 if (e == null) | |
516 { | |
517 return null; | |
518 } | |
519 List<Doc> docs = getDocs(e); | |
520 List<Param> params = getParams(e); | |
521 List<Representation> representations = getRepresentations(e); | |
522 String tempStatus = e.getAttributeValue(WADLConstant.RESPONSE_STATUS);//, wadlNamespace); | |
523 int status = -1; | |
524 if (tempStatus != null) | |
525 { | |
526 status = Integer.parseInt(tempStatus); | |
527 } | |
528 return new Response(docs, params, representations, status); | |
529 | |
530 } | |
531 } |