Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.wst.wsi/wsicore/org/eclipse/wst/wsi/internal/core/wsdl/WSDLReaderImpl.java')
-rw-r--r--bundles/org.eclipse.wst.wsi/wsicore/org/eclipse/wst/wsi/internal/core/wsdl/WSDLReaderImpl.java801
1 files changed, 0 insertions, 801 deletions
diff --git a/bundles/org.eclipse.wst.wsi/wsicore/org/eclipse/wst/wsi/internal/core/wsdl/WSDLReaderImpl.java b/bundles/org.eclipse.wst.wsi/wsicore/org/eclipse/wst/wsi/internal/core/wsdl/WSDLReaderImpl.java
deleted file mode 100644
index a9f65efdf..000000000
--- a/bundles/org.eclipse.wst.wsi/wsicore/org/eclipse/wst/wsi/internal/core/wsdl/WSDLReaderImpl.java
+++ /dev/null
@@ -1,801 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002-2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.wsi.internal.core.wsdl;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.wsdl.Binding;
-import javax.wsdl.BindingFault;
-import javax.wsdl.BindingInput;
-import javax.wsdl.BindingOperation;
-import javax.wsdl.BindingOutput;
-import javax.wsdl.Definition;
-import javax.wsdl.Fault;
-import javax.wsdl.Import;
-import javax.wsdl.Input;
-import javax.wsdl.Message;
-import javax.wsdl.Operation;
-import javax.wsdl.Output;
-import javax.wsdl.Part;
-import javax.wsdl.Port;
-import javax.wsdl.PortType;
-import javax.wsdl.Service;
-import javax.wsdl.Types;
-import javax.wsdl.WSDLException;
-import javax.wsdl.extensions.ExtensibilityElement;
-import javax.wsdl.factory.WSDLFactory;
-import javax.xml.namespace.QName;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.apache.xerces.dom.ElementImpl;
-import org.eclipse.wst.wsi.internal.core.xml.dom.ElementLocation;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.xml.sax.InputSource;
-
-import com.ibm.wsdl.Constants;
-import com.ibm.wsdl.util.StringUtils;
-import com.ibm.wsdl.util.xml.DOMUtils;
-import com.ibm.wsdl.util.xml.QNameUtils;
-import com.ibm.wsdl.util.xml.XPathUtils;
-
-/**
- * This class is a specialization of com.ibm.wsdl.xml.WSDLReaderImpl in WSDL4J.
- *
- * @version 1.0.1
- * @author Peter Brittenham (peterbr@us.ibm.com)
- */
-public class WSDLReaderImpl extends com.ibm.wsdl.xml.WSDLReaderImpl
-{
- // WSDL element list.
- protected WSDLElementList wsdlElementList = new WSDLElementList();
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseDefinitions(java.lang.String, org.w3c.dom.Element, java.util.Map)
- */
- protected Definition parseDefinitions(
- String documentBaseURI,
- Element defEl,
- Map importedDefs)
- throws WSDLException
- {
- Definition def = null;
- ClassLoader currentLoader = Thread.currentThread().getContextClassLoader();
- try
- {
- Thread.currentThread().setContextClassLoader(WSDLReaderImpl.class.getClassLoader());
-
- def =
- super.parseDefinitions(documentBaseURI, defEl, importedDefs);
-
- // Try to add element to list
- addElementToList(defEl, def);
-
-
- }
-catch (Exception e)
- {
- }
- finally
- {
- Thread.currentThread().setContextClassLoader(currentLoader);
- }
- return def;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseImport(org.w3c.dom.Element, javax.wsdl.Definition, java.util.Map)
- */
- protected Import parseImport(Element element, Definition definition, Map map)
- throws WSDLException
- {
- /*boolean wasEx = false;
- if (def.getDocumentBaseURI()!=null){
- File f = new File(def.getDocumentBaseURI());
- if (f.getParent()!=null && importEl.getAttribute("location")!=null){
- f = new File(f.getParent()+"/"+importEl.getAttribute("location"));
-
- }
- } else wasEx = false;
-
- Import importDef = super.parseImport(importEl, def, importedDefs);
-
- // Try to add element to list
- addElementToList(importEl, importDef);
-
- return importDef;*/
-
- /*Import import1 = definition.createImport();
- String s = DOMUtils.getAttribute(element, "namespace");
- String s1 = DOMUtils.getAttribute(element, "location");
- if (s != null)
- import1.setNamespaceURI(s);
- if (s1 != null) {
- if (importDocuments) {
- String s2 = definition.getDocumentBaseURI();
- try {
-
- URL url1 = s2 == null ? null : StringUtils.getURL(null, s2);
- URL url = StringUtils.getURL(url1, s1);
- InputStream inputstream =
- StringUtils.getContentAsInputStream(url);
- inputstream.close();
- } catch (IOException ex) {
- //import1.setLocationURI(null);
- addElementToList(element, import1);
- return import1;
- } catch (Throwable ex) {
- throw new WSDLException(
- "OTHER_ERROR",
- "Unable to resolve imported document at '" + s1 + "'.",
- ex);
- }
-
- }
- }
- Import importDef = super.parseImport(element, definition, map);
- addElementToList(element, importDef);*/
- Import import1 = definition.createImport();
- String s = DOMUtils.getAttribute(element, "namespace");
- String s1 = DOMUtils.getAttribute(element, "location");
- if (s != null)
- import1.setNamespaceURI(s);
- // ADD: check "location" attribute for empty
- // string to prevent self-defenition assigning
- if ((s1 != null) && (s1.length() > 0))
- {
- import1.setLocationURI(s1);
- if (importDocuments)
- try
- {
- String s2 = definition.getDocumentBaseURI();
- Definition definition1 = null;
- InputStream inputstream = null;
- InputSource inputsource = null;
- URL url = null;
- if (loc != null)
- {
- inputsource = loc.getImportInputSource(s2, s1);
- String s3 = loc.getLatestImportURI();
- definition1 = (Definition) map.get(s3);
- }
- else
- {
- URL url1 = s2 == null ? null : StringUtils.getURL(null, s2);
- url = StringUtils.getURL(url1, s1);
- definition1 = (Definition) map.get(url.toString());
- if (definition1 == null)
- {
- try
- {
-
- inputstream = url.openStream();
- }
- catch (IOException ex)
- {
- //import1.setLocationURI(null);
- addElementToList(element, import1);
- return import1;
- }
- if (inputstream != null)
- inputsource = new InputSource(inputstream);
- }
- }
- if (definition1 == null)
- {
- if (inputsource == null)
- throw new WSDLException(
- "OTHER_ERROR",
- "Unable to locate imported document at '"
- + s1
- + "'"
- + (s2 != null ? ", relative to '" + s2 + "'." : "."));
- Document document = null;
- try
- {
- document = getDocument(inputsource, s1);
- }
- catch (WSDLException ex)
- {
- addElementToList(element, import1);
- return import1;
- }
- if (inputstream != null)
- inputstream.close();
- Element element2 = document.getDocumentElement();
- if (QNameUtils.matches(Constants.Q_ELEM_DEFINITIONS, element2))
- {
- //if (verbose)
- // System.out.println(
- // "Retrieving document at '"
- // + s1
- // + "'"
- // + (s2 != null ? ", relative to '" + s2 + "'." : "."));
- String s4 =
- loc == null
- ? url == null
- ? s1
- : url.toString() : loc.getLatestImportURI();
- definition1 = readWSDL(s4, element2, map);
- }
- else
- {
- QName qname = QNameUtils.newQName(element2);
- if (Constants.XSD_QNAME_LIST.contains(qname))
- {
- WSDLFactory wsdlfactory =
- factoryImplName == null
- ? WSDLFactory.newInstance()
- : WSDLFactory.newInstance(factoryImplName);
- definition1 = wsdlfactory.newDefinition();
- if (extReg != null)
- definition1.setExtensionRegistry(extReg);
- String s5 =
- loc == null
- ? url == null
- ? s1
- : url.toString() : loc.getLatestImportURI();
- definition1.setDocumentBaseURI(s5);
- /* Don't add types element since it doesn't exist. Adding it causes problems
- * since it will add a types element for processing that does not exist.
- Types types = definition1.createTypes();
- UnknownExtensibilityElement unknownextensibilityelement =
- new UnknownExtensibilityElement();
- unknownextensibilityelement.setElement(element2);
- types.addExtensibilityElement(
- unknownextensibilityelement);
- definition1.setTypes(types);
- */
- }
- }
- }
- if (definition1 != null)
- import1.setDefinition(definition1);
- }
- catch (WSDLException wsdlexception)
- {
- wsdlexception.setLocation(XPathUtils.getXPathExprFromNode(element));
- throw wsdlexception;
- }
- catch (Throwable throwable)
- {
- throw new WSDLException(
- "OTHER_ERROR",
- "Unable to resolve imported document at '" + s1 + "'.",
- throwable);
- }
- }
- for (Element element1 = DOMUtils.getFirstChildElement(element);
- element1 != null;
- element1 = DOMUtils.getNextSiblingElement(element1))
- if (QNameUtils.matches(Constants.Q_ELEM_DOCUMENTATION, element1))
- import1.setDocumentationElement(element1);
- else
- DOMUtils.throwWSDLException(element1);
-
- return import1;
-
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseTypes(org.w3c.dom.Element, javax.wsdl.Definition)
- */
- protected Types parseTypes(Element typesEl, Definition def)
- throws WSDLException
- {
- Types types = super.parseTypes(typesEl, def);
-
- // Try to add element to list
- addElementToList(typesEl, types);
-
- return types;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseBinding(org.w3c.dom.Element, javax.wsdl.Definition)
- */
- protected Binding parseBinding(Element bindingEl, Definition def)
- throws WSDLException
- {
- Binding binding = super.parseBinding(bindingEl, def);
-
- // Try to add element to list
- addElementToList(bindingEl, binding);
-
- return binding;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseBindingOperation(org.w3c.dom.Element, javax.wsdl.PortType, javax.wsdl.Definition)
- */
- protected BindingOperation parseBindingOperation(
- Element bindingOperationEl,
- PortType portType,
- Definition def)
- throws WSDLException
- {
- BindingOperation bindingOperation = null;
-
- // The follow try-catch was added to detect when a duplicate operation name was detected
- try
- {
- bindingOperation =
- super.parseBindingOperation(bindingOperationEl, portType, def);
- }
-
- catch (IllegalArgumentException iae)
- {
- if (iae.getMessage().startsWith("Duplicate"))
- {
- bindingOperation =
- parseBindingOperationWithDuplicateNames(
- bindingOperationEl,
- portType,
- def);
- }
-
- else
- {
- throw iae;
- }
- }
-
- // Try to add element to list
- if (bindingOperation != null)
- {
- addElementToList(bindingOperationEl, bindingOperation);
- }
-
- return bindingOperation;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseBindingInput(org.w3c.dom.Element, javax.wsdl.Definition)
- */
- protected BindingInput parseBindingInput(
- Element bindingInputEl,
- Definition def)
- throws WSDLException
- {
- BindingInput bindingInput = super.parseBindingInput(bindingInputEl, def);
-
- // Try to add element to list
- addElementToList(bindingInputEl, bindingInput);
-
- return bindingInput;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseBindingOutput(org.w3c.dom.Element, javax.wsdl.Definition)
- */
- protected BindingOutput parseBindingOutput(
- Element bindingOutputEl,
- Definition def)
- throws WSDLException
- {
- BindingOutput bindingOutput =
- super.parseBindingOutput(bindingOutputEl, def);
-
- // Try to add element to list
- addElementToList(bindingOutputEl, bindingOutput);
-
- return bindingOutput;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseBindingFault(org.w3c.dom.Element, javax.wsdl.Definition)
- */
- protected BindingFault parseBindingFault(
- Element bindingFaultEl,
- Definition def)
- throws WSDLException
- {
- BindingFault bindingFault = super.parseBindingFault(bindingFaultEl, def);
-
- // Try to add element to list
- addElementToList(bindingFaultEl, bindingFault);
-
- return bindingFault;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseMessage(org.w3c.dom.Element, javax.wsdl.Definition)
- */
- protected Message parseMessage(Element msgEl, Definition def)
- throws WSDLException
- {
- Message msg = super.parseMessage(msgEl, def);
-
- // Try to add element to list
- addElementToList(msgEl, msg);
-
- return msg;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parsePart(org.w3c.dom.Element, javax.wsdl.Definition)
- */
- protected Part parsePart(Element partEl, Definition def) throws WSDLException
- {
- //Part part = super.parsePart(partEl, def);
-
- Part part = def.createPart();
- String name = DOMUtils.getAttribute(partEl, Constants.ATTR_NAME);
-
- // WS-I: The try-catch was added for WSI2416
- QName elementName;
-
- try
- {
- elementName =
- DOMUtils.getQualifiedAttributeValue(
- partEl,
- Constants.ATTR_ELEMENT,
- Constants.ELEM_MESSAGE,
- false);
- }
-
- catch (WSDLException we)
- {
- String prefixedValue =
- DOMUtils.getAttribute(partEl, Constants.ATTR_ELEMENT);
- int index = prefixedValue.indexOf(':');
- String localPart = prefixedValue.substring(index + 1);
-
- elementName = new QName(localPart);
- }
-
- QName typeName =
- DOMUtils.getQualifiedAttributeValue(
- partEl,
- Constants.ATTR_TYPE,
- Constants.ELEM_MESSAGE,
- false);
-
- if (name != null)
- {
- part.setName(name);
- }
-
- if (elementName != null)
- {
- part.setElementName(elementName);
- }
-
- if (typeName != null)
- {
- part.setTypeName(typeName);
- }
-
- Element tempEl = DOMUtils.getFirstChildElement(partEl);
-
- while (tempEl != null)
- {
- if (QNameUtils.matches(Constants.Q_ELEM_DOCUMENTATION, tempEl))
- {
- part.setDocumentationElement(tempEl);
- }
- else
- {
- DOMUtils.throwWSDLException(tempEl);
- }
-
- tempEl = DOMUtils.getNextSiblingElement(tempEl);
- }
-
- Map extensionAttributes = part.getExtensionAttributes();
-
- extensionAttributes.putAll(getPartAttributes(partEl, def));
-
- // Need to do something here to locate part definition.
-
- // Try to add element to list
- addElementToList(partEl, part);
-
- return part;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parsePortType(org.w3c.dom.Element, javax.wsdl.Definition)
- */
- protected PortType parsePortType(Element portTypeEl, Definition def)
- throws WSDLException
- {
- PortType portType = super.parsePortType(portTypeEl, def);
-
- // Try to add element to list
- addElementToList(portTypeEl, portType);
-
- return portType;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseOperation(org.w3c.dom.Element, javax.wsdl.PortType, javax.wsdl.Definition)
- */
- protected Operation parseOperation(
- Element opEl,
- PortType portType,
- Definition def)
- throws WSDLException
- {
- Operation op = super.parseOperation(opEl, portType, def);
-
- // Try to add element to list
- addElementToList(opEl, op);
-
- return op;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseService(org.w3c.dom.Element, javax.wsdl.Definition)
- */
- protected Service parseService(Element serviceEl, Definition def)
- throws WSDLException
- {
- Service service = super.parseService(serviceEl, def);
-
- // Try to add element to list
- addElementToList(serviceEl, service);
-
- return service;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parsePort(org.w3c.dom.Element, javax.wsdl.Definition)
- */
- protected Port parsePort(Element portEl, Definition def) throws WSDLException
- {
- Port port = super.parsePort(portEl, def);
-
- // Try to add element to list
- addElementToList(portEl, port);
-
- return port;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseExtensibilityElement(java.lang.Class, org.w3c.dom.Element, javax.wsdl.Definition)
- */
- protected ExtensibilityElement parseExtensibilityElement(
- Class parentType,
- Element el,
- Definition def)
- throws WSDLException
- {
- ExtensibilityElement extElement =
- super.parseExtensibilityElement(parentType, el, def);
-
- // Try to add element to list
- addElementToList(el, extElement);
-
- return extElement;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseInput(org.w3c.dom.Element, javax.wsdl.Definition)
- */
- protected Input parseInput(Element inputEl, Definition def)
- throws WSDLException
- {
- Input input = super.parseInput(inputEl, def);
-
- // Try to add element to list
- addElementToList(inputEl, input);
-
- return input;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseOutput(org.w3c.dom.Element, javax.wsdl.Definition)
- */
- protected Output parseOutput(Element outputEl, Definition def)
- throws WSDLException
- {
- Output output = super.parseOutput(outputEl, def);
-
- // Try to add element to list
- addElementToList(outputEl, output);
-
- return output;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#parseFault(org.w3c.dom.Element, javax.wsdl.Definition)
- */
- protected Fault parseFault(Element faultEl, Definition def)
- throws WSDLException
- {
- Fault fault = super.parseFault(faultEl, def);
-
- // Try to add element to list
- addElementToList(faultEl, fault);
-
- return fault;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.wsdl.xml.WSDLReaderImpl#getDocument(org.xml.sax.InputSource, java.lang.String)
- */
- protected Document getDocument(InputSource inputSource, String desc)
- throws WSDLException
- {
- ClassLoader currentLoader = Thread.currentThread().getContextClassLoader();
- try
- {
- Thread.currentThread().setContextClassLoader(WSDLReaderImpl.class.getClassLoader());
-
- //DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- DocumentBuilderFactory factory =
- new org.eclipse.wst.wsi.internal.core.xml.jaxp.DocumentBuilderFactoryImpl();
-
- factory.setNamespaceAware(true);
- factory.setValidating(false);
-
- DocumentBuilder builder = factory.newDocumentBuilder();
- Document doc = builder.parse(inputSource);
-
- return doc;
- }
- catch (Throwable t)
- {
- throw new WSDLException(
- WSDLException.PARSER_ERROR,
- "Problem parsing '" + desc + "'.",
- t);
- }
- finally
- {
- Thread.currentThread().setContextClassLoader(currentLoader);
- }
- }
-
- /**
- * Get element list.
- * @return the element list.
- */
- public WSDLElementList getElementList()
- {
- return this.wsdlElementList;
- }
-
- /**
- * Add WSDL element to element list.
- */
- private void addElementToList(Element element, Object wsdlElement)
- {
- ElementLocation elementLocation = null;
-
- try
- {
- // See if the element object is an instanceof org.apache.xerces.dom.ElementImpl
- ElementImpl elementImpl = (ElementImpl) element;
-
- // If it is, then get the element location information
- elementLocation =
- (ElementLocation) elementImpl.getUserData();
-
- // Add it to the list
- this.wsdlElementList.addElement(wsdlElement, elementLocation);
- }
-
- catch (ClassCastException cce)
- {
- // ADD: Should we add the element with a null or zero location?
- }
- }
-
- /**
- * This method is used when a WSDL document contains duplicate operation names.
- * It is the same as the original parseBindingOperation method, except that it will
- * just find the first operation that matches instead of throwing an exception.
- */
- private BindingOperation parseBindingOperationWithDuplicateNames(
- Element bindingOperationEl,
- PortType portType,
- Definition def)
- throws WSDLException
- {
- BindingOperation bindingOperation = def.createBindingOperation();
- String name =
- DOMUtils.getAttribute(bindingOperationEl, Constants.ATTR_NAME);
-
- if (name != null)
- {
- bindingOperation.setName(name);
- }
-
- Element tempEl = DOMUtils.getFirstChildElement(bindingOperationEl);
-
- while (tempEl != null)
- {
- if (QNameUtils.matches(Constants.Q_ELEM_DOCUMENTATION, tempEl))
- {
- bindingOperation.setDocumentationElement(tempEl);
- }
- else if (QNameUtils.matches(Constants.Q_ELEM_INPUT, tempEl))
- {
- bindingOperation.setBindingInput(parseBindingInput(tempEl, def));
- }
- else if (QNameUtils.matches(Constants.Q_ELEM_OUTPUT, tempEl))
- {
- bindingOperation.setBindingOutput(parseBindingOutput(tempEl, def));
- }
- else if (QNameUtils.matches(Constants.Q_ELEM_FAULT, tempEl))
- {
- bindingOperation.addBindingFault(parseBindingFault(tempEl, def));
- }
- else
- {
- bindingOperation.addExtensibilityElement(
- parseExtensibilityElement(BindingOperation.class, tempEl, def));
- }
-
- tempEl = DOMUtils.getNextSiblingElement(tempEl);
- }
-
- if (portType != null)
- {
- BindingInput bindingInput = bindingOperation.getBindingInput();
- BindingOutput bindingOutput = bindingOperation.getBindingOutput();
- String inputName = (bindingInput != null ? bindingInput.getName() : null);
- String outputName =
- (bindingOutput != null ? bindingOutput.getName() : null);
-
- //Operation op = portType.getOperation(name, inputName, outputName);
- // Get all operations, and then find the first one that matches
- Operation op = null, checkOperation;
- Iterator iterator = portType.getOperations().iterator();
- while (iterator.hasNext() && op == null)
- {
- // Get the next operation
- checkOperation = (Operation) iterator.next();
-
- // Get the operation name, input name, and output name
- String checkName = checkOperation.getName();
- String checkInputName =
- (checkOperation.getInput() == null
- ? null
- : checkOperation.getInput().getName());
- String checkOutputName =
- (checkOperation.getOutput() == null
- ? null
- : checkOperation.getOutput().getName());
-
- // If the names match, then that operation
- if ((checkName != null && checkName.equals(name))
- && ((checkInputName != null && checkInputName.equals(inputName))
- || (checkInputName == null && inputName == null))
- && ((checkOutputName != null && checkOutputName.equals(outputName))
- || (checkOutputName == null && outputName == null)))
- {
- op = checkOperation;
- }
- }
-
- if (op == null)
- {
- op = def.createOperation();
- op.setName(name);
- portType.addOperation(op);
- }
-
- bindingOperation.setOperation(op);
- }
-
- return bindingOperation;
- }
-
-}

Back to the top