Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/apache/axis/deployment/wsdd/WSDDChain.java


1   /*
2    * Copyright 2001-2004 The Apache Software Foundation.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.apache.axis.deployment.wsdd;
17  
18  import java.io.IOException;
19  import java.util.Vector;
20  
21  import javax.xml.namespace.QName;
22  
23  import org.apache.axis.Chain;
24  import org.apache.axis.ConfigurationException;
25  import org.apache.axis.EngineConfiguration;
26  import org.apache.axis.Handler;
27  import org.apache.axis.encoding.SerializationContext;
28  import org.w3c.dom.Element;
29  import org.xml.sax.helpers.AttributesImpl;
30  
31  
32  /**
33   * WSDD chain element
34   *
35   */
36  public class WSDDChain
37      extends WSDDHandler
38  {
39      private Vector handlers = new Vector();
40      
41      /**
42       * Default constructor
43       */ 
44      public WSDDChain()
45      {
46      }
47      
48      /**
49       *
50       * @param e (Element) XXX
51       * @throws WSDDException XXX
52       */
53      public WSDDChain(Element e)
54          throws WSDDException
55      {
56          super(e);
57          
58          // If we're simply a reference to an existing chain, return.
59          // !!! should check to make sure it's a valid chain?
60          if (type != null)
61              return;
62          
63          Element [] elements = getChildElements(e, ELEM_WSDD_HANDLER);
64          if (elements.length != 0) {
65              for (int i = 0; i < elements.length; i++) {
66                  WSDDHandler handler = new WSDDHandler(elements[i]);
67                  addHandler(handler);
68              }
69          }
70          
71          elements = getChildElements(e, ELEM_WSDD_CHAIN);
72          if (elements.length != 0) {
73              for (int i = 0; i < elements.length; i++) {
74                  WSDDChain chain = new WSDDChain(elements[i]);
75                  addHandler(chain);
76              }
77          }
78  
79      }
80      
81      protected QName getElementName()
82      {
83          return WSDDConstants.QNAME_CHAIN;
84      }
85      
86      /**
87       * Add a Handler to the chain (at the end)
88       */ 
89      public void addHandler(WSDDHandler handler)
90      {
91          handlers.add(handler);
92      }
93  
94      /**
95       * Obtain our handler list
96       * 
97       * @return a Vector containing our Handlers
98       */
99      public Vector getHandlers()
100     {
101         return handlers;
102     }
103 
104     /**
105      * Remove a Handler from the chain
106      */
107     public void removeHandler(WSDDHandler victim)
108     {
109         handlers.remove(victim);
110     }
111 
112     /**
113      * Creates a new instance of this Chain
114      * @param registry XXX
115      * @return XXX
116      * @throws ConfigurationException XXX
117      */
118     public Handler makeNewInstance(EngineConfiguration registry)
119         throws ConfigurationException
120     {
121         Chain c = new org.apache.axis.SimpleChain();
122         
123         for (int n = 0; n < handlers.size(); n++) {
124             WSDDHandler handler = (WSDDHandler)handlers.get(n); 
125             Handler h = handler.getInstance(registry);
126             if ( h != null )
127               c.addHandler(h);
128             else
129               throw new ConfigurationException("Can't find handler name:'" +
130                                                handler.getQName() + "' type:'"+
131                                                handler.getType() +
132                                                "' in the registry");
133         }
134         
135         return c;
136     }
137     
138     /**
139      * Write this element out to a SerializationContext
140      */ 
141     public void writeToContext(SerializationContext context)
142         throws IOException
143     {
144         AttributesImpl attrs = new AttributesImpl();
145         QName name = getQName();
146         if (name != null) {
147             attrs.addAttribute("", ATTR_NAME, ATTR_NAME,
148                                "CDATA", context.qName2String(name));
149         }
150         if (getType() != null) {
151             attrs.addAttribute("", ATTR_TYPE, ATTR_TYPE,
152                            "CDATA", context.qName2String(getType()));
153         }
154         
155         context.startElement(getElementName(), attrs);
156         for (int n = 0; n < handlers.size(); n++) {
157             WSDDHandler handler = (WSDDHandler)handlers.get(n); 
158             handler.writeToContext(context);
159         } 
160         context.endElement();
161     }
162 
163     public void deployToRegistry(WSDDDeployment registry)
164     {
165         if (getQName() != null)
166             registry.addHandler(this);
167         
168         for (int n = 0; n < handlers.size(); n++) {
169             WSDDHandler handler = (WSDDHandler)handlers.get(n);
170             if (handler.getQName() != null)
171                 handler.deployToRegistry(registry);
172         }         
173     }
174 }