[jbpm-commits] JBoss JBPM SVN: r1654 - api/branches/tdiesler/modules/dialects/jaxb/src/main/java/org/jboss/bpm/dialect/jaxb.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Jul 16 12:21:08 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-07-16 12:21:08 -0400 (Wed, 16 Jul 2008)
New Revision: 1654

Added:
   api/branches/tdiesler/modules/dialects/jaxb/src/main/java/org/jboss/bpm/dialect/jaxb/ProcessAdapter.java
Log:


Added: api/branches/tdiesler/modules/dialects/jaxb/src/main/java/org/jboss/bpm/dialect/jaxb/ProcessAdapter.java
===================================================================
--- api/branches/tdiesler/modules/dialects/jaxb/src/main/java/org/jboss/bpm/dialect/jaxb/ProcessAdapter.java	                        (rev 0)
+++ api/branches/tdiesler/modules/dialects/jaxb/src/main/java/org/jboss/bpm/dialect/jaxb/ProcessAdapter.java	2008-07-16 16:21:08 UTC (rev 1654)
@@ -0,0 +1,184 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY 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 along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.dialect.jaxb;
+
+// $Id$
+
+import org.jboss.bpm.InvalidProcessException;
+import org.jboss.bpm.NotImplementedException;
+import org.jboss.bpm.dialect.jaxb.model.JAXBComplexGateway;
+import org.jboss.bpm.dialect.jaxb.model.JAXBEndEvent;
+import org.jboss.bpm.dialect.jaxb.model.JAXBExclusiveGateway;
+import org.jboss.bpm.dialect.jaxb.model.JAXBFlow;
+import org.jboss.bpm.dialect.jaxb.model.JAXBFlowObject;
+import org.jboss.bpm.dialect.jaxb.model.JAXBGateway;
+import org.jboss.bpm.dialect.jaxb.model.JAXBHandler;
+import org.jboss.bpm.dialect.jaxb.model.JAXBInclusiveGateway;
+import org.jboss.bpm.dialect.jaxb.model.JAXBIntermediateEvent;
+import org.jboss.bpm.dialect.jaxb.model.JAXBParallelGateway;
+import org.jboss.bpm.dialect.jaxb.model.JAXBProcess;
+import org.jboss.bpm.dialect.jaxb.model.JAXBStartEvent;
+import org.jboss.bpm.dialect.jaxb.model.JAXBSubProcess;
+import org.jboss.bpm.dialect.jaxb.model.JAXBTask;
+import org.jboss.bpm.model.EndEvent;
+import org.jboss.bpm.model.Event;
+import org.jboss.bpm.model.FlowObject;
+import org.jboss.bpm.model.Gateway;
+import org.jboss.bpm.model.IntermediateEvent;
+import org.jboss.bpm.model.Process;
+import org.jboss.bpm.model.ProcessBuilder;
+import org.jboss.bpm.model.ProcessBuilderFactory;
+import org.jboss.bpm.model.StartEvent;
+import org.jboss.bpm.model.SubProcess;
+import org.jboss.bpm.model.Task;
+
+/**
+ * Adapt the JAXBProcess to the API Process
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 18-Jun-2008
+ */
+public class ProcessAdapter
+{
+  private ProcessBuilder builder;
+
+  public Process adaptProcess(JAXBProcess jaxbProc)
+  {
+    builder = ProcessBuilderFactory.newInstance(jaxbProc.getName());
+    for (JAXBFlowObject jaxbFlowObject : jaxbProc.getFlowObjects())
+    {
+      FlowObject apiFlowObject;
+      if (jaxbFlowObject instanceof JAXBStartEvent)
+      {
+        StartEvent event = builder.createStartEvent();
+        apiFlowObject = adaptStartEvent(event, (JAXBStartEvent)jaxbFlowObject);
+      }
+      else if (jaxbFlowObject instanceof JAXBIntermediateEvent)
+      {
+        IntermediateEvent event = builder.createIntermediateEvent(((JAXBIntermediateEvent)jaxbFlowObject).getName());
+        apiFlowObject = adaptIntermediateEvent(event, (JAXBIntermediateEvent)jaxbFlowObject);
+      }
+      else if (jaxbFlowObject instanceof JAXBEndEvent)
+      {
+        EndEvent event = builder.createEndEvent(((JAXBEndEvent)jaxbFlowObject).getName());
+        apiFlowObject = adaptEndEvent(event, (JAXBEndEvent)jaxbFlowObject);
+      }
+      else if (jaxbFlowObject instanceof JAXBSubProcess)
+      {
+        SubProcess subproc = builder.createSubProcess(((JAXBSubProcess)jaxbFlowObject).getName());
+        apiFlowObject = adaptSubProcess(subproc, (JAXBSubProcess)jaxbFlowObject);
+      }
+      else if (jaxbFlowObject instanceof JAXBTask)
+      {
+        Task task = builder.createTask(((JAXBTask)jaxbFlowObject).getName());
+        apiFlowObject = adaptTask(task, (JAXBTask)jaxbFlowObject);
+      }
+      else if (jaxbFlowObject instanceof JAXBExclusiveGateway)
+      {
+        Gateway gateway = builder.createExclusiveGateway(((JAXBGateway)jaxbFlowObject).getName());
+        apiFlowObject = adaptGateway(gateway, (JAXBGateway)jaxbFlowObject);
+      }
+      else if (jaxbFlowObject instanceof JAXBInclusiveGateway)
+      {
+        Gateway gateway = builder.createInclusiveGateway(((JAXBGateway)jaxbFlowObject).getName());
+        apiFlowObject = adaptGateway(gateway, (JAXBGateway)jaxbFlowObject);
+      }
+      else if (jaxbFlowObject instanceof JAXBComplexGateway)
+      {
+        Gateway gateway = builder.createComplexGateway(((JAXBGateway)jaxbFlowObject).getName());
+        apiFlowObject = adaptGateway(gateway, (JAXBGateway)jaxbFlowObject);
+      }
+      else if (jaxbFlowObject instanceof JAXBParallelGateway)
+      {
+        Gateway gateway = builder.createParallelGateway(((JAXBGateway)jaxbFlowObject).getName());
+        apiFlowObject = adaptGateway(gateway, (JAXBGateway)jaxbFlowObject);
+      }
+      else
+      {
+        throw new InvalidProcessException("Unsupported type: " + jaxbFlowObject);
+      }
+      builder.addFlowObject(apiFlowObject);
+    }
+
+    Process proc = builder.getProcess();
+    return proc;
+  }
+
+  private Gateway adaptGateway(Gateway gateway, JAXBGateway jaxb)
+  {
+    for(JAXBFlow flow : jaxb.getOutFlows())
+    {
+      builder.addSequenceFlow(flow.getTargetName());
+    }
+    return gateway;
+  }
+
+  private Task adaptTask(Task task, JAXBTask jaxb)
+  {
+    String targetName = jaxb.getOutFlow().getTargetName();
+    builder.addSequenceFlow(targetName);
+    
+    JAXBHandler jaxbHandler = jaxb.getExecutionHandler();
+    if (jaxbHandler != null)
+    {
+      builder.addExecutionHandler(loadHandler(jaxbHandler.getClassName()));
+    }
+    return task;
+  }
+
+  private Event adaptStartEvent(StartEvent event, JAXBStartEvent jaxb)
+  {
+    String targetName = jaxb.getOutFlow().getTargetName();
+    builder.addSequenceFlow(targetName);
+    return event;
+  }
+
+  private Event adaptIntermediateEvent(IntermediateEvent event, JAXBIntermediateEvent jaxb)
+  {
+    String targetName = jaxb.getOutFlow().getTargetName();
+    builder.addSequenceFlow(targetName);
+    return event;
+  }
+
+  private Event adaptEndEvent(EndEvent event, JAXBEndEvent jaxb)
+  {
+    return event;
+  }
+
+  private SubProcess adaptSubProcess(SubProcess subproc, JAXBSubProcess jaxb)
+  {
+    throw new NotImplementedException();
+  }
+
+  private Class<?> loadHandler(String className)
+  {
+    try
+    {
+      ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader();
+      return ctxLoader.loadClass(className);
+    }
+    catch (ClassNotFoundException e)
+    {
+      throw new IllegalStateException("Cannot load handler class: " + className);
+    }
+  }
+}


Property changes on: api/branches/tdiesler/modules/dialects/jaxb/src/main/java/org/jboss/bpm/dialect/jaxb/ProcessAdapter.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF




More information about the jbpm-commits mailing list