Author: rfeng
Date: Tue Mar  4 08:52:24 2008
New Revision: 633545

URL: http://svn.apache.org/viewvc?rev=633545&view=rev
Log:
Partial fix for TUSCANY-2045 to support WSDL resolution by 
service/portType/binding/message

Added:
    
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLObject.java
   (with props)
    
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLObjectImpl.java
   (with props)
Modified:
    
incubator/tuscany/java/sca/modules/binding-ws-xml/src/main/java/org/apache/tuscany/sca/binding/ws/xml/WebServiceBindingProcessor.java
    
incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java
    
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java
    
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/XSDefinition.java
    
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java

Modified: 
incubator/tuscany/java/sca/modules/binding-ws-xml/src/main/java/org/apache/tuscany/sca/binding/ws/xml/WebServiceBindingProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ws-xml/src/main/java/org/apache/tuscany/sca/binding/ws/xml/WebServiceBindingProcessor.java?rev=633545&r1=633544&r2=633545&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/binding-ws-xml/src/main/java/org/apache/tuscany/sca/binding/ws/xml/WebServiceBindingProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/binding-ws-xml/src/main/java/org/apache/tuscany/sca/binding/ws/xml/WebServiceBindingProcessor.java
 Tue Mar  4 08:52:24 2008
@@ -24,7 +24,7 @@
 
 import java.util.Map;
 
-import javax.wsdl.Definition;
+import javax.wsdl.Binding;
 import javax.wsdl.Port;
 import javax.wsdl.PortType;
 import javax.wsdl.Service;
@@ -52,19 +52,18 @@
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterfaceContract;
+import org.apache.tuscany.sca.interfacedef.wsdl.WSDLObject;
 import org.apache.tuscany.sca.policy.IntentAttachPointTypeFactory;
 import org.apache.tuscany.sca.policy.PolicyFactory;
 
-public class WebServiceBindingProcessor implements
-    StAXArtifactProcessor<WebServiceBinding>, WebServiceConstants {
+public class WebServiceBindingProcessor implements 
StAXArtifactProcessor<WebServiceBinding>, WebServiceConstants {
 
     private WSDLFactory wsdlFactory;
     private WebServiceBindingFactory wsFactory;
     private PolicyFactory policyFactory;
     private PolicyAttachPointProcessor policyProcessor;
-    private IntentAttachPointTypeFactory  intentAttachPointTypeFactory;
+    private IntentAttachPointTypeFactory intentAttachPointTypeFactory;
     private ConfiguredOperationProcessor configuredOperationProcessor;
-    
 
     public WebServiceBindingProcessor(ModelFactoryExtensionPoint 
modelFactories) {
         this.policyFactory = modelFactories.getFactory(PolicyFactory.class);
@@ -87,7 +86,7 @@
 
         // Read policies
         policyProcessor.readPolicies(wsBinding, reader);
-        
+
         // Read the binding name
         String name = reader.getAttributeValue(null, NAME);
         if (name != null) {
@@ -107,8 +106,7 @@
         if (wsdlElement != null) {
             int index = wsdlElement.indexOf('#');
             if (index == -1) {
-                throw new ContributionReadException(
-                                                    "Invalid WebService 
binding wsdlElement attribute: " + wsdlElement);
+                throw new ContributionReadException("Invalid WebService 
binding wsdlElement attribute: " + wsdlElement);
             }
             String namespace = wsdlElement.substring(0, index);
             wsBinding.setNamespace(namespace);
@@ -148,12 +146,11 @@
                 // Read a wsdl.service
                 localName = localName.substring("wsdl.binding(".length(), 
localName.length() - 1);
                 wsBinding.setBindingName(new QName(namespace, localName));
-                
+
                 wsdlElementIsBinding = true;
 
             } else {
-                throw new ContributionReadException(
-                                                    "Invalid WebService 
binding wsdlElement attribute: " + wsdlElement);
+                throw new ContributionReadException("Invalid WebService 
binding wsdlElement attribute: " + wsdlElement);
             }
         }
 
@@ -165,23 +162,24 @@
         while (reader.hasNext()) {
             int event = reader.next();
             switch (event) {
-                case START_ELEMENT  : {
+                case START_ELEMENT: {
                     if 
(END_POINT_REFERENCE.equals(reader.getName().getLocalPart())) {
                         if (wsdlElementIsBinding != null && 
wsdlElementIsBinding) {
-                            throw new ContributionReadException(wsdlElement + 
" must use wsdl.binding when using wsa:EndpointReference");
+                            throw new ContributionReadException(
+                                                                wsdlElement + 
" must use wsdl.binding when using wsa:EndpointReference");
                         }
                         
wsBinding.setEndPointReference(EndPointReferenceHelper.readEndPointReference(reader));
-                    } else if ( 
Constants.OPERATION_QNAME.equals(reader.getName()) ) {
+                    } else if 
(Constants.OPERATION_QNAME.equals(reader.getName())) {
                         confOp = configuredOperationProcessor.read(reader);
-                        if ( confOp != null ) {
+                        if (confOp != null) {
                             
((OperationsConfigurator)wsBinding).getConfiguredOperations().add(confOp);
                         }
-                    } 
+                    }
                 }
-                break;
-                
+                    break;
+
             }
-            
+
             if (event == END_ELEMENT && 
BINDING_WS_QNAME.equals(reader.getName())) {
                 break;
             }
@@ -192,13 +190,14 @@
     protected void processEndPointReference(XMLStreamReader reader, 
WebServiceBinding wsBinding) {
     }
 
-    public void write(WebServiceBinding wsBinding, XMLStreamWriter writer) 
throws ContributionWriteException, XMLStreamException {
+    public void write(WebServiceBinding wsBinding, XMLStreamWriter writer) 
throws ContributionWriteException,
+        XMLStreamException {
 
         // Write a <binding.ws>
         policyProcessor.writePolicyPrefixes(wsBinding, writer);
         writer.writeStartElement(Constants.SCA10_NS, BINDING_WS);
         policyProcessor.writePolicyAttributes(wsBinding, writer);
-        
+
         // Write binding name
         if (wsBinding.getName() != null) {
             writer.writeAttribute(NAME, wsBinding.getName());
@@ -213,37 +212,41 @@
         if (wsBinding.getPortName() != null) {
 
             // Write namespace#wsdl.port(service/port)
-            String wsdlElement = wsBinding.getServiceName().getNamespaceURI() 
+ "#wsdl.port("
-                                 + wsBinding.getServiceName().getLocalPart()
-                                 + "/"
-                                 + wsBinding.getPortName()
-                                 + ")";
+            String wsdlElement =
+                wsBinding.getServiceName().getNamespaceURI() + "#wsdl.port("
+                    + wsBinding.getServiceName().getLocalPart()
+                    + "/"
+                    + wsBinding.getPortName()
+                    + ")";
             writer.writeAttribute(WSDL_ELEMENT, wsdlElement);
 
         } else if (wsBinding.getEndpointName() != null) {
 
             // Write namespace#wsdl.endpoint(service/endpoint)
-            String wsdlElement = wsBinding.getServiceName().getNamespaceURI() 
+ "#wsdl.endpoint("
-                                 + wsBinding.getServiceName().getLocalPart()
-                                 + "/"
-                                 + wsBinding.getEndpointName()
-                                 + ")";
+            String wsdlElement =
+                wsBinding.getServiceName().getNamespaceURI() + 
"#wsdl.endpoint("
+                    + wsBinding.getServiceName().getLocalPart()
+                    + "/"
+                    + wsBinding.getEndpointName()
+                    + ")";
             writer.writeAttribute(WSDL_ELEMENT, wsdlElement);
 
         } else if (wsBinding.getBindingName() != null) {
 
             // Write namespace#wsdl.binding(binding)
-            String wsdlElement = wsBinding.getBindingName().getNamespaceURI() 
+ "#wsdl.binding("
-                                 + wsBinding.getBindingName().getLocalPart()
-                                 + ")";
+            String wsdlElement =
+                wsBinding.getBindingName().getNamespaceURI() + "#wsdl.binding("
+                    + wsBinding.getBindingName().getLocalPart()
+                    + ")";
             writer.writeAttribute(WSDL_ELEMENT, wsdlElement);
 
         } else if (wsBinding.getServiceName() != null) {
 
             // Write namespace#wsdl.service(service)
-            String wsdlElement = wsBinding.getServiceName().getNamespaceURI() 
+ "#wsdl.service("
-                                 + wsBinding.getServiceName().getLocalPart()
-                                 + ")";
+            String wsdlElement =
+                wsBinding.getServiceName().getNamespaceURI() + "#wsdl.service("
+                    + wsBinding.getServiceName().getLocalPart()
+                    + ")";
             writer.writeAttribute(WSDL_ELEMENT, wsdlElement);
         }
 
@@ -255,7 +258,7 @@
         if (wsBinding.getEndPointReference() != null) {
             
EndPointReferenceHelper.writeEndPointReference(wsBinding.getEndPointReference(),
 writer);
         }
-        
+
         writer.writeEndElement();
     }
 
@@ -263,21 +266,31 @@
         WSDLDefinition wsdlDefinition = wsdlFactory.createWSDLDefinition();
         wsdlDefinition.setUnresolved(true);
         wsdlDefinition.setNamespace(model.getNamespace());
-        wsdlDefinition = resolver.resolveModel(WSDLDefinition.class, 
wsdlDefinition);
-        
-        if (!wsdlDefinition.isUnresolved()) {
+        WSDLDefinition resolved = resolver.resolveModel(WSDLDefinition.class, 
wsdlDefinition);
+
+        if (!resolved.isUnresolved()) {
+            wsdlDefinition.setDefinition(resolved.getDefinition());
+            wsdlDefinition.setLocation(resolved.getLocation());
+            wsdlDefinition.getXmlSchemas().addAll(resolved.getXmlSchemas());
+            wsdlDefinition.setUnresolved(false);
             model.setDefinition(wsdlDefinition);
-            Definition definition = wsdlDefinition.getDefinition();
             if (model.getBindingName() != null) {
-                
model.setBinding(definition.getBinding(model.getBindingName()));
+                WSDLObject<Binding> binding = 
wsdlDefinition.getWSDLObject(Binding.class, model.getBindingName());
+                if (binding != null) {
+                    wsdlDefinition.setDefinition(binding.getDefinition());
+                    model.setBinding(binding.getElement());
+                }
             }
             if (model.getServiceName() != null) {
-                Service service = 
definition.getService(model.getServiceName());
-                model.setService(service);
-                if (service != null && model.getPortName() != null) {
-                    Port port = service.getPort(model.getPortName());
-                    model.setPort(port);
-                    model.setBinding(port.getBinding());
+                WSDLObject<Service> service = 
wsdlDefinition.getWSDLObject(Service.class, model.getServiceName());
+                if (service != null) {
+                    wsdlDefinition.setDefinition(service.getDefinition());
+                    model.setService(service.getElement());
+                    if (model.getPortName() != null) {
+                        Port port = 
service.getElement().getPort(model.getPortName());
+                        model.setPort(port);
+                        model.setBinding(port.getBinding());
+                    }
                 }
             }
 
@@ -294,9 +307,9 @@
                 model.setBindingInterfaceContract(interfaceContract);
             }
         }
-        policyProcessor.resolvePolicies(model, resolver); 
+        policyProcessor.resolvePolicies(model, resolver);
         OperationsConfigurator opCongigurator = (OperationsConfigurator)model;
-        for ( ConfiguredOperation confOp : 
opCongigurator.getConfiguredOperations() ) {
+        for (ConfiguredOperation confOp : 
opCongigurator.getConfiguredOperations()) {
             policyProcessor.resolvePolicies(confOp, resolver);
         }
     }

Modified: 
incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java?rev=633545&r1=633544&r2=633545&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java
 Tue Mar  4 08:52:24 2008
@@ -39,6 +39,7 @@
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterfaceContract;
+import org.apache.tuscany.sca.interfacedef.wsdl.WSDLObject;
 
 public class WSDLInterfaceProcessor implements 
StAXArtifactProcessor<WSDLInterfaceContract>, WSDLConstants {
 
@@ -141,20 +142,25 @@
                 WSDLDefinition wsdlDefinition = 
wsdlFactory.createWSDLDefinition();
                 wsdlDefinition.setUnresolved(true);
                 
wsdlDefinition.setNamespace(wsdlInterface.getName().getNamespaceURI());
-                wsdlDefinition = resolver.resolveModel(WSDLDefinition.class, 
wsdlDefinition);
-                if (!wsdlDefinition.isUnresolved()) {
-                    PortType portType = 
wsdlDefinition.getDefinition().getPortType(wsdlInterface.getName());
+                WSDLDefinition resolved = 
resolver.resolveModel(WSDLDefinition.class, wsdlDefinition);
+                if (!resolved.isUnresolved()) {
+                    wsdlDefinition.setDefinition(resolved.getDefinition());
+                    wsdlDefinition.setLocation(resolved.getLocation());
+                    
wsdlDefinition.getXmlSchemas().addAll(resolved.getXmlSchemas());
+                    wsdlDefinition.setUnresolved(false);
+                    WSDLObject<PortType> portType = 
wsdlDefinition.getWSDLObject(PortType.class, wsdlInterface.getName());
                     if (portType != null) {
                         
                         // Introspect the WSDL portType and add the resulting
                         // WSDLInterface to the resolver
                         try {
-                            wsdlInterface = 
wsdlFactory.createWSDLInterface(portType, wsdlDefinition, resolver);
+                            
wsdlDefinition.setDefinition(portType.getDefinition());
+                            wsdlInterface = 
wsdlFactory.createWSDLInterface(portType.getElement(), wsdlDefinition, 
resolver);
+                            wsdlInterface.setWsdlDefinition(wsdlDefinition);
                         } catch (InvalidInterfaceException e) {
                             throw new ContributionResolveException(e);
                         }
                         resolver.addModel(wsdlInterface);
-                        wsdlInterface.setWsdlDefinition(wsdlDefinition);
                     }
                 }
             }

Modified: 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java?rev=633545&r1=633544&r2=633545&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java
 Tue Mar  4 08:52:24 2008
@@ -23,6 +23,7 @@
 import java.util.List;
 
 import javax.wsdl.Definition;
+import javax.wsdl.WSDLElement;
 import javax.xml.namespace.QName;
 
 import org.apache.tuscany.sca.assembly.Base;
@@ -36,19 +37,22 @@
  * @version $Rev$ $Date$
  */
 public interface WSDLDefinition extends Base {
-    
+
     /**
-     * Returns the WSDL definition model
+     * Returns the WSDL definition model, if there are more than one WSDL 
definition under the 
+     * same namespace, the defintion will be a facade which imports all the 
physical WSDL 
+     * definitions
+     * 
      * @return the WSDL definition model
      */
     Definition getDefinition();
-    
+
     /**
      * Sets the WSDL definition model
      * @param definition the WSDL definition model
      */
     void setDefinition(Definition definition);
-    
+
     /**
      * Returns the namespace of this WSDL definition.
      * @return the namespace of this WSDL definition
@@ -60,16 +64,46 @@
      * @param namespace the namespace of this WSDL definition
      */
     void setNamespace(String namespace);
-    
+
     /**
-     * @return
+     * Get a list of inline XML schema defintions
+     * @return A list of inline XML schema definitions
      */
     List<XSDefinition> getXmlSchemas();
-    
+
+    /**
+     * Get the location of the WSDL file
+     * @return The location of the WSDL file
+     */
     URI getLocation();
+
+    /**
+     * Set the location of the WSDL file
+     * @param url
+     */
     void setLocation(URI url);
-    
+
+    /**
+     * Get an XSD element by QName
+     * @param name
+     * @return
+     */
     XmlSchemaElement getXmlSchemaElement(QName name);
+
+    /**
+     * Get an XSD type by QName
+     * @param name
+     * @return
+     */
     XmlSchemaType getXmlSchemaType(QName name);
     
+    /**
+     * Get the WSDL object by type and name
+     * @param <T>
+     * @param type javax.wsdl.Service/PortType/Binding/Message.class
+     * @param name The QName of the object
+     * @return WSDLObject
+     */
+    <T extends WSDLElement> WSDLObject<T> getWSDLObject(Class<T> type, QName 
name);
+
 }

Added: 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLObject.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLObject.java?rev=633545&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLObject.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLObject.java
 Tue Mar  4 08:52:24 2008
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.tuscany.sca.interfacedef.wsdl;
+
+import javax.wsdl.Definition;
+import javax.wsdl.WSDLElement;
+
+/**
+ * Model for objects in a WSDL definition
+ * @version $Rev$ $Date$
+ */
+public interface WSDLObject<T extends WSDLElement> {
+    /**
+     * Get the owning defintion where the element is declared
+     * @return The owning definition
+     */
+    Definition getDefinition();
+
+    /**
+     * Set the owning definition
+     * @param definition
+     */
+    void setDefinition(Definition definition);
+
+    /**
+     * Get the WSDL element such as Service, PortType, Binding or Message
+     * @return The WSDL element
+     */
+    T getElement();
+
+    /**
+     * Set the WSDL element
+     * @param element
+     */
+    void setElement(T element);
+}

Propchange: 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLObject.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLObject.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/XSDefinition.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/XSDefinition.java?rev=633545&r1=633544&r2=633545&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/XSDefinition.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/XSDefinition.java
 Tue Mar  4 08:52:24 2008
@@ -88,7 +88,16 @@
      */
     void setDocument(Document document);
 
+    /**
+     * Get the XSD element by QName
+     * @param name
+     * @return The XSD element
+     */
     XmlSchemaElement getXmlSchemaElement(QName name);
 
+    /**
+     * @param name Get the XSD type by QName
+     * @return The XSD type
+     */
     XmlSchemaType getXmlSchemaType(QName name);
 }

Modified: 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java?rev=633545&r1=633544&r2=633545&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java
 Tue Mar  4 08:52:24 2008
@@ -24,11 +24,19 @@
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
+import javax.wsdl.Binding;
 import javax.wsdl.Definition;
+import javax.wsdl.Import;
+import javax.wsdl.Message;
+import javax.wsdl.PortType;
+import javax.wsdl.Service;
+import javax.wsdl.WSDLElement;
 import javax.xml.namespace.QName;
 
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition;
+import org.apache.tuscany.sca.interfacedef.wsdl.WSDLObject;
 import org.apache.tuscany.sca.interfacedef.wsdl.XSDefinition;
 import org.apache.ws.commons.schema.XmlSchema;
 import org.apache.ws.commons.schema.XmlSchemaCollection;
@@ -206,6 +214,44 @@
             return schemaCollection.getTypeByQName(name);
         }
         return null;
+    }
+
+    @SuppressWarnings("unchecked")
+    private static <T extends WSDLElement> WSDLObject<T> 
getWSDLObject(Definition definition, Class<T> type, QName name) {
+        if (definition == null) {
+            return null;
+        }
+        Map<QName, WSDLElement> map = null;
+        if (type == PortType.class) {
+            map = definition.getPortTypes();
+        } else if (type == Service.class) {
+            map = definition.getServices();
+        } else if (type == Binding.class) {
+            map = definition.getBindings();
+        } else if (type == Message.class) {
+            map = definition.getMessages();
+        } else {
+            throw new IllegalArgumentException("Invalid type: " + 
type.getName());
+        }
+        if (map.containsKey(name)) {
+            return (WSDLObject<T>)new WSDLObjectImpl(definition, 
map.get(name));
+        } else {
+            for (Object imports : definition.getImports().values()) {
+                List<Import> importList = (List<Import>)imports;
+                for (Import i : importList) {
+                    definition = i.getDefinition();
+                    WSDLObject<T> element = getWSDLObject(definition, type, 
name);
+                    if (element != null) {
+                        return element;
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+    public <T extends WSDLElement> WSDLObject<T> getWSDLObject(Class<T> type, 
QName name) {
+        return getWSDLObject(definition, type, name);
     }
 
 }

Added: 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLObjectImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLObjectImpl.java?rev=633545&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLObjectImpl.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLObjectImpl.java
 Tue Mar  4 08:52:24 2008
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.tuscany.sca.interfacedef.wsdl.impl;
+
+import javax.wsdl.Definition;
+import javax.wsdl.WSDLElement;
+
+import org.apache.tuscany.sca.interfacedef.wsdl.WSDLObject;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class WSDLObjectImpl<T extends WSDLElement> implements WSDLObject<T> {
+    private Definition definition;
+    private T element;
+
+    public WSDLObjectImpl() {
+        super();
+    }
+
+    public WSDLObjectImpl(Definition definition, T element) {
+        super();
+        this.definition = definition;
+        this.element = element;
+    }
+
+    public Definition getDefinition() {
+        return definition;
+    }
+
+    public void setDefinition(Definition definition) {
+        this.definition = definition;
+    }
+
+    public T getElement() {
+        return element;
+    }
+
+    public void setElement(T element) {
+        this.element = element;
+    }
+
+}

Propchange: 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLObjectImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLObjectImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to