[overlord-commits] Overlord SVN: r226 - in cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb: src/java/org/jboss/tools/overlord/jbossesb/model/actions and 3 other directories.

overlord-commits at lists.jboss.org overlord-commits at lists.jboss.org
Fri Aug 8 08:01:56 EDT 2008


Author: objectiser
Date: 2008-08-08 08:01:56 -0400 (Fri, 08 Aug 2008)
New Revision: 226

Added:
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/SpawnModelChangeRule.java
Modified:
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/META-INF/MANIFEST.MF
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/AbstractESBAction.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/PerformAction.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/IfModelChangeRule.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/ParallelModelChangeRule.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/WhenModelChangeRule.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/WhileModelChangeRule.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/PerformActionTest.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/IfModelChangeRuleTest.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/ParallelModelChangeRuleTest.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/WhenModelChangeRuleTest.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/WhileModelChangeRuleTest.java
Log:
Add 'ScheduleStateAction' into grouping constructs to either specify a join service descriptor or iterate back to the while service descriptor (in the case of the WhileAction).

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/META-INF/MANIFEST.MF
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/META-INF/MANIFEST.MF	2008-08-07 17:15:54 UTC (rev 225)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/META-INF/MANIFEST.MF	2008-08-08 12:01:56 UTC (rev 226)
@@ -21,5 +21,10 @@
   org.jboss.tools.overlord.jbossesb.model.change.LanguageToConversationModelChangeRule,
   org.jboss.tools.overlord.jbossesb.model.change.ConversationModelChangeRule,
   org.jboss.tools.overlord.jbossesb.model.change.ConversationInteractionModelChangeRule,
-  org.jboss.tools.overlord.jbossesb.model.change.IfModelChangeRule
+  org.jboss.tools.overlord.jbossesb.model.change.IfModelChangeRule,
+  org.jboss.tools.overlord.jbossesb.model.change.ParallelModelChangeRule,
+  org.jboss.tools.overlord.jbossesb.model.change.RunModelChangeRule,
+  org.jboss.tools.overlord.jbossesb.model.change.SpawnModelChangeRule,
+  org.jboss.tools.overlord.jbossesb.model.change.WhenModelChangeRule,
+  org.jboss.tools.overlord.jbossesb.model.change.WhileModelChangeRule
 Bundle-ActivationPolicy: lazy

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/AbstractESBAction.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/AbstractESBAction.java	2008-08-07 17:15:54 UTC (rev 225)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/AbstractESBAction.java	2008-08-08 12:01:56 UTC (rev 226)
@@ -353,6 +353,32 @@
 	}
 	
 	/**
+	 * This method determines the property value, associated
+	 * with the supplied name, is defined.
+	 * 
+	 * @param property The property name
+	 * @return Whether the property has been defined
+	 */
+	public boolean hasProperty(String property) {
+		boolean ret=false;
+		
+		if (m_action != null) {
+			org.w3c.dom.NodeList nl=m_action.getChildNodes();
+			
+			for (int i=0; ret == false && i < nl.getLength(); i++) {
+				if (nl.item(i) instanceof org.w3c.dom.Element &&
+								nl.item(i).getNodeName().equals(PROPERTY_ELEMENT) &&
+					((org.w3c.dom.Element)nl.item(i)).getAttribute(NAME_ATTR).
+										equals(property)) {
+					ret = true;
+				}
+			}
+		}
+		
+		return(ret);
+	}
+	
+	/**
 	 * This method returns the element associated with the
 	 * requested property. If the property does not exist, then
 	 * it will be created.

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/PerformAction.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/PerformAction.java	2008-08-07 17:15:54 UTC (rev 225)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/PerformAction.java	2008-08-08 12:01:56 UTC (rev 226)
@@ -161,7 +161,7 @@
 		Compose elem=null;
 		
 		// Check if perform is asynchronous
-		if (getAction().hasAttribute(RETURN_SERVICE_NAME)) {
+		if (hasProperty(RETURN_SERVICE_NAME)) {
 			elem = new Run();
 		} else {
 			elem = new Spawn();

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/IfModelChangeRule.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/IfModelChangeRule.java	2008-08-07 17:15:54 UTC (rev 225)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/IfModelChangeRule.java	2008-08-08 12:01:56 UTC (rev 226)
@@ -81,6 +81,13 @@
 		ESBService service=(ESBService)context.getParent();
 		If ifElem=(If)mobj;
 		
+		ESBService joinService=
+			esbModel.createService(service.getCategory(),
+					esbModel.getUniqueServiceName(service.getCategory(),
+								service.getName()));
+		
+		esbModel.addService(joinService);
+		
 		// Check if should be an 'if' or a 'switch' action
 		if (ifElem.getRoles().contains(context.getRole())) {
 			
@@ -110,6 +117,13 @@
 				ifAction.addPath((i==0 ? IfAction.IF : IfAction.ELSEIF),
 						subService.getCategory(), subService.getName(),
 						immediate, null, i);
+				
+				ScheduleStateAction schedule=
+					new ScheduleStateAction((ESBService)context.getParent());
+				
+				schedule.setDestination(joinService.getCategory(),
+						joinService.getName(), true);
+				((ESBService)context.getParent()).addAction(schedule, -1);
 			}
 			
 			if (ifElem.getElseBlock() != null) {
@@ -133,6 +147,13 @@
 				ifAction.addPath(IfAction.ELSE,
 						subService.getCategory(), subService.getName(),
 						immediate, null, -1);
+				
+				ScheduleStateAction schedule=
+					new ScheduleStateAction((ESBService)context.getParent());
+				
+				schedule.setDestination(joinService.getCategory(),
+						joinService.getName(), true);
+				((ESBService)context.getParent()).addAction(schedule, -1);
 			}
 		} else {
 			
@@ -177,6 +198,13 @@
 				
 				switchAction.addCase(subService.getCategory(),
 						subService.getName(), interactions, i);
+				
+				ScheduleStateAction schedule=
+					new ScheduleStateAction((ESBService)context.getParent());
+				
+				schedule.setDestination(joinService.getCategory(),
+						joinService.getName(), true);
+				((ESBService)context.getParent()).addAction(schedule, -1);
 
 				if (interactions != null) {
 					java.util.Iterator<Interaction> iter=interactions.iterator();
@@ -222,6 +250,13 @@
 				switchAction.addCase(subService.getCategory(),
 						subService.getName(), interactions, -1);
 
+				ScheduleStateAction schedule=
+					new ScheduleStateAction((ESBService)context.getParent());
+				
+				schedule.setDestination(joinService.getCategory(),
+						joinService.getName(), true);
+				((ESBService)context.getParent()).addAction(schedule, -1);
+
 				if (interactions != null) {
 					java.util.Iterator<Interaction> iter=interactions.iterator();
 					
@@ -270,6 +305,8 @@
 			}
 		}
 		
+		context.setParent(joinService);
+		
 		return(true);
 	}
 	

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/ParallelModelChangeRule.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/ParallelModelChangeRule.java	2008-08-07 17:15:54 UTC (rev 225)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/ParallelModelChangeRule.java	2008-08-08 12:01:56 UTC (rev 226)
@@ -80,6 +80,15 @@
 		ESBService service=(ESBService)context.getParent();
 		Parallel parallel=(Parallel)mobj;
 		
+		// Create the join service
+		ESBService joinService=
+			esbModel.createService(service.getCategory(),
+				esbModel.getUniqueServiceName(service.getCategory(),
+						service.getName()));
+		
+		esbModel.addService(joinService);
+
+		// Create and configure the parallel action
 		ParallelAction parAction=new ParallelAction(service);
 		
 		service.addAction(parAction, position);
@@ -99,6 +108,13 @@
 			for (int j=0; j < b.getContents().size(); j++) {
 				context.insert(model, b.getContents().get(j), j);
 			}
+			
+			ScheduleStateAction schedule=
+				new ScheduleStateAction((ESBService)context.getParent());
+			
+			schedule.setDestination(joinService.getCategory(),
+					joinService.getName(), true);
+			((ESBService)context.getParent()).addAction(schedule, -1);
 
 			boolean immediate=true;
 			
@@ -126,14 +142,6 @@
 					subService.getName(), immediate, false, i);
 		}
 		
-		// Create the join service
-		ESBService joinService=
-			esbModel.createService(service.getCategory(),
-				esbModel.getUniqueServiceName(service.getCategory(),
-						service.getName()));
-		
-		esbModel.addService(joinService);
-
 		context.setParent(joinService);
 		
 		parAction.addPath(joinService.getCategory(),

Added: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/SpawnModelChangeRule.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/SpawnModelChangeRule.java	                        (rev 0)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/SpawnModelChangeRule.java	2008-08-08 12:01:56 UTC (rev 226)
@@ -0,0 +1,94 @@
+/*
+ * 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.jbossesb.model.change;
+
+//import java.util.logging.Logger;
+
+import org.jboss.tools.overlord.jbossesb.model.*;
+import org.jboss.tools.overlord.jbossesb.model.actions.*;
+import org.jboss.tools.overlord.jbossesb.model.util.*;
+import org.scribble.model.*;
+import org.scribble.model.change.*;
+import org.scribble.conversation.model.*;
+import org.scribble.extensions.*;
+
+/**
+ * This is the model change rule for the Spawn composition construct.
+ */
+ at RegistryInfo(extension=ModelChangeRule.class,notation=ESBLanguageModel.JBOSSESB_NOTATION)
+public class SpawnModelChangeRule extends AbstractModelChangeRule {
+
+	/**
+	 * This method determines whether the rule is appropriate
+	 * for the supplied type of model, parent (in the context) and
+	 * model object.
+	 * 
+	 * @param context The context
+	 * @param model The model
+	 * @param mobj The model object causing the change
+	 * @return Whether the rule supports the supplied information
+	 */
+	@Override
+	protected boolean isChangeSupported(ModelChangeContext context,
+					Model model, ModelObject mobj) {
+		boolean ret=false;
+		
+		if (mobj instanceof Spawn &&
+				context.getParent() instanceof ESBService &&
+				model instanceof ESBLanguageModel) {
+			ret = true;
+		}
+		
+		return(ret);
+	}
+
+	/**
+	 * This method adds a new model object, within a
+	 * parent model object, with the details supplied in
+	 * another model object. The supplied model object
+	 * will usually be from a different model representation
+	 * (e.g. due to a merge), so the details will be
+	 * copied and placed in the representation associated
+	 * with the supplied model and parent model object.
+	 * 
+	 * @param context The context
+	 * @param model The model being changed
+	 * @param mobj The model object details to be inserted
+	 * @param position The position, where relevant
+	 * @return Whether the change has been applied
+	 */
+	@Override
+	public boolean insert(ModelChangeContext context,
+				Model model, ModelObject mobj, int position) {
+		ESBService service=(ESBService)context.getParent();
+		Spawn spawn=(Spawn)mobj;
+		
+		PerformAction action=new PerformAction(service);
+		
+		service.addAction(action, position);
+		
+		String category=ConversationUtil.getServiceCategory(spawn.getDefinition());		
+		String name=ConversationUtil.getServiceName(spawn.getDefinition());
+
+		action.setDestination(category, name);
+			
+		return(true);
+	}
+	
+	//private static Logger logger = Logger.getLogger("org.jboss.tools.overlord.jbossesb.model.change");
+}

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/WhenModelChangeRule.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/WhenModelChangeRule.java	2008-08-07 17:15:54 UTC (rev 225)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/WhenModelChangeRule.java	2008-08-08 12:01:56 UTC (rev 226)
@@ -80,6 +80,13 @@
 		ESBService service=(ESBService)context.getParent();
 		When when=(When)mobj;
 		
+		ESBService joinService=
+			esbModel.createService(service.getCategory(),
+					esbModel.getUniqueServiceName(service.getCategory(),
+								service.getName()));
+		
+		esbModel.addService(joinService);
+		
 		// Check if context role is decision maker
 		if (when.getRoles().contains(context.getRole())) {
 			WhenAction action=new WhenAction(service);
@@ -102,6 +109,14 @@
 					context.insert(model, b.getContents().get(j), j);
 				}
 	
+				ScheduleStateAction schedule=
+					new ScheduleStateAction((ESBService)context.getParent());
+				
+				schedule.setDestination(joinService.getCategory(),
+						joinService.getName(), true);
+				
+				((ESBService)context.getParent()).addAction(schedule, -1);
+
 				action.addPath(subService.getCategory(),
 						subService.getName(), i);
 			}
@@ -149,6 +164,14 @@
 				switchAction.addCase(subService.getCategory(),
 						subService.getName(), interactions, i);
 
+				ScheduleStateAction schedule=
+					new ScheduleStateAction((ESBService)context.getParent());
+				
+				schedule.setDestination(joinService.getCategory(),
+						joinService.getName(), true);
+				
+				((ESBService)context.getParent()).addAction(schedule, -1);				
+
 				if (interactions != null) {
 					java.util.Iterator<Interaction> iter=interactions.iterator();
 					
@@ -197,6 +220,8 @@
 			}
 		}
 			
+		context.setParent(joinService);
+
 		return(true);
 	}
 	

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/WhileModelChangeRule.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/WhileModelChangeRule.java	2008-08-07 17:15:54 UTC (rev 225)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/WhileModelChangeRule.java	2008-08-08 12:01:56 UTC (rev 226)
@@ -80,6 +80,34 @@
 		ESBService service=(ESBService)context.getParent();
 		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()) {
+			ESBService whileService=
+				esbModel.createService(service.getCategory(),
+					esbModel.getUniqueServiceName(service.getCategory(),
+							service.getName()));
+			
+			esbModel.addService(whileService);
+			
+			ScheduleStateAction schedule=
+				new ScheduleStateAction((ESBService)context.getParent());
+			
+			// 'immediate' flag set depending on whether the role
+			// is an initiator of the while. If not, then the
+			// immediate flag is false, which means the loop will be
+			// evaluated based on the next received message
+			schedule.setDestination(whileService.getCategory(),
+					whileService.getName(),
+					whileElem.getRoles().contains(context.getRole()));
+			((ESBService)context.getParent()).addAction(schedule, -1);
+
+			context.setParent(whileService);
+			
+			service = whileService;
+		}
+		
 		WhileAction action=new WhileAction(service);
 		
 		service.addAction(action, position);
@@ -91,13 +119,29 @@
 		
 		esbModel.addService(subService);
 
+		// Configure the while loop service
 		context.setParent(subService);
 		
 		for (int j=0; j < whileElem.getBlock().getContents().size(); j++) {
 			context.insert(model, whileElem.getBlock().getContents().get(j), j);
 		}
 
+		// Need to insert a 'ScheduleStateAction' to return back
+		// to the 'WhileAction', to re-evaluate the expression
+		ScheduleStateAction schedule=
+			new ScheduleStateAction((ESBService)context.getParent());
 		
+		// 'immediate' flag set depending on whether the role
+		// is an initiator of the while. If not, then the
+		// immediate flag is false, which means the loop will be
+		// evaluated based on the next received message
+		schedule.setDestination(service.getCategory(),
+				service.getName(),
+				whileElem.getRoles().contains(context.getRole()));
+		((ESBService)context.getParent()).addAction(schedule, -1);
+		
+		// Check whether message types need to be defined in
+		// place of an expression
 		java.util.List<MessageSignature> messageTypes=
 			new java.util.Vector<MessageSignature>();
 

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/PerformActionTest.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/PerformActionTest.java	2008-08-07 17:15:54 UTC (rev 225)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/PerformActionTest.java	2008-08-08 12:01:56 UTC (rev 226)
@@ -209,7 +209,7 @@
 		}
 	}
 	
-	public void testConvert() {
+	public void testConvertRun() {
 		TestESBService service=new TestESBService();
 
 		java.util.Map<String,String> props=new java.util.Hashtable<String,String>();
@@ -278,7 +278,63 @@
 			fail("Subsequent activity after run was not act2");
 		}
 	}
-	
+
+	public void testConvertSpawn() {
+		TestESBService service=new TestESBService();
+
+		java.util.Map<String,String> props=new java.util.Hashtable<String,String>();
+		props.put(PerformAction.SERVICE_CATEGORY, "cat1");
+		props.put(PerformAction.SERVICE_NAME, "name1");
+		
+		org.w3c.dom.Element elem=ESBActionTestUtil.getAction(null, props, null);
+		
+		TestESBService other1=new TestESBService();
+		other1.setCategory("cat1");
+		other1.setName("name1");
+		
+		TestActivity act1=new TestActivity();
+		other1.getContents().add(act1);
+		
+		TestESBLanguageModel model=new TestESBLanguageModel();
+		model.addService(other1);
+		model.addService(service);
+		
+		service.setModel(model);
+		
+		PerformAction action=new PerformAction(service, elem);
+		action.initializeLinks();
+		
+		service.getActions().add(action);
+
+		java.util.List<Activity> activities=new java.util.Vector<Activity>();
+		
+		action.convert(activities, null);
+		
+		if (activities.size() != 1) {
+			fail("Expecting 1 activity, but got: "+activities.size());
+		}
+		
+		Activity act=activities.get(0);
+		
+		if ((act instanceof Spawn) == false) {
+			fail("Expecting a 'Spawn' activity");
+		}
+		
+		Spawn spawnAction=(Spawn)act;
+		
+		if (spawnAction.getDefinition() == null) {
+			fail("Run definition was null");
+		}
+		
+		if (spawnAction.getDefinition().getBlock().getContents().size() != 1) {
+			fail("Expecting one block activity: "+spawnAction.getDefinition().getBlock().getContents().size());
+		}
+		
+		if (spawnAction.getDefinition().getBlock().getContents().get(0) != act1) {
+			fail("Spawn model block should have 1 activity = act1");
+		}
+	}
+
 	public void testConvertNotExcludingEmptyPath() {
 		TestESBService service=new TestESBService();
 

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/IfModelChangeRuleTest.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/IfModelChangeRuleTest.java	2008-08-07 17:15:54 UTC (rev 225)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/IfModelChangeRuleTest.java	2008-08-08 12:01:56 UTC (rev 226)
@@ -65,8 +65,8 @@
 			fail("Action was not IfAction: "+service.getActions().get(0));
 		}
 		
-		if (model.getServices().size() != 2) {
-			fail("Two services expected: "+model.getServices().size());
+		if (model.getServices().size() != 3) {
+			fail("Three services expected: "+model.getServices().size());
 		}
 		
 		ESBService ifService=null;
@@ -148,25 +148,29 @@
 			fail("Action was not IfAction: "+service.getActions().get(0));
 		}
 		
-		if (model.getServices().size() != 4) {
-			fail("Four services expected: "+model.getServices().size());
+		if (model.getServices().size() != 5) {
+			fail("Five services expected: "+model.getServices().size());
 		}
 		
 		ESBService ifService=null;
 		ESBService elseIfService1=null;
 		ESBService elseIfService2=null;
+		ESBService join=null;
 		java.util.Iterator<ESBService> iter=model.getServices().iterator();
 		
 		while ((ifService == null || elseIfService1 == null ||
-					elseIfService2 == null) && iter.hasNext()) {
+					elseIfService2 == null || join==null) && iter.hasNext()) {
 			ESBService serv = iter.next();
 			if (serv.getName().endsWith("__0")) {
+				join = serv;
+			}
+			if (serv.getName().endsWith("__1")) {
 				ifService = serv;
 			}
-			if (serv.getName().endsWith("__1")) {
+			if (serv.getName().endsWith("__2")) {
 				elseIfService1 = serv;
 			}
-			if (serv.getName().endsWith("__2")) {
+			if (serv.getName().endsWith("__3")) {
 				elseIfService2 = serv;
 			}
 		}
@@ -195,6 +199,28 @@
 					"' not expected: "+ifService.getName());
 		}
 		
+		if (ifService.getActions().size() != 1) {
+			fail("Path(1) does not have 1 action: "+ifService.getActions().size());
+		}
+		
+		if ((ifService.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+ifService.getActions().get(0));
+		}
+		
+		ScheduleStateAction schedule=(ScheduleStateAction)ifService.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
+
 		elem=(org.w3c.dom.Element)paths.item(1);
 		
 		if (elem.getNodeName().equals("elseif") == false) {
@@ -211,6 +237,28 @@
 					"' not expected: "+elseIfService1.getName());
 		}
 		
+		if (elseIfService1.getActions().size() != 1) {
+			fail("Path(2) does not have 1 action: "+elseIfService1.getActions().size());
+		}
+		
+		if ((elseIfService1.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+elseIfService1.getActions().get(0));
+		}
+		
+		schedule=(ScheduleStateAction)elseIfService1.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
+
 		elem=(org.w3c.dom.Element)paths.item(2);
 		
 		if (elem.getNodeName().equals("elseif") == false) {
@@ -226,6 +274,28 @@
 			fail("Service name '"+elem.getAttribute("service-name")+
 					"' not expected: "+elseIfService2.getName());
 		}
+		
+		if (elseIfService2.getActions().size() != 1) {
+			fail("Path(3) does not have 1 action: "+elseIfService2.getActions().size());
+		}
+		
+		if ((elseIfService2.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+elseIfService2.getActions().get(0));
+		}
+		
+		schedule=(ScheduleStateAction)elseIfService2.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
 	}
 
 	public void testInsertIfElseAction() {
@@ -269,21 +339,25 @@
 			fail("Action was not IfAction: "+service.getActions().get(0));
 		}
 		
-		if (model.getServices().size() != 3) {
-			fail("Three services expected: "+model.getServices().size());
+		if (model.getServices().size() != 4) {
+			fail("Four services expected: "+model.getServices().size());
 		}
 		
 		ESBService ifService=null;
 		ESBService elseService=null;
+		ESBService join=null;
 		java.util.Iterator<ESBService> iter=model.getServices().iterator();
 		
-		while ((ifService == null || elseService == null) &&
-							iter.hasNext()) {
+		while ((ifService == null || elseService == null ||
+				join == null) && iter.hasNext()) {
 			ESBService serv = iter.next();
 			if (serv.getName().endsWith("__0")) {
+				join = serv;
+			}
+			if (serv.getName().endsWith("__1")) {
 				ifService = serv;
 			}
-			if (serv.getName().endsWith("__1")) {
+			if (serv.getName().endsWith("__2")) {
 				elseService = serv;
 			}
 		}
@@ -312,6 +386,28 @@
 					"' not expected: "+ifService.getName());
 		}
 		
+		if (ifService.getActions().size() != 1) {
+			fail("Path(1) does not have 1 action: "+ifService.getActions().size());
+		}
+		
+		if ((ifService.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+ifService.getActions().get(0));
+		}
+		
+		ScheduleStateAction schedule=(ScheduleStateAction)ifService.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
+
 		elem=(org.w3c.dom.Element)paths.item(1);
 		
 		if (elem.getNodeName().equals("else") == false) {
@@ -327,6 +423,29 @@
 			fail("Service name '"+elem.getAttribute("service-name")+
 					"' not expected: "+elseService.getName());
 		}
+		
+		if (elseService.getActions().size() != 1) {
+			fail("Path(2) does not have 1 action: "+elseService.getActions().size());
+		}
+		
+		if ((elseService.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+elseService.getActions().get(0));
+		}
+		
+		schedule=(ScheduleStateAction)ifService.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
+
 	}
 
 	public void testInsertSwitchAction() {
@@ -374,8 +493,8 @@
 			fail("Action was not SwitchAction: "+service.getActions().get(0));
 		}
 		
-		if (model.getServices().size() != 2) {
-			fail("Two services expected: "+model.getServices().size());
+		if (model.getServices().size() != 3) {
+			fail("Three services expected: "+model.getServices().size());
 		}
 		
 		ESBService switchService=null;
@@ -464,25 +583,29 @@
 			fail("Action was not SwitchAction: "+service.getActions().get(0));
 		}
 		
-		if (model.getServices().size() != 4) {
-			fail("Four services expected: "+model.getServices().size());
+		if (model.getServices().size() != 5) {
+			fail("Five services expected: "+model.getServices().size());
 		}
 		
+		ESBService join=null;
 		ESBService caseService1=null;
 		ESBService caseService2=null;
 		ESBService caseService3=null;
 		java.util.Iterator<ESBService> iter=model.getServices().iterator();
 		
 		while ((caseService1 == null || caseService2 == null ||
-				caseService3 == null) && iter.hasNext()) {
+				caseService3 == null || join == null) && iter.hasNext()) {
 			ESBService serv = iter.next();
 			if (serv.getName().endsWith("__0")) {
+				join = serv;
+			}
+			if (serv.getName().endsWith("__1")) {
 				caseService1 = serv;
 			}
-			if (serv.getName().endsWith("__1")) {
+			if (serv.getName().endsWith("__2")) {
 				caseService2 = serv;
 			}
-			if (serv.getName().endsWith("__2")) {
+			if (serv.getName().endsWith("__3")) {
 				caseService3 = serv;
 			}
 		}
@@ -511,6 +634,28 @@
 					"' not expected: "+caseService1.getName());
 		}
 		
+		if (caseService1.getActions().size() != 1) {
+			fail("Path(1) does not have 1 action: "+caseService1.getActions().size());
+		}
+		
+		if ((caseService1.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+caseService1.getActions().get(0));
+		}
+		
+		ScheduleStateAction schedule=(ScheduleStateAction)caseService1.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
+
 		elem=(org.w3c.dom.Element)paths.item(1);
 		
 		if (elem.getNodeName().equals("case") == false) {
@@ -527,6 +672,28 @@
 					"' not expected: "+caseService2.getName());
 		}
 		
+		if (caseService2.getActions().size() != 1) {
+			fail("Path(2) does not have 1 action: "+caseService2.getActions().size());
+		}
+		
+		if ((caseService2.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+caseService2.getActions().get(0));
+		}
+		
+		schedule=(ScheduleStateAction)caseService2.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
+
 		elem=(org.w3c.dom.Element)paths.item(2);
 		
 		if (elem.getNodeName().equals("case") == false) {
@@ -542,5 +709,27 @@
 			fail("Service name '"+elem.getAttribute("service-name")+
 					"' not expected: "+caseService3.getName());
 		}
+		
+		if (caseService3.getActions().size() != 1) {
+			fail("Path(3) does not have 1 action: "+caseService3.getActions().size());
+		}
+		
+		if ((caseService3.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+caseService3.getActions().get(0));
+		}
+		
+		schedule=(ScheduleStateAction)caseService3.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
 	}
 }

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/ParallelModelChangeRuleTest.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/ParallelModelChangeRuleTest.java	2008-08-07 17:15:54 UTC (rev 225)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/ParallelModelChangeRuleTest.java	2008-08-08 12:01:56 UTC (rev 226)
@@ -88,16 +88,16 @@
 					join == null) && iter.hasNext()) {
 			ESBService serv = iter.next();
 			if (serv.getName().endsWith("__0")) {
-				s1 = serv;
+				join = serv;
 			}
 			if (serv.getName().endsWith("__1")) {
-				s2 = serv;
+				s1 = serv;
 			}
 			if (serv.getName().endsWith("__2")) {
-				s3 = serv;
+				s2 = serv;
 			}
 			if (serv.getName().endsWith("__3")) {
-				join = serv;
+				s3 = serv;
 			}
 		}
 		
@@ -129,6 +129,28 @@
 			fail("path(1) immediate not set");
 		}
 		
+		if (s1.getActions().size() != 1) {
+			fail("Path(1) does not have 1 action: "+s1.getActions().size());
+		}
+		
+		if ((s1.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+s1.getActions().get(0));
+		}
+		
+		ScheduleStateAction schedule=(ScheduleStateAction)s1.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
+
 		elem=(org.w3c.dom.Element)paths.item(1);
 		
 		if (elem.getNodeName().equals("path") == false) {
@@ -149,6 +171,28 @@
 			fail("path(2) immediate not set");
 		}
 		
+		if (s2.getActions().size() != 1) {
+			fail("Path(2) does not have 1 action: "+s2.getActions().size());
+		}
+		
+		if ((s2.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+s2.getActions().get(0));
+		}
+		
+		schedule=(ScheduleStateAction)s2.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
+	
 		elem=(org.w3c.dom.Element)paths.item(2);
 		
 		if (elem.getNodeName().equals("path") == false) {
@@ -169,6 +213,28 @@
 			fail("path(3) immediate not set");
 		}
 		
+		if (s3.getActions().size() != 1) {
+			fail("Path(3) does not have 1 action: "+s3.getActions().size());
+		}
+		
+		if ((s3.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+s3.getActions().get(0));
+		}
+		
+		schedule=(ScheduleStateAction)s3.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}	
+
 		elem=(org.w3c.dom.Element)paths.item(3);
 		
 		if (elem.getNodeName().equals("join") == false) {
@@ -261,10 +327,10 @@
 		while ((s1 == null || join == null) && iter.hasNext()) {
 			ESBService serv = iter.next();
 			if (serv.getName().endsWith("__0")) {
-				s1 = serv;
+				join = serv;
 			}
 			if (serv.getName().endsWith("__1")) {
-				join = serv;
+				s1 = serv;
 			}
 		}
 		
@@ -387,10 +453,10 @@
 		while ((s1 == null || join == null) && iter.hasNext()) {
 			ESBService serv = iter.next();
 			if (serv.getName().endsWith("__0")) {
-				s1 = serv;
+				join = serv;
 			}
 			if (serv.getName().endsWith("__1")) {
-				join = serv;
+				s1 = serv;
 			}
 		}
 		

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/WhenModelChangeRuleTest.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/WhenModelChangeRuleTest.java	2008-08-07 17:15:54 UTC (rev 225)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/WhenModelChangeRuleTest.java	2008-08-08 12:01:56 UTC (rev 226)
@@ -75,25 +75,29 @@
 			fail("Action was not WhenAction: "+service.getActions().get(0));
 		}
 		
-		if (model.getServices().size() != 4) {
-			fail("Four services expected: "+model.getServices().size());
+		if (model.getServices().size() != 5) {
+			fail("Five services expected: "+model.getServices().size());
 		}
 		
 		ESBService s1=null;
 		ESBService s2=null;
 		ESBService s3=null;
+		ESBService join=null;
 		java.util.Iterator<ESBService> iter=model.getServices().iterator();
 		
 		while ((s1 == null || s2 == null ||
-					s3 == null) && iter.hasNext()) {
+					s3 == null || join == null) && iter.hasNext()) {
 			ESBService serv = iter.next();
 			if (serv.getName().endsWith("__0")) {
+				join = serv;
+			}
+			if (serv.getName().endsWith("__1")) {
 				s1 = serv;
 			}
-			if (serv.getName().endsWith("__1")) {
+			if (serv.getName().endsWith("__2")) {
 				s2 = serv;
 			}
-			if (serv.getName().endsWith("__2")) {
+			if (serv.getName().endsWith("__3")) {
 				s3 = serv;
 			}
 		}
@@ -122,6 +126,28 @@
 					"' not expected: "+s1.getName());
 		}
 		
+		if (s1.getActions().size() != 1) {
+			fail("Path(1) does not have 1 action: "+s1.getActions().size());
+		}
+		
+		if ((s1.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+s1.getActions().get(0));
+		}
+		
+		ScheduleStateAction schedule=(ScheduleStateAction)s1.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
+	
 		elem=(org.w3c.dom.Element)paths.item(1);
 		
 		if (elem.getNodeName().equals("when") == false) {
@@ -138,6 +164,28 @@
 					"' not expected: "+s2.getName());
 		}
 		
+		if (s2.getActions().size() != 1) {
+			fail("Path(2) does not have 1 action: "+s2.getActions().size());
+		}
+		
+		if ((s2.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+s2.getActions().get(0));
+		}
+		
+		schedule=(ScheduleStateAction)s2.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
+	
 		elem=(org.w3c.dom.Element)paths.item(2);
 		
 		if (elem.getNodeName().equals("when") == false) {
@@ -153,6 +201,28 @@
 			fail("Service name '"+elem.getAttribute("service-name")+
 					"' not expected: "+s3.getName());
 		}
+		
+		if (s3.getActions().size() != 1) {
+			fail("Path(3) does not have 1 action: "+s3.getActions().size());
+		}
+		
+		if ((s3.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+s3.getActions().get(0));
+		}
+		
+		schedule=(ScheduleStateAction)s3.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}	
 	}
 
 	public void testInsertSwitchAction() {
@@ -200,8 +270,8 @@
 			fail("Action was not SwitchAction: "+service.getActions().get(0));
 		}
 		
-		if (model.getServices().size() != 2) {
-			fail("Two services expected: "+model.getServices().size());
+		if (model.getServices().size() != 3) {
+			fail("Three services expected: "+model.getServices().size());
 		}
 		
 		ESBService switchService=null;
@@ -290,25 +360,29 @@
 			fail("Action was not SwitchAction: "+service.getActions().get(0));
 		}
 		
-		if (model.getServices().size() != 4) {
-			fail("Four services expected: "+model.getServices().size());
+		if (model.getServices().size() != 5) {
+			fail("Five services expected: "+model.getServices().size());
 		}
 		
+		ESBService join=null;
 		ESBService caseService1=null;
 		ESBService caseService2=null;
 		ESBService caseService3=null;
 		java.util.Iterator<ESBService> iter=model.getServices().iterator();
 		
 		while ((caseService1 == null || caseService2 == null ||
-				caseService3 == null) && iter.hasNext()) {
+				caseService3 == null || join == null) && iter.hasNext()) {
 			ESBService serv = iter.next();
 			if (serv.getName().endsWith("__0")) {
+				join = serv;
+			}
+			if (serv.getName().endsWith("__1")) {
 				caseService1 = serv;
 			}
-			if (serv.getName().endsWith("__1")) {
+			if (serv.getName().endsWith("__2")) {
 				caseService2 = serv;
 			}
-			if (serv.getName().endsWith("__2")) {
+			if (serv.getName().endsWith("__3")) {
 				caseService3 = serv;
 			}
 		}
@@ -337,6 +411,28 @@
 					"' not expected: "+caseService1.getName());
 		}
 		
+		if (caseService1.getActions().size() != 1) {
+			fail("Path(1) does not have 1 action: "+caseService1.getActions().size());
+		}
+		
+		if ((caseService1.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+caseService1.getActions().get(0));
+		}
+		
+		ScheduleStateAction schedule=(ScheduleStateAction)caseService1.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
+
 		elem=(org.w3c.dom.Element)paths.item(1);
 		
 		if (elem.getNodeName().equals("case") == false) {
@@ -353,6 +449,28 @@
 					"' not expected: "+caseService2.getName());
 		}
 		
+		if (caseService2.getActions().size() != 1) {
+			fail("Path(2) does not have 1 action: "+caseService2.getActions().size());
+		}
+		
+		if ((caseService2.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+caseService2.getActions().get(0));
+		}
+		
+		schedule=(ScheduleStateAction)caseService2.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
+
 		elem=(org.w3c.dom.Element)paths.item(2);
 		
 		if (elem.getNodeName().equals("case") == false) {
@@ -368,5 +486,27 @@
 			fail("Service name '"+elem.getAttribute("service-name")+
 					"' not expected: "+caseService3.getName());
 		}
+
+		if (caseService3.getActions().size() != 1) {
+			fail("Path(3) does not have 1 action: "+caseService3.getActions().size());
+		}
+		
+		if ((caseService3.getActions().get(0) instanceof ScheduleStateAction) == false) {
+			fail("Action not schedule state: "+caseService3.getActions().get(0));
+		}
+		
+		schedule=(ScheduleStateAction)caseService3.getActions().get(0);
+		
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+				equals(join.getCategory()) == false) {
+			fail("Schedule cateogry is not join '"+join.getCategory()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY));
+		}
+	
+		if (schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+				equals(join.getName()) == false) {
+			fail("Schedule name is not join '"+join.getName()+"': "+
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+		}
 	}
 }

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/WhileModelChangeRuleTest.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/WhileModelChangeRuleTest.java	2008-08-07 17:15:54 UTC (rev 225)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/change/WhileModelChangeRuleTest.java	2008-08-08 12:01:56 UTC (rev 226)
@@ -417,4 +417,167 @@
 					"' not expected: "+s2.getName());
 		}
 	}
+	
+	public void testInsertWhileNotFirstSessionAction() {
+		WhileModelChangeRule rule=new WhileModelChangeRule();
+		
+		TestESBLanguageModel model=new TestESBLanguageModel();
+		
+		TestESBService service=(TestESBService)
+			model.createService("testcategory", "testname");
+		
+		model.addService(service);
+		
+		// Make session based service
+		service.setSessionBased(true);
+		
+		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, -1) == 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 ScheduleStateAction) == false) {
+			fail("Action was not ScheduleStateAction: "+service.getActions().get(0));
+		}
+		
+		ScheduleStateAction whileSchedule=(ScheduleStateAction)
+						service.getActions().get(0);
+		
+		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 (whileSchedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY).
+					equals(whileService.getCategory()) == false) {
+			fail("While schedule action category '"+
+					whileSchedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY)+
+					"' not expected: "+whileService.getCategory());
+		}
+		
+		if (whileSchedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME).
+					equals(whileService.getName()) == false) {
+			fail("While schedule action service name '"+
+					whileSchedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME)+
+					"' not expected: "+whileService.getName());
+		}
+		
+		if (whileService.getActions().size() != 1) {
+			fail("Expecting 1 action: "+whileService.getActions().size());
+		}
+
+		if ((whileService.getActions().get(0) instanceof WhileAction) == false) {
+			fail("Action was not WhileAction: "+whileService.getActions().get(0));
+		}
+		
+		WhileAction action=(WhileAction)whileService.getActions().get(0);
+		
+		org.w3c.dom.NodeList paths=action.getPropertyChildNodes("paths");
+		
+		if (paths.getLength() != 2) {
+			fail("Two path children expected: "+paths.getLength());
+		}
+		
+		org.w3c.dom.Element elem=(org.w3c.dom.Element)paths.item(0);
+		
+		if (elem.getNodeName().equals("while") == false) {
+			fail("while expected but got: "+elem.getNodeName());
+		}
+		
+		if (elem.getAttribute("service-category").equals(s1.getCategory()) == false) {
+			fail("Service category '"+elem.getAttribute("service-category")+
+					"' not expected: "+s1.getCategory());
+		}
+		
+		if (elem.getAttribute("service-name").equals(s1.getName()) == false) {
+			fail("Service name '"+elem.getAttribute("service-name")+
+					"' not expected: "+s1.getName());
+		}
+		
+		// Check no message types
+		org.w3c.dom.NodeList mtypeNL=elem.getElementsByTagName("message");
+		
+		if (mtypeNL.getLength() != 0) {
+			fail("Should have no message types: "+mtypeNL.getLength());
+		}
+		
+		elem=(org.w3c.dom.Element)paths.item(1);
+		
+		if (elem.getNodeName().equals("exit") == false) {
+			fail("exit expected but got: "+elem.getNodeName());
+		}
+		
+		if (elem.getAttribute("service-category").equals(s2.getCategory()) == false) {
+			fail("Service category '"+elem.getAttribute("service-category")+
+					"' not expected: "+s2.getCategory());
+		}
+		
+		if (elem.getAttribute("service-name").equals(s2.getName()) == false) {
+			fail("Service name '"+elem.getAttribute("service-name")+
+					"' not expected: "+s2.getName());
+		}
+	}
 }




More information about the overlord-commits mailing list