package org.jboss.axis.deployment.wsdd;
import org.jboss.axis.ConfigurationException;
import org.jboss.axis.encoding.SerializationContext;
import org.jboss.axis.utils.Messages;
import org.w3c.dom.Element;
import org.xml.sax.helpers.AttributesImpl;
import javax.xml.namespace.QName;
import java.io.IOException;
import java.util.Iterator;
import java.util.Vector;
public class WSDDUndeployment
extends WSDDElement
implements WSDDTypeMappingContainer
{
private Vector handlers = new Vector();
private Vector chains = new Vector();
private Vector services = new Vector();
private Vector transports = new Vector();
private Vector typeMappings = new Vector();
public void addHandler(QName handler)
{
handlers.add(handler);
}
public void addChain(QName chain)
{
chains.add(chain);
}
public void addTransport(QName transport)
{
transports.add(transport);
}
public void addService(QName service)
{
services.add(service);
}
public void deployTypeMapping(WSDDTypeMapping typeMapping)
throws WSDDException
{
typeMappings.add(typeMapping);
}
public WSDDUndeployment()
{
}
private QName getQName(Element el) throws WSDDException
{
String attr = el.getAttribute(ATTR_NAME);
if (attr == null || "".equals(attr))
throw new WSDDException(Messages.getMessage("badNameAttr00"));
return new QName("", attr);
}
public WSDDUndeployment(Element e)
throws WSDDException
{
super(e);
Element[] elements = getChildElements(e, ELEM_WSDD_HANDLER);
int i;
for (i = 0; i < elements.length; i++)
{
addHandler(getQName(elements[i]));
}
elements = getChildElements(e, ELEM_WSDD_CHAIN);
for (i = 0; i < elements.length; i++)
{
addChain(getQName(elements[i]));
}
elements = getChildElements(e, ELEM_WSDD_TRANSPORT);
for (i = 0; i < elements.length; i++)
{
addTransport(getQName(elements[i]));
}
elements = getChildElements(e, ELEM_WSDD_SERVICE);
for (i = 0; i < elements.length; i++)
{
addService(getQName(elements[i]));
}
}
protected QName getElementName()
{
return QNAME_UNDEPLOY;
}
public void undeployFromRegistry(WSDDDeployment registry)
throws ConfigurationException
{
QName qname;
for (int n = 0; n < handlers.size(); n++)
{
qname = (QName)handlers.get(n);
registry.undeployHandler(qname);
}
for (int n = 0; n < chains.size(); n++)
{
qname = (QName)chains.get(n);
registry.undeployHandler(qname);
}
for (int n = 0; n < transports.size(); n++)
{
qname = (QName)transports.get(n);
registry.undeployTransport(qname);
}
for (int n = 0; n < services.size(); n++)
{
qname = (QName)services.get(n);
registry.undeployService(qname);
}
}
private void writeElement(SerializationContext context,
QName elementQName,
QName qname)
throws IOException
{
AttributesImpl attrs = new org.xml.sax.helpers.AttributesImpl();
attrs.addAttribute("", ATTR_NAME, ATTR_NAME, "CDATA",
context.qName2String(qname));
context.startElement(elementQName, attrs);
context.endElement();
}
public void writeToContext(SerializationContext context)
throws IOException
{
context.registerPrefixForURI(NS_PREFIX_WSDD, URI_WSDD);
context.startElement(WSDDConstants.QNAME_UNDEPLOY, null);
Iterator i = handlers.iterator();
QName qname;
while (i.hasNext())
{
qname = (QName)i.next();
writeElement(context, QNAME_HANDLER, qname);
}
i = chains.iterator();
while (i.hasNext())
{
qname = (QName)i.next();
writeElement(context, QNAME_CHAIN, qname);
}
i = services.iterator();
while (i.hasNext())
{
qname = (QName)i.next();
writeElement(context, QNAME_SERVICE, qname);
}
i = transports.iterator();
while (i.hasNext())
{
qname = (QName)i.next();
writeElement(context, QNAME_TRANSPORT, qname);
}
i = typeMappings.iterator();
while (i.hasNext())
{
WSDDTypeMapping mapping = (WSDDTypeMapping)i.next();
mapping.writeToContext(context);
}
context.endElement();
}
public WSDDTypeMapping[] getTypeMappings()
{
WSDDTypeMapping[] t = new WSDDTypeMapping[typeMappings.size()];
typeMappings.toArray(t);
return t;
}
}