[overlord-commits] Overlord SVN: r354 - 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 09:34:41 EDT 2008


Author: objectiser
Date: 2008-09-30 09:34:41 -0400 (Tue, 30 Sep 2008)
New Revision: 354

Modified:
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/IfModelChangeRule.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/ParallelModelChangeRule.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/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/IfModelChangeRuleTest.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/ParallelModelChangeRuleTest.java
Log:
Midway insertion support for If and Parallel.

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/IfModelChangeRule.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/IfModelChangeRule.java	2008-09-30 11:09:07 UTC (rev 353)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/IfModelChangeRule.java	2008-09-30 13:34:41 UTC (rev 354)
@@ -90,9 +90,11 @@
 	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);
 		If ifElem=(If)mobj;
 		
+		int pos=getInsertionPosition(service, ref);
+
 		ESBService joinService=
 			esbModel.createService(service.getCategory(),
 					esbModel.getUniqueServiceName(service.getCategory(),
@@ -103,253 +105,311 @@
 		// Check if should be an 'if' or a 'switch' action
 		if (ifElem.getRoles().contains(context.getRole())) {
 			
-			// If action, because the role is a decision maker
-			IfAction ifAction=new IfAction(service);
+			insertIf(context, model, service, ifElem, joinService, pos);
+		} else {
+			insertSwitch(context, model, service, ifElem, joinService, pos);
+		}
+		
+		
+		context.setParent(joinService);
+		
+		// If reference provided, then move subsequent activities
+		// to the 'join service'
+		if (pos != -1) {
+			for (int i=pos+1; i < service.getActions().size();) {
+				ESBAction act=service.getActions().get(i);
+				service.getActions().remove(i);
+				
+				joinService.addAction(act, -1);
+			}
+		}
+
+		return(true);
+	}
+	
+	protected void insertIf(ModelChangeContext context,
+			Model model, ESBService service,
+			If ifElem, ESBService joinService, int pos) {
+		ESBLanguageModel esbModel=(ESBLanguageModel)model;
+		
+		// If action, because the role is a decision maker
+		IfAction ifAction=new IfAction(service);
+		
+		service.addAction(ifAction, pos);
+		
+		for (int i=0; i < ifElem.getConditionalBlocks().size(); i++) {
+			ConditionalBlock cb=ifElem.getConditionalBlocks().get(i);
 			
-			service.addAction(ifAction, -1);
+			ESBService subService=
+				esbModel.createService(service.getCategory(),
+					esbModel.getUniqueServiceName(service.getCategory(),
+							service.getName()));
 			
-			for (int i=0; i < ifElem.getConditionalBlocks().size(); i++) {
-				ConditionalBlock cb=ifElem.getConditionalBlocks().get(i);
-				
-				ESBService subService=
-					esbModel.createService(service.getCategory(),
-						esbModel.getUniqueServiceName(service.getCategory(),
-								service.getName()));
-				
-				esbModel.addService(subService);
+			esbModel.addService(subService);
 
-				context.setParent(subService);
-				
-				for (int j=0; j < cb.getContents().size(); j++) {
-					context.insert(model, cb.getContents().get(j), null);
-				}
+			context.setParent(subService);
+			
+			for (int j=0; j < cb.getContents().size(); j++) {
+				context.insert(model, cb.getContents().get(j), null);
+			}
 
-				boolean immediate=false;
-				
-				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);
+			boolean immediate=false;
+			
+			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 (((ESBService)context.getParent()).getFirstSessionBasedAction() == schedule &&
-						ifElem.getEnclosingDefinition() instanceof Conversation) {
-					schedule.setBusinessObjectType(ConversationUtil.getBusinessObjectType(
-							((Conversation)ifElem.getEnclosingDefinition())));
-				}
+			if (((ESBService)context.getParent()).getFirstSessionBasedAction() == schedule &&
+					ifElem.getEnclosingDefinition() instanceof Conversation) {
+				schedule.setBusinessObjectType(ConversationUtil.getBusinessObjectType(
+						((Conversation)ifElem.getEnclosingDefinition())));
 			}
+		}
+		
+		if (ifElem.getElseBlock() != null) {
 			
-			if (ifElem.getElseBlock() != null) {
-				
-				ESBService subService=
-					esbModel.createService(service.getCategory(),
-						esbModel.getUniqueServiceName(service.getCategory(),
-								service.getName()));
+			ESBService subService=
+				esbModel.createService(service.getCategory(),
+					esbModel.getUniqueServiceName(service.getCategory(),
+							service.getName()));
 
-				esbModel.addService(subService);
+			esbModel.addService(subService);
 
-				context.setParent(subService);
-				
-				for (int j=0; j < ifElem.getElseBlock().getContents().size(); j++) {
-					context.insert(model,
-							ifElem.getElseBlock().getContents().get(j), null);
-				}
-				
-				boolean immediate=false;
+			context.setParent(subService);
+			
+			for (int j=0; j < ifElem.getElseBlock().getContents().size(); j++) {
+				context.insert(model,
+						ifElem.getElseBlock().getContents().get(j), null);
+			}
+			
+			boolean immediate=false;
 
-				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);
+			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);
 
-				if (((ESBService)context.getParent()).getFirstSessionBasedAction() == schedule &&
-						ifElem.getEnclosingDefinition() instanceof Conversation) {
-					schedule.setBusinessObjectType(ConversationUtil.getBusinessObjectType(
-							((Conversation)ifElem.getEnclosingDefinition())));
-				}
-			}
-			
-			if (service.getFirstSessionBasedAction() == ifAction &&
+			if (((ESBService)context.getParent()).getFirstSessionBasedAction() == schedule &&
 					ifElem.getEnclosingDefinition() instanceof Conversation) {
-				ifAction.setBusinessObjectType(ConversationUtil.getBusinessObjectType(
+				schedule.setBusinessObjectType(ConversationUtil.getBusinessObjectType(
 						((Conversation)ifElem.getEnclosingDefinition())));
 			}
-		} else {
+		}
+		
+		if (service.getFirstSessionBasedAction() == ifAction &&
+				ifElem.getEnclosingDefinition() instanceof Conversation) {
+			ifAction.setBusinessObjectType(ConversationUtil.getBusinessObjectType(
+					((Conversation)ifElem.getEnclosingDefinition())));
+		}
+	}
+	
+	protected void insertSwitch(ModelChangeContext context,
+			Model model, ESBService service,
+			If ifElem, ESBService joinService, int pos) {
+		ESBLanguageModel esbModel=(ESBLanguageModel)model;
+		
+		// Check if 'when' 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))) {
 			
-			// Switch action, as role is a decision observer
-			SwitchAction switchAction=new SwitchAction(service);
+			// Already has activities, so need to separate
+			// into another service descriptor
+			ESBService switchService=esbModel.createService(
+					service.getCategory(),
+					esbModel.getUniqueServiceName(service.getCategory(),
+							service.getName()));
+
+			esbModel.addService(switchService);
 			
-			// Get lookahead analyser
-			LookaheadAnalyser la=(LookaheadAnalyser)
-					RegistryFactory.getRegistry().getExtension(
-							LookaheadAnalyser.class, null);
+			// Add schedule action
+			ScheduleStateAction schedule=
+				new ScheduleStateAction(service);
 			
-			if (la == null) {
-				logger.severe("Failed to find lookahead analyser");
-			}
+			schedule.setDestination(switchService.getCategory(),
+					switchService.getName(), false);
 			
-			service.addAction(switchAction, -1);
+			service.addAction(schedule, pos);
+
+			context.setParent(switchService);
 			
-			java.util.List<MessageSignature> messageTypes=
-							new java.util.Vector<MessageSignature>();
+			service = switchService;
+			pos = -1;
+		}
 
-			for (int i=0; i < ifElem.getConditionalBlocks().size(); i++) {
-				ConditionalBlock cb=ifElem.getConditionalBlocks().get(i);
-				
-				ESBService subService=
-					esbModel.createService(service.getCategory(),
-						esbModel.getUniqueServiceName(service.getCategory(),
-								service.getName()));
+		// Switch action, as role is a decision observer
+		SwitchAction switchAction=new SwitchAction(service);
+		
+		// Get lookahead analyser
+		LookaheadAnalyser la=(LookaheadAnalyser)
+				RegistryFactory.getRegistry().getExtension(
+						LookaheadAnalyser.class, null);
+		
+		if (la == null) {
+			logger.severe("Failed to find lookahead analyser");
+		}
+		
+		service.addAction(switchAction, pos);
+		
+		java.util.List<MessageSignature> messageTypes=
+						new java.util.Vector<MessageSignature>();
 
-				esbModel.addService(subService);
+		for (int i=0; i < ifElem.getConditionalBlocks().size(); i++) {
+			ConditionalBlock cb=ifElem.getConditionalBlocks().get(i);
+			
+			ESBService subService=
+				esbModel.createService(service.getCategory(),
+					esbModel.getUniqueServiceName(service.getCategory(),
+							service.getName()));
 
-				context.setParent(subService);
-				
-				for (int j=0; j < cb.getContents().size(); j++) {
-					context.insert(model, cb.getContents().get(j), null);
-				}
+			esbModel.addService(subService);
 
-				java.util.Set<Interaction> interactions=null;
-				
-				if (la != null) {
-					interactions = la.getInteractions(cb);
-				}
-				
-				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);
+			context.setParent(subService);
+			
+			for (int j=0; j < cb.getContents().size(); j++) {
+				context.insert(model, cb.getContents().get(j), null);
+			}
 
-				if (((ESBService)context.getParent()).getFirstSessionBasedAction() == schedule &&
-						ifElem.getEnclosingDefinition() instanceof Conversation) {
-					schedule.setBusinessObjectType(ConversationUtil.getBusinessObjectType(
-							((Conversation)ifElem.getEnclosingDefinition())));
-				}
+			java.util.Set<Interaction> interactions=null;
+			
+			if (la != null) {
+				interactions = la.getInteractions(cb);
+			}
+			
+			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();
+			if (((ESBService)context.getParent()).getFirstSessionBasedAction() == schedule &&
+					ifElem.getEnclosingDefinition() instanceof Conversation) {
+				schedule.setBusinessObjectType(ConversationUtil.getBusinessObjectType(
+						((Conversation)ifElem.getEnclosingDefinition())));
+			}
+
+			if (interactions != null) {
+				java.util.Iterator<Interaction> iter=interactions.iterator();
+				
+				while (iter.hasNext()) {
+					Interaction interaction=iter.next();
 					
-					while (iter.hasNext()) {
-						Interaction interaction=iter.next();
-						
-						//TODO: Only deals with single type for now
-						// If a receive and not a response, then
-						// add to the gateway
-						if (InteractionUtil.isSend(interaction) == false &&
-								interaction.getReplyToLabel() == null &&
-								interaction.getMessageSignature().getTypes().size()==1) {
-						
-							messageTypes.add(interaction.getMessageSignature());
-						}
+					//TODO: Only deals with single type for now
+					// If a receive and not a response, then
+					// add to the gateway
+					if (InteractionUtil.isSend(interaction) == false &&
+							interaction.getReplyToLabel() == null &&
+							interaction.getMessageSignature().getTypes().size()==1) {
+					
+						messageTypes.add(interaction.getMessageSignature());
 					}
 				}
 			}
+		}
+		
+		if (ifElem.getElseBlock() != null) {
 			
-			if (ifElem.getElseBlock() != null) {
-				
-				ESBService subService=
-					esbModel.createService(service.getCategory(),
-						esbModel.getUniqueServiceName(service.getCategory(),
-								service.getName()));
+			ESBService subService=
+				esbModel.createService(service.getCategory(),
+					esbModel.getUniqueServiceName(service.getCategory(),
+							service.getName()));
 
-				esbModel.addService(subService);
+			esbModel.addService(subService);
 
-				context.setParent(subService);
+			context.setParent(subService);
+			
+			for (int j=0; j < ifElem.getElseBlock().getContents().size(); j++) {
+				context.insert(model,
+						ifElem.getElseBlock().getContents().get(j), null);
+			}
 				
-				for (int j=0; j < ifElem.getElseBlock().getContents().size(); j++) {
-					context.insert(model,
-							ifElem.getElseBlock().getContents().get(j), null);
-				}
-					
-				java.util.Set<Interaction> interactions=null;
-				
-				if (la != null) {
-					interactions = la.getInteractions(ifElem.getElseBlock());
-				}
-				
-				switchAction.addCase(subService.getCategory(),
-						subService.getName(), interactions, -1);
+			java.util.Set<Interaction> interactions=null;
+			
+			if (la != null) {
+				interactions = la.getInteractions(ifElem.getElseBlock());
+			}
+			
+			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);
+			ScheduleStateAction schedule=
+				new ScheduleStateAction((ESBService)context.getParent());
+			
+			schedule.setDestination(joinService.getCategory(),
+					joinService.getName(), true);
+			((ESBService)context.getParent()).addAction(schedule, -1);
 
-				if (((ESBService)context.getParent()).getFirstSessionBasedAction() == schedule &&
-						ifElem.getEnclosingDefinition() instanceof Conversation) {
-					schedule.setBusinessObjectType(ConversationUtil.getBusinessObjectType(
-							((Conversation)ifElem.getEnclosingDefinition())));
-				}
+			if (((ESBService)context.getParent()).getFirstSessionBasedAction() == schedule &&
+					ifElem.getEnclosingDefinition() instanceof Conversation) {
+				schedule.setBusinessObjectType(ConversationUtil.getBusinessObjectType(
+						((Conversation)ifElem.getEnclosingDefinition())));
+			}
 
-				if (interactions != null) {
-					java.util.Iterator<Interaction> iter=interactions.iterator();
+			if (interactions != null) {
+				java.util.Iterator<Interaction> iter=interactions.iterator();
+				
+				while (iter.hasNext()) {
+					Interaction interaction=iter.next();
 					
-					while (iter.hasNext()) {
-						Interaction interaction=iter.next();
-						
-						//TODO: Only deals with single type for now
-						// If a receive and not a response, then
-						// add to the gateway
-						if (InteractionUtil.isSend(interaction) == false &&
-								interaction.getReplyToLabel() == null &&
-								interaction.getMessageSignature().getTypes().size()==1) {
-						
-							messageTypes.add(interaction.getMessageSignature());
-						}
+					//TODO: Only deals with single type for now
+					// If a receive and not a response, then
+					// add to the gateway
+					if (InteractionUtil.isSend(interaction) == false &&
+							interaction.getReplyToLabel() == null &&
+							interaction.getMessageSignature().getTypes().size()==1) {
+					
+						messageTypes.add(interaction.getMessageSignature());
 					}
 				}
 			}
+		}
+		
+		// Only record message router 'routes' if the switch
+		// receives request interactions, and it is the first
+		// session based action in the service
+		if (messageTypes.size() > 0 &&
+				service.getFirstSessionBasedAction() == switchAction) {
+			ESBService gwService=
+				esbModel.getGatewayService();
 			
-			// Only record message router 'routes' if the switch
-			// receives request interactions, and it is the first
-			// session based action in the service
-			if (messageTypes.size() > 0 &&
-					service.getFirstSessionBasedAction() == switchAction) {
-				ESBService gwService=
-					esbModel.getGatewayService();
+			if (gwService != null) {
+				ESBAction gwAction=gwService.getGatewayAction();
 				
-				if (gwService != null) {
-					ESBAction gwAction=gwService.getGatewayAction();
+				if (gwAction instanceof MessageRouterAction) {
+					MessageRouterAction mra=(MessageRouterAction)
+								gwAction;
 					
-					if (gwAction instanceof MessageRouterAction) {
-						MessageRouterAction mra=(MessageRouterAction)
-									gwAction;
-						
-						mra.addRoute(service.getCategory(),
-								service.getName(),
-								false, messageTypes);
-					}
-				}					
-			}
-			
-			if (service.getFirstSessionBasedAction() == switchAction &&
-					ifElem.getEnclosingDefinition() instanceof Conversation) {
-				switchAction.setBusinessObjectType(ConversationUtil.getBusinessObjectType(
-						((Conversation)ifElem.getEnclosingDefinition())));
-			}
+					mra.addRoute(service.getCategory(),
+							service.getName(),
+							false, messageTypes);
+				}
+			}					
 		}
 		
-		context.setParent(joinService);
-		
-		return(true);
+		if (service.getFirstSessionBasedAction() == switchAction &&
+				ifElem.getEnclosingDefinition() instanceof Conversation) {
+			switchAction.setBusinessObjectType(ConversationUtil.getBusinessObjectType(
+					((Conversation)ifElem.getEnclosingDefinition())));
+		}
 	}
 	
 	private static Logger logger = Logger.getLogger("org.jboss.tools.overlord.cdl.jbossesb.model.change");

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/ParallelModelChangeRule.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/ParallelModelChangeRule.java	2008-09-30 11:09:07 UTC (rev 353)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/ParallelModelChangeRule.java	2008-09-30 13:34:41 UTC (rev 354)
@@ -89,9 +89,11 @@
 	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);
 		Parallel parallel=(Parallel)mobj;
 		
+		int pos=getInsertionPosition(service, ref);
+
 		// Create the join service
 		ESBService joinService=
 			esbModel.createService(service.getCategory(),
@@ -103,7 +105,7 @@
 		// Create and configure the parallel action
 		ParallelAction parAction=new ParallelAction(service);
 		
-		service.addAction(parAction, -1);
+		service.addAction(parAction, pos);
 		
 		for (int i=0; i < parallel.getBlocks().size(); i++) {
 			Block b=parallel.getBlocks().get(i);
@@ -172,6 +174,17 @@
 					((Conversation)parallel.getEnclosingDefinition())));
 		}
 		
+		// If reference provided, then move subsequent activities
+		// to the 'join service'
+		if (pos != -1) {
+			for (int i=pos+1; i < service.getActions().size();) {
+				ESBAction act=service.getActions().get(i);
+				service.getActions().remove(i);
+				
+				joinService.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/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-30 11:09:07 UTC (rev 353)
+++ 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 13:34:41 UTC (rev 354)
@@ -183,7 +183,7 @@
 			When when, ESBService joinService, int pos) {
 		ESBLanguageModel esbModel=(ESBLanguageModel)model;
 
-		// Check if receive needs to be placed in new service
+		// Check if 'when' 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

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/IfModelChangeRuleTest.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/IfModelChangeRuleTest.java	2008-09-30 11:09:07 UTC (rev 353)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/IfModelChangeRuleTest.java	2008-09-30 13:34:41 UTC (rev 354)
@@ -105,6 +105,157 @@
 		}
 	}
 
+	public void testInsertIfActionWithSubsequentActions() {
+		IfModelChangeRule rule=new IfModelChangeRule();
+		
+		TestESBLanguageModel model=new TestESBLanguageModel();
+		
+		TestESBService service=(TestESBService)
+			model.createService("testcategory", "testname");
+		
+		model.addService(service);
+		
+		TestESBAction act1=new TestESBAction();
+		service.addAction(act1, -1);
+		
+		ModelObject ref=new ModelObject() {};
+		ref.getSource().setObject(act1);
+		
+		TestModelChangeContext context=new TestModelChangeContext();
+		context.setParent(service);
+		
+		Role role=new Role();
+		role.setName("role1");
+		
+		context.setRole(role);
+		
+		If mobj=new If();
+		
+		ConditionalBlock cb1=new ConditionalBlock();
+		mobj.getConditionalBlocks().add(cb1);
+		
+		mobj.getRoles().add(role);
+		
+		if (rule.insert(context, model, mobj, ref) == 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 IfAction) == false) {
+			fail("Action was not IfAction: "+service.getActions().get(0));
+		}
+		
+		if (model.getServices().size() != 3) {
+			fail("Three services expected: "+model.getServices().size());
+		}
+		
+		ESBService ifService=null;
+		ESBService join=null;
+		java.util.Iterator<ESBService> iter=model.getServices().iterator();
+		
+		while ((ifService == null || join == null) && iter.hasNext()) {
+			ESBService s = iter.next();
+			if (s != service) {
+				if (ifService == null) {
+					ifService = s;
+				} else if (join == null) {
+					join = s;
+				}
+			}
+		}
+		
+		if (join.getActions().size() != 1) {
+			fail("Join service does not have 1 action: "+join.getActions().size());
+		}
+		
+		if (join.getActions().get(0) != act1) {
+			fail("Join action is not test ESB action");
+		}
+	}
+
+	public void testInsertIfActionWithPrecedingActions() {
+		IfModelChangeRule rule=new IfModelChangeRule();
+		
+		TestESBLanguageModel model=new TestESBLanguageModel();
+		
+		TestESBService service=(TestESBService)
+			model.createService("testcategory", "testname");
+		
+		model.addService(service);
+		
+		TestESBAction act1=new TestESBAction();
+		service.addAction(act1, -1);
+		
+		TestESBAction act2=new TestESBAction();
+		service.addAction(act2, -1);
+		
+		ModelObject ref=new ModelObject() {};
+		ref.getSource().setObject(act2);
+		
+		TestModelChangeContext context=new TestModelChangeContext();
+		context.setParent(service);
+		
+		Role role=new Role();
+		role.setName("role1");
+		
+		context.setRole(role);
+		
+		If mobj=new If();
+		
+		ConditionalBlock cb1=new ConditionalBlock();
+		mobj.getConditionalBlocks().add(cb1);
+		
+		mobj.getRoles().add(role);
+		
+		if (rule.insert(context, model, mobj, ref) == false) {
+			fail("Failed to insert");
+		}
+		
+		// Check actions
+		if (service.getActions().size() != 2) {
+			fail("Expecting 2 actions: "+service.getActions().size());
+		}
+		
+		if (service.getActions().get(0) != act1) {
+			fail("Action 1 was not test ESB action");
+		}
+		
+		if ((service.getActions().get(1) instanceof IfAction) == false) {
+			fail("Action 2 was not IfAction: "+service.getActions().get(1));
+		}
+
+		if (model.getServices().size() != 3) {
+			fail("Three services expected: "+model.getServices().size());
+		}
+		
+		ESBService ifService=null;
+		ESBService join=null;
+		java.util.Iterator<ESBService> iter=model.getServices().iterator();
+		
+		while ((ifService == null || join == null) && iter.hasNext()) {
+			ESBService s = iter.next();
+			if (s != service) {
+				if (ifService == null) {
+					ifService = s;
+				} else if (join == null) {
+					join = s;
+				}
+			}
+		}
+		
+		if (join.getActions().size() != 1) {
+			fail("Join service does not have 1 action: "+join.getActions().size());
+		}
+		
+		if (join.getActions().get(0) != act2) {
+			fail("Join action is not test ESB action");
+		}
+	}
+
 	public void testInsertIfElseIfAction() {
 		IfModelChangeRule rule=new IfModelChangeRule();
 		
@@ -733,4 +884,186 @@
 				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
 		}
 	}
+
+	public void testInsertSwitchActionWithSubsequentActions() {
+		IfModelChangeRule rule=new IfModelChangeRule();
+		
+		org.scribble.extensions.TestSingleExtensionRegistry reg=
+			new org.scribble.extensions.TestSingleExtensionRegistry(null);
+		org.scribble.extensions.RegistryFactory.setRegistry(reg);
+		
+		TestESBLanguageModel model=new TestESBLanguageModel();
+		
+		TestESBService service=(TestESBService)
+			model.createService("testcategory", "testname");
+		
+		model.addService(service);
+		
+		TestESBAction act1=new TestESBAction();
+		service.addAction(act1, -1);
+		
+		ModelObject ref=new ModelObject() {};
+		ref.getSource().setObject(act1);
+		
+		TestModelChangeContext context=new TestModelChangeContext();
+		context.setParent(service);
+		
+		Role role1=new Role();
+		role1.setName("role1");
+		
+		Role role2=new Role();
+		role2.setName("role2");
+		
+		context.setRole(role1);
+		
+		If mobj=new If();
+		
+		mobj.getRoles().add(role2);
+		
+		ConditionalBlock cb1=new ConditionalBlock();
+		mobj.getConditionalBlocks().add(cb1);
+		
+		if (rule.insert(context, model, mobj, ref) == 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 SwitchAction) == false) {
+			fail("Action was not SwitchAction: "+service.getActions().get(0));
+		}
+		
+		if (model.getServices().size() != 3) {
+			fail("Three services expected: "+model.getServices().size());
+		}
+		
+		ESBService switchService=null;
+		ESBService join=null;
+		java.util.Iterator<ESBService> iter=model.getServices().iterator();
+		
+		while ((switchService == null || join == null) && iter.hasNext()) {
+			ESBService s = iter.next();
+			if (s != service) {
+				if (switchService == null) {
+					switchService = s;
+				} else if (join == null) {
+					join = s;
+				}
+			}
+		}
+		
+		if (join.getActions().size() != 1) {
+			fail("Join service does not have 1 action: "+join.getActions().size());
+		}
+		
+		if (join.getActions().get(0) != act1) {
+			fail("Join action is not test ESB action");
+		}
+	}
+	
+	public void testInsertSwitchActionWithPrecedingActions() {
+		IfModelChangeRule rule=new IfModelChangeRule();
+		
+		org.scribble.extensions.TestSingleExtensionRegistry reg=
+			new org.scribble.extensions.TestSingleExtensionRegistry(null);
+		org.scribble.extensions.RegistryFactory.setRegistry(reg);
+		
+		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 ref=new ModelObject() {};
+		ref.getSource().setObject(act2);
+		
+		TestModelChangeContext context=new TestModelChangeContext();
+		context.setParent(service);
+		
+		Role role1=new Role();
+		role1.setName("role1");
+		
+		Role role2=new Role();
+		role2.setName("role2");
+		
+		context.setRole(role1);
+		
+		If mobj=new If();
+		
+		mobj.getRoles().add(role2);
+		
+		ConditionalBlock cb1=new ConditionalBlock();
+		mobj.getConditionalBlocks().add(cb1);
+		
+		if (rule.insert(context, model, mobj, ref) == 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("First action not test ESB action");
+		}
+		
+		if ((service.getActions().get(1) instanceof ScheduleStateAction) == false) {
+			fail("Action was not ScheduleStateAction: "+service.getActions().get(1));
+		}
+		
+		ScheduleStateAction schedule=(ScheduleStateAction)service.getActions().get(1);
+		
+		ESBService addedService=model.getService(
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY),
+				schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME));
+
+		if (addedService == null) {
+			fail("Failed to find service '"+
+					schedule.getPropertyValue(ScheduleStateAction.SERVICE_CATEGORY)+"' '"+
+					schedule.getPropertyValue(ScheduleStateAction.SERVICE_NAME)+"'");
+		}
+		
+		if (addedService.getActions().size() != 1) {
+			fail("Expecting 1 action: "+service.getActions().size());
+		}
+		
+		if ((addedService.getActions().get(0) instanceof SwitchAction) == false) {
+			fail("Action was not SwitchAction: "+service.getActions().get(0));
+		}
+		
+		if (model.getServices().size() != 4) {
+			fail("Four services expected: "+model.getServices().size());
+		}
+		
+		ESBService join=null;
+		java.util.Iterator<ESBService> iter=model.getServices().iterator();
+		
+		while (join == null && iter.hasNext()) {
+			ESBService serv = iter.next();
+			if (serv.getName().endsWith("__0")) {
+				join = serv;
+			}
+		}
+		
+		if (join.getActions().size() != 1) {
+			fail("Join service does not have 1 action: "+join.getActions().size());
+		}
+		
+		if (join.getActions().get(0) != act2) {
+			fail("Join action is not test ESB action");
+		}
+	}
 }

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/ParallelModelChangeRuleTest.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/ParallelModelChangeRuleTest.java	2008-09-30 11:09:07 UTC (rev 353)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/test/org/jboss/tools/overlord/cdl/jbossesb/model/change/ParallelModelChangeRuleTest.java	2008-09-30 13:34:41 UTC (rev 354)
@@ -509,4 +509,116 @@
 			fail("Join should not be immediate");
 		}
 	}
+	
+	public void testInsertParallelMiddleAction() {
+		ParallelModelChangeRule rule=new ParallelModelChangeRule();
+		
+		org.scribble.extensions.TestSingleExtensionRegistry reg=
+			new org.scribble.extensions.TestSingleExtensionRegistry(null);
+		org.scribble.extensions.RegistryFactory.setRegistry(reg);
+		
+		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);
+		
+		Parallel mobj=new Parallel();
+		
+		Block cb1=new Block();
+		mobj.getBlocks().add(cb1);
+		
+		Block cb2=new Block();
+		mobj.getBlocks().add(cb2);
+		
+		Block cb3=new Block();
+		mobj.getBlocks().add(cb3);
+		
+		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("Action was not test ESB action 1: "+service.getActions().get(0));
+		}
+		
+		if ((service.getActions().get(1) instanceof ParallelAction) == false) {
+			fail("Action was not ParallelAction: "+service.getActions().get(1));
+		}
+		
+		if (model.getServices().size() != 5) {
+			fail("Five services expected: "+model.getServices().size());
+		}
+		
+		ESBService join=null;
+		java.util.Iterator<ESBService> iter=model.getServices().iterator();
+		
+		while (join == null && iter.hasNext()) {
+			ESBService serv = iter.next();
+			if (serv.getName().endsWith("__0")) {
+				join = serv;
+			}
+		}
+		
+		ParallelAction action=(ParallelAction)service.getActions().get(1);
+		
+		org.w3c.dom.NodeList paths=action.getPropertyChildNodes("paths");
+		
+		if (paths.getLength() != 4) {
+			fail("Four path children expected: "+paths.getLength());
+		}
+		
+		org.w3c.dom.Element elem=(org.w3c.dom.Element)paths.item(3);
+		
+		if (elem.getNodeName().equals("join") == false) {
+			fail("join expected but got: "+elem.getNodeName());
+		}
+		
+		if (elem.getAttribute("service-category").equals(join.getCategory()) == false) {
+			fail("Service category '"+elem.getAttribute("service-category")+
+					"' not expected: "+join.getCategory());
+		}
+		
+		if (elem.getAttribute("service-name").equals(join.getName()) == false) {
+			fail("Service name '"+elem.getAttribute("service-name")+
+					"' not expected: "+join.getName());
+		}
+		
+		if (elem.hasAttribute("immediate")) {
+			fail("Join should not be immediate");
+		}
+		
+		if (join.getActions().size() != 1) {
+			fail("Expecting 1 join action: "+join.getActions().size());
+		}
+		
+		if (join.getActions().get(0) != act2) {
+			fail("Action was not test ESB action 2: "+join.getActions().get(0));
+		}
+	}
 }




More information about the overlord-commits mailing list