[savara-commits] savara SVN: r521 - in branches/experimental/2.0.x/bundles: org.savara.bpel/src/main/java/org/savara/bpel/util and 2 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Sat Jan 1 15:06:27 EST 2011


Author: objectiser
Date: 2011-01-01 15:06:27 -0500 (Sat, 01 Jan 2011)
New Revision: 521

Modified:
   branches/experimental/2.0.x/bundles/org.savara.bpel.tests/src/test/java/org/savara/bpel/generator/GeneratorTest.java
   branches/experimental/2.0.x/bundles/org.savara.bpel.tests/src/test/resources/generator/results/PurchaseGoods at CreditAgency.bpel
   branches/experimental/2.0.x/bundles/org.savara.bpel/src/main/java/org/savara/bpel/model/change/ChoiceModelChangeRule.java
   branches/experimental/2.0.x/bundles/org.savara.bpel/src/main/java/org/savara/bpel/util/InteractionUtil.java
Log:
Fix reply as part of choice.

Modified: branches/experimental/2.0.x/bundles/org.savara.bpel/src/main/java/org/savara/bpel/model/change/ChoiceModelChangeRule.java
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.bpel/src/main/java/org/savara/bpel/model/change/ChoiceModelChangeRule.java	2011-01-01 18:12:26 UTC (rev 520)
+++ branches/experimental/2.0.x/bundles/org.savara.bpel/src/main/java/org/savara/bpel/model/change/ChoiceModelChangeRule.java	2011-01-01 20:06:27 UTC (rev 521)
@@ -31,6 +31,7 @@
 import org.savara.bpel.model.TPartnerLink;
 import org.savara.bpel.model.TPick;
 import org.savara.bpel.model.TProcess;
+import org.savara.bpel.model.TReply;
 import org.savara.bpel.model.TScope;
 import org.savara.bpel.model.TSequence;
 import org.savara.bpel.model.TVariable;
@@ -106,6 +107,20 @@
 					 (org.scribble.protocol.model.Choice)mobj;
 		java.util.List<When> paths=elem.getWhens();
 		
+		Role role=null;
+		String roleNamespace=null;
+	
+		if (elem.enclosingProtocol() != null) {
+			role = elem.enclosingProtocol().getRole();
+		}
+
+		Contract contract=ModelChangeUtils.getContract(context,
+				elem.enclosingProtocol().getRole().getName());
+		
+		if (contract != null) {
+			roleNamespace = contract.getNamespace();
+		}
+	
 		// Check if the 'If' construct is to handle responses
 		// to a preceding request being sent
 		if (InteractionPatterns.isResponseAndFaultHandler(elem)) {
@@ -135,11 +150,11 @@
 								InteractionPatterns.isFaultResponse(path)) {
 							String faultName=InteractionPatterns.getFaultName(path);
 							
-							Contract contract = ModelChangeUtils.getContract(context,
+							Contract fromContract = ModelChangeUtils.getContract(context,
 										elem.getFromRole().getName());
 							
 							// Define fault message type
-							QName qname= WSDLGeneratorUtil.getFaultMessageType(contract.getNamespace(),
+							QName qname= WSDLGeneratorUtil.getFaultMessageType(fromContract.getNamespace(),
 												faultName);
 							
 							String faultVarName=qname.getLocalPart()+"Var";
@@ -177,18 +192,18 @@
 							
 							if (acts.size() > 0 && //act instanceof Interaction &&
 									acts.get(acts.size()-1) instanceof TInvoke) {
-								Contract contract = ModelChangeUtils.getContract(context,
+								Contract fromContract = ModelChangeUtils.getContract(context,
 										elem.getFromRole().getName());
 							
 								QName qname=null;
 								if (InteractionUtil.isRequest(path)) {
-									qname = WSDLGeneratorUtil.getRequestMessageType(contract.getNamespace(),
+									qname = WSDLGeneratorUtil.getRequestMessageType(fromContract.getNamespace(),
 											path.getMessageSignature().getOperation());
 								} else if (InteractionPatterns.isFaultResponse(path)) {
-									qname = WSDLGeneratorUtil.getFaultMessageType(contract.getNamespace(),
+									qname = WSDLGeneratorUtil.getFaultMessageType(fromContract.getNamespace(),
 											InteractionPatterns.getFaultName(path));
 								} else {
-									qname = WSDLGeneratorUtil.getResponseMessageType(contract.getNamespace(),
+									qname = WSDLGeneratorUtil.getResponseMessageType(fromContract.getNamespace(),
 														path.getMessageSignature().getOperation());
 								}
 
@@ -221,24 +236,10 @@
 		} else if (InteractionPatterns.isSwitch(elem)) {
 			TPick act=new TPick();
 			
-			Contract contract=ModelChangeUtils.getContract(context,
-					elem.enclosingProtocol().getRole().getName());
-			
 			if (context.getParent() instanceof TSequence) {
 				((TSequence)context.getParent()).getActivity().add(act);
 			}
 			
-			Role role=null;
-			String roleNamespace=null;
-		
-			if (elem.enclosingProtocol() != null) {
-				role = elem.enclosingProtocol().getRole();
-			}
-
-			if (contract != null) {
-				roleNamespace = contract.getNamespace();
-			}
-		
 			for (int i=0; i < paths.size(); i++) {
 				When path=paths.get(i);
 				
@@ -319,9 +320,9 @@
 					//portType = role.getName()+
 					//		recv.getFromRole().getName()+"CallbackPT";				
 
-					contract = ModelChangeUtils.getContract(context, elem.getFromRole().getName());
-					if (contract != null && contract.getInterfaces().size() > 0) {
-						Interface intf = contract.getInterfaces().iterator().next();
+					Contract fromContract = ModelChangeUtils.getContract(context, elem.getFromRole().getName());
+					if (fromContract != null && fromContract.getInterfaces().size() > 0) {
+						Interface intf = fromContract.getInterfaces().iterator().next();
 						
 						portType = intf.getName();
 						namespace = intf.getNamespace();
@@ -405,6 +406,92 @@
 				
 				TSequence seq=new TSequence();
 				
+				// Handle when message signature
+				if (InteractionUtil.isResponse(path)) {
+					QName qname=null;
+					if (InteractionUtil.isRequest(path)) {
+						qname = WSDLGeneratorUtil.getRequestMessageType(contract.getNamespace(),
+								path.getMessageSignature().getOperation());
+					} else if (InteractionPatterns.isFaultResponse(path)) {
+						qname = WSDLGeneratorUtil.getFaultMessageType(contract.getNamespace(),
+								InteractionPatterns.getFaultName(path));
+					} else {
+						qname = WSDLGeneratorUtil.getResponseMessageType(contract.getNamespace(),
+								path.getMessageSignature().getOperation());
+					}
+					
+					String varName = qname.getLocalPart()+"Var";
+
+					TVariable var=VariableUtil.getVariable(bpelModel, varName);
+
+					if (var == null) {
+						var = new TVariable();
+						var.setName(varName);
+						
+						var.setMessageType(qname);
+						
+						bpelModel.getVariables().getVariable().add(var);
+					}
+
+					TReply reply = new TReply();
+					seq.getActivity().add(reply);
+					
+					// TODO: What about if multiple 'to' roles
+					TPartnerLink pl=new TPartnerLink();
+
+					pl.setMyRole(role.getName()+"Service");
+					pl.setName(elem.getToRole().getName()+"To"+role.getName());
+					
+					String plt=elem.getToRole().getName()+"To"+role.getName()+"Service"+"LT";
+					
+					pl.setPartnerLinkType(new QName(roleNamespace, plt));
+	
+					//portType = role.getName()+"PT";
+					
+					if (InteractionPatterns.isFaultResponse(path)) {
+						String faultName=InteractionPatterns.getFaultName(path);
+						
+						// TODO: Not sure what to do about namespace here?
+						reply.setFaultName(new QName(contract.getNamespace(), faultName));
+					}
+					
+					if (varName != null) {
+						reply.setVariable(varName);
+					}
+
+					// Create partner link
+					TPartnerLink other=
+							PartnerLinkUtil.getPartnerLink(bpelModel, pl.getName());
+					if (other == null) {
+						bpelModel.getPartnerLinks().getPartnerLink().add(pl);
+					} else {
+						if (other.getPartnerRole() == null &&
+								pl.getPartnerRole() != null) {
+							other.setPartnerRole(pl.getPartnerRole());
+						}
+						if (other.getMyRole() == null &&
+								pl.getMyRole() != null) {
+							other.setMyRole(pl.getMyRole());
+						}
+					}
+
+					String portType=null;
+					
+					if (contract.getInterfaces().size() > 0) {
+						portType = contract.getInterfaces().iterator().next().getName();
+					}
+
+					reply.setPartnerLink(pl.getName());			
+					reply.setPortType(new QName(contract.getNamespace(),portType));	
+					if (path.getMessageSignature() != null) {
+						reply.setOperation(path.getMessageSignature().getOperation());
+					}
+
+					reply.setName(InteractionUtil.getName(path));
+				} else {
+					// TODO: HANDLE REQUEST - not sure if required, need an example
+				}
+				
 				// Process the activities within the conversation
 				java.util.List<Activity> acts=path.getBlock().getContents();
 							

Modified: branches/experimental/2.0.x/bundles/org.savara.bpel/src/main/java/org/savara/bpel/util/InteractionUtil.java
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.bpel/src/main/java/org/savara/bpel/util/InteractionUtil.java	2011-01-01 18:12:26 UTC (rev 520)
+++ branches/experimental/2.0.x/bundles/org.savara.bpel/src/main/java/org/savara/bpel/util/InteractionUtil.java	2011-01-01 20:06:27 UTC (rev 521)
@@ -68,6 +68,28 @@
 	}
 	
 	/**
+	 * This method returns the name associated with the interaction.
+	 * 
+	 * @param when The when
+	 * @return The name
+	 */
+	public static String getName(When when) {
+		String ret=null;
+		
+		if (isSend(when)) {
+			ret = "Send";
+		} else {
+			ret = "Receive";
+		}
+		
+		for (TypeReference ref : when.getMessageSignature().getTypeReferences()) {
+			ret += "_"+ref.getName();
+		}
+
+		return(ret);
+	}
+	
+	/**
 	 * This method determines whether the supplied interaction
 	 * is a send.
 	 * 
@@ -96,6 +118,33 @@
 	
 	/**
 	 * This method determines whether the supplied interaction
+	 * is a send.
+	 * 
+	 * @param interaction The interaction
+	 * @return Whether the interaction is a send
+	 */
+	public static boolean isSend(When when) {
+		boolean ret=false;
+		Role role=null;
+		
+		if (((Choice)when.getParent()).enclosingProtocol() != null) {
+			role = ((Choice)when.getParent()).enclosingProtocol().getRole();
+		}
+		
+		if (role != null && ((((Choice)when.getParent()).getFromRole() != null &&
+				((Choice)when.getParent()).getFromRole().equals(
+						role)) ||
+					(((Choice)when.getParent()).getToRole() != null &&
+					((Choice)when.getParent()).getToRole().equals(
+						role) == false))) {
+			ret = true;
+		}
+		
+		return(ret);
+	}
+	
+	/**
+	 * This method determines whether the supplied interaction
 	 * is a request.
 	 * 
 	 * @param interaction The interaction

Modified: branches/experimental/2.0.x/bundles/org.savara.bpel.tests/src/test/java/org/savara/bpel/generator/GeneratorTest.java
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.bpel.tests/src/test/java/org/savara/bpel/generator/GeneratorTest.java	2011-01-01 18:12:26 UTC (rev 520)
+++ branches/experimental/2.0.x/bundles/org.savara.bpel.tests/src/test/java/org/savara/bpel/generator/GeneratorTest.java	2011-01-01 20:06:27 UTC (rev 521)
@@ -47,11 +47,13 @@
         suite.addTest(new ChoreographyToBPELTester("ESBBroker",
 										"SupplierQuoteEngine"));
         suite.addTest(new ChoreographyToBPELTester("PurchaseGoods", "Buyer"));
+        */
         suite.addTest(new ChoreographyToBPELTester("PurchaseGoods", "CreditAgency"));
-        */
         suite.addTest(new ChoreographyToBPELTester("PurchaseGoods", "Store"));
         
         /*
+
+        
         suite.addTest(new ChoreographyToBPELTester("ReqRespFault", "Buyer"));
         suite.addTest(new ChoreographyToBPELTester("ReqRespFault", "Seller"));
         */

Modified: branches/experimental/2.0.x/bundles/org.savara.bpel.tests/src/test/resources/generator/results/PurchaseGoods at CreditAgency.bpel
===================================================================
--- branches/experimental/2.0.x/bundles/org.savara.bpel.tests/src/test/resources/generator/results/PurchaseGoods at CreditAgency.bpel	2011-01-01 18:12:26 UTC (rev 520)
+++ branches/experimental/2.0.x/bundles/org.savara.bpel.tests/src/test/resources/generator/results/PurchaseGoods at CreditAgency.bpel	2011-01-01 20:06:27 UTC (rev 521)
@@ -1,26 +1,27 @@
-<process xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable" xmlns:pur="java:org.jboss.savara.examples.purchasing" xmlns:sto="http://www.jboss.org/examples/store" xmlns:tns="http://www.jboss.org/savara/examples" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns0="http://www.scribble.org/conversation" ns0:conversationType="savara.samples.Common at CreditAgency" name="PurchaseGoodsProcess_CreditAgency" targetNamespace="java:org.jboss.savara.examples.purchasing" xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable">
-    <import importType="http://schemas.xmlsoap.org/wsdl/" location="PurchaseGoodsProcess_CreditAgency.wsdl" namespace="java:org.jboss.savara.examples.purchasing"/>
-    <import importType="http://schemas.xmlsoap.org/wsdl/" location="PurchaseGoodsProcess_Store.wsdl" namespace="http://www.jboss.org/examples/store"/>
-    <import importType="http://schemas.xmlsoap.org/wsdl/" location="PurchaseGoodsProcess_CreditAgencyArtifacts.wsdl" namespace="java:org.jboss.savara.examples.purchasing"/>
-    <partnerLinks>
-        <partnerLink myRole="CreditAgencyInterface" name="StoreToCreditAgency" partnerLinkType="pur:StoreToCreditAgencyServiceLT"/>
-    </partnerLinks>
-    <variables>
-        <variable messageType="pur:checkCreditRequest" name="checkCreditRequestVar"/>
-        <variable messageType="pur:checkCreditResponse" name="checkCreditResponseVar"/>
-        <variable messageType="pur:CreditCheckFailedFault" name="CreditCheckFailedFaultVar"/>
-    </variables>
-    <sequence>
-        <receive createInstance="yes" name="Receive_CreditCheckRequest" operation="checkCredit" partnerLink="StoreToCreditAgency" portType="pur:CreditAgencyInterface" variable="checkCreditRequestVar"/>
-        <if>
-            <sequence>
-                <reply name="Send_CreditCheckOk" operation="checkCredit" partnerLink="StoreToCreditAgency" portType="pur:CreditAgencyInterface" variable="checkCreditResponseVar"/>
-            </sequence>
-            <else>
-                <sequence>
-                    <reply faultName="pur:CreditCheckFailed" name="Send_CreditCheckInvalid" operation="checkCredit" partnerLink="StoreToCreditAgency" portType="pur:CreditAgencyInterface" variable="CreditCheckFailedFaultVar"/>
-                </sequence>
-            </else>
-        </if>
-    </sequence>
-</process>
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<process xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable" xmlns:tns="http://www.jboss.org/savara/examples" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sto="http://www.jboss.org/examples/store" xmlns:pur="java:org.jboss.savara.examples.purchasing" name="PurchaseGoodsProcess_CreditAgency" targetNamespace="java:org.jboss.savara.examples.purchasing">
+    <import namespace="java:org.jboss.savara.examples.purchasing" location="PurchaseGoodsProcess_CreditAgency.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
+    <import namespace="http://www.jboss.org/examples/store" location="PurchaseGoodsProcess_Store.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
+    <import namespace="java:org.jboss.savara.examples.purchasing" location="PurchaseGoodsProcess_CreditAgencyArtifacts.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
+    <partnerLinks>
+        <partnerLink name="StoreToCreditAgency" partnerLinkType="pur:StoreToCreditAgencyServiceLT" myRole="CreditAgencyInterface"/>
+    </partnerLinks>
+    <variables>
+        <variable name="checkCreditRequestVar" messageType="pur:checkCreditRequest"/>
+        <variable name="checkCreditResponseVar" messageType="pur:checkCreditResponse"/>
+        <variable name="CreditCheckFailedFaultVar" messageType="pur:CreditCheckFailedFault"/>
+    </variables>
+    <sequence>
+        <receive partnerLink="StoreToCreditAgency" portType="pur:CreditAgencyInterface" operation="checkCredit" variable="checkCreditRequestVar" createInstance="yes" name="Receive_CreditCheckRequest"/>
+        <if>
+            <sequence>
+                <reply partnerLink="StoreToCreditAgency" portType="pur:CreditAgencyInterface" operation="checkCredit" variable="checkCreditResponseVar" name="Send_CreditCheckOk"/>
+            </sequence>
+            <else>
+                <sequence>
+                    <reply partnerLink="StoreToCreditAgency" portType="pur:CreditAgencyInterface" operation="checkCredit" variable="CreditCheckFailedFaultVar" faultName="pur:CreditCheckFailed" name="Send_CreditCheckInvalid"/>
+                </sequence>
+            </else>
+        </if>
+    </sequence>
+</process>



More information about the savara-commits mailing list