Author: thomas.diesler(a)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(a)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