Author: objectiser
Date: 2008-06-25 14:19:59 -0400 (Wed, 25 Jun 2008)
New Revision: 72
Added:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ConversionContext.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultConversionContext.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/WhenAction.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/WhileAction.java
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBAction.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBActionFactory.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBLanguageModel.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBService.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/UnsupportedAction.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/CreateSessionAction.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/IfAction.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/Messages.properties
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/ParallelAction.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/ReceiveMessageAction.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/RetrieveSessionAction.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/ScheduleStateAction.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/SendMessageAction.java
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/SwitchAction.java
Log:
Initial support for while and when actions.
Added:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ConversionContext.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ConversionContext.java
(rev 0)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ConversionContext.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2005-8 Pi4 Technologies Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *
http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *
+ * Change History:
+ * 25 Jun 2008 : Initial version created by gary
+ */
+package org.jboss.tools.overlord.jbossesb.model;
+
+public interface ConversionContext {
+
+ /**
+ * This method is invoked when an ESB service is being processed.
+ *
+ * @param service The service
+ */
+ public void processing(ESBService service);
+
+ /**
+ * This method is invoked when an ESB service has been processed.
+ *
+ * @param service The service
+ */
+ public void processed(ESBService service);
+
+ /**
+ * Push service on the stack of services in which the current
+ * context is contained.
+ *
+ * @param service The service
+ */
+ public void push(ESBService service);
+
+ /**
+ * Pop service from the stack of services in which the current
+ * context is contained.
+ *
+ * @param service The service
+ */
+ public void pop(ESBService service);
+
+ /**
+ * This method determines whether the supplied service is on
+ * the stack of services in which the current context is
+ * contained.
+ *
+ * @param service The service
+ * @return Whether the service is on the stack
+ */
+ public boolean isOnStack(ESBService service);
+
+ /**
+ * This method marks an ESB service as being a join state.
+ *
+ * @param service The service
+ */
+ public void markJoin(ESBService service);
+
+ /**
+ * This method determines whether the ESB service is a join
+ * state.
+ *
+ * @param service The serviice
+ * @return Whether the service is a join state
+ */
+ public boolean isJoin(ESBService service);
+
+}
Added:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultConversionContext.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultConversionContext.java
(rev 0)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultConversionContext.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2005-8 Pi4 Technologies Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *
http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *
+ * Change History:
+ * 25 Jun 2008 : Initial version created by gary
+ */
+package org.jboss.tools.overlord.jbossesb.model;
+
+import java.util.logging.Logger;
+
+public class DefaultConversionContext implements ConversionContext {
+
+ /**
+ * This method is invoked when an ESB service is being processed.
+ *
+ * @param service The service
+ */
+ public void processing(ESBService service) {
+ m_joins.remove(service);
+ }
+
+ /**
+ * This method is invoked when an ESB service has been processed.
+ *
+ * @param service The service
+ */
+ public void processed(ESBService service) {
+
+ }
+
+ /**
+ * Push service on the stack of services in which the current
+ * context is contained.
+ *
+ * @param service The service
+ */
+ public void push(ESBService service) {
+ m_serviceStack.add(service);
+ }
+
+ /**
+ * Pop service from the stack of services in which the current
+ * context is contained.
+ *
+ * @param service The service
+ */
+ public void pop(ESBService service) {
+
+ // Check if the service is the last element on the stack
+ if (m_serviceStack.size() == 0 ||
+ m_serviceStack.get(m_serviceStack.size()-1) != service) {
+ logger.severe("Request to pop service '"+service+
+ "' that is not the most recent entry on the stack");
+ }
+
+ m_serviceStack.remove(service);
+ }
+
+ /**
+ * This method determines whether the supplied service is on
+ * the stack of services in which the current context is
+ * contained.
+ *
+ * @param service The service
+ * @return Whether the service is on the stack
+ */
+ public boolean isOnStack(ESBService service) {
+ return(m_serviceStack.contains(service));
+ }
+
+ /**
+ * This method marks an ESB service as being a join state.
+ *
+ * @param service The service
+ */
+ public void markJoin(ESBService service) {
+ m_joins.add(service);
+ }
+
+ /**
+ * This method determines whether the ESB service is a join
+ * state.
+ *
+ * @param service The serviice
+ * @return Whether the service is a join state
+ */
+ public boolean isJoin(ESBService service) {
+ return(m_joins.contains(service));
+ }
+
+ private static Logger logger =
Logger.getLogger("org.jboss.tools.overlord.jbossesb.model");
+
+ private java.util.List<ESBService> m_serviceStack=new
java.util.Vector<ESBService>();
+ private java.util.List<ESBService> m_joins=new
java.util.Vector<ESBService>();
+}
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBAction.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBAction.java 2008-06-24
14:02:05 UTC (rev 71)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBAction.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -17,6 +17,8 @@
*/
package org.jboss.tools.overlord.jbossesb.model;
+import java.util.logging.Logger;
+
import org.scribble.model.*;
/**
@@ -32,6 +34,9 @@
private static final String NAME_ATTR = "name";
private static final String PROPERTY_ELEMENT = "property";
private static final String CLASS_PROPERTY = "class";
+
+ protected static final String BUSINESS_OBJECT_TYPE_PROPERTY = "session";
+
/**
* The default constructor.
*/
@@ -104,6 +109,29 @@
*/
public void validate(ModelListener l) {
+ String session=getPropertyValue(BUSINESS_OBJECT_TYPE_PROPERTY);
+
+ if (session != null) {
+ // Validate that the business object type exists
+ try {
+ ClassLoader cl=getService().getProjectLoader();
+
+ try {
+ Class.forName(session, true, cl);
+ } catch(ClassNotFoundException cfne) {
+ l.error(this, org.scribble.util.MessageUtil.format(
+ java.util.PropertyResourceBundle.getBundle(
+ "org.jboss.tools.overlord.jbossesb.model.actions.Messages"),
+ "_NOT_FOUND_BUSINESS_OBJECT_TYPE",
+ new String[]{session}), null);
+ }
+
+ } catch(Exception e) {
+ logger.log(java.util.logging.Level.SEVERE,
+ "Failed to load business class '"+session+"'", e);
+ }
+ }
+
// Validate links
for (int i=0; i < m_links.size(); i++) {
ESBLink link=(ESBLink)m_links.get(i);
@@ -123,6 +151,15 @@
}
/**
+ * This method determines if the action represents a loop construct.
+ *
+ * @return Whether the action represents a loop construct
+ */
+ public boolean isLoop() {
+ return(false);
+ }
+
+ /**
* This method returns the action's class name.
*
* @return The action's class name
@@ -213,8 +250,10 @@
*
* @param activities The list of activities that will contain
* the converted action(s)
+ * @param context The conversion context
*/
- public abstract void convert(java.util.List<Activity> activities);
+ public abstract void convert(java.util.List<Activity> activities,
+ ConversionContext context);
/**
* This method returns the position of the service node within the
@@ -273,6 +312,8 @@
return(actionCount);
}
+ private static Logger logger =
Logger.getLogger("org.jboss.tools.overlord.jbossesb.model");
+
private ESBService m_service=null;
private org.w3c.dom.Element m_action=null;
private java.util.List<ESBLink> m_links=new java.util.Vector<ESBLink>();
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBActionFactory.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBActionFactory.java 2008-06-24
14:02:05 UTC (rev 71)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBActionFactory.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -17,6 +17,8 @@
*/
package org.jboss.tools.overlord.jbossesb.model;
+import java.util.logging.Logger;
+
/**
* This class provides a factory for ESBAction instances.
*
@@ -59,10 +61,14 @@
ret.init(service, action);
} catch(Exception e) {
- e.printStackTrace();
+ logger.log(java.util.logging.Level.SEVERE,
+ "Unable to find action class '"+
+ MODEL_ACTION_PACKAGE+"."+actionName+"'", e);
}
}
- } else {
+ }
+
+ if (ret == null) {
// Unrecognised or unsupported action
ret = new UnsupportedAction();
ret.init(service, action);
@@ -70,4 +76,6 @@
return(ret);
}
+
+ private static Logger logger =
Logger.getLogger("org.jboss.tools.overlord.jbossesb.model");
}
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBLanguageModel.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBLanguageModel.java 2008-06-24
14:02:05 UTC (rev 71)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBLanguageModel.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -21,6 +21,7 @@
import java.util.logging.Logger;
import org.scribble.conversation.model.*;
+import org.scribble.extensions.RegistryFactory;
import org.scribble.model.*;
/**
@@ -168,13 +169,46 @@
conv.setBlock(new Block());
- service.convert(conv.getBlock().getContents());
+ service.convert(conv.getBlock().getContents(),
+ new DefaultConversionContext());
getConversations().add(conv);
}
}
-
}
+
+ if (logger.isLoggable(java.util.logging.Level.FINEST)) {
+
+ org.scribble.export.Exporter exporter=
+ (org.scribble.export.Exporter)
+ RegistryFactory.getRegistry().getExtension(
+ org.scribble.export.Exporter.class, null);
+
+ try {
+ for (int i=0; i < getConversations().size(); i++) {
+ ConversationModel model=new ConversationModel();
+
+ model.setConversation(getConversations().get(i));
+
+ org.scribble.export.text.TextFormatter formatter=
+ new org.scribble.export.text.TextFormatter();
+
+ java.io.ByteArrayOutputStream os=
+ new java.io.ByteArrayOutputStream();
+
+ formatter.setOutputStream(os);
+
+ exporter.export(model, formatter);
+
+ String str=new String(os.toByteArray());
+
+ System.out.println("EXPORTED TEXT:");
+ System.out.println(str);
+ }
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ }
}
@Override
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBService.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBService.java 2008-06-24
14:02:05 UTC (rev 71)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/ESBService.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -148,44 +148,56 @@
protected java.lang.annotation.Annotation getServiceAnnotation(String session) {
java.lang.annotation.Annotation ret=null;
- IFile file=OSGIModelRepository.getFile(getModel().getModelReference());
-
- if (file != null) {
- IJavaProject jproj=JavaCore.create(file.getProject());
+ try {
+ ClassLoader cl=getProjectLoader();
- try {
- ClassLoader cl=getProjectLoader(jproj);
-
- Class<?> cls=Class.forName(session, true, cl);
-
- // TODO: This should be replaced by direct lookup
- // of Service annotation - but library not available
- // at the moment
- java.lang.annotation.Annotation[] annotations=
- cls.getAnnotations();
- for (int i=0; ret == null &&
- i < annotations.length; i++) {
- try {
- if (annotations[i].annotationType().getName().equals(
- "org.jboss.soa.overlord.jbossesb.actions.Service")) {
- ret = annotations[i];
- }
- } catch(Throwable ex) {
- // Ignore
- System.err.println("ANNOTATION: "+annotations[i].annotationType());
- ex.printStackTrace();
+ Class<?> cls=Class.forName(session, true, cl);
+
+ // TODO: This should be replaced by direct lookup
+ // of Service annotation - but library not available
+ // at the moment
+ java.lang.annotation.Annotation[] annotations=
+ cls.getAnnotations();
+ for (int i=0; ret == null &&
+ i < annotations.length; i++) {
+ try {
+ if (annotations[i].annotationType().getName().equals(
+ "org.jboss.soa.overlord.jbossesb.actions.Service")) {
+ ret = annotations[i];
}
+ } catch(Throwable ex) {
+ // Ignore
+ System.err.println("ANNOTATION: "+annotations[i].annotationType());
+ ex.printStackTrace();
}
-
- } catch(Exception e) {
- e.printStackTrace();
}
+
+ } catch(Exception e) {
+ e.printStackTrace();
}
return(ret);
}
/**
+ * This method determines whether the ESB service represents a
+ * loop construct.
+ *
+ * @return Whether the service represents a loop
+ */
+ public boolean isLoop() {
+ boolean ret=false;
+
+ if (m_actions.size() > 0) {
+ ESBAction action=(ESBAction)m_actions.get(0);
+
+ ret = action.isLoop();
+ }
+
+ return(ret);
+ }
+
+ /**
* This method determines whether the ESB service descriptor represents
* a 'root' conversation.
*
@@ -289,7 +301,6 @@
ret = action.getPropertyValue(CONVERSATION_TYPE_PROPERTY);
if (ret == null) {
- /* TODO: Uncomment when conversationType defined on Service annotation
String session=action.getPropertyValue(BUSINESS_OBJECT_TYPE_PROPERTY);
java.lang.annotation.Annotation annotation=
@@ -310,7 +321,6 @@
"Failed to get 'name' annotation value", t);
}
}
- */
}
}
}
@@ -325,12 +335,18 @@
*
* @param activities The target list of activities associated with the
* ESB actions being converted
+ * @param context The conversion context
*/
- public void convert(java.util.List<Activity> activities) {
+ public void convert(java.util.List<Activity> activities,
+ ConversionContext context) {
+ context.processing(this);
+
for (int i=0; i < m_actions.size(); i++) {
- ((ESBAction)m_actions.get(i)).convert(activities);
+ ((ESBAction)m_actions.get(i)).convert(activities, context);
}
+
+ context.processed(this);
}
/**
@@ -339,55 +355,76 @@
*
* @see
http://dev.eclipse.org/newslists/news.eclipse.tools.jdt/msg17769.html
*
- * @param javaProject The Java project containing the config file
* @return The classloader
* @throws Exception Failed to obtain the classloader
*/
- private static ClassLoader getProjectLoader(IJavaProject javaProject)
- throws Exception {
- IClasspathEntry[] entries = javaProject.getResolvedClasspath(true);
- String wsPath = javaProject.getProject().getLocation().toPortableString();
- String firstEntryLocation = javaProject.getPath().toPortableString();
- int idx = wsPath.indexOf(firstEntryLocation);
- wsPath = wsPath.substring(0,idx);
+ protected ClassLoader getProjectLoader() throws Exception {
+ java.net.URLClassLoader classLoader=null;
+ IFile file=OSGIModelRepository.getFile(getModel().getModelReference());
+
+ if (file != null) {
+ IJavaProject javaProject=JavaCore.create(file.getProject());
+ IClasspathEntry[] entries = javaProject.getResolvedClasspath(true);
+ String wsPath = javaProject.getProject().getLocation().toPortableString();
+ String firstEntryLocation = javaProject.getPath().toPortableString();
+ int idx = wsPath.indexOf(firstEntryLocation);
+ wsPath = wsPath.substring(0,idx);
+
+ String fullPath = null;
- String fullPath = null;
-
- java.net.URL[] urls = new java.net.URL[entries.length+1];
- int i = 0;
- urls[i++] = new java.io.File(wsPath +
- javaProject.getOutputLocation().toPortableString()).toURL();
-
- for (IClasspathEntry entry : entries) {
- if(entry.getEntryKind() == IClasspathEntry.CPE_PROJECT) {
- IResource project =
- ResourcesPlugin.getWorkspace().getRoot().findMember(entry.getPath());
- String projectPath =
- JavaCore.create(project.getProject()).getOutputLocation().toPortableString();
- fullPath = wsPath + projectPath;
- } else {
- // TODO: Need to find alternative to this internal class (JavaModel)
- Object resource =
- JavaModel.getTarget(ResourcesPlugin.getWorkspace().getRoot(),entry.getPath(),true);
-
- if (resource instanceof IResource) {
- IResource iFile = (IResource) resource;
- fullPath = iFile.getLocation().toPortableString();
- } else if (resource instanceof java.io.File) {
- java.io.File file = (java.io.File) resource;
- fullPath = file.getAbsolutePath();
+ java.net.URL[] urls = new java.net.URL[entries.length+1];
+ int i = 0;
+ urls[i++] = new java.io.File(wsPath +
+ javaProject.getOutputLocation().toPortableString()).toURL();
+
+ for (IClasspathEntry entry : entries) {
+ if(entry.getEntryKind() == IClasspathEntry.CPE_PROJECT) {
+ IResource project =
+ ResourcesPlugin.getWorkspace().getRoot().findMember(entry.getPath());
+ String projectPath =
+ JavaCore.create(project.getProject()).getOutputLocation().toPortableString();
+ fullPath = wsPath + projectPath;
+ } else {
+ // TODO: Need to find alternative to this internal class (JavaModel)
+ Object resource =
+ JavaModel.getTarget(ResourcesPlugin.getWorkspace().getRoot(),entry.getPath(),true);
+
+ if (resource instanceof IResource) {
+ IResource iFile = (IResource) resource;
+ fullPath = iFile.getLocation().toPortableString();
+ } else if (resource instanceof java.io.File) {
+ java.io.File resfile = (java.io.File) resource;
+ fullPath = resfile.getAbsolutePath();
+ }
}
+
+ urls[i++] = new java.io.File(fullPath).toURL();
}
- urls[i++] = new java.io.File(fullPath).toURL();
+ classLoader = new java.net.URLClassLoader(urls,String.class.getClassLoader());
}
-
- java.net.URLClassLoader classLoader = new
- java.net.URLClassLoader(urls,String.class.getClassLoader());
-
+
return(classLoader);
- }
+ }
+ public int hashCode() {
+ return(m_service.hashCode());
+ }
+
+ public boolean equals(Object obj) {
+ boolean ret=false;
+
+ if (obj instanceof ESBService) {
+ ESBService other=(ESBService)obj;
+
+ if (m_service == other.m_service) {
+ ret = true;
+ }
+ }
+
+ return(ret);
+ }
+
private static Logger logger =
Logger.getLogger("org.jboss.tools.overlord.jbossesb.model");
private ESBLanguageModel m_model=null;
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/UnsupportedAction.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/UnsupportedAction.java 2008-06-24
14:02:05 UTC (rev 71)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/UnsupportedAction.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -33,8 +33,10 @@
*
* @param activities The list of activities that will contain
* the converted action(s)
+ * @param context The conversion context
*/
- public void convert(java.util.List<Activity> activities) {
+ public void convert(java.util.List<Activity> activities,
+ ConversionContext context) {
}
}
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/CreateSessionAction.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/CreateSessionAction.java 2008-06-24
14:02:05 UTC (rev 71)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/CreateSessionAction.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -17,7 +17,9 @@
*/
package org.jboss.tools.overlord.jbossesb.model.actions;
+import org.jboss.tools.overlord.jbossesb.model.ConversionContext;
import org.jboss.tools.overlord.jbossesb.model.ESBAction;
+import org.jboss.tools.overlord.jbossesb.model.ESBService;
import org.scribble.model.*;
/**
@@ -33,8 +35,11 @@
*
* @param activities The list of activities that will contain
* the converted action(s)
+ * @param context The conversion context
*/
- public void convert(java.util.List<Activity> activities) {
+ @Override
+ public void convert(java.util.List<Activity> activities,
+ ConversionContext context) {
}
}
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/IfAction.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/IfAction.java 2008-06-24
14:02:05 UTC (rev 71)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/IfAction.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -17,6 +17,7 @@
*/
package org.jboss.tools.overlord.jbossesb.model.actions;
+import org.jboss.tools.overlord.jbossesb.model.ConversionContext;
import org.jboss.tools.overlord.jbossesb.model.ESBAction;
import org.jboss.tools.overlord.jbossesb.model.ESBLink;
import org.jboss.tools.overlord.jbossesb.model.ESBService;
@@ -89,8 +90,11 @@
*
* @param activities The list of activities that will contain
* the converted action(s)
+ * @param context The conversion context
*/
- public void convert(java.util.List<Activity> activities) {
+ @Override
+ public void convert(java.util.List<Activity> activities,
+ ConversionContext context) {
org.w3c.dom.NodeList nl=getPropertyChildNodes(PATHS);
@@ -116,7 +120,7 @@
ESBService service=getService().getModel().getService(category, name);
if (service != null) {
- service.convert(cond.getContents());
+ service.convert(cond.getContents(), context);
}
}
}
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/Messages.properties
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/Messages.properties 2008-06-24
14:02:05 UTC (rev 71)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/Messages.properties 2008-06-25
18:19:59 UTC (rev 72)
@@ -16,4 +16,6 @@
# * MA 02110-1301, USA.
# */
+_NOT_FOUND_BUSINESS_OBJECT_TYPE=Business object type '{0}' could not be found
_NOT_FOUND_SERVICE_DESCRIPTOR=Service descriptor for category '{0}' and name
'{1}' not found
+_MUST_BE_FIRST_ACTION='{0}' action must be first in the service descriptor
\ No newline at end of file
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/ParallelAction.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/ParallelAction.java 2008-06-24
14:02:05 UTC (rev 71)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/ParallelAction.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -17,6 +17,7 @@
*/
package org.jboss.tools.overlord.jbossesb.model.actions;
+import org.jboss.tools.overlord.jbossesb.model.ConversionContext;
import org.jboss.tools.overlord.jbossesb.model.ESBAction;
import org.jboss.tools.overlord.jbossesb.model.ESBLink;
import org.jboss.tools.overlord.jbossesb.model.ESBService;
@@ -72,8 +73,11 @@
*
* @param activities The list of activities that will contain
* the converted action(s)
+ * @param context The conversion context
*/
- public void convert(java.util.List<Activity> activities) {
+ @Override
+ public void convert(java.util.List<Activity> activities,
+ ConversionContext context) {
org.w3c.dom.NodeList nl=getPropertyChildNodes(PATHS);
@@ -94,7 +98,7 @@
ESBService service=getService().getModel().getService(category, name);
if (service != null) {
- service.convert(block.getContents());
+ service.convert(block.getContents(), context);
}
if (block.getContents().size() > 0) {
@@ -109,7 +113,7 @@
if (service != null) {
// Join activities should be added after the
// parallel construct
- service.convert(activities);
+ service.convert(activities, context);
}
}
}
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/ReceiveMessageAction.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/ReceiveMessageAction.java 2008-06-24
14:02:05 UTC (rev 71)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/ReceiveMessageAction.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -17,6 +17,7 @@
*/
package org.jboss.tools.overlord.jbossesb.model.actions;
+import org.jboss.tools.overlord.jbossesb.model.ConversionContext;
import org.jboss.tools.overlord.jbossesb.model.ESBAction;
import org.scribble.conversation.model.*;
import org.scribble.model.*;
@@ -37,8 +38,11 @@
*
* @param activities The list of activities that will contain
* the converted action(s)
+ * @param context The conversion context
*/
- public void convert(java.util.List<Activity> activities) {
+ @Override
+ public void convert(java.util.List<Activity> activities,
+ ConversionContext context) {
ConversationInteraction recv=new ConversationInteraction();
activities.add(recv);
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/RetrieveSessionAction.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/RetrieveSessionAction.java 2008-06-24
14:02:05 UTC (rev 71)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/RetrieveSessionAction.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -17,6 +17,7 @@
*/
package org.jboss.tools.overlord.jbossesb.model.actions;
+import org.jboss.tools.overlord.jbossesb.model.ConversionContext;
import org.jboss.tools.overlord.jbossesb.model.ESBAction;
import org.scribble.model.*;
@@ -33,8 +34,11 @@
*
* @param activities The list of activities that will contain
* the converted action(s)
+ * @param context The conversion context
*/
- public void convert(java.util.List<Activity> activities) {
+ @Override
+ public void convert(java.util.List<Activity> activities,
+ ConversionContext context) {
}
}
\ No newline at end of file
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/ScheduleStateAction.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/ScheduleStateAction.java 2008-06-24
14:02:05 UTC (rev 71)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/ScheduleStateAction.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -17,8 +17,11 @@
*/
package org.jboss.tools.overlord.jbossesb.model.actions;
+import org.jboss.tools.overlord.jbossesb.model.ConversionContext;
import org.jboss.tools.overlord.jbossesb.model.ESBAction;
+import org.jboss.tools.overlord.jbossesb.model.ESBLink;
import org.scribble.model.*;
+import org.jboss.tools.overlord.jbossesb.model.ESBService;
/**
* The model component for the 'ScheduleStateAction'.
@@ -28,13 +31,49 @@
public class ScheduleStateAction extends ESBAction {
/**
+ * This method initializes the links with the ESB service descriptors
+ * identified in each path of the action.
+ */
+ @Override
+ protected void initializeLinks() {
+ super.initializeLinks();
+
+ String serviceCategory=getPropertyValue("serviceCategory");
+ String serviceName=getPropertyValue("serviceName");
+ String immediate=getPropertyValue("immediate");
+
+ m_service=getService().getModel().getService(serviceCategory, serviceName);
+
+ getLinks().add(new ESBLink(serviceCategory, serviceName, m_service,
+ (immediate != null && immediate.equalsIgnoreCase("true"))));
+ }
+
+ /**
* This method converts the ESB action into an equivalent
* behavioural description for conformance checking.
*
* @param activities The list of activities that will contain
* the converted action(s)
+ * @param context The conversion context
*/
- public void convert(java.util.List<Activity> activities) {
+ @Override
+ public void convert(java.util.List<Activity> activities,
+ ConversionContext context) {
+
+ // If the service has been located, then convert its activities
+ // if it is either not a loop construct (i.e. a while action), or
+ // if it is a loop, then we need to ensure that it is not in the
+ // current stack of ESB services that logically 'contain' this
+ // action. If this action is within the scope of the loop, then
+ // the default behaviour should be to return to the loop
+ // condition (i.e. just let the loop return implicitly).
+ if (m_service != null &&
+ (m_service.isLoop() == false ||
+ context.isOnStack(m_service) == false) &&
+ context.isJoin(m_service) == false) {
+ m_service.convert(activities, context);
+ }
}
+ private ESBService m_service=null;
}
\ No newline at end of file
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/SendMessageAction.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/SendMessageAction.java 2008-06-24
14:02:05 UTC (rev 71)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/SendMessageAction.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -17,6 +17,7 @@
*/
package org.jboss.tools.overlord.jbossesb.model.actions;
+import org.jboss.tools.overlord.jbossesb.model.ConversionContext;
import org.jboss.tools.overlord.jbossesb.model.ESBAction;
import org.jboss.tools.overlord.jbossesb.model.ESBLink;
import org.jboss.tools.overlord.jbossesb.model.ESBService;
@@ -73,8 +74,11 @@
*
* @param activities The list of activities that will contain
* the converted action(s)
+ * @param context The conversion context
*/
- public void convert(java.util.List<Activity> activities) {
+ @Override
+ public void convert(java.util.List<Activity> activities,
+ ConversionContext context) {
ConversationInteraction send=new ConversationInteraction();
activities.add(send);
@@ -128,7 +132,7 @@
// the set of activities. If service not found, then ignore
// here as will be reported as part of the validation of links.
if (service != null) {
- service.convert(activities);
+ service.convert(activities, context);
}
}
}
Modified:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/SwitchAction.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/SwitchAction.java 2008-06-24
14:02:05 UTC (rev 71)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/SwitchAction.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -17,6 +17,7 @@
*/
package org.jboss.tools.overlord.jbossesb.model.actions;
+import org.jboss.tools.overlord.jbossesb.model.ConversionContext;
import org.jboss.tools.overlord.jbossesb.model.ESBAction;
import org.jboss.tools.overlord.jbossesb.model.ESBLink;
import org.jboss.tools.overlord.jbossesb.model.ESBService;
@@ -70,8 +71,11 @@
*
* @param activities The list of activities that will contain
* the converted action(s)
+ * @param context The conversion context
*/
- public void convert(java.util.List<Activity> activities) {
+ @Override
+ public void convert(java.util.List<Activity> activities,
+ ConversionContext context) {
org.w3c.dom.NodeList nl=getPropertyChildNodes(PATHS);
@@ -96,7 +100,7 @@
ESBService service=getService().getModel().getService(category, name);
if (service != null) {
- service.convert(block.getContents());
+ service.convert(block.getContents(), context);
}
}
}
Added:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/WhenAction.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/WhenAction.java
(rev 0)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/WhenAction.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -0,0 +1,145 @@
+/*
+ * 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.actions;
+
+import org.jboss.tools.overlord.jbossesb.model.ConversionContext;
+import org.jboss.tools.overlord.jbossesb.model.ESBAction;
+import org.jboss.tools.overlord.jbossesb.model.ESBLink;
+import org.jboss.tools.overlord.jbossesb.model.ESBService;
+import org.scribble.model.*;
+import org.scribble.conversation.model.*;
+
+/**
+ * The model component for the 'WhenAction'.
+ *
+ * @author gary
+ */
+public class WhenAction extends ESBAction {
+
+ private static final String SERVICE_NAME = "service-name";
+ private static final String SERVICE_CATEGORY = "service-category";
+ private static final String WHEN = "when";
+ private static final String JOIN = "join";
+ private static final String PATHS = "paths";
+
+ /**
+ * This method initializes the links with the ESB service descriptors
+ * identified in each path of the action.
+ */
+ @Override
+ protected void initializeLinks() {
+ super.initializeLinks();
+
+ org.w3c.dom.NodeList nl=getPropertyChildNodes(PATHS);
+
+ for (int i=0; i < nl.getLength(); i++) {
+
+ org.w3c.dom.Node n=nl.item(i);
+
+ if (n instanceof org.w3c.dom.Element) {
+ if (n.getNodeName().equals(WHEN)) {
+ String category=((org.w3c.dom.Element)n).getAttribute(SERVICE_CATEGORY);
+ String name=((org.w3c.dom.Element)n).getAttribute(SERVICE_NAME);
+
+ // Lookup service associated with category and name
+ ESBService service=getService().getModel().getService(category, name);
+
+ // Initialize link, even if service is null - this will be
+ // reported as a validation error later
+ getLinks().add(new ESBLink(category, name, service, true));
+
+ if (service != null) {
+ m_services.add(service);
+ }
+
+ } else if (n.getNodeName().equals(JOIN)) {
+ m_joinCategory=((org.w3c.dom.Element)n).getAttribute(SERVICE_CATEGORY);
+ m_joinName=((org.w3c.dom.Element)n).getAttribute(SERVICE_NAME);
+
+ // Lookup service associated with category and name
+ m_joinService=getService().getModel().getService(m_joinCategory, m_joinName);
+
+ // Initialize link, even if service is null - this will be
+ // reported as a validation error later
+ getLinks().add(new ESBLink(m_joinCategory, m_joinName, m_joinService, true));
+ }
+ }
+ }
+ }
+
+ /**
+ * This method validates the ESB action and reports warnings or
+ * errors to the supplied model listener.
+ *
+ * @param l The model listener
+ */
+ @Override
+ public void validate(ModelListener l) {
+ super.validate(l);
+
+ // TODO: Validate only one 'when' element, if decision-method
+ // specified, that method exists, if expression, then
+ // validate the expression etc.
+
+ }
+
+ /**
+ * This method converts the ESB action into an equivalent
+ * behavioural description for conformance checking.
+ *
+ * @param activities The list of activities that will contain
+ * the converted action(s)
+ * @param context The conversion context
+ */
+ @Override
+ public void convert(java.util.List<Activity> activities,
+ ConversionContext context) {
+
+ When elem=new When();
+ activities.add(elem);
+
+ elem.derivedFrom(this);
+
+ if (m_joinService != null) {
+ context.markJoin(m_joinService);
+ }
+
+ for (int i=0; i < m_services.size(); i++) {
+ ConditionalBlock block=new ConditionalBlock();
+
+ m_services.get(i).convert(block.getContents(), context);
+
+ if (block.getContents().size() > 0) {
+ elem.getConditionalBlocks().add(block);
+ }
+ }
+
+ if (elem.getConditionalBlocks().size() == 0) {
+ activities.remove(elem);
+ }
+
+ if (m_joinService != null) {
+ m_joinService.convert(activities, context);
+ }
+ }
+
+ private java.util.List<ESBService> m_services=new
java.util.Vector<ESBService>();
+ private String m_joinCategory=null;
+ private String m_joinName=null;
+ private ESBService m_joinService=null;
+}
Added:
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/WhileAction.java
===================================================================
---
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/WhileAction.java
(rev 0)
+++
trunk/cdl/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/WhileAction.java 2008-06-25
18:19:59 UTC (rev 72)
@@ -0,0 +1,173 @@
+/*
+ * 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.actions;
+
+import org.jboss.tools.overlord.jbossesb.model.ConversionContext;
+import org.jboss.tools.overlord.jbossesb.model.ESBAction;
+import org.jboss.tools.overlord.jbossesb.model.ESBLink;
+import org.jboss.tools.overlord.jbossesb.model.ESBService;
+import org.scribble.model.*;
+import org.scribble.conversation.model.*;
+
+/**
+ * The model component for the 'WhileAction'.
+ *
+ * @author gary
+ */
+public class WhileAction extends ESBAction {
+
+ private static final String SERVICE_NAME = "service-name";
+ private static final String SERVICE_CATEGORY = "service-category";
+ private static final String IMMEDIATE = "immediate";
+ private static final String WHILE = "while";
+ private static final String EXIT = "exit";
+ private static final String PATHS = "paths";
+
+ /**
+ * This method initializes the links with the ESB service descriptors
+ * identified in each path of the action.
+ */
+ @Override
+ protected void initializeLinks() {
+ super.initializeLinks();
+
+ org.w3c.dom.NodeList nl=getPropertyChildNodes(PATHS);
+
+ for (int i=0; i < nl.getLength(); i++) {
+
+ org.w3c.dom.Node n=nl.item(i);
+
+ if (n instanceof org.w3c.dom.Element) {
+ if (n.getNodeName().equals(WHILE)) {
+ m_loopCategory=((org.w3c.dom.Element)n).getAttribute(SERVICE_CATEGORY);
+ m_loopName=((org.w3c.dom.Element)n).getAttribute(SERVICE_NAME);
+
+ // Lookup service associated with category and name
+ m_loopService=getService().getModel().getService(m_loopCategory, m_loopName);
+
+ String immediate=((org.w3c.dom.Element)n).getAttribute(IMMEDIATE);
+
+ // Initialize link, even if service is null - this will be
+ // reported as a validation error later
+ getLinks().add(new ESBLink(m_loopCategory, m_loopName, m_loopService,
+ (immediate != null && immediate.equalsIgnoreCase("true"))));
+ } else if (n.getNodeName().equals(EXIT)) {
+ m_exitCategory=((org.w3c.dom.Element)n).getAttribute(SERVICE_CATEGORY);
+ m_exitName=((org.w3c.dom.Element)n).getAttribute(SERVICE_NAME);
+
+ // Lookup service associated with category and name
+ m_exitService=getService().getModel().getService(m_exitCategory, m_exitName);
+
+ String immediate=((org.w3c.dom.Element)n).getAttribute(IMMEDIATE);
+
+ // Initialize link, even if service is null - this will be
+ // reported as a validation error later
+ getLinks().add(new ESBLink(m_exitCategory, m_exitName, m_exitService,
+ (immediate != null && immediate.equalsIgnoreCase("true"))));
+ }
+ }
+ }
+ }
+
+ /**
+ * This method determines if the action represents a loop construct.
+ *
+ * @return Whether the action represents a loop construct
+ */
+ @Override
+ public boolean isLoop() {
+ return(true);
+ }
+
+ /**
+ * This method validates the ESB action and reports warnings or
+ * errors to the supplied model listener.
+ *
+ * @param l The model listener
+ */
+ @Override
+ public void validate(ModelListener l) {
+ super.validate(l);
+
+ // While action must be first conversation based action in
+ // the service
+ if (getService() != null && getService().getActions().size() > 0) {
+ ESBAction act=getService().getActions().get(0);
+
+ if (act != this) {
+ l.error(this, org.scribble.util.MessageUtil.format(
+ java.util.PropertyResourceBundle.getBundle(
+ "org.jboss.tools.overlord.jbossesb.model.actions.Messages"),
+ "_MUST_BE_FIRST_ACTION",
+ new String[]{"While"}), null);
+ }
+ }
+
+ // TODO: Validate while/exit order, if decision-method
+ // specified, that method exists, if expression, then
+ // validate the expression etc.
+
+ // TODO: Validate that the loop service returns back to the
+ // while action for all paths
+
+ }
+
+ /**
+ * This method converts the ESB action into an equivalent
+ * behavioural description for conformance checking.
+ *
+ * @param activities The list of activities that will contain
+ * the converted action(s)
+ * @param context The conversion context
+ */
+ @Override
+ public void convert(java.util.List<Activity> activities,
+ ConversionContext context) {
+
+ While elem=new While();
+ activities.add(elem);
+
+ elem.derivedFrom(this);
+
+ ConditionalBlock block=new ConditionalBlock();
+ elem.setBlock(block);
+
+ if (m_loopService != null) {
+ context.push(getService());
+
+ m_loopService.convert(elem.getBlock().getContents(), context);
+
+ context.pop(getService());
+ }
+
+ if (elem.getBlock().getContents().size() == 0) {
+ activities.remove(elem);
+ }
+
+ if (m_exitService != null) {
+ m_exitService.convert(activities, context);
+ }
+ }
+
+ private String m_loopCategory=null;
+ private String m_loopName=null;
+ private ESBService m_loopService=null;
+ private String m_exitCategory=null;
+ private String m_exitName=null;
+ private ESBService m_exitService=null;
+}