[overlord-commits] Overlord SVN: r353 - 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
Tue Sep 30 07:09:07 EDT 2008


Author: objectiser
Date: 2008-09-30 07:09:07 -0400 (Tue, 30 Sep 2008)
New Revision: 353

Added:
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/SpawnModelChangeRuleTest.java
Modified:
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/AbstractESBModelChangeRule.java
   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/RunModelChangeRule.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/SpawnModelChangeRule.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/WhenModelChangeRule.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/WhileModelChangeRule.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/RunModelChangeRuleTest.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/WhileModelChangeRuleTest.java
Log:
Minor refactoring and adding support for mid way insertion to run, spawn and while.

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/AbstractESBModelChangeRule.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/AbstractESBModelChangeRule.java	2008-09-29 14:57:24 UTC (rev 352)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/AbstractESBModelChangeRule.java	2008-09-30 11:09:07 UTC (rev 353)
@@ -74,6 +74,27 @@
 	}
 	
 	/**
+	 * This method determines the insertion position based on the
+	 * supplied service and optional reference model object.
+	 * 
+	 * @param service The service
+	 * @param ref The optional reference model object
+	 * @return The position, or -1 if at end
+	 */
+	protected int getInsertionPosition(ESBService service, ModelObject ref) {
+		int ret=-1;
+		
+		// Check if reference model object provided, and if so,
+		// if it has a position within the service
+		if (ref != null && ref.getSource().getObject() instanceof ESBAction) {
+			ret = service.getActions().indexOf((ESBAction)
+					ref.getSource().getObject());
+		}
+		
+		return(ret);
+	}
+	
+	/**
 	 * This method determines whether an 'initiator' action,
 	 * inserted at the defined position in the specified
 	 * service, should actually be placed in a new scheduled

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-29 14:57:24 UTC (rev 352)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/ConversationInteractionModelChangeRule.java	2008-09-30 11:09:07 UTC (rev 353)
@@ -119,23 +119,19 @@
 		
 		setMessageType(action, interaction);
 		
-		int pos=-1;
 		boolean f_subsequentInitiator=false;
 		boolean f_moveActions=false;
 		
 		// Check if reference model object provided, and if so,
 		// if it has a position within the service
-		if (ref != null && ref.getSource().getObject() instanceof ESBAction) {
-			pos = service.getActions().indexOf((ESBAction)
-					ref.getSource().getObject());
-			
-			// Check if subsequent action(s) are initiators
-			if (pos != -1) {
-				for (int i=pos; f_subsequentInitiator == false &&
-						i < service.getActions().size(); i++) {
-					f_subsequentInitiator =
-						service.getActions().get(i).isInitiator();
-				}
+		int pos=getInsertionPosition(service, ref);
+		
+		// Check if subsequent action(s) are initiators
+		if (pos != -1) {
+			for (int i=pos; f_subsequentInitiator == false &&
+					i < service.getActions().size(); i++) {
+				f_subsequentInitiator =
+					service.getActions().get(i).isInitiator();
 			}
 		}
 		
@@ -255,23 +251,19 @@
 		ESBService service=getESBService(context, ref);
 		ESBService endService=service;
 		
-		int pos=-1;
 		int endPos=-1;
 		boolean f_subsequentInitiator=false;
 		
 		// Check if reference model object provided, and if so,
 		// if it has a position within the service
-		if (ref != null && ref.getSource().getObject() instanceof ESBAction) {
-			pos = service.getActions().indexOf((ESBAction)
-					ref.getSource().getObject());
+		int pos=getInsertionPosition(service, ref);
 			
-			// Check if subsequent action(s) are initiators
-			if (pos != -1) {
-				for (int i=pos; f_subsequentInitiator == false &&
-						i < service.getActions().size(); i++) {
-					f_subsequentInitiator =
-						service.getActions().get(i).isInitiator();
-				}
+		// Check if subsequent action(s) are initiators
+		if (pos != -1) {
+			for (int i=pos; f_subsequentInitiator == false &&
+					i < service.getActions().size(); i++) {
+				f_subsequentInitiator =
+					service.getActions().get(i).isInitiator();
 			}
 		}
 		

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/RunModelChangeRule.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/RunModelChangeRule.java	2008-09-29 14:57:24 UTC (rev 352)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/RunModelChangeRule.java	2008-09-30 11:09:07 UTC (rev 353)
@@ -89,12 +89,14 @@
 	public boolean insert(ModelChangeContext context,
 				Model model, ModelObject mobj, ModelObject ref) {
 		ESBLanguageModel esbModel=(ESBLanguageModel)model;
-		ESBService service=(ESBService)context.getParent();
+		ESBService service=getESBService(context, ref);
 		Run run=(Run)mobj;
 		
+		int pos=getInsertionPosition(service, ref);
+
 		PerformAction action=new PerformAction(service);
 		
-		service.addAction(action, -1);
+		service.addAction(action, pos);
 		
 		String category=ConversationUtil.getServiceCategory(run.getDefinition());		
 		String name=ConversationUtil.getServiceName(run.getDefinition());
@@ -121,6 +123,17 @@
 		action.setReturnDestination(returnService.getCategory(),
 						returnService.getName());
 			
+		// If reference provided, then move subsequent activities
+		// to the 'return service'
+		if (pos != -1) {
+			for (int i=pos+1; i < service.getActions().size();) {
+				ESBAction act=service.getActions().get(i);
+				service.getActions().remove(i);
+				
+				returnService.addAction(act, -1);
+			}
+		}
+
 		return(true);
 	}
 	

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/SpawnModelChangeRule.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/SpawnModelChangeRule.java	2008-09-29 14:57:24 UTC (rev 352)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/SpawnModelChangeRule.java	2008-09-30 11:09:07 UTC (rev 353)
@@ -87,12 +87,14 @@
 	@Override
 	public boolean insert(ModelChangeContext context,
 				Model model, ModelObject mobj, ModelObject ref) {
-		ESBService service=(ESBService)context.getParent();
+		ESBService service=getESBService(context, ref);
 		Spawn spawn=(Spawn)mobj;
 		
+		int pos=getInsertionPosition(service, ref);
+		
 		PerformAction action=new PerformAction(service);
 		
-		service.addAction(action, -1);
+		service.addAction(action, pos);
 		
 		String category=ConversationUtil.getServiceCategory(spawn.getDefinition());		
 		String name=ConversationUtil.getServiceName(spawn.getDefinition());

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/WhenModelChangeRule.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/WhenModelChangeRule.java	2008-09-29 14:57:24 UTC (rev 352)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/WhenModelChangeRule.java	2008-09-30 11:09:07 UTC (rev 353)
@@ -92,15 +92,8 @@
 		ESBService service=getESBService(context, ref);
 		When when=(When)mobj;
 		
-		int pos=-1;
+		int pos=getInsertionPosition(service, ref);
 		
-		// Check if reference model object provided, and if so,
-		// if it has a position within the service
-		if (ref != null && ref.getSource().getObject() instanceof ESBAction) {
-			pos = service.getActions().indexOf((ESBAction)
-					ref.getSource().getObject());
-		}
-		
 		// Create join service
 		ESBService joinService=
 			esbModel.createService(service.getCategory(),

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/WhileModelChangeRule.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/WhileModelChangeRule.java	2008-09-29 14:57:24 UTC (rev 352)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/WhileModelChangeRule.java	2008-09-30 11:09:07 UTC (rev 353)
@@ -89,13 +89,19 @@
 	public boolean insert(ModelChangeContext context,
 				Model model, ModelObject mobj, ModelObject ref) {
 		ESBLanguageModel esbModel=(ESBLanguageModel)model;
-		ESBService service=(ESBService)context.getParent();
+		ESBService service=getESBService(context, ref);
+		ESBService original=service;
 		While whileElem=(While)mobj;
 		
-		// Check if current service is session based
-		// If so, then need to put while in a separate new
-		// service
-		if (service.isSessionBased()) {
+		int pos=getInsertionPosition(service, ref);
+
+		// Check if action needs to be placed in new service
+		// 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 (shouldScheduleNewService(service, (pos == -1 ?
+				service.getActions().size() : pos))) {
+			
 			ESBService whileService=
 				esbModel.createService(service.getCategory(),
 					esbModel.getUniqueServiceName(service.getCategory(),
@@ -113,7 +119,7 @@
 			schedule.setDestination(whileService.getCategory(),
 					whileService.getName(),
 					whileElem.getRoles().contains(context.getRole()));
-			((ESBService)context.getParent()).addAction(schedule, -1);
+			service.addAction(schedule, pos);
 
 			context.setParent(whileService);
 			
@@ -221,7 +227,18 @@
 		action.addPath(exitService.getCategory(),
 				exitService.getName(), true,
 				new java.util.Vector<MessageSignature>(), -1);
-			
+
+		// If reference provided, then move subsequent activities
+		// to the 'exit service'
+		if (pos != -1) {
+			for (int i=pos+1; i < original.getActions().size();) {
+				ESBAction act=original.getActions().get(i);
+				original.getActions().remove(i);
+				
+				exitService.addAction(act, -1);
+			}
+		}
+
 		return(true);
 	}
 	

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/RunModelChangeRuleTest.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/RunModelChangeRuleTest.java	2008-09-29 14:57:24 UTC (rev 352)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/RunModelChangeRuleTest.java	2008-09-30 11:09:07 UTC (rev 353)
@@ -145,4 +145,143 @@
 							newService.getName());
 		}
 	}		
+
+	public void testInsertPerformActionMiddle() {
+		String runName="subconv";
+		
+		RunModelChangeRule rule=new RunModelChangeRule();
+		
+		TestESBLanguageModel model=new TestESBLanguageModel();
+		
+		TestESBService service=(TestESBService)
+			model.createService("testcategory", "testname");
+		
+		model.addService(service);
+		
+		TestESBAction act1=new TestESBAction();
+		act1.setInitiator(true);
+		act1.setSessionBased(true);
+		service.addAction(act1, -1);
+		
+		TestESBAction act2=new TestESBAction();
+		service.addAction(act2, -1);
+		
+		ModelObject moref=new ModelObject() {};
+		moref.getSource().setObject(act2);		
+		
+		TestModelChangeContext context=new TestModelChangeContext();
+		context.setParent(service);
+		
+		Role role=new Role();
+		role.setName("role1");
+		
+		context.setRole(role);
+		
+		ConversationModel cm=new ConversationModel();
+		
+		Namespace ns=new Namespace();
+		cm.setNamespace(ns);
+		ns.setName("ns");
+		
+		Conversation conv=new Conversation();
+		ModelName mname=new ModelName();
+		mname.setLocatedRole(role);
+		conv.setModelName(mname);
+		
+		cm.setConversation(conv);
+		
+		Conversation subconv=new Conversation();
+		ModelName submname=new ModelName();
+		submname.setName(runName);
+		submname.setLocatedRole(role);
+		subconv.setModelName(mname);
+		
+		Run mobj=new Run();
+		mobj.setInlineDefinition(subconv);
+		
+		conv.getBlock().getContents().add(mobj);
+		
+		
+		if (rule.insert(context, model, mobj, moref) == false) {
+			fail("Failed to insert");
+		}
+		
+		// Check actions
+		if (service.getActions().size() != 2) {
+			fail("Expecting 2 action: "+service.getActions().size());
+		}
+		
+		if (service.getActions().get(0) != act1) {
+			fail("Expecting test ESB action 1: "+service.getActions().get(0));
+		}
+		
+		if ((service.getActions().get(1) instanceof PerformAction) == false) {
+			fail("Action was not PerformAction: "+service.getActions().get(1));
+		}
+		
+		if (model.getServices().size() != 2) {
+			fail("Two services expected: "+model.getServices().size());
+		}
+		
+		PerformAction action=(PerformAction)service.getActions().get(1);
+		
+		ESBService newService=null;
+		java.util.Iterator<ESBService> iter=model.getServices().iterator();
+		while (newService == null && iter.hasNext()) {
+			ESBService s=iter.next();
+			
+			if (s != service) {
+				newService = s;
+			}
+		}
+		
+		if (newService == null) {
+			fail("Other service not found");
+		}
+		
+		// Check details
+		if (ConversationUtil.getServiceCategory(mobj.getDefinition()).equals(action.getPropertyValue(
+				PerformAction.SERVICE_CATEGORY)) == false) {
+			fail("Perform service category '"+
+					action.getPropertyValue(
+							PerformAction.SERVICE_CATEGORY)+
+							"' invalid, expecting: "+
+							ConversationUtil.getServiceCategory(mobj.getDefinition()));
+		}
+
+		if (ConversationUtil.getServiceName(mobj.getDefinition()).equals(action.getPropertyValue(
+				PerformAction.SERVICE_NAME)) == false) {
+			fail("Perform service name '"+
+					action.getPropertyValue(
+							PerformAction.SERVICE_NAME)+
+							"' invalid, expecting: "+
+							ConversationUtil.getServiceName(mobj.getDefinition()));
+		}
+		if (newService.getCategory().equals(action.getPropertyValue(
+				PerformAction.RETURN_SERVICE_CATEGORY)) == false) {
+			fail("Perform return service category '"+
+					action.getPropertyValue(
+							PerformAction.RETURN_SERVICE_CATEGORY)+
+							"' invalid, expecting: "+
+							newService.getCategory());
+		}
+
+		if (newService.getName().equals(action.getPropertyValue(
+				PerformAction.RETURN_SERVICE_NAME)) == false) {
+			fail("Perform return service name '"+
+					action.getPropertyValue(
+							PerformAction.RETURN_SERVICE_NAME)+
+							"' invalid, expecting: "+
+							newService.getName());
+		}
+
+		if (newService.getActions().size() != 1) {
+			fail("Return service should have 1 action: "+newService.getActions().size());
+		}
+		
+		if (newService.getActions().get(0) != act2) {
+			fail("Expecting test ESB action 2: "+newService.getActions().get(0));
+		}
+		
+	}		
 }

Added: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/SpawnModelChangeRuleTest.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/SpawnModelChangeRuleTest.java	                        (rev 0)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/SpawnModelChangeRuleTest.java	2008-09-30 11:09:07 UTC (rev 353)
@@ -0,0 +1,220 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ */
+package org.jboss.tools.overlord.cdl.jbossesb.model.change;
+
+import junit.framework.TestCase;
+
+import org.jboss.tools.overlord.cdl.jbossesb.model.*;
+import org.jboss.tools.overlord.cdl.jbossesb.model.actions.*;
+import org.jboss.tools.overlord.cdl.jbossesb.model.change.RunModelChangeRule;
+import org.jboss.tools.overlord.cdl.jbossesb.model.util.ConversationUtil;
+import org.jboss.tools.overlord.cdl.jbossesb.model.util.InteractionUtil;
+import org.scribble.model.*;
+import org.scribble.model.change.*;
+import org.scribble.conversation.model.*;
+
+public class SpawnModelChangeRuleTest extends TestCase {
+
+	public void testInsertPerformAction() {
+		String runName="subconv";
+		
+		SpawnModelChangeRule rule=new SpawnModelChangeRule();
+		
+		TestESBLanguageModel model=new TestESBLanguageModel();
+		
+		TestESBService service=(TestESBService)
+			model.createService("testcategory", "testname");
+		
+		model.addService(service);
+		
+		
+		TestModelChangeContext context=new TestModelChangeContext();
+		context.setParent(service);
+		
+		Role role=new Role();
+		role.setName("role1");
+		
+		context.setRole(role);
+		
+		ConversationModel cm=new ConversationModel();
+		
+		Namespace ns=new Namespace();
+		cm.setNamespace(ns);
+		ns.setName("ns");
+		
+		Conversation conv=new Conversation();
+		ModelName mname=new ModelName();
+		mname.setLocatedRole(role);
+		conv.setModelName(mname);
+		
+		cm.setConversation(conv);
+		
+		Conversation subconv=new Conversation();
+		ModelName submname=new ModelName();
+		submname.setName(runName);
+		submname.setLocatedRole(role);
+		subconv.setModelName(mname);
+		
+		Spawn mobj=new Spawn();
+		mobj.setInlineDefinition(subconv);
+		
+		conv.getBlock().getContents().add(mobj);
+		
+		
+		if (rule.insert(context, model, mobj, null) == false) {
+			fail("Failed to insert");
+		}
+		
+		// Check actions
+		if (service.getActions().size() != 1) {
+			fail("Expecting 1 action: "+service.getActions().size());
+		}
+		
+		if ((service.getActions().get(0) instanceof PerformAction) == false) {
+			fail("Action was not PerformAction: "+service.getActions().get(0));
+		}
+		
+		if (model.getServices().size() != 1) {
+			fail("One service expected: "+model.getServices().size());
+		}
+		
+		PerformAction action=(PerformAction)service.getActions().get(0);
+		
+		// Check details
+		if (ConversationUtil.getServiceCategory(mobj.getDefinition()).equals(action.getPropertyValue(
+				PerformAction.SERVICE_CATEGORY)) == false) {
+			fail("Perform service category '"+
+					action.getPropertyValue(
+							PerformAction.SERVICE_CATEGORY)+
+							"' invalid, expecting: "+
+							ConversationUtil.getServiceCategory(mobj.getDefinition()));
+		}
+
+		if (ConversationUtil.getServiceName(mobj.getDefinition()).equals(action.getPropertyValue(
+				PerformAction.SERVICE_NAME)) == false) {
+			fail("Perform service name '"+
+					action.getPropertyValue(
+							PerformAction.SERVICE_NAME)+
+							"' invalid, expecting: "+
+							ConversationUtil.getServiceName(mobj.getDefinition()));
+		}
+	}		
+
+	public void testInsertPerformActionMiddle() {
+		String runName="subconv";
+		
+		SpawnModelChangeRule rule=new SpawnModelChangeRule();
+		
+		TestESBLanguageModel model=new TestESBLanguageModel();
+		
+		TestESBService service=(TestESBService)
+			model.createService("testcategory", "testname");
+		
+		model.addService(service);
+		
+		TestESBAction act1=new TestESBAction();
+		act1.setInitiator(true);
+		act1.setSessionBased(true);
+		service.addAction(act1, -1);
+		
+		TestESBAction act2=new TestESBAction();
+		service.addAction(act2, -1);
+		
+		ModelObject moref=new ModelObject() {};
+		moref.getSource().setObject(act2);		
+		
+		TestModelChangeContext context=new TestModelChangeContext();
+		context.setParent(service);
+		
+		Role role=new Role();
+		role.setName("role1");
+		
+		context.setRole(role);
+		
+		ConversationModel cm=new ConversationModel();
+		
+		Namespace ns=new Namespace();
+		cm.setNamespace(ns);
+		ns.setName("ns");
+		
+		Conversation conv=new Conversation();
+		ModelName mname=new ModelName();
+		mname.setLocatedRole(role);
+		conv.setModelName(mname);
+		
+		cm.setConversation(conv);
+		
+		Conversation subconv=new Conversation();
+		ModelName submname=new ModelName();
+		submname.setName(runName);
+		submname.setLocatedRole(role);
+		subconv.setModelName(mname);
+		
+		Spawn mobj=new Spawn();
+		mobj.setInlineDefinition(subconv);
+		
+		conv.getBlock().getContents().add(mobj);
+		
+		
+		if (rule.insert(context, model, mobj, moref) == false) {
+			fail("Failed to insert");
+		}
+		
+		// Check actions
+		if (service.getActions().size() != 3) {
+			fail("Expecting 3 action: "+service.getActions().size());
+		}
+		
+		if (service.getActions().get(0) != act1) {
+			fail("Expecting test ESB action 1: "+service.getActions().get(0));
+		}
+		
+		if ((service.getActions().get(1) instanceof PerformAction) == false) {
+			fail("Action was not PerformAction: "+service.getActions().get(1));
+		}
+		
+		if (service.getActions().get(2) != act2) {
+			fail("Expecting test ESB action 2: "+service.getActions().get(2));
+		}
+		
+		if (model.getServices().size() != 1) {
+			fail("One services expected: "+model.getServices().size());
+		}
+		
+		PerformAction action=(PerformAction)service.getActions().get(1);
+		
+		// Check details
+		if (ConversationUtil.getServiceCategory(mobj.getDefinition()).equals(action.getPropertyValue(
+				PerformAction.SERVICE_CATEGORY)) == false) {
+			fail("Perform service category '"+
+					action.getPropertyValue(
+							PerformAction.SERVICE_CATEGORY)+
+							"' invalid, expecting: "+
+							ConversationUtil.getServiceCategory(mobj.getDefinition()));
+		}
+
+		if (ConversationUtil.getServiceName(mobj.getDefinition()).equals(action.getPropertyValue(
+				PerformAction.SERVICE_NAME)) == false) {
+			fail("Perform service name '"+
+					action.getPropertyValue(
+							PerformAction.SERVICE_NAME)+
+							"' invalid, expecting: "+
+							ConversationUtil.getServiceName(mobj.getDefinition()));
+		}
+	}		
+}

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/WhileModelChangeRuleTest.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/WhileModelChangeRuleTest.java	2008-09-29 14:57:24 UTC (rev 352)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/WhileModelChangeRuleTest.java	2008-09-30 11:09:07 UTC (rev 353)
@@ -430,7 +430,10 @@
 		model.addService(service);
 		
 		// Make session based service
-		service.setSessionBased(true);
+		TestESBAction act1=new TestESBAction();
+		act1.setInitiator(true);
+		act1.setSessionBased(true);
+		service.addAction(act1, -1);
 		
 		TestModelChangeContext context=new TestModelChangeContext();
 		context.setParent(service);
@@ -478,16 +481,20 @@
 		}
 		
 		// Check actions
-		if (service.getActions().size() != 1) {
+		if (service.getActions().size() != 2) {
 			fail("Expecting 1 action: "+service.getActions().size());
 		}
 		
-		if ((service.getActions().get(0) instanceof ScheduleStateAction) == false) {
-			fail("Action was not ScheduleStateAction: "+service.getActions().get(0));
+		if (service.getActions().get(0) != act1) {
+			fail("Action was not test ESB action: "+service.getActions().get(0));
 		}
 		
+		if ((service.getActions().get(1) instanceof ScheduleStateAction) == false) {
+			fail("Action was not ScheduleStateAction: "+service.getActions().get(1));
+		}
+		
 		ScheduleStateAction whileSchedule=(ScheduleStateAction)
-						service.getActions().get(0);
+						service.getActions().get(1);
 		
 		if (model.getServices().size() != 4) {
 			fail("Four services expected: "+model.getServices().size());
@@ -581,4 +588,119 @@
 					"' not expected: "+s2.getName());
 		}
 	}
+
+	public void testInsertWhileMiddleAction() {
+		WhileModelChangeRule rule=new WhileModelChangeRule();
+		
+		TestESBLanguageModel model=new TestESBLanguageModel();
+		
+		TestESBService service=(TestESBService)
+			model.createService("testcategory", "testname");
+		
+		model.addService(service);
+		
+		// Make session based service
+		TestESBAction act1=new TestESBAction();
+		act1.setInitiator(true);
+		act1.setSessionBased(true);
+		service.addAction(act1, -1);
+		
+		TestESBAction act2=new TestESBAction();
+		service.addAction(act2, -1);
+		
+		ModelObject moref=new ModelObject() {};
+		moref.getSource().setObject(act2);		
+		
+		TestModelChangeContext context=new TestModelChangeContext();
+		context.setParent(service);
+		
+		java.util.Set<Interaction> interactions=new java.util.HashSet<Interaction>();
+		
+		TestLookaheadAnalyser tla=new TestLookaheadAnalyser();
+		tla.setInteractions(interactions);
+		
+		Role role=new Role();
+		role.setName("role1");
+		
+		Interaction interaction=new Interaction();
+		interaction.setToRole(role);
+		
+		TypeReference ref=new TypeReference();
+		ref.setNamespace("ns");
+		ref.setLocalpart("lp");
+		
+		MessageSignature msig=new MessageSignature();
+		interaction.setMessageSignature(msig);
+		msig.getTypes().add(ref);
+		
+		interactions.add(interaction);
+		
+		org.scribble.extensions.TestSingleExtensionRegistry reg=
+			new org.scribble.extensions.TestSingleExtensionRegistry(tla);
+		org.scribble.extensions.RegistryFactory.setRegistry(reg);
+				
+		context.setRole(role);
+		
+		Conversation conv=new Conversation();
+		ModelName mname=new ModelName();
+		conv.setModelName(mname);
+		
+		mname.setLocatedRole(role);
+		
+		While mobj=new While();
+		conv.getBlock().getContents().add(mobj);
+		
+		mobj.getRoles().add(role);
+				
+		if (rule.insert(context, model, mobj, moref) == false) {
+			fail("Failed to insert");
+		}
+		
+		// Check actions
+		if (service.getActions().size() != 2) {
+			fail("Expecting 1 action: "+service.getActions().size());
+		}
+		
+		if (service.getActions().get(0) != act1) {
+			fail("Action was not test ESB action: "+service.getActions().get(0));
+		}
+		
+		if ((service.getActions().get(1) instanceof ScheduleStateAction) == false) {
+			fail("Action was not ScheduleStateAction: "+service.getActions().get(1));
+		}
+		
+		ScheduleStateAction whileSchedule=(ScheduleStateAction)
+						service.getActions().get(1);
+		
+		if (model.getServices().size() != 4) {
+			fail("Four services expected: "+model.getServices().size());
+		}
+		
+		ESBService whileService=null;
+		ESBService s1=null;
+		ESBService s2=null;
+		java.util.Iterator<ESBService> iter=model.getServices().iterator();
+		
+		while ((s1 == null || s2 == null || whileService == null) && 
+						iter.hasNext()) {
+			ESBService serv = iter.next();
+			if (serv.getName().endsWith("__0")) {
+				whileService = serv;
+			}
+			if (serv.getName().endsWith("__1")) {
+				s1 = serv;
+			}
+			if (serv.getName().endsWith("__2")) {
+				s2 = serv;
+			}
+		}
+		
+		if (s2.getActions().size() != 1) {
+			fail("Expecting 1 action in exit service: "+s2.getActions().size());
+		}
+		
+		if (s2.getActions().get(0) != act2) {
+			fail("Action in exit is not test ESB action: "+s2.getActions().get(0));
+		}
+	}
 }




More information about the overlord-commits mailing list