| /* |
| * 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 java.io.IOException; |
| import java.util.Vector; |
| |
| import javax.xml.namespace.QName; |
| |
| import org.apache.axis.Chain; |
| import org.apache.axis.ConfigurationException; |
| import org.apache.axis.EngineConfiguration; |
| import org.apache.axis.Handler; |
| import org.apache.axis.encoding.SerializationContext; |
| import org.w3c.dom.Element; |
| import org.xml.sax.helpers.AttributesImpl; |
| |
| |
| /** |
| * WSDD chain element |
| * |
| */ |
| public class WSDDChain |
| extends WSDDHandler |
| { |
| private Vector handlers = new Vector(); |
| |
| /** |
| * Default constructor |
| */ |
| public WSDDChain() |
| { |
| } |
| |
| /** |
| * |
| * @param e (Element) XXX |
| * @throws WSDDException XXX |
| */ |
| public WSDDChain(Element e) |
| throws WSDDException |
| { |
| super(e); |
| |
| // If we're simply a reference to an existing chain, return. |
| // !!! should check to make sure it's a valid chain? |
| if (type != null) |
| return; |
| |
| Element [] elements = getChildElements(e, ELEM_WSDD_HANDLER); |
| if (elements.length != 0) { |
| for (int i = 0; i < elements.length; i++) { |
| WSDDHandler handler = new WSDDHandler(elements[i]); |
| addHandler(handler); |
| } |
| } |
| |
| elements = getChildElements(e, ELEM_WSDD_CHAIN); |
| if (elements.length != 0) { |
| for (int i = 0; i < elements.length; i++) { |
| WSDDChain chain = new WSDDChain(elements[i]); |
| addHandler(chain); |
| } |
| } |
| |
| } |
| |
| protected QName getElementName() |
| { |
| return WSDDConstants.QNAME_CHAIN; |
| } |
| |
| /** |
| * Add a Handler to the chain (at the end) |
| */ |
| public void addHandler(WSDDHandler handler) |
| { |
| handlers.add(handler); |
| } |
| |
| /** |
| * Obtain our handler list |
| * |
| * @return a Vector containing our Handlers |
| */ |
| public Vector getHandlers() |
| { |
| return handlers; |
| } |
| |
| /** |
| * Remove a Handler from the chain |
| */ |
| public void removeHandler(WSDDHandler victim) |
| { |
| handlers.remove(victim); |
| } |
| |
| /** |
| * Creates a new instance of this Chain |
| * @param registry XXX |
| * @return XXX |
| * @throws ConfigurationException XXX |
| */ |
| public Handler makeNewInstance(EngineConfiguration registry) |
| throws ConfigurationException |
| { |
| Chain c = new org.apache.axis.SimpleChain(); |
| |
| for (int n = 0; n < handlers.size(); n++) { |
| WSDDHandler handler = (WSDDHandler)handlers.get(n); |
| Handler h = handler.getInstance(registry); |
| if ( h != null ) |
| c.addHandler(h); |
| else |
| throw new ConfigurationException("Can't find handler name:'" + |
| handler.getQName() + "' type:'"+ |
| handler.getType() + |
| "' in the registry"); |
| } |
| |
| return c; |
| } |
| |
| /** |
| * Write this element out to a SerializationContext |
| */ |
| public void writeToContext(SerializationContext context) |
| throws IOException |
| { |
| AttributesImpl attrs = new AttributesImpl(); |
| QName name = getQName(); |
| if (name != null) { |
| attrs.addAttribute("", ATTR_NAME, ATTR_NAME, |
| "CDATA", context.qName2String(name)); |
| } |
| if (getType() != null) { |
| attrs.addAttribute("", ATTR_TYPE, ATTR_TYPE, |
| "CDATA", context.qName2String(getType())); |
| } |
| |
| context.startElement(getElementName(), attrs); |
| for (int n = 0; n < handlers.size(); n++) { |
| WSDDHandler handler = (WSDDHandler)handlers.get(n); |
| handler.writeToContext(context); |
| } |
| context.endElement(); |
| } |
| |
| public void deployToRegistry(WSDDDeployment registry) |
| { |
| if (getQName() != null) |
| registry.addHandler(this); |
| |
| for (int n = 0; n < handlers.size(); n++) { |
| WSDDHandler handler = (WSDDHandler)handlers.get(n); |
| if (handler.getQName() != null) |
| handler.deployToRegistry(registry); |
| } |
| } |
| } |