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

overlord-commits at lists.jboss.org overlord-commits at lists.jboss.org
Tue Oct 21 06:53:16 EDT 2008


Author: objectiser
Date: 2008-10-21 06:53:16 -0400 (Tue, 21 Oct 2008)
New Revision: 398

Added:
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/MessageSignatureModelChangeRule.java
Modified:
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/META-INF/MANIFEST.MF
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/AbstractESBAction.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/AbstractInteractionMessageAction.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/ReceiveMessageAction.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/SendMessageAction.java
Log:
Added capability to update message signatures.

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/META-INF/MANIFEST.MF
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/META-INF/MANIFEST.MF	2008-10-21 09:39:03 UTC (rev 397)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/META-INF/MANIFEST.MF	2008-10-21 10:53:16 UTC (rev 398)
@@ -26,6 +26,7 @@
   org.jboss.tools.overlord.cdl.jbossesb.model.change.LanguageToConversationModelChangeRule,
   org.jboss.tools.overlord.cdl.jbossesb.model.change.ConversationModelChangeRule,
   org.jboss.tools.overlord.cdl.jbossesb.model.change.ConversationInteractionModelChangeRule,
+  org.jboss.tools.overlord.cdl.jbossesb.model.change.MessageSignatureModelChangeRule,
   org.jboss.tools.overlord.cdl.jbossesb.model.change.TypeReferenceModelChangeRule,
   org.jboss.tools.overlord.cdl.jbossesb.model.change.IfModelChangeRule,
   org.jboss.tools.overlord.cdl.jbossesb.model.change.ParallelModelChangeRule,

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/AbstractESBAction.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/AbstractESBAction.java	2008-10-21 09:39:03 UTC (rev 397)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/AbstractESBAction.java	2008-10-21 10:53:16 UTC (rev 398)
@@ -445,6 +445,34 @@
 	}
 	
 	/**
+	 * This method removes the named property from the action.
+	 * 
+	 * @param property The property name
+	 */
+	public void removePropertyElement(String property) {
+		
+		if (m_action != null) {
+			org.w3c.dom.Node prop=null;
+			org.w3c.dom.NodeList nl=
+				getAction().getElementsByTagName(PROPERTY_ELEMENT);
+			
+			for (int i=0; prop == null && i < nl.getLength(); i++) {
+				if (nl.item(i) instanceof org.w3c.dom.Element) {
+					String propName=((org.w3c.dom.Element)nl.item(i)).getAttribute(NAME_ATTR);
+					
+					if (propName != null && propName.equals(property)) {
+						prop = nl.item(i);
+					}
+				}
+			}
+			
+			if (prop != null) {
+				m_action.removeChild(prop);
+			}
+		}
+	}
+	
+	/**
 	 * This method returns the list of property names defined for
 	 * this action.
 	 * 

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/AbstractInteractionMessageAction.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/AbstractInteractionMessageAction.java	2008-10-21 09:39:03 UTC (rev 397)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/AbstractInteractionMessageAction.java	2008-10-21 10:53:16 UTC (rev 398)
@@ -85,10 +85,14 @@
 	 */
 	public void setOperation(String operation) {
 		
-		org.w3c.dom.Element prop=getPropertyElement(OPERATION);
-		
-		if (prop != null) {
-			prop.setAttribute(VALUE_ATTR, operation);
+		if (operation != null) {
+			org.w3c.dom.Element prop=getPropertyElement(OPERATION);
+			
+			if (prop != null) {
+				prop.setAttribute(VALUE_ATTR, operation);
+			}
+		} else {
+			removePropertyElement(OPERATION);
 		}
 	}
 	

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/ReceiveMessageAction.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/ReceiveMessageAction.java	2008-10-21 09:39:03 UTC (rev 397)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/ReceiveMessageAction.java	2008-10-21 10:53:16 UTC (rev 398)
@@ -82,6 +82,8 @@
 		recv.derivedFrom(this);
 		
 		MessageSignature ms=new MessageSignature();
+		ms.derivedFrom(this);
+		
 		recv.setMessageSignature(ms);
 		
 		ms.setOperation(getPropertyValue(OPERATION));

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/SendMessageAction.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/SendMessageAction.java	2008-10-21 09:39:03 UTC (rev 397)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/actions/SendMessageAction.java	2008-10-21 10:53:16 UTC (rev 398)
@@ -160,6 +160,8 @@
 		send.derivedFrom(this);
 		
 		MessageSignature ms=new MessageSignature();
+		ms.derivedFrom(this);
+		
 		send.setMessageSignature(ms);
 		
 		ms.setOperation(getPropertyValue(OPERATION));

Added: cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/MessageSignatureModelChangeRule.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/MessageSignatureModelChangeRule.java	                        (rev 0)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.cdl.jbossesb/src/java/org/jboss/tools/overlord/cdl/jbossesb/model/change/MessageSignatureModelChangeRule.java	2008-10-21 10:53:16 UTC (rev 398)
@@ -0,0 +1,180 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ */
+package org.jboss.tools.overlord.cdl.jbossesb.model.change;
+
+import org.jboss.tools.overlord.cdl.jbossesb.model.*;
+import org.jboss.tools.overlord.cdl.jbossesb.model.actions.*;
+import org.jboss.tools.overlord.cdl.jbossesb.model.util.InteractionUtil;
+import org.scribble.model.*;
+import org.scribble.model.change.*;
+import org.scribble.conversation.model.*;
+import org.scribble.extensions.RegistryInfo;
+
+/**
+ * This is the model change rule for the MessageSignature.
+ */
+ at RegistryInfo(extension=ModelChangeRule.class,notation=ESBLanguageModel.JBOSSESB_NOTATION)
+public class MessageSignatureModelChangeRule extends AbstractModelChangeRule {
+
+	/**
+	 * This method determines whether the rule is appropriate
+	 * for the supplied type of model, parent (in the context)
+	 * and modified model object.
+	 *
+	 * @param context The context
+	 * @param model The model
+	 * @param fromObj The source model object
+	 * @param toObj The model object to be updated
+	 * @return Whether the rule supports the supplied information
+	 */
+	@Override
+	public boolean isUpdateSupported(ModelChangeContext context,
+					Model model, ModelObject fromObj, ModelObject toObj) {
+		boolean ret=false;
+		
+		if (fromObj instanceof MessageSignature &&
+				toObj instanceof MessageSignature &&
+				model instanceof ESBLanguageModel) {
+			ret = true;
+		}
+		
+		return(ret);
+	}
+	
+	/**
+	 * This method modifies an existing model object, within a
+	 * parent model object, with the details supplied in
+	 * another model object.
+	 * 
+	 * @param context The context
+	 * @param model The model being changed
+	 * @param fromObj The source model object
+	 * @param toObj The model object to be updated
+	 * @return Whether the change has been applied
+	 */
+	@Override
+	public boolean update(ModelChangeContext context,
+				Model model, ModelObject fromObj, ModelObject toObj) {
+		boolean ret=false;
+		ESBLanguageModel esbModel=(ESBLanguageModel)model;
+		MessageSignature fromMS=(MessageSignature)fromObj;
+		MessageSignature toMS=(MessageSignature)toObj;
+		ConversationInteraction toInteraction=null;
+		ConversationInteraction fromInteraction=null;
+		
+		if (toMS != null &&
+				toMS.getParent() instanceof ConversationInteraction) {
+			toInteraction = (ConversationInteraction)toMS.getParent();
+		}
+		
+		if (fromMS != null &&
+				fromMS.getParent() instanceof ConversationInteraction) {
+			fromInteraction = (ConversationInteraction)fromMS.getParent();
+		}
+		
+		// Get action from 'toInteraction'
+		if (toInteraction != null &&
+				toInteraction.getSource().getObject() instanceof
+							AbstractInteractionMessageAction) {
+			AbstractInteractionMessageAction ma=
+					(AbstractInteractionMessageAction)
+						toInteraction.getSource().getObject();
+			
+			// Update operation
+			setOperation(ma, fromInteraction);
+			
+			ESBService service = ma.getService();
+				
+			String origMesgType=ma.getMessageType();
+			
+			// Set message type
+			setMessageType(ma, fromInteraction);
+			
+			// Update message type in router if appropriate
+			if (InteractionUtil.isSend(fromInteraction) == false &&
+					fromInteraction.getReplyToLabel() == null) {
+				updateRouterMessageType(esbModel, service,
+						origMesgType, ma);
+			}
+			
+			ret = true;
+		}
+		
+		return(ret);
+	}
+	
+	protected void updateRouterMessageType(ESBLanguageModel esbModel,
+					ESBService service, String origMesgType,
+					AbstractInteractionMessageAction ma) {
+		ESBService gwService=esbModel.getGatewayService();
+		
+		if (gwService != null) {
+			ESBAction gwAction=gwService.getGatewayAction();
+			
+			if (gwAction instanceof MessageRouterAction) {
+				MessageRouterAction mra=(MessageRouterAction)
+							gwAction;
+				
+				org.w3c.dom.Element route=
+						mra.getRouteElement(service.getCategory(),
+								service.getName());
+				
+				if (route != null) {
+					org.w3c.dom.NodeList nl=
+						route.getElementsByTagName(MessageRouterAction.MESSAGE_ELEMENT);
+					
+					for (int i=0; i < nl.getLength(); i++) {
+						if (nl.item(i) instanceof org.w3c.dom.Element) {
+							org.w3c.dom.Element mesg=
+								(org.w3c.dom.Element)nl.item(i);
+							
+							if (mesg.getAttribute(MessageRouterAction.TYPE_ATTR).
+												equals(origMesgType)) {
+								mesg.setAttribute(MessageRouterAction.TYPE_ATTR,
+												ma.getMessageType());
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+	
+	protected void setMessageType(AbstractInteractionMessageAction action,
+						ConversationInteraction interaction) {
+		
+		if (interaction.getMessageSignature().getTypes().size() == 1) {
+			TypeReference ref=interaction.getMessageSignature().getTypes().get(0);
+			
+			// TODO: Search for an implementation associated with
+			// the type reference, so that the type can be
+			// abstract - possibly have the required message type
+			// notation as part of the context, so that if multiple
+			// implementations found, then can select e.g. XML or
+			// Java as message type representation.
+			String mtype=InteractionUtil.getTypeString(ref);
+			
+			action.setMessageType(mtype);
+		}
+	}
+	
+	protected void setOperation(AbstractInteractionMessageAction action,
+			ConversationInteraction interaction) {
+		action.setOperation(interaction.getMessageSignature().getOperation());
+	}
+}




More information about the overlord-commits mailing list