Author: objectiser
Date: 2008-07-30 07:09:22 -0400 (Wed, 30 Jul 2008)
New Revision: 205
Modified:
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultESBLanguageModel.java
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultESBService.java
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBAction.java
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBLanguageModel.java
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBService.java
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/MessageRouterAction.java
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/ConversationInteractionModelChangeRule.java
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/ConversationModelChangeRule.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/test/org/jboss/tools/overlord/jbossesb/model/TestESBAction.java
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/TestESBLanguageModel.java
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/TestESBService.java
Log:
Creation of gateway service with message router action, and updating routes based on
received requests. Changed naming schema for services to be auto generated using unique
names.
Modified:
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultESBLanguageModel.java
===================================================================
---
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultESBLanguageModel.java 2008-07-29
19:26:43 UTC (rev 204)
+++
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultESBLanguageModel.java 2008-07-30
11:09:22 UTC (rev 205)
@@ -40,6 +40,7 @@
public class DefaultESBLanguageModel extends org.scribble.lang.model.LanguageModel
implements ESBLanguageModel {
+ private static final String SERVICE_NAME_SEPARATOR = "__";
public static final String DEST_NAME_PREFIX = "queue/";
public static final String DEST_NAME_ATTR = "dest-name";
public static final String DEST_TYPE_VALUE = "QUEUE";
@@ -501,6 +502,52 @@
}
/**
+ * This method returns a unique service name within
+ * the supplied category.
+ *
+ * @param category The category
+ * @param currentServiceName The name of the service creating
+ * the new service
+ * @return The unique service name
+ */
+ public String getUniqueServiceName(String category, String currentServiceName) {
+ String ret=null;
+
+ int index=currentServiceName.indexOf(SERVICE_NAME_SEPARATOR);
+ if (index != -1) {
+ currentServiceName = currentServiceName.substring(0, index);
+ }
+
+ index = 0;
+ do {
+ index++;
+ ret = currentServiceName+SERVICE_NAME_SEPARATOR+index;
+ } while(getService(category, ret) != null);
+
+ return(ret);
+ }
+
+ /**
+ * This method returns the gateway service.
+ *
+ * @return The gateway service, or null if not found
+ */
+ public ESBService getGatewayService() {
+ ESBService ret=null;
+
+ java.util.Iterator<ESBService> iter=getServices().iterator();
+ while (ret == null && iter.hasNext()) {
+ ret = iter.next();
+
+ if (ret.isGateway() == false) {
+ ret = null;
+ }
+ }
+
+ return(ret);
+ }
+
+ /**
* This method returns the reference to the DOM
* representation of the ESB configuration.
*
Modified:
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultESBService.java
===================================================================
---
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultESBService.java 2008-07-29
19:26:43 UTC (rev 204)
+++
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultESBService.java 2008-07-30
11:09:22 UTC (rev 205)
@@ -261,7 +261,34 @@
// element
if (action.getAction() != null) {
- m_actionsElem.appendChild(action.getAction());
+
+ if (pos == -1 || pos >= m_actions.size()) {
+ m_actionsElem.appendChild(action.getAction());
+ m_actions.add(action);
+ } else {
+ org.w3c.dom.NodeList nl=m_actionsElem.getChildNodes();
+ org.w3c.dom.Element elem=null;
+ int cur=-1;
+
+ for (int i=0; i < nl.getLength(); i++) {
+ if (nl.item(i) instanceof org.w3c.dom.Element &&
+ nl.item(i).getNodeName().equals(ACTION_ELEMENT)) {
+ cur++;
+
+ if (cur == pos) {
+ elem = (org.w3c.dom.Element)nl.item(i);
+ }
+ }
+ }
+
+ if (elem != null) {
+ m_actionsElem.insertBefore(action.getAction(), elem);
+ } else {
+ m_actionsElem.appendChild(action.getAction());
+ }
+
+ m_actions.add(pos, action);
+ }
}
}
@@ -390,6 +417,40 @@
}
/**
+ * This method determines whether the service is a gateway
+ * for inbound requests.
+ *
+ * @return Whether the service is a gateway
+ */
+ public boolean isGateway() {
+ boolean ret=false;
+
+ for (int i=0; ret == false && i < m_actions.size(); i++) {
+ ret = m_actions.get(i).isGateway();
+ }
+
+ return(ret);
+ }
+
+ /**
+ * This method returns the gateway action if this is a
+ * gateway service.
+ *
+ * @return The gateway action
+ */
+ public ESBAction getGatewayAction() {
+ ESBAction ret=null;
+
+ for (int i=0; ret == null && i < m_actions.size(); i++) {
+ if (m_actions.get(i).isGateway()) {
+ ret = m_actions.get(i);
+ }
+ }
+
+ return(ret);
+ }
+
+ /**
* This method returns the first session based action in the
* service descriptor.
*
Modified:
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBAction.java
===================================================================
---
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBAction.java 2008-07-29
19:26:43 UTC (rev 204)
+++
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBAction.java 2008-07-30
11:09:22 UTC (rev 205)
@@ -64,6 +64,14 @@
public boolean isCreateSession();
/**
+ * This method determines whether the action is a gateway
+ * for inbound requests.
+ *
+ * @return Whether the action is a gateway
+ */
+ public boolean isGateway();
+
+ /**
* This method indicates whether this action performs another
* sub-conversation.
*
Modified:
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBLanguageModel.java
===================================================================
---
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBLanguageModel.java 2008-07-29
19:26:43 UTC (rev 204)
+++
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBLanguageModel.java 2008-07-30
11:09:22 UTC (rev 205)
@@ -69,6 +69,13 @@
public String getOriginalContents();
/**
+ * This method returns the gateway service.
+ *
+ * @return The gateway service, or null if not found
+ */
+ public ESBService getGatewayService();
+
+ /**
* This method adds a new service to the model.
*
* @param service The service
@@ -83,6 +90,18 @@
public void removeService(ESBService service);
/**
+ * This method returns a unique service name within
+ * the supplied category.
+ *
+ * @param category The category
+ * @param currentServiceName The name of the service creating
+ * the new service
+ * @return The unique service name
+ */
+ public String getUniqueServiceName(String category,
+ String currentServiceName);
+
+ /**
* This method returns the reference to the DOM
* representation of the ESB configuration.
*
Modified:
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBService.java
===================================================================
---
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBService.java 2008-07-29
19:26:43 UTC (rev 204)
+++
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBService.java 2008-07-30
11:09:22 UTC (rev 205)
@@ -118,6 +118,22 @@
public boolean isCreateSession();
/**
+ * This method determines whether the service is a gateway
+ * for inbound requests.
+ *
+ * @return Whether the service is a gateway
+ */
+ public boolean isGateway();
+
+ /**
+ * This method returns the gateway action if this is a
+ * gateway service.
+ *
+ * @return The gateway action
+ */
+ public ESBAction getGatewayAction();
+
+ /**
* This method returns the service description name associated with the
* ESB service.
*
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-07-29
19:26:43 UTC (rev 204)
+++
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/AbstractESBAction.java 2008-07-30
11:09:22 UTC (rev 205)
@@ -273,6 +273,16 @@
}
/**
+ * This method determines whether the action is a gateway
+ * for inbound requests.
+ *
+ * @return Whether the action is a gateway
+ */
+ public boolean isGateway() {
+ return(false);
+ }
+
+ /**
* This method indicates whether this action performs another
* sub-conversation.
*
Modified:
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/MessageRouterAction.java
===================================================================
---
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/MessageRouterAction.java 2008-07-29
19:26:43 UTC (rev 204)
+++
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/MessageRouterAction.java 2008-07-30
11:09:22 UTC (rev 205)
@@ -34,11 +34,13 @@
*/
public class MessageRouterAction extends AbstractESBAction {
- private static final String INITIATE = "initiate";
- private static final String SERVICE_NAME = "service-name";
- private static final String SERVICE_CATEGORY = "service-category";
- private static final String ROUTE = "route";
- private static final String PATHS = "paths";
+ public static final String INITIATE = "initiate";
+ public static final String SERVICE_NAME = "service-name";
+ public static final String SERVICE_CATEGORY = "service-category";
+ public static final String ROUTE = "route";
+ public static final String PATHS = "paths";
+ public static final String MESSAGE_ELEMENT="message";
+ public static final String TYPE_ATTR="type";
/**
* The constructor for the action.
@@ -117,6 +119,46 @@
}
/**
+ * This method determines whether the action is a gateway
+ * for inbound requests.
+ *
+ * @return Whether the action is a gateway
+ */
+ public boolean isGateway() {
+ return(true);
+ }
+
+ /**
+ * This method adds a route to the message router action.
+ *
+ * @param category The service category
+ * @param name The service name
+ * @param initiate Whether the route initiates the service
+ * @param messageTypes The list of message types
+ */
+ public void addRoute(String category, String name, boolean initiate,
+ java.util.List<String> messageTypes) {
+
+ org.w3c.dom.Element paths=getPropertyElement(PATHS);
+
+ org.w3c.dom.Element path=
+ getAction().getOwnerDocument().createElement(ROUTE);
+ path.setAttribute(SERVICE_CATEGORY, category);
+ path.setAttribute(SERVICE_NAME, name);
+
+ for (int i=0; i < messageTypes.size(); i++) {
+ org.w3c.dom.Element mt=
+ getAction().getOwnerDocument().createElement(MESSAGE_ELEMENT);
+
+ mt.setAttribute(TYPE_ATTR, messageTypes.get(i));
+
+ path.appendChild(mt);
+ }
+
+ paths.appendChild(path);
+ }
+
+ /**
* This method returns the mandatory property names.
*
* @return The mandatory property names
Modified:
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/ConversationInteractionModelChangeRule.java
===================================================================
---
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/ConversationInteractionModelChangeRule.java 2008-07-29
19:26:43 UTC (rev 204)
+++
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/ConversationInteractionModelChangeRule.java 2008-07-30
11:09:22 UTC (rev 205)
@@ -128,7 +128,8 @@
// TODO: Create unique service name
DefaultESBService respService=new DefaultESBService(
esbModel, service.getCategory(),
- service.getName()+"_2");
+ esbModel.getUniqueServiceName(service.getCategory(),
+ service.getName()));
esbModel.addService(respService);
@@ -143,6 +144,7 @@
}
} else {
+ // Receive
// TODO: Create a new service to receive the
// message and add a schedule service to link
@@ -154,21 +156,29 @@
// into another service descriptor
DefaultESBService recvService=new DefaultESBService(
esbModel, service.getCategory(),
- service.getName()+"_3");
+ esbModel.getUniqueServiceName(service.getCategory(),
+ service.getName()));
esbModel.addService(recvService);
+
+ // Add schedule action
+ ScheduleStateAction schedule=
+ new ScheduleStateAction(service);
+
+ service.addAction(schedule, position);
context.setParent(recvService);
}
- // Receive
ReceiveMessageAction action=
- new ReceiveMessageAction(service);
+ new ReceiveMessageAction((ESBService)context.getParent());
if (interaction.getMessageSignature().getOperation() != null) {
action.setOperation(interaction.getMessageSignature().getOperation());
}
+ String mtype=null;
+
if (interaction.getMessageSignature().getTypes().size() == 1) {
TypeReference ref=interaction.getMessageSignature().getTypes().get(0);
@@ -179,8 +189,6 @@
// implementations found, then can select e.g. XML or
// Java as message type representation.
- String mtype=null;
-
if (ref.getNamespace() != null) {
mtype = "{"+ref.getNamespace()+"}";
} else {
@@ -194,7 +202,28 @@
action.setMessageType(mtype);
}
- ((ESBService)context.getParent()).addAction(action, position);
+ ((ESBService)context.getParent()).addAction(action, -1);
+
+ // If not a response, then add to the gateway
+ if (interaction.getReplyToLabel() == null) {
+ ESBService gwService=esbModel.getGatewayService();
+
+ if (gwService != null) {
+ ESBAction gwAction=gwService.getGatewayAction();
+
+ if (gwAction instanceof MessageRouterAction) {
+ MessageRouterAction mra=(MessageRouterAction)
+ gwAction;
+
+ java.util.List<String> mtypes=new java.util.Vector<String>();
+ mtypes.add(mtype);
+
+ mra.addRoute(((ESBService)context.getParent()).getCategory(),
+ ((ESBService)context.getParent()).getName(),
+ false, mtypes);
+ }
+ }
+ }
}
return(true);
Modified:
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/ConversationModelChangeRule.java
===================================================================
---
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/ConversationModelChangeRule.java 2008-07-29
19:26:43 UTC (rev 204)
+++
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/ConversationModelChangeRule.java 2008-07-30
11:09:22 UTC (rev 205)
@@ -30,6 +30,8 @@
@RegistryInfo(extension=ModelChangeRule.class,notation=ESBLanguageModel.JBOSSESB_NOTATION)
public class ConversationModelChangeRule extends AbstractModelChangeRule {
+ private static final String NAME_SUFFIX = "_main";
+
/**
* This method determines whether the rule is appropriate
* for the supplied type of model, parent (in the context) and
@@ -76,9 +78,41 @@
String category=((Model)conv.getModel()).
getNamespace().getName();
- String name=conv.getModelName().getName()+"-"+
- conv.getModelName().getLocatedRole().getName();
+ String qualifier="";
+ Definition defn=conv;
+
+ // Create a hierarchical name related to the conversation
+ while (defn != null) {
+ qualifier = "."+defn.getModelName().getName();
+
+ if (defn.getParent() instanceof Definition) {
+ defn = (Definition)defn.getParent();
+ } else {
+ defn = null;
+ }
+ }
+
+ category += qualifier;
+
+ String name=conv.getModelName().getLocatedRole().getName();
+
+ // Check if root conversation
+ if (conv.getParent() instanceof Model) {
+
+ // Register gateway service
+ DefaultESBService gateway=new DefaultESBService(esbModel,
+ category, name);
+
+ MessageRouterAction mra=new MessageRouterAction(gateway);
+
+ gateway.addAction(mra, -1);
+
+ esbModel.addService(gateway);
+
+ name += NAME_SUFFIX;
+ }
+
// Create new ESB service
DefaultESBService service=new DefaultESBService(
esbModel, category, name);
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-07-29
19:26:43 UTC (rev 204)
+++
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/change/IfModelChangeRule.java 2008-07-30
11:09:22 UTC (rev 205)
@@ -89,7 +89,8 @@
DefaultESBService subService=new DefaultESBService(
esbModel, service.getCategory(),
- service.getName()+"_"+i);
+ esbModel.getUniqueServiceName(service.getCategory(),
+ service.getName()));
esbModel.addService(subService);
@@ -110,7 +111,8 @@
DefaultESBService subService=new DefaultESBService(
esbModel, service.getCategory(),
- service.getName()+"_else");
+ esbModel.getUniqueServiceName(service.getCategory(),
+ service.getName()));
esbModel.addService(subService);
@@ -139,7 +141,8 @@
DefaultESBService subService=new DefaultESBService(
esbModel, service.getCategory(),
- service.getName()+"_"+i);
+ esbModel.getUniqueServiceName(service.getCategory(),
+ service.getName()));
esbModel.addService(subService);
Modified:
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/TestESBAction.java
===================================================================
---
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/TestESBAction.java 2008-07-29
19:26:43 UTC (rev 204)
+++
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/TestESBAction.java 2008-07-30
11:09:22 UTC (rev 205)
@@ -82,6 +82,11 @@
m_createSession = bool;
}
+ public boolean isGateway() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
public void validate(ModelListener l) {
// TODO Auto-generated method stub
Modified:
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/TestESBLanguageModel.java
===================================================================
---
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/TestESBLanguageModel.java 2008-07-29
19:26:43 UTC (rev 204)
+++
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/TestESBLanguageModel.java 2008-07-30
11:09:22 UTC (rev 205)
@@ -66,11 +66,21 @@
return(m_services.values());
}
+ public ESBService getGatewayService() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
public void validate(ModelListener l) {
// TODO Auto-generated method stub
}
+ public String getUniqueServiceName(String category, String name) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
public Element getESBConfiguration() {
return(m_esbConfig);
}
Modified:
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/TestESBService.java
===================================================================
---
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/TestESBService.java 2008-07-29
19:26:43 UTC (rev 204)
+++
cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/TestESBService.java 2008-07-30
11:09:22 UTC (rev 205)
@@ -147,6 +147,16 @@
return(m_sessionBased);
}
+ public boolean isGateway() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public ESBAction getGatewayAction() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
public void validate(ModelListener l) {
// TODO Auto-generated method stub