[overlord-commits] Overlord SVN: r348 - in cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src: test/org/jboss/tools/overlord/cdl/jbossesb/model/change and 1 other directory.

overlord-commits at lists.jboss.org overlord-commits at lists.jboss.org
Fri Sep 26 11:50:55 EDT 2008


Author: objectiser
Date: 2008-09-26 11:50:54 -0400 (Fri, 26 Sep 2008)
New Revision: 348

Modified:
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/ConversationInteractionModelChangeRule.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/ConversationInteractionModelChangeRuleTest.java
Log:
Further update + test to cater for 'create session' action being at the beginning of an action pipeline.

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/ConversationInteractionModelChangeRule.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/ConversationInteractionModelChangeRule.java	2008-09-26 14:56:27 UTC (rev 347)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/ConversationInteractionModelChangeRule.java	2008-09-26 15:50:54 UTC (rev 348)
@@ -291,7 +291,8 @@
 		// descriptor - i.e. if insert at end, but current service
 		// already has service based actions, or reference object
 		// provided, but is not first position
-		if ((ref == null && service.isSessionBased()) || pos > 0) {
+		if (shouldScheduleNewService(service, (pos == -1 ?
+				service.getActions().size() : pos))) {
 			
 			// Already has activities, so need to separate
 			// into another service descriptor
@@ -420,7 +421,22 @@
 						interaction.getMessageSignature(), ids, locators);
 		}
 	}
+	
+	protected boolean shouldScheduleNewService(ESBService service,
+						int pos) {
+		boolean ret=false;
 		
+		for (int i=0; ret == false && i < pos; i++) { 
+			ESBAction action=service.getActions().get(i);
+			
+			if (action.isSessionBased() && !action.isCreateSession()) {
+				ret = true;
+			}
+		}
+		
+		return(ret);
+	}
+		
 	/**
 	 * This method determines whether the rule is appropriate
 	 * for the supplied type of model, parent (in the context)

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/ConversationInteractionModelChangeRuleTest.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/ConversationInteractionModelChangeRuleTest.java	2008-09-26 14:56:27 UTC (rev 347)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/ConversationInteractionModelChangeRuleTest.java	2008-09-26 15:50:54 UTC (rev 348)
@@ -108,6 +108,94 @@
 		}
 	}		
 
+	public void testInsertFirstReceiveAfterCreateSessionAction() {
+		ConversationInteractionModelChangeRule rule=new ConversationInteractionModelChangeRule();
+		
+		TestESBLanguageModel model=new TestESBLanguageModel();
+		
+		TestESBService service=(TestESBService)
+			model.createService("testcategory", "testname");
+		
+		model.addService(service);
+		
+		// Add 'create session' action
+		TestESBAction act=new TestESBAction();
+		act.setCreateSession(true);
+		service.addAction(act, -1);
+		
+		// Add gateway service
+		TestESBService gwservice=(TestESBService)
+			model.createService("testcategory", "gateway");
+		gwservice.setGateway(true);
+		
+		MessageRouterAction mra=new MessageRouterAction(gwservice);
+		gwservice.setGatewayAction(mra);
+		
+		model.setGatewayService(gwservice);
+		
+		
+		TestModelChangeContext context=new TestModelChangeContext();
+		context.setParent(service);
+		
+		Role role=new Role();
+		role.setName("role1");
+		
+		context.setRole(role);
+		
+		Conversation conv=new Conversation();
+		ModelName mname=new ModelName();
+		mname.setLocatedRole(role);
+		conv.setModelName(mname);
+		
+		ConversationInteraction mobj=new ConversationInteraction();
+		mobj.setToRole(role);
+		conv.getBlock().getContents().add(mobj);
+		
+		
+		MessageSignature msig=new MessageSignature();
+		mobj.setMessageSignature(msig);
+		
+		TypeReference ref=new TypeReference();
+		ref.setNamespace("ns");
+		ref.setLocalpart("lp");
+		
+		msig.getTypes().add(ref);
+		
+		if (rule.insert(context, model, mobj, null) == false) {
+			fail("Failed to insert");
+		}
+		
+		// Check actions
+		if (service.getActions().size() != 2) {
+			fail("Expecting 2 actions: "+service.getActions().size());
+		}
+		
+		if ((service.getActions().get(0) instanceof TestESBAction) == false) {
+			fail("Action was not TestESBAction: "+service.getActions().get(0));
+		}
+		
+		if ((service.getActions().get(1) instanceof ReceiveMessageAction) == false) {
+			fail("Action was not ReceiveMessageAction: "+service.getActions().get(0));
+		}
+		
+		if (model.getServices().size() != 1) {
+			fail("One service expected: "+model.getServices().size());
+		}
+		
+		ReceiveMessageAction action=(ReceiveMessageAction)service.getActions().get(1);
+		
+		String mtype=InteractionUtil.getTypeString(ref);
+
+		if (action.getPropertyValue("messageType").equals(mtype)==false) {
+			fail("Message type '"+action.getPropertyValue("messageType")+
+					"' invalid, expecting: "+mtype);
+		}
+		
+		if (mra.getNumberOfRoutes() != 1) {
+			fail("One route expected: "+mra.getNumberOfRoutes());
+		}
+	}		
+
 	public void testInsertSecondReceiveAction() {
 		ConversationInteractionModelChangeRule rule=new ConversationInteractionModelChangeRule();
 		




More information about the overlord-commits mailing list