Author: lresende
Date: Fri Sep 14 00:27:33 2007
New Revision: 575572

URL: http://svn.apache.org/viewvc?rev=575572&view=rev
Log:
Adding componentType resolution to BPEL implementation

Modified:
    
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELDocumentProcessor.java
    
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationImpl.java
    
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationProcessor.java
    
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELProcessDefinitionImpl.java
    
incubator/tuscany/java/sca/modules/implementation-bpel/src/test/java/org/apache/tuscany/sca/implementation/bpel/BPELDocumentProcessorTestCase.java
    
incubator/tuscany/java/sca/modules/implementation-bpel/src/test/resources/helloworld.composite

Modified: 
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELDocumentProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELDocumentProcessor.java?rev=575572&r1=575571&r2=575572&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELDocumentProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELDocumentProcessor.java
 Fri Sep 14 00:27:33 2007
@@ -65,11 +65,18 @@
     }
 
     public BPELProcessDefinition read(URL contributionURL, URI artifactURI, 
URL artifactURL) throws ContributionReadException {
+        BPELProcessDefinition processDefinition = null;
         try {
-            return indexRead(artifactURL);
+            //for now we are just using process name
+            //and relying on componentType file for service definition
+            //so it's ok to set resolved for now
+            processDefinition = indexRead(artifactURL);
+            processDefinition.setUnresolved(false);
         } catch (Exception e) {
             throw new ContributionReadException(e);
         }
+        
+        return processDefinition;
     }
 
 

Modified: 
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationImpl.java?rev=575572&r1=575571&r2=575572&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationImpl.java
 Fri Sep 14 00:27:33 2007
@@ -62,8 +62,6 @@
     public BPELImplementationImpl(AssemblyFactory assemblyFactory,
                               WSDLFactory wsdlFactory) {
 
-        _bpelService = assemblyFactory.createService();
-        _bpelService.setName("BPEL");
     }
 
     public void setCompiledProcess(byte[] compiledProcess) {

Modified: 
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationProcessor.java?rev=575572&r1=575571&r2=575572&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationProcessor.java
 Fri Sep 14 00:27:33 2007
@@ -20,13 +20,21 @@
 
 import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.ComponentType;
+import org.apache.tuscany.sca.assembly.Property;
+import org.apache.tuscany.sca.assembly.Service;
 import org.apache.tuscany.sca.assembly.xml.Constants;
 import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.BaseStAXArtifactProcessor;
 import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
 import org.apache.tuscany.sca.contribution.service.ContributionReadException;
@@ -34,6 +42,7 @@
 import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
 import org.apache.tuscany.sca.implementation.bpel.BPELFactory;
 import org.apache.tuscany.sca.implementation.bpel.BPELImplementation;
+import org.apache.tuscany.sca.implementation.bpel.BPELProcessDefinition;
 import org.apache.tuscany.sca.implementation.bpel.DefaultBPELFactory;
 
 /**
@@ -46,12 +55,14 @@
  * 
  *  @version $Rev$ $Date$
  */
-public class BPELImplementationProcessor implements 
StAXArtifactProcessor<BPELImplementation> {
+public class BPELImplementationProcessor extends BaseStAXArtifactProcessor 
implements StAXArtifactProcessor<BPELImplementation> {
     private static final QName IMPLEMENTATION_BPEL = new 
QName(Constants.SCA10_NS, "implementation.bpel");
     
+    private AssemblyFactory assemblyFactory;
     private BPELFactory bpelFactory;
     
     public BPELImplementationProcessor(ModelFactoryExtensionPoint 
modelFactories) {
+        this.assemblyFactory = 
modelFactories.getFactory(AssemblyFactory.class);
         this.bpelFactory = new DefaultBPELFactory(modelFactories);
     }
 
@@ -79,7 +90,7 @@
         implementation.setProcess(process);
         //FIXME:lresende
         //implementation.setCompiledProcess(compiledProcess.toByteArray());
-        //implementation.setUnresolved(false);
+        implementation.setUnresolved(true);
         
         // Skip to end element
         while (reader.hasNext()) {
@@ -92,9 +103,16 @@
     }
 
     public void resolve(BPELImplementation impl, ModelResolver resolver) 
throws ContributionResolveException {
-        System.out.println("IN RESOLVE");
         if( impl != null && impl.isUnresolved()) {
+            BPELProcessDefinition processDefinition = 
resolveBPELProcessDefinition(impl, resolver);
+            if(processDefinition.isUnresolved()) {
+                throw new ContributionResolveException("Can't find BPEL 
Process : " + processDefinition.getName());
+            }
             
+            //resolve component type
+            mergeComponentType(resolver, impl);
+                        
+            //set current implementation resolved 
             impl.setUnresolved(false);
         }
         
@@ -104,6 +122,93 @@
         //FIXME Implement
     }
 
+    private BPELProcessDefinition 
resolveBPELProcessDefinition(BPELImplementation impl, ModelResolver resolver) 
throws ContributionResolveException {
+        QName processName = impl.getProcess();
+        BPELProcessDefinition processDefinition = 
this.bpelFactory.createBPELProcessDefinition();
+        processDefinition.setName(processName);
+        processDefinition.setUnresolved(true);
+        
+        return resolver.resolveModel(BPELProcessDefinition.class, 
processDefinition);
+    }
+    
+    
+    /**
+     * Merge the componentType from introspection and external file
+     * @param resolver
+     * @param impl
+     */
+    private void mergeComponentType(ModelResolver resolver, BPELImplementation 
impl) {
+        // FIXME: Need to clarify how to merge
+        ComponentType componentType = getComponentType(resolver, impl);
+        if (componentType != null && !componentType.isUnresolved()) {
+            /*
+            Map<String, Reference> refMap = new HashMap<String, Reference>();
+            for (Reference ref : impl.getReferences()) {
+                refMap.put(ref.getName(), ref);
+            }
+            for (Reference reference : componentType.getReferences()) {
+                refMap.put(reference.getName(), reference);
+            }
+            impl.getReferences().clear();
+            impl.getReferences().addAll(refMap.values());
+
+            // Try to match references by type
+            Map<String, JavaElementImpl> refMembers = 
impl.getReferenceMembers();
+            for (Reference ref : impl.getReferences()) {
+                if (ref.getInterfaceContract() != null) {
+                    Interface i = ref.getInterfaceContract().getInterface();
+                    if (i instanceof JavaInterface) {
+                        Class<?> type = ((JavaInterface)i).getJavaClass();
+                        if (!refMembers.containsKey(ref.getName())) {
+                            JavaElementImpl e = getMemeber(impl, 
ref.getName(), type);
+                            if (e != null) {
+                                refMembers.put(ref.getName(), e);
+                            }
+                        }
+                    }
+                }
+            }*/
+
+            Map<String, Service> serviceMap = new HashMap<String, Service>();
+            for (Service svc : impl.getServices()) {
+                serviceMap.put(svc.getName(), svc);
+            }
+            for (Service service : componentType.getServices()) {
+                serviceMap.put(service.getName(), service);
+            }
+            impl.getServices().clear();
+            impl.getServices().addAll(serviceMap.values());
+
+            Map<String, Property> propMap = new HashMap<String, Property>();
+            for (Property prop : impl.getProperties()) {
+                propMap.put(prop.getName(), prop);
+            }
+            for (Property property : componentType.getProperties()) {
+                propMap.put(property.getName(), property);
+            }
+            impl.getProperties().clear();
+            impl.getProperties().addAll(propMap.values());
+
+            if (componentType.getConstrainingType() != null) {
+                impl.setConstrainingType(componentType.getConstrainingType());
+            }
+        }
+    }
+
+
+    private ComponentType getComponentType(ModelResolver resolver, 
BPELImplementation impl) {
+        String bpelName = impl.getProcess().getLocalPart();
+        String componentTypeURI = bpelName.replace('.', '/') + 
".componentType";
+        ComponentType componentType = assemblyFactory.createComponentType();
+        componentType.setUnresolved(true);
+        componentType.setURI(componentTypeURI);
+        componentType = resolver.resolveModel(ComponentType.class, 
componentType);
+        if (!componentType.isUnresolved()) {
+            return componentType;
+        }
+        return null;
+    }
+
     private QName getAttributeValueNS(XMLStreamReader reader, String 
attribute) {
         String fullValue = reader.getAttributeValue(null, "process");
         if (fullValue.indexOf(":") < 0)
@@ -117,4 +222,5 @@
                     " in your composite has un unrecognized namespace 
prefix.");
         return new QName(nsUri, name, prefix);
     }
+
 }

Modified: 
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELProcessDefinitionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELProcessDefinitionImpl.java?rev=575572&r1=575571&r2=575572&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELProcessDefinitionImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELProcessDefinitionImpl.java
 Fri Sep 14 00:27:33 2007
@@ -23,6 +23,7 @@
 
 import javax.xml.namespace.QName;
 
+import org.apache.tuscany.sca.assembly.Composite;
 import org.apache.tuscany.sca.implementation.bpel.BPELProcessDefinition;
 
 /**
@@ -76,5 +77,25 @@
             e.printStackTrace();
         }
         */
+    }
+
+    @Override
+    public int hashCode() {
+        return String.valueOf(getName()).hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        } else if (obj instanceof BPELProcessDefinition) {
+            if (getName() != null) {
+                return 
getName().equals(((BPELProcessDefinition)obj).getName());
+            } else {
+                return ((BPELProcessDefinition)obj).getName() == null;
+            }
+        } else {
+            return false;
+        }
     }
 }

Modified: 
incubator/tuscany/java/sca/modules/implementation-bpel/src/test/java/org/apache/tuscany/sca/implementation/bpel/BPELDocumentProcessorTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-bpel/src/test/java/org/apache/tuscany/sca/implementation/bpel/BPELDocumentProcessorTestCase.java?rev=575572&r1=575571&r2=575572&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-bpel/src/test/java/org/apache/tuscany/sca/implementation/bpel/BPELDocumentProcessorTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-bpel/src/test/java/org/apache/tuscany/sca/implementation/bpel/BPELDocumentProcessorTestCase.java
 Fri Sep 14 00:27:33 2007
@@ -63,6 +63,5 @@
         assertNotNull(bpelProcessDefinition);
         assertEquals(new 
QName("http://tuscany.apache.org/implementation/bpel/example/helloworld";, 
"HelloWorld"), bpelProcessDefinition.getName());
         assertEquals(processLocation, bpelProcessDefinition.getLocation());
-        assertEquals(true, bpelProcessDefinition.isUnresolved());
     }
 }

Modified: 
incubator/tuscany/java/sca/modules/implementation-bpel/src/test/resources/helloworld.composite
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-bpel/src/test/resources/helloworld.composite?rev=575572&r1=575571&r2=575572&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-bpel/src/test/resources/helloworld.composite
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-bpel/src/test/resources/helloworld.composite
 Fri Sep 14 00:27:33 2007
@@ -23,7 +23,6 @@
     name="bpel">
     
     <component name="BPELHelloWorldComponent">
-        <!-- implementation.bpel process="hns:HelloWorld" 
file="HelloWorld.bpel"/ -->
         <implementation.bpel process="hns:HelloWorld"/>
     </component>
 



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

Reply via email to