/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.axis.deployment.wsdd;
import org.apache.axis.description.OperationDesc;
import org.apache.axis.description.ParameterDesc;
import org.apache.axis.encoding.SerializationContext;
import org.apache.axis.utils.JavaUtils;
import org.apache.axis.utils.XMLUtils;
import org.w3c.dom.Element;
import org.xml.sax.helpers.AttributesImpl;
import javax.xml.namespace.QName;
import java.io.IOException;
public class WSDDParameter extends WSDDElement
{
OperationDesc parent;
ParameterDesc parameter = new ParameterDesc();
public WSDDParameter(Element e, OperationDesc parent)
throws WSDDException {
super(e);
this.parent = parent;
// Get the parameter's name. If a qname is specified, use that,
// otherwise also look for a "name" attribute. (name specifies
// an unqualified name)
String nameStr = e.getAttribute(ATTR_QNAME);
if (nameStr != null && !nameStr.equals("")) {
parameter.setQName(XMLUtils.getQNameFromString(nameStr, e));
} else {
nameStr = e.getAttribute(ATTR_NAME);
if (nameStr != null && !nameStr.equals("")) {
parameter.setQName(new QName(null, nameStr));
}
}
String modeStr = e.getAttribute(ATTR_MODE);
if (modeStr != null && !modeStr.equals("")) {
parameter.setMode(ParameterDesc.modeFromString(modeStr));
}
String inHStr = e.getAttribute(ATTR_INHEADER);
if (inHStr != null) {
parameter.setInHeader(JavaUtils.isTrueExplicitly(inHStr));
}
String outHStr = e.getAttribute(ATTR_OUTHEADER);
if (outHStr != null) {
parameter.setOutHeader(JavaUtils.isTrueExplicitly(outHStr));
}
String typeStr = e.getAttribute(ATTR_TYPE);
if (typeStr != null && !typeStr.equals("")) {
parameter.setTypeQName(XMLUtils.getQNameFromString(typeStr, e));
}
String itemQNameStr = e.getAttribute(ATTR_ITEMQNAME);
if (itemQNameStr != null && !itemQNameStr.equals("")) {
parameter.setItemQName(XMLUtils.getQNameFromString(itemQNameStr, e));
}
String itemTypeStr = e.getAttribute(ATTR_ITEMTYPE);
if (itemTypeStr != null && !itemTypeStr.equals("")) {
parameter.setItemType(XMLUtils.getQNameFromString(itemTypeStr, e));
}
Element docElem = getChildElement(e, ELEM_WSDD_DOC);
if (docElem != null) {
WSDDDocumentation documentation = new WSDDDocumentation(docElem);
parameter.setDocumentation(documentation.getValue());
}
}
public WSDDParameter() {
}
public WSDDParameter(ParameterDesc parameter) {
this.parameter = parameter;
}
/**
* Write this element out to a SerializationContext
*/
public void writeToContext(SerializationContext context)
throws IOException {
AttributesImpl attrs = new AttributesImpl();
QName qname = parameter.getQName();
if (qname != null) {
if (qname.getNamespaceURI() != null &&
!qname.getNamespaceURI().equals("")) {
attrs.addAttribute("", ATTR_QNAME, ATTR_QNAME,
"CDATA",
context.qName2String(parameter.getQName()));
} else {
attrs.addAttribute("", ATTR_NAME, ATTR_NAME, "CDATA",
parameter.getQName().getLocalPart());
}
}
// Write the mode attribute, but only if it's not the default (IN)
byte mode = parameter.getMode();
if (mode != ParameterDesc.IN) {
String modeStr = ParameterDesc.getModeAsString(mode);
attrs.addAttribute("", ATTR_MODE, ATTR_MODE, "CDATA", modeStr);
}
if (parameter.isInHeader()) {
attrs.addAttribute("", ATTR_INHEADER, ATTR_INHEADER,
"CDATA", "true");
}
if (parameter.isOutHeader()) {
attrs.addAttribute("", ATTR_OUTHEADER, ATTR_OUTHEADER,
"CDATA", "true");
}
QName typeQName = parameter.getTypeQName();
if (typeQName != null) {
attrs.addAttribute("", ATTR_TYPE, ATTR_TYPE, "CDATA",
context.qName2String(typeQName));
}
QName itemQName = parameter.getItemQName();
if (itemQName != null) {
attrs.addAttribute("", ATTR_ITEMQNAME, ATTR_ITEMQNAME, "CDATA",
context.qName2String(itemQName));
}
QName itemType = parameter.getItemType();
if (itemType != null) {
attrs.addAttribute("", ATTR_ITEMTYPE, ATTR_ITEMTYPE, "CDATA",
context.qName2String(itemType));
}
context.startElement(getElementName(), attrs);
if (parameter.getDocumentation() != null) {
WSDDDocumentation documentation = new WSDDDocumentation(parameter.getDocumentation());
documentation.writeToContext(context);
}
context.endElement();
}
public ParameterDesc getParameter() {
return parameter;
}
public void setParameter(ParameterDesc parameter) {
this.parameter = parameter;
}
/**
* Return the element name of a particular subclass.
*/
protected QName getElementName() {
return WSDDConstants.QNAME_PARAM;
}
}
|