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]