[jbpm-commits] JBoss JBPM SVN: r2516 - in projects/spec/trunk: modules/api/src/main/java/org/jbpm/api/model and 24 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Fri Oct 10 02:56:39 EDT 2008
Author: thomas.diesler at jboss.com
Date: 2008-10-10 02:56:39 -0400 (Fri, 10 Oct 2008)
New Revision: 2516
Added:
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/SignalBuilder.java
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/SignalBuilderService.java
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcessDefinitionPersistenceTest.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertySupportImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SignalImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/SignalBuilderImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/SignalBuilderServiceImpl.java
projects/spec/trunk/modules/ri/src/test/java/org/
projects/spec/trunk/modules/ri/src/test/java/org/jbpm/
projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/
projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/
projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/service/
projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/service/persistence/
projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/service/persistence/TaskPersistenceTest.java
Removed:
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/NodePersistenceTest.java
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcesDefinitionPersistenceTest.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StructureDelegateImpl.java
Modified:
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/ProcessDefinition.java
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Signal.java
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Task.java
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/internal/PropertySupport.java
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/PersistenceService.java
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java
projects/spec/trunk/modules/cts/pom.xml
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/process/ProcessPropertyTest.java
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessDefinitionServiceTest.java
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalMultithreadTest.java
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalServiceTest.java
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java
projects/spec/trunk/modules/ri/pom.xml
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AssignmentImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EndEventImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EventImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ExpressionImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/GatewayImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/InputSetImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/MessageImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/NodeImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/OutputSetImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ParticipantImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertyImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SendTaskImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SequenceFlowImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StartEventImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/TaskImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/UserTaskImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/EventBuilderImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/DelegatingExecutionContext.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/RuntimeProcess.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/InMemoryPersistenceServiceImpl.java
projects/spec/trunk/modules/ri/src/main/resources/jbpm-cfg-beans.xml
projects/spec/trunk/modules/ri/src/test/resources/log4j.xml
projects/spec/trunk/pom.xml
Log:
More on persistence handling
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/ProcessDefinition.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/ProcessDefinition.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/ProcessDefinition.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -21,10 +21,10 @@
*/
package org.jbpm.api.model;
+//$Id$
+
import org.jbpm.api.model.internal.ProcessStructure;
-//$Id$
-
/**
* A ProcessDefinition defines the structure of an activity performed within a company or organization.
*
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Signal.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Signal.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Signal.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -21,26 +21,25 @@
*/
package org.jbpm.api.model;
+//$Id$
+
import java.io.Serializable;
import javax.management.ObjectName;
-// $Id$
-
/**
- * A Signal thrown by the ProcessEngine
- *
+ * A Signal is like an undirected flare shot up
+ * into the air.
+ *
* @author Thomas.Diesler at jboss.com
* @since 08-Jul-2008
*/
-public final class Signal implements Serializable
+public interface Signal extends Serializable
{
- private static final long serialVersionUID = 1L;
-
/**
* Defines the types of supported Signals
*/
- public enum SignalType
+ enum SignalType
{
SYSTEM_START_EVENT_ENTER, SYSTEM_START_EVENT_EXIT, SYSTEM_START_TRIGGER,
SYSTEM_EVENT_ENTER, SYSTEM_EVENT_EXIT, SYSTEM_EVENT_TRIGGER,
@@ -51,55 +50,18 @@
USER_SIGNAL
}
- private SignalType type;
- private String message;
- private ObjectName fromRef;
-
- /**
- * Create the signal for a given source and type
+ /**
+ * Get the signal type of this signal
*/
- public Signal(ObjectName fromRef, SignalType type)
- {
- this.fromRef = fromRef;
- this.type = type;
- if (fromRef == null)
- throw new IllegalArgumentException("Signal fromRef cannot be null");
- if (type == null)
- throw new IllegalArgumentException("SignalType cannot be null");
- }
+ SignalType getSignalType();
- /**
- * Create the signal for a given source, type and message
+ /**
+ * Get the sending participant for this signal
*/
- public Signal(ObjectName fromRef, SignalType type, String message)
- {
- this(fromRef, type);
- this.message = message;
- }
+ ObjectName getFromRef();
- public ObjectName getFromRef()
- {
- return fromRef;
- }
-
- public SignalType getSignalType()
- {
- return type;
- }
-
- public String getMessage()
- {
- return message;
- }
-
- public String toString()
- {
- StringBuilder string = new StringBuilder(type + "[" + fromRef);
- if (message != null)
- {
- string.append(":" + message);
- }
- string.append("]");
- return string.toString();
- }
+ /**
+ * Get the optional message associated with this signal
+ */
+ public String getMessage();
}
\ No newline at end of file
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Task.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Task.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Task.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -57,6 +57,11 @@
TaskType getTaskType();
/**
+ * Get the incomming SequenceFlow
+ */
+ SequenceFlow getInFlow();
+
+ /**
* Get the outgoing SequenceFlow
*/
SequenceFlow getOutFlow();
Added: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/SignalBuilder.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/SignalBuilder.java (rev 0)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/SignalBuilder.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -0,0 +1,44 @@
+/*
+ * 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.jbpm.api.model.builder;
+
+//$Id$
+
+import javax.management.ObjectName;
+
+import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.Signal.SignalType;
+
+
+/**
+ * A SignalBuilder can be used to build a {@link Signal} dynamically.
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public interface SignalBuilder
+{
+ /**
+ * Create a Signal
+ */
+ Signal newSignal(SignalType signalType, ObjectName fromRef, String message);
+}
\ No newline at end of file
Property changes on: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/SignalBuilder.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/internal/PropertySupport.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/internal/PropertySupport.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/internal/PropertySupport.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -47,13 +47,18 @@
void addProperty(Property prop);
/**
+ * Add a property
+ */
+ void addProperty(String name, Object value);
+
+ /**
* Remove a property
*/
- boolean removeProperty(String name);
+ Property removeProperty(String name);
/**
* Get the set of property names
*/
Set<String> getPropertyNames();
-
+
}
\ No newline at end of file
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/PersistenceService.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/PersistenceService.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/PersistenceService.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -91,5 +91,5 @@
/**
* Load the Node from persistent storage
*/
- public abstract Node loadNode(Session session, ObjectName nodeID);
+ public abstract <T extends Node> T loadNode(Session session, Class<T> clazz, ObjectName nodeID);
}
\ No newline at end of file
Added: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/SignalBuilderService.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/SignalBuilderService.java (rev 0)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/SignalBuilderService.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -0,0 +1,52 @@
+/*
+ * 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.jbpm.api.service;
+
+//$Id$
+
+import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.builder.SignalBuilder;
+
+/**
+ * The SignalBuilder can be used to build a {@link Signal} dynamically.
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public abstract class SignalBuilderService extends AbstractService
+{
+ /**
+ * Locate the default SignalBuilder
+ */
+ public static SignalBuilder locateSignalBuilder()
+ {
+ ProcessEngine engine = ProcessEngine.getProcessEngine();
+ SignalBuilderService builderService = engine.getService(SignalBuilderService.class);
+ return builderService.getSignalBuilder();
+ }
+
+ /**
+ * Get the SignalBuilder
+ */
+ public abstract SignalBuilder getSignalBuilder();
+}
\ No newline at end of file
Property changes on: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/SignalBuilderService.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -40,9 +40,12 @@
import org.jbpm.api.model.Message;
import org.jbpm.api.model.ProcessDefinition;
import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.Signal.SignalType;
import org.jbpm.api.model.builder.ObjectNameFactory;
+import org.jbpm.api.model.builder.SignalBuilder;
import org.jbpm.api.service.MessageService;
import org.jbpm.api.service.ProcessDefinitionService;
+import org.jbpm.api.service.SignalBuilderService;
import org.jbpm.api.service.SignalService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -202,6 +205,12 @@
}
}
+ protected Signal newSignal(ObjectName fromRef, SignalType signalType, String message)
+ {
+ SignalBuilder sigBuilder = getProcessEngine().getService(SignalBuilderService.class).getSignalBuilder();
+ return sigBuilder.newSignal(signalType, fromRef, message);
+ }
+
public List<Signal> getSignals(Signal.SignalType type)
{
synchronized (signals)
Modified: projects/spec/trunk/modules/cts/pom.xml
===================================================================
--- projects/spec/trunk/modules/cts/pom.xml 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/pom.xml 2008-10-10 06:56:39 UTC (rev 2516)
@@ -28,7 +28,6 @@
<!-- Properties -->
<properties>
- <mysql.connector.version>5.1.6</mysql.connector.version>
</properties>
<!-- Dependencies -->
@@ -38,31 +37,25 @@
<artifactId>jbpm-spec-api</artifactId>
<version>${version}</version>
</dependency>
+
+ <!-- Test Dependencies -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
+ <scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
+ <scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
+ <scope>test</scope>
</dependency>
</dependencies>
- <!-- DependencyManagement -->
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>${mysql.connector.version}</version>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
<!-- Plugins -->
<build>
<plugins>
@@ -99,29 +92,6 @@
</dependencies>
</profile>
- <!--
- Name: no-database
- Descr: Setup the default database
- -->
- <profile>
- <id>no-database</id>
- <activation>
- <property>
- <name>!database</name>
- </property>
- </activation>
- <properties>
- <database>mysql</database>
- </properties>
- <dependencies>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
- </profile>
-
</profiles>
</project>
Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/process/ProcessPropertyTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/process/ProcessPropertyTest.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/process/ProcessPropertyTest.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -72,7 +72,8 @@
ProcessBuilder procBuilder = ProcessBuilderService.locateProcessBuilder();
procBuilder.addProcess("ProcessProperties").addStartEvent("Start").addSequenceFlow("TaskA");
procBuilder.addProcessAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "ProcessProperties_foo", "propValue");
- procBuilder.addProcessProperty("foo", "bar").addTask("TaskA").addSequenceFlow("End");
+ procBuilder.addProcessProperty("foo", "bar");
+ procBuilder.addTask("TaskA").addSequenceFlow("End");
procBuilder.addEndEvent("End", EventDetailType.Message).addMessageRef("EndMessage");
MessageBuilder msgBuilder = procBuilder.addProcessMessage("EndMessage");
msgBuilder.addToRef(getTestID()).addProperty("propValue", null, true);
Deleted: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/NodePersistenceTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/NodePersistenceTest.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/NodePersistenceTest.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -1,73 +0,0 @@
-/*
- * 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.jbpm.test.cts.service.persistence;
-
-// $Id$
-
-import javax.management.ObjectName;
-
-import org.hibernate.Session;
-import org.jbpm.api.model.Node;
-import org.jbpm.api.model.Process;
-import org.jbpm.api.model.ProcessDefinition;
-import org.jbpm.api.model.Task;
-import org.jbpm.api.service.PersistenceService;
-import org.jbpm.api.service.ProcessDefinitionService;
-import org.jbpm.api.service.ProcessService;
-import org.jbpm.api.test.CTSTestCase;
-import org.jbpm.test.cts.service.process.ProcessCatalog;
-
-/**
- * Test the PersistenceService for Nodes
- *
- * @author thomas.diesler at jboss.com
- * @since 08-Jul-2008
- */
-public class NodePersistenceTest extends CTSTestCase
-{
- /**
- * Test save, load of a Node
- */
- public void testNode() throws Exception
- {
- ProcessService procService = ProcessService.locateProcessService();
- PersistenceService service = PersistenceService.locatePersistenceService();
-
- // Register (save) the process, which is not done implicitly
- ProcessDefinition procDef = unregisterOnTearDown(ProcessCatalog.getDefaultProcess());
- Process proc = procDef.newInstance();
- procService.registerProcess(proc);
-
- ObjectName taskID = proc.getNode(Task.class, "Task").getKey();
-
- Session session = service.createSession();
- try
- {
- Node task = service.loadNode(session, taskID);
- assertNotNull("Node not null", task);
- }
- finally
- {
- session.close();
- }
- }
-}
Deleted: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcesDefinitionPersistenceTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcesDefinitionPersistenceTest.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcesDefinitionPersistenceTest.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -1,81 +0,0 @@
-/*
- * 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.jbpm.test.cts.service.persistence;
-
-// $Id: PersistenceServiceTest.java 2419 2008-09-29 07:22:59Z thomas.diesler at jboss.com $
-
-import javax.management.ObjectName;
-
-import org.jbpm.api.ProcessNotFoundException;
-import org.jbpm.api.model.EndEvent;
-import org.jbpm.api.model.ProcessDefinition;
-import org.jbpm.api.model.StartEvent;
-import org.jbpm.api.model.Task;
-import org.jbpm.api.service.PersistenceService;
-import org.jbpm.api.test.CTSTestCase;
-import org.jbpm.test.cts.service.process.ProcessCatalog;
-
-/**
- * Test the PersistenceService
- *
- * @author thomas.diesler at jboss.com
- * @since 08-Jul-2008
- */
-public class ProcesDefinitionPersistenceTest extends CTSTestCase
-{
- /**
- * Test save, load, delete of a trivial ProcessDefinition
- */
- public void testProcessDefinition() throws Exception
- {
- PersistenceService service = PersistenceService.locatePersistenceService();
-
- // Save the ProcessDefinition
- ProcessDefinition procDef = ProcessCatalog.getDefaultProcess();
- service.saveProcessDefinition(procDef);
-
- // Load the ProcessDefinition
- ObjectName procDefID = procDef.getKey();
- ProcessDefinition loadDef = service.loadProcessDefinition(procDefID);
- ProcessCatalog.validateDefaultProcess(loadDef);
-
- StartEvent start = loadDef.getNode(StartEvent.class, "Start");
- Task task = loadDef.getNode(Task.class, "Task");
- EndEvent end = loadDef.getNode(EndEvent.class, "End");
-
- assertSame(loadDef, start.getProcessDefinition());
- assertSame(loadDef, task.getProcessDefinition());
- assertSame(loadDef, end.getProcessDefinition());
-
- // Delete the ProcessDefinition
- service.deleteProcessDefinition(procDef);
- try
- {
- service.loadProcessDefinition(procDefID);
- fail("ProcessNotFoundException expected");
- }
- catch (ProcessNotFoundException ex)
- {
- // expected
- }
- }
-}
Copied: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcessDefinitionPersistenceTest.java (from rev 2513, projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcesDefinitionPersistenceTest.java)
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcessDefinitionPersistenceTest.java (rev 0)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcessDefinitionPersistenceTest.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -0,0 +1,81 @@
+/*
+ * 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.jbpm.test.cts.service.persistence;
+
+// $Id: PersistenceServiceTest.java 2419 2008-09-29 07:22:59Z thomas.diesler at jboss.com $
+
+import javax.management.ObjectName;
+
+import org.jbpm.api.ProcessNotFoundException;
+import org.jbpm.api.model.EndEvent;
+import org.jbpm.api.model.ProcessDefinition;
+import org.jbpm.api.model.StartEvent;
+import org.jbpm.api.model.Task;
+import org.jbpm.api.service.PersistenceService;
+import org.jbpm.api.test.CTSTestCase;
+import org.jbpm.test.cts.service.process.ProcessCatalog;
+
+/**
+ * Test the PersistenceService
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public class ProcessDefinitionPersistenceTest extends CTSTestCase
+{
+ /**
+ * Test save, load, delete of a trivial ProcessDefinition
+ */
+ public void testProcessDefinition() throws Exception
+ {
+ PersistenceService service = PersistenceService.locatePersistenceService();
+
+ // Save the ProcessDefinition
+ ProcessDefinition procDef = ProcessCatalog.getDefaultProcess();
+ service.saveProcessDefinition(procDef);
+
+ // Load the ProcessDefinition
+ ObjectName procDefID = procDef.getKey();
+ ProcessDefinition loadDef = service.loadProcessDefinition(procDefID);
+ ProcessCatalog.validateDefaultProcess(loadDef);
+
+ StartEvent start = loadDef.getNode(StartEvent.class, "Start");
+ Task task = loadDef.getNode(Task.class, "Task");
+ EndEvent end = loadDef.getNode(EndEvent.class, "End");
+
+ assertSame(loadDef, start.getProcessDefinition());
+ assertSame(loadDef, task.getProcessDefinition());
+ assertSame(loadDef, end.getProcessDefinition());
+
+ // Delete the ProcessDefinition
+ service.deleteProcessDefinition(procDef);
+ try
+ {
+ service.loadProcessDefinition(procDefID);
+ fail("ProcessNotFoundException expected");
+ }
+ catch (ProcessNotFoundException ex)
+ {
+ // expected
+ }
+ }
+}
Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessDefinitionServiceTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessDefinitionServiceTest.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessDefinitionServiceTest.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -48,17 +48,41 @@
ProcessCatalog.validateDefaultProcess(procDef);
ProcessEngine engine = procDef.getProcessEngine();
- assertNotNull("Process engine not null", engine);
+ assertNotNull("ProcessEngine not null", engine);
ProcessDefinitionService procDefService = engine.getService(ProcessDefinitionService.class);
- ProcessService procService = engine.getService(ProcessService.class);
+ assertNotNull("ProcessDefinitionService not null", procDefService);
Set<ObjectName> procDefs = procDefService.getProcessDefinitions();
assertEquals("ProcessDefinition not automatically registered", 0, procDefs.size());
+ }
+ public void testNewInstance() throws Exception
+ {
+ ProcessDefinition procDef = ProcessCatalog.getDefaultProcess();
+
+ ProcessEngine engine = procDef.getProcessEngine();
+ ProcessDefinitionService procDefService = engine.getService(ProcessDefinitionService.class);
+ ProcessService procService = engine.getService(ProcessService.class);
+
Process proc = procDef.newInstance();
assertNotNull("Process not null", proc);
assertNull("Process not automatically registered", procService.getProcess(proc.getKey()));
assertNull("ProcessDefinition not automatically registered", procDefService.getProcessDefinition(procDef.getKey()));
}
+
+ public void testRegister() throws Exception
+ {
+ ProcessDefinition procDef = ProcessCatalog.getDefaultProcess();
+
+ ProcessEngine engine = procDef.getProcessEngine();
+ ProcessDefinitionService procDefService = engine.getService(ProcessDefinitionService.class);
+
+ ObjectName procDefID = procDefService.registerProcessDefinition(procDef);
+ assertSame(procDef, procDefService.getProcessDefinition(procDefID));
+ assertEquals(procDefID, procDef.getKey());
+
+ boolean success = procDefService.unregisterProcessDefinition(procDef.getKey());
+ assertTrue("ProcessDefinition unregistered", success);
+ }
}
Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalMultithreadTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalMultithreadTest.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalMultithreadTest.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -38,8 +38,8 @@
public class SignalMultithreadTest extends CTSTestCase
{
final SignalService sigService = SignalService.locateSignalService();
- final Signal sigA = new Signal(getTestID(), SignalType.USER_SIGNAL, "A");
- final Signal sigB = new Signal(getTestID(), SignalType.USER_SIGNAL, "B");
+ final Signal sigA = newSignal(getTestID(), SignalType.USER_SIGNAL, "A");
+ final Signal sigB = newSignal(getTestID(), SignalType.USER_SIGNAL, "B");
private Signal gotA;
private Signal gotB;
Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalServiceTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalServiceTest.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalServiceTest.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -44,7 +44,7 @@
public void testSignalListener() throws Exception
{
SignalService sigService = SignalService.locateSignalService();
- Signal signal = new Signal(getTestID(), SignalType.USER_SIGNAL, "HelloWorld");
+ Signal signal = newSignal(getTestID(), SignalType.USER_SIGNAL, "HelloWorld");
sigService.throwSignal(signal);
List<Signal> signals = getSignals();
Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -76,7 +76,7 @@
// Send start trigger signal
SignalService sigService = SignalService.locateSignalService();
- sigService.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+ sigService.throwSignal(newSignal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
// Get the just started process
ProcessService procService = ProcessService.locateProcessService();
Modified: projects/spec/trunk/modules/ri/pom.xml
===================================================================
--- projects/spec/trunk/modules/ri/pom.xml 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/pom.xml 2008-10-10 06:56:39 UTC (rev 2516)
@@ -85,6 +85,23 @@
<groupId>org.mvel</groupId>
<artifactId>mvel</artifactId>
</dependency>
+
+ <!-- Test Dependencies -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<!-- Profiles -->
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -28,7 +28,6 @@
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
-import javax.persistence.Transient;
import org.jbpm.api.InvalidProcessException;
import org.jbpm.api.client.ProcessEngine;
@@ -77,7 +76,6 @@
public abstract ObjectName getKey();
@Override
- @Transient
public ProcessEngine getProcessEngine()
{
return ProcessEngine.getProcessEngine(engineName);
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AssignmentImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AssignmentImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AssignmentImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -23,10 +23,13 @@
//$Id$
+import javax.persistence.Basic;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
import org.jbpm.api.model.Assignment;
import org.jbpm.api.model.Expression;
@@ -43,13 +46,21 @@
{
private static final long serialVersionUID = 1L;
+ @Id @GeneratedValue
+ protected Integer id;
+
@Enumerated(EnumType.STRING)
private AssignTime assignTime;
+
@Embedded
private ExpressionImpl from;
+
@Embedded
private PropertyImpl to;
+ @Basic
+ private int assignIndex;
+
public AssignmentImpl(AssignTime assignTime, ExpressionImpl from, PropertyImpl to)
{
this.assignTime = assignTime;
@@ -57,16 +68,34 @@
this.to = to;
}
+ // Persistence ctor
+ protected AssignmentImpl()
+ {
+ }
+
+ int getAssignIndex()
+ {
+ return assignIndex;
+ }
+
+ void setAssignIndex(int assignIndex)
+ {
+ this.assignIndex = assignIndex;
+ }
+
+ @Override
public AssignTime getAssignTime()
{
return assignTime;
}
+ @Override
public Expression getFrom()
{
return from;
}
+ @Override
public Property getTo()
{
return to;
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EndEventImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EndEventImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EndEventImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -25,7 +25,6 @@
import javax.management.ObjectName;
import javax.persistence.Entity;
-import javax.persistence.Transient;
import org.jbpm.api.Constants;
import org.jbpm.api.InvalidProcessException;
@@ -86,7 +85,6 @@
}
@Override
- @Transient
public ObjectName getKey()
{
StringBuilder str = new StringBuilder(Constants.ID_DOMAIN + ":");
@@ -95,7 +93,7 @@
return oname;
}
- @Transient
+ @Override
public SequenceFlow getInFlow()
{
if (inFlows.size() != 1)
@@ -103,9 +101,11 @@
return inFlows.get(0);
}
+ @Override
public void setInFlow(SequenceFlowImpl inFlow)
{
- inFlow.setSourceIndex(inFlows.size());
+ inFlow.setTargetIndex(inFlows.size());
+ inFlow.setTargetRef(this);
inFlows.add(inFlow);
}
@@ -121,13 +121,13 @@
SignalService sigService = engine.getService(SignalService.class);
public void throwEnterSignal(Token token)
{
- Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_END_EVENT_ENTER);
+ Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_END_EVENT_ENTER, getKey());
sigService.throwSignal(signal);
}
public void throwExitSignal(Token token)
{
- Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_END_EVENT_EXIT);
+ Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_END_EVENT_EXIT, getKey());
sigService.throwSignal(signal);
// Destroy the token
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EventImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EventImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EventImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -24,10 +24,12 @@
//$Id$
import javax.management.ObjectName;
+import javax.persistence.CascadeType;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
import javax.persistence.MappedSuperclass;
-import javax.persistence.Transient;
+import javax.persistence.OneToOne;
import org.jbpm.api.Constants;
import org.jbpm.api.InvalidProcessException;
@@ -64,11 +66,12 @@
@Enumerated(EnumType.STRING)
protected EventDetailType detailType = EventDetailType.None;
- @Transient
- private MessageImpl messageRef;
- @Transient
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = MessageImpl.class)
+ private Message messageRef;
+
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = SignalImpl.class)
private Signal signalRef;
-
+
public EventImpl(ProcessStructure procStruct, String name)
{
super(procStruct, name);
@@ -122,7 +125,7 @@
{
this.signalRef = signalRef;
}
-
+
@Override
protected ExecutionHandler getDefaultExecutionHandler()
{
@@ -133,7 +136,7 @@
public void execute(Token token)
{
- if (detailType == EventDetailType.Message && getMessageRef() != null)
+ if (detailType == EventDetailType.Message && getMessageRef() != null)
{
MessageSender messageSender = new MessageSender(thisNode, getMessageRef());
messageSender.sendMessage(token);
@@ -160,18 +163,19 @@
return new SignalHandler()
{
private static final long serialVersionUID = 1L;
-
+
ProcessEngine engine = getProcessDefinition().getProcessEngine();
SignalService sigService = engine.getService(SignalService.class);
+
public void throwEnterSignal(Token token)
{
- Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_EVENT_ENTER);
+ Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_EVENT_ENTER, getKey());
sigService.throwSignal(signal);
}
public void throwExitSignal(Token token)
{
- Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_EVENT_EXIT);
+ Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_EVENT_EXIT, getKey());
sigService.throwSignal(signal);
}
@@ -192,17 +196,17 @@
protected void create(ProcessDefinition procDef)
{
super.create(procDef);
-
+
if (detailType == EventDetailType.Signal && signalRef == null)
throw new InvalidProcessException("Event with detail type 'Signal' must have a signalRef");
if (detailType != EventDetailType.Signal && signalRef != null)
throw new InvalidProcessException("Event with detail type '" + detailType + "' cannot have a signalRef");
-
+
if (detailType == EventDetailType.Message && messageRef == null)
throw new InvalidProcessException("Event with detail type 'Message' must have a messageRef");
if (detailType != EventDetailType.Message && messageRef != null)
throw new InvalidProcessException("Event with detail type '" + detailType + "' cannot have a messageRef");
-
+
if (messageRef != null)
{
ProcessDefinitionImpl procDefImpl = (ProcessDefinitionImpl)procDef;
@@ -214,14 +218,14 @@
protected void create(Process proc)
{
super.create(proc);
-
+
if (messageRef != null)
{
ProcessDefinitionImpl procDefImpl = (ProcessDefinitionImpl)proc.getProcessDefinition();
procDefImpl.initializeMessageRef(messageRef);
}
}
-
+
public String toString()
{
return getEventType() + "Event[" + getName() + "," + getDetailType() + "]";
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ExpressionImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ExpressionImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ExpressionImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -23,29 +23,39 @@
//$Id$
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
import org.jbpm.api.model.Expression;
/**
* An Expression, which is used in the definition of attributes for @{link StartEvent},
+ *
* @{link IntermediateEvent}, @{link Activity}, @{link ComplexGateway}, and @{link SequenceFlow}
*
* @author thomas.diesler at jboss.com
* @since 08-Jul-2008
*/
- at Embeddable
+ at Entity(name = "Expression")
public class ExpressionImpl implements Expression
{
// provide serial version UID
private static final long serialVersionUID = 1L;
+
+ @Id @GeneratedValue
+ protected Integer id;
- @Column(name = "exprBody")
+ @Basic
private String body;
- @Column(name = "exprLang")
+
+ @Basic
private ExpressionLanguage lang;
+ @Basic
+ private int exprIndex;
+
public ExpressionImpl(String body)
{
this.body = body;
@@ -63,11 +73,23 @@
{
}
+ int getExprIndex()
+ {
+ return exprIndex;
+ }
+
+ void setExprIndex(int exprIndex)
+ {
+ this.exprIndex = exprIndex;
+ }
+
+ @Override
public ExpressionLanguage getExpressionLanguage()
{
return lang;
}
+ @Override
public String getExpressionBody()
{
return body;
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/GatewayImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/GatewayImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/GatewayImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -97,12 +97,16 @@
@Override
public void addOutFlow(SequenceFlowImpl outFlow)
{
+ outFlow.setSourceIndex(outFlows.size());
+ outFlow.setSourceRef(this);
outFlows.add(outFlow);
}
@Override
public void addInFlow(SequenceFlowImpl inFlow)
{
+ inFlow.setTargetIndex(inFlows.size());
+ inFlow.setTargetRef(this);
inFlows.add(inFlow);
}
@@ -200,13 +204,13 @@
public void throwEnterSignal(Token token)
{
- Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_GATEWAY_ENTER);
+ Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_GATEWAY_ENTER, getKey());
sigService.throwSignal(signal);
}
public void throwExitSignal(Token token)
{
- Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_GATEWAY_EXIT);
+ Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_GATEWAY_EXIT, getKey());
sigService.throwSignal(signal);
}
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/InputSetImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/InputSetImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/InputSetImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -23,13 +23,19 @@
//$Id$
-import java.util.HashSet;
import java.util.Set;
-import javax.persistence.Transient;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
import org.jbpm.api.model.InputSet;
import org.jbpm.api.model.Property;
+import org.jbpm.api.model.internal.PropertySupport;
/**
@@ -38,46 +44,59 @@
* @author thomas.diesler at jboss.com
* @since 08-Jul-2008
*/
+ at Entity (name = "InputSet")
public class InputSetImpl implements InputSet
{
private static final long serialVersionUID = 1L;
- @Transient
- private Set<Property> properties = new HashSet<Property>();
+ @Id @GeneratedValue
+ protected Integer id;
+ @Basic
+ private int setIndex;
+
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = PropertySupportImpl.class)
+ protected PropertySupport propSupport = new PropertySupportImpl();
+
+ int getSetIndex()
+ {
+ return setIndex;
+ }
+
+ void setSetIndex(int setIndex)
+ {
+ this.setIndex = setIndex;
+ }
+
@Override
public Property getProperty(String name)
{
- for (Property prop : properties)
- {
- if (prop.getName().equals(name))
- return prop;
- }
- return null;
+ return propSupport.getProperty(name);
}
@Override
public Set<String> getPropertyNames()
{
- Set<String> names = new HashSet<String>();
- for (Property prop : properties)
- {
- names.add(prop.getName());
- }
- return names;
+ return propSupport.getPropertyNames();
}
@Override
- public boolean removeProperty(String name)
+ public void addProperty(Property prop)
{
- return properties.remove(name);
+ propSupport.addProperty(prop);
}
@Override
- public void addProperty(Property prop)
+ public void addProperty(String name, Object value)
{
- properties.add(prop);
+ propSupport.addProperty(name, value);
}
+
+ @Override
+ public Property removeProperty(String name)
+ {
+ return propSupport.removeProperty(name);
+ }
@Override
public String toString()
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/MessageImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/MessageImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/MessageImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -23,7 +23,6 @@
//$Id$
-import java.util.HashSet;
import java.util.Set;
import javax.persistence.Basic;
@@ -32,12 +31,12 @@
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
import org.jbpm.api.model.Message;
import org.jbpm.api.model.Participant;
import org.jbpm.api.model.Property;
+import org.jbpm.api.model.internal.PropertySupport;
/**
* A Message, which is used in the definition of attributes for a @{link StartEvent},
@@ -53,20 +52,19 @@
private static final long serialVersionUID = 1L;
@Id @GeneratedValue
- @SuppressWarnings("unused")
- private int id;
+ protected int id;
@Basic
private String name;
- @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = ParticipantImpl.class)
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = ParticipantImpl.class)
private Participant fromRef;
- @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = ParticipantImpl.class)
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = ParticipantImpl.class)
private Participant toRef;
- @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = PropertyImpl.class)
- private Set<Property> props = new HashSet<Property>();
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = PropertySupportImpl.class)
+ protected PropertySupport propSupport = new PropertySupportImpl();
public MessageImpl(String name)
{
@@ -76,11 +74,11 @@
this.name = name;
}
- public MessageImpl(String name, ParticipantImpl targetID, ParticipantImpl sourceID)
+ public MessageImpl(String name, Participant toRef, ParticipantImpl fromRef)
{
this(name);
- this.toRef = targetID;
- this.fromRef = sourceID;
+ this.toRef = toRef;
+ this.fromRef = fromRef;
}
public String getName()
@@ -91,37 +89,34 @@
@Override
public Property getProperty(String name)
{
- for (Property prop : props)
- {
- if (prop.getName().equals(name))
- return prop;
- }
- return null;
+ return propSupport.getProperty(name);
}
@Override
public Set<String> getPropertyNames()
{
- Set<String> names = new HashSet<String>();
- for (Property prop : props)
- {
- names.add(prop.getName());
- }
- return names;
+ return propSupport.getPropertyNames();
}
@Override
public void addProperty(Property prop)
{
- props.add(prop);
+ propSupport.addProperty(prop);
}
@Override
- public boolean removeProperty(String name)
+ public void addProperty(String name, Object value)
{
- return props.remove(name);
+ propSupport.addProperty(name, value);
}
+ @Override
+ public Property removeProperty(String name)
+ {
+ return propSupport.removeProperty(name);
+ }
+
+ @Override
public Participant getFromRef()
{
return fromRef;
@@ -132,6 +127,7 @@
this.fromRef = fromRef;
}
+ @Override
public Participant getToRef()
{
return toRef;
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/NodeImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/NodeImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/NodeImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -25,7 +25,6 @@
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -37,7 +36,7 @@
import javax.persistence.InheritanceType;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
-import javax.persistence.Transient;
+import javax.persistence.OneToOne;
import org.hibernate.annotations.IndexColumn;
import org.jbpm.api.InvalidProcessException;
@@ -51,6 +50,7 @@
import org.jbpm.api.model.SequenceFlow;
import org.jbpm.api.model.StartEvent;
import org.jbpm.api.model.internal.ProcessStructure;
+import org.jbpm.api.model.internal.PropertySupport;
import org.jbpm.api.runtime.ExecutionHandler;
import org.jbpm.api.runtime.FlowHandler;
import org.jbpm.api.runtime.NodeHandler;
@@ -80,7 +80,7 @@
// provide logging
final static Logger log = LoggerFactory.getLogger(NodeImpl.class);
-
+
@Basic
private String name;
@@ -98,22 +98,23 @@
@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "sourceRef", targetEntity = SequenceFlowImpl.class)
protected List<SequenceFlow> outFlows = new ArrayList<SequenceFlow>();
- @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = PropertyImpl.class)
- protected Set<Property> properties = new HashSet<Property>();
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = PropertySupportImpl.class)
+ protected PropertySupport propSupport = new PropertySupportImpl();
- @Transient
+ @IndexColumn(name = "assignIndex")
+ @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = AssignmentImpl.class)
private List<Assignment> assignments = new ArrayList<Assignment>();
-
+
@Basic
private String execHandler;
private transient ExecutionHandler customExecHandler;
private transient ExecutionHandler defaultExecHandler;
-
+
@Basic
private String sigHandler;
private transient SignalHandler customSignalHandler;
private transient SignalHandler defaultSignalHandler;
-
+
@Basic
private String flowHandler;
private transient FlowHandler customFlowHandler;
@@ -157,7 +158,7 @@
{
this.nodeIndex = nodeIndex;
}
-
+
public String getName()
{
return name;
@@ -167,49 +168,47 @@
{
this.name = name;
}
-
+
@Override
public Property getProperty(String name)
{
- for (Property prop : properties)
- {
- if (prop.getName().equals(name))
- return prop;
- }
- return null;
+ return propSupport.getProperty(name);
}
@Override
public Set<String> getPropertyNames()
{
- Set<String> names = new HashSet<String>();
- for (Property prop : properties)
- {
- names.add(prop.getName());
- }
- return names;
+ return propSupport.getPropertyNames();
}
@Override
- public boolean removeProperty(String name)
+ public void addProperty(Property prop)
{
- return properties.remove(name);
+ propSupport.addProperty(prop);
}
@Override
- public void addProperty(Property prop)
+ public void addProperty(String name, Object value)
{
- properties.add(prop);
+ propSupport.addProperty(name, value);
}
-
+
+ @Override
+ public Property removeProperty(String name)
+ {
+ return propSupport.removeProperty(name);
+ }
+
+ @Override
public List<Assignment> getAssignments()
{
return Collections.unmodifiableList(assignments);
}
- public void addAssignment(AssignmentImpl assignment)
+ public void addAssignment(AssignmentImpl assign)
{
- this.assignments.add(assignment);
+ assign.setAssignIndex(assignments.size());
+ assignments.add(assign);
}
public List<SequenceFlow> getInFlows()
@@ -230,7 +229,7 @@
ExecutionHandler execHandler = getExecutionHandler();
execHandler.execute(token);
}
-
+
public <T extends ExecutionHandler> void setExecutionHandler(Class<T> clazz)
{
this.execHandler = clazz.getName();
@@ -251,10 +250,10 @@
{
if (customExecHandler == null && execHandler != null)
customExecHandler = loadHandlerInstance(ExecutionHandler.class, execHandler);
-
+
if (defaultExecHandler == null)
defaultExecHandler = getDefaultExecutionHandler();
-
+
return customExecHandler != null ? customExecHandler : defaultExecHandler;
}
@@ -269,7 +268,7 @@
{
// nothing to do
}
-
+
@Override
public Node getNode()
{
@@ -288,13 +287,13 @@
{
if (customSignalHandler == null && sigHandler != null)
customSignalHandler = loadHandlerInstance(SignalHandler.class, sigHandler);
-
+
if (defaultSignalHandler == null)
defaultSignalHandler = getDefaultSignalHandler();
-
+
return customSignalHandler != null ? customSignalHandler : defaultSignalHandler;
}
-
+
protected abstract SignalHandler getDefaultSignalHandler();
@Override
@@ -302,10 +301,10 @@
{
if (customFlowHandler == null && flowHandler != null)
customFlowHandler = loadHandlerInstance(FlowHandler.class, flowHandler);
-
+
if (defaultFlowHandler == null)
defaultFlowHandler = getDefaultFlowHandler();
-
+
return customFlowHandler != null ? customFlowHandler : defaultFlowHandler;
}
@@ -432,7 +431,7 @@
if (outFlow == null && (this instanceof EndEvent == false))
throw new InvalidProcessException("Dead end node: " + this);
}
-
+
private void initFlow(SequenceFlowImpl flow)
{
if (flow != null)
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/OutputSetImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/OutputSetImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/OutputSetImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -23,13 +23,19 @@
//$Id$
-import java.util.HashSet;
import java.util.Set;
-import javax.persistence.Transient;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
import org.jbpm.api.model.OutputSet;
import org.jbpm.api.model.Property;
+import org.jbpm.api.model.internal.PropertySupport;
/**
@@ -38,46 +44,59 @@
* @author thomas.diesler at jboss.com
* @since 08-Jul-2008
*/
+ at Entity (name = "OutputSet")
public class OutputSetImpl implements OutputSet
{
private static final long serialVersionUID = 1L;
- @Transient
- private Set<Property> properties = new HashSet<Property>();
+ @Id @GeneratedValue
+ protected Integer id;
+ @Basic
+ private int setIndex;
+
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = PropertySupportImpl.class)
+ protected PropertySupport propSupport = new PropertySupportImpl();
+
+ int getSetIndex()
+ {
+ return setIndex;
+ }
+
+ void setSetIndex(int setIndex)
+ {
+ this.setIndex = setIndex;
+ }
+
@Override
public Property getProperty(String name)
{
- for (Property prop : properties)
- {
- if (prop.getName().equals(name))
- return prop;
- }
- return null;
+ return propSupport.getProperty(name);
}
@Override
public Set<String> getPropertyNames()
{
- Set<String> names = new HashSet<String>();
- for (Property prop : properties)
- {
- names.add(prop.getName());
- }
- return names;
+ return propSupport.getPropertyNames();
}
@Override
- public boolean removeProperty(String name)
+ public void addProperty(Property prop)
{
- return properties.remove(name);
+ propSupport.addProperty(prop);
}
@Override
- public void addProperty(Property prop)
+ public void addProperty(String name, Object value)
{
- properties.add(prop);
+ propSupport.addProperty(name, value);
}
+
+ @Override
+ public Property removeProperty(String name)
+ {
+ return propSupport.removeProperty(name);
+ }
@Override
public String toString()
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ParticipantImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ParticipantImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ParticipantImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -59,6 +59,12 @@
this.name = name.getCanonicalName();
}
+ public ParticipantImpl(Participant other)
+ {
+ ParticipantImpl otherImpl = (ParticipantImpl)other;
+ this.name = otherImpl.name;
+ }
+
@Override
public ObjectName getName()
{
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -28,18 +28,27 @@
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.util.List;
+import java.util.Set;
import javax.management.ObjectName;
+import javax.persistence.CascadeType;
import javax.persistence.Entity;
+import javax.persistence.FetchType;
import javax.persistence.Lob;
+import javax.persistence.OneToOne;
import javax.persistence.Transient;
import org.jbpm.api.Constants;
import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Assignment;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.Node;
import org.jbpm.api.model.Process;
import org.jbpm.api.model.ProcessDefinition;
import org.jbpm.api.model.Property;
import org.jbpm.api.model.builder.ObjectNameFactory;
+import org.jbpm.api.model.internal.ProcessStructure;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,19 +59,23 @@
* @since 08-Jul-2008
*/
@Entity(name = "ProcessDefinition")
-public class ProcessDefinitionImpl extends StructureDelegateImpl implements ProcessDefinition
+public class ProcessDefinitionImpl extends AbstractElementImpl implements ProcessDefinition
{
private static final long serialVersionUID = 1L;
// provide logging
final static Logger log = LoggerFactory.getLogger(ProcessDefinitionImpl.class);
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = ProcessStructureImpl.class)
+ private ProcessStructure procStruct;
+
@Lob
private byte[] rawProcStruct;
public ProcessDefinitionImpl(ProcessEngine engine, ProcessStructureImpl procStruct)
{
- super(engine, procStruct);
+ super(engine);
+ this.procStruct = procStruct;
create(this);
}
@@ -102,33 +115,100 @@
}
@Override
+ public List<Assignment> getAssignments()
+ {
+ return procStruct.getAssignments();
+ }
+
+ @Override
+ public Message getMessage(String msgName)
+ {
+ return procStruct.getMessage(msgName);
+ }
+
+ @Override
+ public Set<Message> getMessages()
+ {
+ return procStruct.getMessages();
+ }
+
+ @Override
+ public String getName()
+ {
+ return procStruct.getName();
+ }
+
+ @Override
+ public <T extends Node> T getNode(Class<T> clazz, String name)
+ {
+ return procStruct.getNode(clazz, name);
+ }
+
+ @Override
+ public Node getNode(String name)
+ {
+ return procStruct.getNode(name);
+ }
+
+ @Override
+ public List<Node> getNodes()
+ {
+ return procStruct.getNodes();
+ }
+
+ @Override
+ public <T extends Node> List<T> getNodes(Class<T> clazz)
+ {
+ return procStruct.getNodes(clazz);
+ }
+
+ @Override
+ public Property getProperty(String name)
+ {
+ return procStruct.getProperty(name);
+ }
+
+ @Override
+ public Set<String> getPropertyNames()
+ {
+ return procStruct.getPropertyNames();
+ }
+
+ @Override
public void addProperty(Property prop)
{
throw new IllegalStateException("Cannot add a property to a process definition");
}
@Override
- public boolean removeProperty(String name)
+ public void addProperty(String name, Object value)
{
- throw new IllegalStateException("Cannot add remove a property to a process definition");
+ throw new IllegalStateException("Cannot add a property to a process definition");
}
- public void initializeMessageRef(MessageImpl msgRef)
+ @Override
+ public Property removeProperty(String name)
{
+ throw new IllegalStateException("Cannot add remove a property to a process definition");
+ }
+
+ public void initializeMessageRef(Message msgRef)
+ {
String msgName = msgRef.getName();
MessageImpl procMsg = (MessageImpl)getMessage(msgName);
if (procMsg == null)
throw new IllegalStateException("Cannot obtain process message: " + msgName);
+ MessageImpl msgImpl = (MessageImpl)msgRef;
if (msgRef.getFromRef() == null && procMsg.getFromRef() != null)
- msgRef.setFromRef(procMsg.getFromRef());
+ msgImpl.setFromRef(new ParticipantImpl(procMsg.getFromRef()));
if (msgRef.getToRef() == null && procMsg.getToRef() != null)
- msgRef.setToRef(procMsg.getToRef());
+ msgImpl.setToRef(new ParticipantImpl(procMsg.getToRef()));
for (String propName : procMsg.getPropertyNames())
{
Property prop = procMsg.getProperty(propName);
- msgRef.addProperty(prop);
+ msgRef.addProperty(new PropertyImpl(prop));
}
}
@@ -150,28 +230,32 @@
throw new IllegalStateException("Cannot serialize process structure", ex);
}
- procStruct.create(this);
+ ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+ procStructImpl.create(this);
}
@Override
public void register(ProcessDefinition procDef)
{
super.register(procDef);
- procStruct.register(procDef);
+ ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+ procStructImpl.register(procDef);
}
@Override
public void unregister(ProcessDefinition procDef)
{
super.unregister(procDef);
- procStruct.unregister(procDef);
+ ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+ procStructImpl.unregister(procDef);
}
@Override
protected void destroy(ProcessDefinition procDef)
{
super.destroy(procDef);
- procStruct.destroy(procDef);
+ ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+ procStructImpl.destroy(procDef);
}
public String toString()
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -23,18 +23,29 @@
//$Id$
+import java.util.List;
+import java.util.Set;
+
import javax.management.ObjectName;
+import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
import javax.persistence.Transient;
import org.jbpm.api.Constants;
import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Assignment;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.Node;
import org.jbpm.api.model.Process;
import org.jbpm.api.model.ProcessDefinition;
+import org.jbpm.api.model.Property;
import org.jbpm.api.model.builder.ObjectNameFactory;
+import org.jbpm.api.model.internal.ProcessStructure;
import org.jbpm.api.runtime.Attachments;
import org.jbpm.api.service.ExecutionService;
import org.jbpm.api.service.ProcessService;
@@ -48,7 +59,7 @@
* @since 08-Jul-2008
*/
@Entity(name = "Process")
-public class ProcessImpl extends StructureDelegateImpl implements Process
+public class ProcessImpl extends AbstractElementImpl implements Process
{
private static final long serialVersionUID = 1L;
@@ -61,12 +72,16 @@
@ManyToOne(targetEntity = ProcessDefinitionImpl.class)
private ProcessDefinition procDef;
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = ProcessStructureImpl.class)
+ private ProcessStructure procStruct;
+
@Transient
private transient RuntimeException runtimeException;
public ProcessImpl(ProcessEngine engine, ProcessDefinitionImpl procDef, ProcessStructureImpl procStruct)
{
- super(engine, procStruct);
+ super(engine);
+ this.procStruct = procStruct;
this.procDef = procDef;
create(this);
}
@@ -102,6 +117,84 @@
this.status = status;
}
+ @Override
+ public List<Assignment> getAssignments()
+ {
+ return procStruct.getAssignments();
+ }
+
+ @Override
+ public Message getMessage(String msgName)
+ {
+ return procStruct.getMessage(msgName);
+ }
+
+ @Override
+ public Set<Message> getMessages()
+ {
+ return procStruct.getMessages();
+ }
+
+ @Override
+ public String getName()
+ {
+ return procStruct.getName();
+ }
+
+ @Override
+ public <T extends Node> T getNode(Class<T> clazz, String name)
+ {
+ return procStruct.getNode(clazz, name);
+ }
+
+ @Override
+ public Node getNode(String name)
+ {
+ return procStruct.getNode(name);
+ }
+
+ @Override
+ public List<Node> getNodes()
+ {
+ return procStruct.getNodes();
+ }
+
+ @Override
+ public <T extends Node> List<T> getNodes(Class<T> clazz)
+ {
+ return procStruct.getNodes(clazz);
+ }
+
+ @Override
+ public Property getProperty(String name)
+ {
+ return procStruct.getProperty(name);
+ }
+
+ @Override
+ public Set<String> getPropertyNames()
+ {
+ return procStruct.getPropertyNames();
+ }
+
+ @Override
+ public void addProperty(Property prop)
+ {
+ procStruct.addProperty(prop);
+ }
+
+ @Override
+ public void addProperty(String name, Object value)
+ {
+ procStruct.addProperty(name, value);
+ }
+
+ @Override
+ public Property removeProperty(String name)
+ {
+ return procStruct.removeProperty(name);
+ }
+
public RuntimeException getRuntimeException()
{
return runtimeException;
@@ -167,28 +260,32 @@
protected void create(Process proc)
{
super.create(proc);
- procStruct.create(proc);
+ ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+ procStructImpl.create(proc);
}
@Override
public void register(Process proc)
{
super.register(proc);
- procStruct.register(proc);
+ ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+ procStructImpl.register(proc);
}
@Override
public void unregister(Process proc)
{
super.unregister(proc);
- procStruct.unregister(proc);
+ ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+ procStructImpl.unregister(proc);
}
@Override
protected void destroy(Process proc)
{
super.destroy(proc);
- procStruct.destroy(proc);
+ ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+ procStructImpl.destroy(proc);
}
public String toString()
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -35,6 +35,7 @@
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
import javax.persistence.Transient;
import org.hibernate.annotations.IndexColumn;
@@ -51,6 +52,7 @@
import org.jbpm.api.model.StartEvent;
import org.jbpm.api.model.builder.ObjectNameFactory;
import org.jbpm.api.model.internal.ProcessStructure;
+import org.jbpm.api.model.internal.PropertySupport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -72,16 +74,17 @@
private String name;
@IndexColumn(name = "nodeIndex")
- @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "procStruct", targetEntity = NodeImpl.class)
+ @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "procStruct", targetEntity = NodeImpl.class)
private List<Node> nodes = new ArrayList<Node>();
- @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = PropertyImpl.class)
- private Set<Property> properties = new HashSet<Property>();
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = PropertySupportImpl.class)
+ protected PropertySupport propSupport = new PropertySupportImpl();
- @Transient
+ @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = MessageImpl.class)
private Set<Message> messages = new HashSet<Message>();
- @Transient
+ @IndexColumn(name = "assignIndex")
+ @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = AssignmentImpl.class)
private List<Assignment> assignments = new ArrayList<Assignment>();
public ProcessStructureImpl(ProcessEngine engine, String name)
@@ -114,40 +117,6 @@
return name;
}
- @Override
- public Property getProperty(String name)
- {
- for (Property prop : properties)
- {
- if (prop.getName().equals(name))
- return prop;
- }
- return null;
- }
-
- @Override
- public void addProperty(Property prop)
- {
- properties.add(prop);
- }
-
- @Override
- public Set<String> getPropertyNames()
- {
- Set<String> names = new HashSet<String>();
- for (Property prop : properties)
- {
- names.add(prop.getName());
- }
- return names;
- }
-
- @Override
- public boolean removeProperty(String name)
- {
- return properties.remove(name);
- }
-
public void addNode(NodeImpl nodeImpl)
{
if (nodeImpl == null)
@@ -240,12 +209,43 @@
return Collections.unmodifiableList(assignments);
}
- public void addAssignment(AssignmentImpl assignment)
+ public void addAssignment(AssignmentImpl assign)
{
- this.assignments.add(assignment);
+ assign.setAssignIndex(assignments.size());
+ assignments.add(assign);
}
@Override
+ public Property getProperty(String name)
+ {
+ return propSupport.getProperty(name);
+ }
+
+ @Override
+ public Set<String> getPropertyNames()
+ {
+ return propSupport.getPropertyNames();
+ }
+
+ @Override
+ public void addProperty(Property prop)
+ {
+ propSupport.addProperty(prop);
+ }
+
+ @Override
+ public void addProperty(String name, Object value)
+ {
+ propSupport.addProperty(name, value);
+ }
+
+ @Override
+ public Property removeProperty(String name)
+ {
+ return propSupport.removeProperty(name);
+ }
+
+ @Override
public void create(ProcessDefinition procDef)
{
super.create(procDef);
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertyImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertyImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertyImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -42,8 +42,7 @@
private static final long serialVersionUID = 1L;
@Id @GeneratedValue
- @SuppressWarnings("unused")
- private Integer id;
+ protected Integer id;
@Basic
private String name;
@@ -53,7 +52,7 @@
@Basic
private boolean isCorrelation;
-
+
public PropertyImpl(String name, Object value)
{
this.name = name;
@@ -62,11 +61,18 @@
public PropertyImpl(String name, Object value, boolean isCorrelation)
{
- this.name = name;
+ this(name, value);
this.isCorrelation = isCorrelation;
- initPropertyValue(value);
}
+ public PropertyImpl(Property other)
+ {
+ PropertyImpl otherImpl = (PropertyImpl)other;
+ this.name = otherImpl.name;
+ this.value = otherImpl.value;
+ this.isCorrelation = otherImpl.isCorrelation;
+ }
+
// persistence ctor
protected PropertyImpl()
{
@@ -77,16 +83,19 @@
this.value = (value != null ? value.toString() : null);
}
+ @Override
public String getName()
{
return name;
}
+ @Override
public String getValue()
{
return value;
}
+ @Override
public boolean isCorrelation()
{
return isCorrelation;
Added: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertySupportImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertySupportImpl.java (rev 0)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertySupportImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -0,0 +1,90 @@
+/*
+ * 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.jbpm.ri.model;
+
+//$Id$
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.MapKey;
+import javax.persistence.OneToMany;
+
+import org.jbpm.api.model.Property;
+import org.jbpm.api.model.internal.PropertySupport;
+
+/**
+ * Basic property support
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at Entity(name = "PropertySupport")
+public class PropertySupportImpl implements PropertySupport
+{
+ private static final long serialVersionUID = 1L;
+
+ @Id @GeneratedValue
+ protected Integer id;
+
+ @MapKey (name = "name")
+ @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = PropertyImpl.class)
+ private Map<String, Property> propmap = new HashMap<String, Property>();
+
+ @Override
+ public Property getProperty(String name)
+ {
+ return propmap.get(name);
+ }
+
+ @Override
+ public Set<String> getPropertyNames()
+ {
+ return Collections.unmodifiableSet(propmap.keySet());
+ }
+
+ @Override
+ public void addProperty(Property prop)
+ {
+ propmap.put(prop.getName(), prop);
+ }
+
+ @Override
+ public void addProperty(String name, Object value)
+ {
+ PropertyImpl prop = new PropertyImpl(name, value);
+ propmap.put(name, prop);
+ }
+
+ @Override
+ public Property removeProperty(String name)
+ {
+ return propmap.remove(name);
+ }
+}
Property changes on: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertySupportImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -71,7 +71,7 @@
public ReceiveTaskImpl(ProcessStructure procStruct, String name)
{
- super(procStruct, name, TaskType.Receive);
+ super(procStruct, TaskType.Receive, name);
}
// Persistence ctor
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SendTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SendTaskImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SendTaskImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -57,7 +57,7 @@
public SendTaskImpl(ProcessStructure procStruct, String name)
{
- super(procStruct, name, TaskType.Send);
+ super(procStruct, TaskType.Send, name);
}
// Persistence ctor
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SequenceFlowImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SequenceFlowImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SequenceFlowImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -25,13 +25,14 @@
import javax.persistence.Basic;
import javax.persistence.CascadeType;
-import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
import org.jbpm.api.model.Expression;
import org.jbpm.api.model.Node;
@@ -52,28 +53,28 @@
@Id
@GeneratedValue
- @SuppressWarnings("unused")
- private Integer id;
+ protected Integer id;
@Basic
private int sourceIndex;
+
@Basic
private int targetIndex;
-
+
@Enumerated(EnumType.STRING)
private ConditionType conditionType = ConditionType.None;
@Basic
private String targetName;
- @ManyToOne(cascade = CascadeType.ALL, targetEntity = NodeImpl.class)
+ @ManyToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = NodeImpl.class)
private Node sourceRef;
- @ManyToOne(cascade = CascadeType.ALL, targetEntity = NodeImpl.class)
+ @ManyToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = NodeImpl.class)
private Node targetRef;
- @Embedded
- private ExpressionImpl conditionExpression;
+ @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = ExpressionImpl.class)
+ private Expression conditionExpression;
public SequenceFlowImpl(String targetName)
{
Added: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SignalImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SignalImpl.java (rev 0)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SignalImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -0,0 +1,107 @@
+/*
+ * 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.jbpm.ri.model;
+
+//$Id$
+
+import javax.management.ObjectName;
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.builder.ObjectNameFactory;
+
+/**
+ * A Signal thrown by the ProcessEngine
+ *
+ * @author Thomas.Diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at Entity(name = "Signal")
+public final class SignalImpl implements Signal
+{
+ private static final long serialVersionUID = 1L;
+
+ @Id @GeneratedValue
+ protected Integer id;
+
+ @Enumerated(EnumType.STRING)
+ private SignalType type;
+
+ @Basic
+ private String fromRef;
+
+ @Basic
+ private String message;
+
+ /**
+ * Create the signal for a given source and type
+ */
+ public SignalImpl(SignalType type, ObjectName fromRef)
+ {
+ this.fromRef = fromRef.getCanonicalName();
+ this.type = type;
+ if (fromRef == null)
+ throw new IllegalArgumentException("Signal fromRef cannot be null");
+ if (type == null)
+ throw new IllegalArgumentException("SignalType cannot be null");
+ }
+
+ /**
+ * Create the signal for a given source, type and message
+ */
+ public SignalImpl(SignalType type, ObjectName fromRef, String message)
+ {
+ this(type, fromRef);
+ this.message = message;
+ }
+
+ public ObjectName getFromRef()
+ {
+ return ObjectNameFactory.create(fromRef);
+ }
+
+ public SignalType getSignalType()
+ {
+ return type;
+ }
+
+ public String getMessage()
+ {
+ return message;
+ }
+
+ public String toString()
+ {
+ StringBuilder string = new StringBuilder(type + "[" + fromRef);
+ if (message != null)
+ {
+ string.append(":" + message);
+ }
+ string.append("]");
+ return string.toString();
+ }
+}
\ No newline at end of file
Property changes on: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SignalImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StartEventImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StartEventImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StartEventImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -107,7 +107,8 @@
public void setOutFlow(SequenceFlowImpl outFlow)
{
- outFlow.setTargetIndex(outFlows.size());
+ outFlow.setSourceIndex(outFlows.size());
+ outFlow.setSourceRef(this);
outFlows.add(outFlow);
}
@@ -124,13 +125,13 @@
public void throwEnterSignal(Token token)
{
- Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_START_EVENT_ENTER);
+ Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_START_EVENT_ENTER, getKey());
sigService.throwSignal(signal);
}
public void throwExitSignal(Token token)
{
- Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_START_EVENT_EXIT);
+ Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_START_EVENT_EXIT, getKey());
sigService.throwSignal(signal);
}
Deleted: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StructureDelegateImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StructureDelegateImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StructureDelegateImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -1,142 +0,0 @@
-/*
- * 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.jbpm.ri.model;
-
-//$Id$
-
-import java.util.List;
-import java.util.Set;
-
-import javax.persistence.CascadeType;
-import javax.persistence.FetchType;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.OneToOne;
-
-import org.jbpm.api.client.ProcessEngine;
-import org.jbpm.api.model.Assignment;
-import org.jbpm.api.model.Message;
-import org.jbpm.api.model.Node;
-import org.jbpm.api.model.Property;
-import org.jbpm.api.model.internal.ProcessStructure;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A process definition
- *
- * @author thomas.diesler at jboss.com
- * @since 08-Jul-2008
- */
- at MappedSuperclass
-public abstract class StructureDelegateImpl extends AbstractElementImpl implements ProcessStructure
-{
- private static final long serialVersionUID = 1L;
-
- // provide logging
- final static Logger log = LoggerFactory.getLogger(StructureDelegateImpl.class);
-
- @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = ProcessStructureImpl.class)
- protected ProcessStructureImpl procStruct;
-
- public StructureDelegateImpl(ProcessEngine engine, ProcessStructureImpl procStruct)
- {
- super(engine);
- this.procStruct = procStruct;
- }
-
- // Persistence ctor
- protected StructureDelegateImpl()
- {
- }
-
- @Override
- public String getName()
- {
- return procStruct.getName();
- }
-
- @Override
- public Property getProperty(String name)
- {
- return procStruct.getProperty(name);
- }
-
- @Override
- public void addProperty(Property prop)
- {
- procStruct.addProperty(prop);
- }
-
- @Override
- public Set<String> getPropertyNames()
- {
- return procStruct.getPropertyNames();
- }
-
- @Override
- public boolean removeProperty(String name)
- {
- return procStruct.removeProperty(name);
- }
-
- @Override
- public List<Node> getNodes()
- {
- return procStruct.getNodes();
- }
-
- @Override
- public Node getNode(String name)
- {
- return procStruct.getNode(name);
- }
-
- @Override
- public <T extends Node> List<T> getNodes(Class<T> clazz)
- {
- return procStruct.getNodes(clazz);
- }
-
- @Override
- public <T extends Node> T getNode(Class<T> clazz, String name)
- {
- return procStruct.getNode(clazz, name);
- }
-
- @Override
- public Set<Message> getMessages()
- {
- return procStruct.getMessages();
- }
-
- @Override
- public Message getMessage(String msgName)
- {
- return procStruct.getMessage(msgName);
- }
-
- @Override
- public List<Assignment> getAssignments()
- {
- return procStruct.getAssignments();
- }
-}
\ No newline at end of file
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/TaskImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/TaskImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/TaskImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -28,11 +28,15 @@
import java.util.List;
import javax.management.ObjectName;
+import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.OneToMany;
import javax.persistence.Transient;
+import org.hibernate.annotations.IndexColumn;
import org.jbpm.api.Constants;
import org.jbpm.api.InvalidProcessException;
import org.jbpm.api.NotImplementedException;
@@ -74,16 +78,19 @@
@Enumerated(EnumType.STRING)
protected TaskType taskType;
- @Transient
+ @IndexColumn(name = "setIndex")
+ @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = InputSetImpl.class)
private List<InputSet> inputSets = new ArrayList<InputSet>();
- @Transient
+ @IndexColumn(name = "setIndex")
+ @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = OutputSetImpl.class)
private List<OutputSet> outputSets = new ArrayList<OutputSet>();
- @Transient
+ @IndexColumn(name = "exprIndex")
+ @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = ExpressionImpl.class)
private List<Expression> ioRules = new ArrayList<Expression>();
- public TaskImpl(ProcessStructure procStruct, String name, TaskType taskType)
+ public TaskImpl(ProcessStructure procStruct, TaskType taskType, String name)
{
super(procStruct, name);
this.taskType = taskType;
@@ -100,7 +107,6 @@
}
@Override
- @Transient
public ObjectName getKey()
{
StringBuilder str = new StringBuilder(Constants.ID_DOMAIN + ":");
@@ -119,7 +125,8 @@
public void setInFlow(SequenceFlowImpl inFlow)
{
- inFlow.setSourceIndex(inFlows.size());
+ inFlow.setTargetIndex(inFlows.size());
+ inFlow.setTargetRef(this);
inFlows.add(inFlow);
}
@@ -133,7 +140,8 @@
public void setOutFlow(SequenceFlowImpl outFlow)
{
- outFlow.setTargetIndex(outFlows.size());
+ outFlow.setSourceIndex(outFlows.size());
+ outFlow.setSourceRef(this);
outFlows.add(outFlow);
}
@@ -143,8 +151,9 @@
return Collections.unmodifiableList(inputSets);
}
- public void addInputSet(InputSet inputSet)
+ public void addInputSet(InputSetImpl inputSet)
{
+ inputSet.setSetIndex(inputSets.size());
inputSets.add(inputSet);
}
@@ -154,8 +163,9 @@
return Collections.unmodifiableList(outputSets);
}
- public void addOutputSet(OutputSet outputSet)
+ public void addOutputSet(OutputSetImpl outputSet)
{
+ outputSet.setSetIndex(outputSets.size());
outputSets.add(outputSet);
}
@@ -164,8 +174,9 @@
return Collections.unmodifiableList(ioRules);
}
- public void addIORule(Expression expr)
+ public void addIORule(ExpressionImpl expr)
{
+ expr.setExprIndex(ioRules.size());
ioRules.add(expr);
}
@@ -315,17 +326,17 @@
{
private static final long serialVersionUID = 1L;
- ProcessEngine engine = getProcessDefinition().getProcessEngine();
+ ProcessEngine engine = getProcessEngine();
SignalService sigService = engine.getService(SignalService.class);
public void throwEnterSignal(Token token)
{
- Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_TASK_ENTER);
+ Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_TASK_ENTER, getKey());
sigService.throwSignal(signal);
}
public void throwExitSignal(Token token)
{
- Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_TASK_EXIT);
+ Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_TASK_EXIT, getKey());
sigService.throwSignal(signal);
}
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/UserTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/UserTaskImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/UserTaskImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -80,7 +80,7 @@
public UserTaskImpl(ProcessStructure procStruct, String name)
{
- super(procStruct, name, TaskType.User);
+ super(procStruct, TaskType.User, name);
}
// Persistence ctor
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/EventBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/EventBuilderImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/EventBuilderImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -24,11 +24,11 @@
//$Id$
import org.jbpm.api.model.Event;
-import org.jbpm.api.model.Signal;
import org.jbpm.api.model.Signal.SignalType;
import org.jbpm.api.model.builder.EventBuilder;
import org.jbpm.ri.model.EventImpl;
import org.jbpm.ri.model.MessageImpl;
+import org.jbpm.ri.model.SignalImpl;
/**
* The EventBuilder can be used to build an {@link Event} dynamically.
@@ -53,7 +53,7 @@
public EventBuilder addSignalRef(SignalType signalType, String message)
{
EventImpl eventImpl = getEvent();
- eventImpl.setSignalRef(new Signal(node.getKey(), signalType, message));
+ eventImpl.setSignalRef(new SignalImpl(signalType, node.getKey(), message));
return this;
}
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -158,7 +158,7 @@
{
if (type == TaskType.None || type == null)
{
- node = new TaskImpl(procStruct, name, TaskType.None);
+ node = new TaskImpl(procStruct, TaskType.None, name);
}
else if (type == TaskType.Service)
{
Added: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/SignalBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/SignalBuilderImpl.java (rev 0)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/SignalBuilderImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -0,0 +1,47 @@
+/*
+ * 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.jbpm.ri.model.builder;
+
+//$Id$
+
+import javax.management.ObjectName;
+
+import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.Signal.SignalType;
+import org.jbpm.api.model.builder.SignalBuilder;
+import org.jbpm.ri.model.SignalImpl;
+
+
+/**
+ * A SignalBuilder can be used to build a {@link Signal} dynamically.
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public class SignalBuilderImpl implements SignalBuilder
+{
+ @Override
+ public Signal newSignal(SignalType signalType, ObjectName fromRef, String message)
+ {
+ return new SignalImpl(signalType, fromRef, message);
+ }
+}
\ No newline at end of file
Property changes on: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/SignalBuilderImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/DelegatingExecutionContext.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/DelegatingExecutionContext.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/DelegatingExecutionContext.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -29,10 +29,10 @@
import java.util.Map;
import org.jbpm.api.model.Node;
+import org.jbpm.api.model.Process;
import org.jbpm.api.model.ProcessDefinition;
import org.jbpm.api.model.Property;
import org.jbpm.api.runtime.ExecutionContext;
-import org.jbpm.api.model.Process;
/**
* An ExecutionContext that delegates to the current {@link Node} or {@link Process} for property rerieval.
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/RuntimeProcess.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/RuntimeProcess.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/RuntimeProcess.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -23,8 +23,8 @@
//$Id$
+import org.jbpm.api.model.Process;
import org.jbpm.api.runtime.TokenExecutor;
-import org.jbpm.api.model.Process;
/**
* A RuntimeProcess add runtime behaviour to the {@link Process} <p/> To protect the engine from maligious user code it
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -36,7 +36,6 @@
import org.jbpm.api.model.Assignment;
import org.jbpm.api.model.Expression;
import org.jbpm.api.model.Process;
-import org.jbpm.api.model.Signal;
import org.jbpm.api.model.StartEvent;
import org.jbpm.api.model.Assignment.AssignTime;
import org.jbpm.api.model.Event.EventDetailType;
@@ -51,6 +50,7 @@
import org.jbpm.api.service.SignalService;
import org.jbpm.ri.model.ProcessImpl;
import org.jbpm.ri.model.SequenceFlowImpl;
+import org.jbpm.ri.model.SignalImpl;
import org.jbpm.ri.runtime.DelegatingToken;
import org.jbpm.ri.runtime.ExpressionEvaluator;
import org.jbpm.ri.runtime.MutableToken;
@@ -335,7 +335,7 @@
synchronized (proc)
{
procImpl.setProcessStatus(ProcessStatus.Active);
- sigService.throwSignal(new Signal(procID, SignalType.SYSTEM_PROCESS_ENTER));
+ sigService.throwSignal(new SignalImpl(SignalType.SYSTEM_PROCESS_ENTER, procID));
// Notify that the process is now Active
proc.notifyAll();
@@ -364,7 +364,7 @@
}
finally
{
- sigService.throwSignal(new Signal(procID, Signal.SignalType.SYSTEM_PROCESS_EXIT));
+ sigService.throwSignal(new SignalImpl(SignalType.SYSTEM_PROCESS_EXIT, procID));
synchronized (proc)
{
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -31,10 +31,10 @@
import org.hibernate.Hibernate;
import org.hibernate.ObjectNotFoundException;
+import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
-import org.hibernate.Session;
import org.jbpm.api.ProcessNotFoundException;
import org.jbpm.api.client.ProcessEngine;
import org.jbpm.api.model.Node;
@@ -42,7 +42,6 @@
import org.jbpm.api.model.ProcessDefinition;
import org.jbpm.api.service.PersistenceService;
import org.jbpm.api.service.Service;
-import org.jbpm.ri.model.NodeImpl;
import org.jbpm.ri.model.ProcessDefinitionImpl;
import org.jbpm.ri.model.ProcessImpl;
import org.slf4j.Logger;
@@ -219,14 +218,15 @@
}
@Override
- public Node loadNode(Session session, ObjectName nodeID)
+ @SuppressWarnings("unchecked")
+ public <T extends Node> T loadNode(Session session, Class<T> nodeImpl, ObjectName nodeID)
{
log.debug("START loadNode: " + nodeID);
- Node node = null;
+ T node = null;
try
{
Integer id = Integer.valueOf(nodeID.getKeyProperty("id"));
- node = (Node)session.load(NodeImpl.class, id);
+ node = (T)session.load(nodeImpl, id);
Hibernate.initialize(node);
}
catch (ObjectNotFoundException ex)
@@ -237,6 +237,15 @@
return node;
}
+ public void deleteNode(Session session, Node node)
+ {
+ log.debug("START deleteNode: " + node);
+
+ session.delete(node);
+
+ log.debug("END deleteNode: " + node);
+ }
+
@SuppressWarnings("unchecked")
private SessionFactory getSessionFactory()
{
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/InMemoryPersistenceServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/InMemoryPersistenceServiceImpl.java 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/InMemoryPersistenceServiceImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -125,9 +125,10 @@
}
@Override
- public Node loadNode(Session session, ObjectName nodeID)
+ @SuppressWarnings("unchecked")
+ public <T extends Node> T loadNode(Session session, Class<T> nodeImpl, ObjectName nodeID)
{
- Node node = nodes.get(nodeID);
+ T node = (T)nodes.get(nodeID);
if (node == null)
throw new ProcessNotFoundException("Cannot find node: " + nodeID);
Added: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/SignalBuilderServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/SignalBuilderServiceImpl.java (rev 0)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/SignalBuilderServiceImpl.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -0,0 +1,51 @@
+/*
+ * 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.jbpm.ri.service;
+
+// $Id$
+
+import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.builder.SignalBuilder;
+import org.jbpm.api.service.SignalBuilderService;
+import org.jbpm.ri.model.builder.SignalBuilderImpl;
+
+/**
+ * The SignalBuilder can be used to build a {@link Signal} dynamically.
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 17-Sep-2008
+ */
+public class SignalBuilderServiceImpl extends SignalBuilderService implements MutableService
+{
+ @Override
+ public void setProcessEngine(ProcessEngine engine)
+ {
+ super.setProcessEngine(engine);
+ }
+
+ @Override
+ public SignalBuilder getSignalBuilder()
+ {
+ return new SignalBuilderImpl();
+ }
+}
Property changes on: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/SignalBuilderServiceImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/ri/src/main/resources/jbpm-cfg-beans.xml
===================================================================
--- projects/spec/trunk/modules/ri/src/main/resources/jbpm-cfg-beans.xml 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/resources/jbpm-cfg-beans.xml 2008-10-10 06:56:39 UTC (rev 2516)
@@ -16,6 +16,7 @@
<inject bean="jBPMProcessDefinitionService" />
<inject bean="jBPMProcessService" />
<inject bean="jBPMSignalService" />
+ <inject bean="jBPMSignalBuilderService" />
</set>
</property>
</bean>
@@ -25,24 +26,29 @@
<property name="annotatedClasses">
<set elementClass="java.lang.String">
<value>org.jbpm.ri.model.AbstractElementImpl</value>
+ <value>org.jbpm.ri.model.AssignmentImpl</value>
<value>org.jbpm.ri.model.ComplexGatewayImpl</value>
<value>org.jbpm.ri.model.EndEventImpl</value>
<value>org.jbpm.ri.model.ExclusiveGatewayImpl</value>
+ <value>org.jbpm.ri.model.ExpressionImpl</value>
<value>org.jbpm.ri.model.GatewayImpl</value>
<value>org.jbpm.ri.model.InclusiveGatewayImpl</value>
+ <value>org.jbpm.ri.model.InputSetImpl</value>
<value>org.jbpm.ri.model.MessageImpl</value>
<value>org.jbpm.ri.model.NodeImpl</value>
+ <value>org.jbpm.ri.model.OutputSetImpl</value>
<value>org.jbpm.ri.model.ParallelGatewayImpl</value>
<value>org.jbpm.ri.model.ParticipantImpl</value>
<value>org.jbpm.ri.model.ProcessDefinitionImpl</value>
<value>org.jbpm.ri.model.ProcessStructureImpl</value>
<value>org.jbpm.ri.model.ProcessImpl</value>
<value>org.jbpm.ri.model.PropertyImpl</value>
+ <value>org.jbpm.ri.model.PropertySupportImpl</value>
<value>org.jbpm.ri.model.ReceiveTaskImpl</value>
<value>org.jbpm.ri.model.SendTaskImpl</value>
<value>org.jbpm.ri.model.SequenceFlowImpl</value>
+ <value>org.jbpm.ri.model.SignalImpl</value>
<value>org.jbpm.ri.model.StartEventImpl</value>
- <value>org.jbpm.ri.model.StructureDelegateImpl</value>
<value>org.jbpm.ri.model.TaskImpl</value>
<value>org.jbpm.ri.model.UserTaskImpl</value>
</set>
@@ -68,6 +74,7 @@
<bean name="jBPMMessageBuilderService" class="org.jbpm.ri.service.MessageBuilderServiceImpl" />
<bean name="jBPMProcessBuilderService" class="org.jbpm.ri.service.ProcessBuilderServiceImpl" />
<bean name="jBPMProcessDefinitionService" class="org.jbpm.ri.service.ProcessDefinitionServiceImpl" />
+ <bean name="jBPMSignalBuilderService" class="org.jbpm.ri.service.SignalBuilderServiceImpl" />
<bean name="jBPMSignalService" class="org.jbpm.ri.service.SignalServiceImpl" />
</deployment>
Added: projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/service/persistence/TaskPersistenceTest.java
===================================================================
--- projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/service/persistence/TaskPersistenceTest.java (rev 0)
+++ projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/service/persistence/TaskPersistenceTest.java 2008-10-10 06:56:39 UTC (rev 2516)
@@ -0,0 +1,398 @@
+/*
+ * 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.jbpm.test.ri.service.persistence;
+
+// $Id$
+
+import java.util.List;
+import java.util.Set;
+
+import javax.management.ObjectName;
+
+import org.hibernate.Hibernate;
+import org.hibernate.Session;
+import org.hibernate.StaleStateException;
+import org.hibernate.Transaction;
+import org.jbpm.api.model.Assignment;
+import org.jbpm.api.model.Expression;
+import org.jbpm.api.model.InputSet;
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.OutputSet;
+import org.jbpm.api.model.SequenceFlow;
+import org.jbpm.api.model.Task;
+import org.jbpm.api.model.Assignment.AssignTime;
+import org.jbpm.api.model.SequenceFlow.ConditionType;
+import org.jbpm.api.model.Task.TaskType;
+import org.jbpm.api.runtime.ExecutionHandler;
+import org.jbpm.api.runtime.FlowHandler;
+import org.jbpm.api.runtime.SignalHandler;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.api.runtime.TokenExecutor;
+import org.jbpm.api.service.PersistenceService;
+import org.jbpm.api.test.CTSTestCase;
+import org.jbpm.ri.model.AssignmentImpl;
+import org.jbpm.ri.model.ExpressionImpl;
+import org.jbpm.ri.model.InputSetImpl;
+import org.jbpm.ri.model.OutputSetImpl;
+import org.jbpm.ri.model.PropertyImpl;
+import org.jbpm.ri.model.SequenceFlowImpl;
+import org.jbpm.ri.model.TaskImpl;
+import org.jbpm.ri.service.HibernatePersistenceServiceImpl;
+
+/**
+ * Test the HibernatePersistenceService for Tasks
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public class TaskPersistenceTest extends CTSTestCase
+{
+ HibernatePersistenceServiceImpl service;
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ service = (HibernatePersistenceServiceImpl)PersistenceService.locatePersistenceService();
+ }
+
+ public void testSimpleTask() throws Exception
+ {
+ Task orgTask = new TaskImpl(null, TaskType.None, "Task");
+
+ ObjectName taskID = saveNode(orgTask);
+
+ Task wasTask = loadNode(taskID);
+ assertEquals("Task", wasTask.getName());
+ assertEquals(TaskType.None, wasTask.getTaskType());
+
+ deleteNode(wasTask);
+ }
+
+ public void testTaskProperties() throws Exception
+ {
+ TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+ orgTask.addProperty("propOne", "valOne");
+ orgTask.addProperty("propTwo", "valTwo");
+
+ ObjectName taskID = saveNode(orgTask);
+
+ Task wasTask = loadNode(taskID);
+ Set<String> propNames = wasTask.getPropertyNames();
+ assertEquals(2, propNames.size());
+ assertEquals("valOne", wasTask.getProperty("propOne").getValue());
+ assertEquals("valTwo", wasTask.getProperty("propTwo").getValue());
+
+ deleteNode(wasTask);
+ }
+
+ public void testTaskAssignments() throws Exception
+ {
+ TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+ orgTask.addAssignment(new AssignmentImpl(AssignTime.Start, new ExpressionImpl("foo"), new PropertyImpl("propFoo", null)));
+ orgTask.addAssignment(new AssignmentImpl(AssignTime.End, new ExpressionImpl("bar"), new PropertyImpl("propBar", null)));
+
+ ObjectName taskID = saveNode(orgTask);
+
+ Task wasTask = loadNode(taskID);
+ List<Assignment> ass = wasTask.getAssignments();
+ assertEquals(2, ass.size());
+ Assignment assOne = ass.get(0);
+ Assignment assTwo = ass.get(1);
+ assertEquals(AssignTime.Start, assOne.getAssignTime());
+ assertEquals("foo", assOne.getFrom().getExpressionBody());
+ assertEquals("propFoo", assOne.getTo().getName());
+ assertEquals(AssignTime.End, assTwo.getAssignTime());
+ assertEquals("bar", assTwo.getFrom().getExpressionBody());
+ assertEquals("propBar", assTwo.getTo().getName());
+
+ deleteNode(wasTask);
+ }
+
+ public void testInOutFlows() throws Exception
+ {
+ TaskImpl taskA = new TaskImpl(null, TaskType.None, "TaskA");
+ TaskImpl taskB = new TaskImpl(null, TaskType.None, "TaskB");
+
+ SequenceFlowImpl flow = new SequenceFlowImpl("TaskB", ConditionType.Expression, new ExpressionImpl("expr"));
+ taskA.setOutFlow(flow);
+ taskB.setInFlow(flow);
+
+ ObjectName aID = saveNode(taskA);
+ ObjectName bID = saveNode(taskB);
+
+ Task wasA = loadNode(aID);
+ Task wasB = loadNode(bID);
+
+ SequenceFlow outFlowA = wasA.getOutFlow();
+ assertEquals("TaskB", outFlowA.getTargetName());
+ assertEquals("TaskB", outFlowA.getTargetRef().getName());
+ assertEquals(ConditionType.Expression, outFlowA.getConditionType());
+ assertEquals("expr", outFlowA.getConditionExpression().getExpressionBody());
+ assertSame(wasA, outFlowA.getSourceRef());
+
+ SequenceFlow inFlowB = wasB.getInFlow();
+ assertEquals(outFlowA.getTargetName(), inFlowB.getTargetName());
+
+ deleteNode(wasA);
+ deleteNode(wasB);
+ }
+
+ public void testExecHandler() throws Exception
+ {
+ class ExecHandler implements ExecutionHandler
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void execute(Token token)
+ {
+ }
+
+ @Override
+ public Node getNode()
+ {
+ return null;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+ }
+
+ TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+ orgTask.setExecutionHandler(ExecHandler.class);
+
+ ObjectName taskID = saveNode(orgTask);
+
+ Task wasTask = loadNode(taskID);
+
+ ExecutionHandler execHandler = wasTask.getExecutionHandler();
+ assertNotNull(execHandler);
+ assertTrue(execHandler instanceof ExecutionHandler);
+
+ deleteNode(wasTask);
+ }
+
+ public void testSignalHandler() throws Exception
+ {
+ class SigHandler implements SignalHandler
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public Node getNode()
+ {
+ return null;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+
+ @Override
+ public void throwEnterSignal(Token token)
+ {
+ }
+
+ @Override
+ public void throwExitSignal(Token token)
+ {
+ }
+ }
+
+ TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+ orgTask.setSignalHandler(SigHandler.class);
+
+ ObjectName taskID = saveNode(orgTask);
+
+ Task wasTask = loadNode(taskID);
+
+ SignalHandler sigHandler = wasTask.getSignalHandler();
+ assertNotNull(sigHandler);
+ assertTrue(sigHandler instanceof SignalHandler);
+
+ deleteNode(wasTask);
+ }
+
+ public void testFlowHandler() throws Exception
+ {
+ class FlowHandlerImpl implements FlowHandler
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public Node getNode()
+ {
+ return null;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+
+ @Override
+ public void execute(TokenExecutor tokenExecutor, Token token)
+ {
+ }
+ }
+
+ TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+ orgTask.setFlowHandler(FlowHandlerImpl.class);
+
+ ObjectName taskID = saveNode(orgTask);
+
+ Task wasTask = loadNode(taskID);
+
+ FlowHandler flowHandler = wasTask.getFlowHandler();
+ assertNotNull(flowHandler);
+ assertTrue(flowHandler instanceof FlowHandler);
+
+ deleteNode(wasTask);
+ }
+
+ public void testInputSet() throws Exception
+ {
+ TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+
+ InputSetImpl inSetOne = new InputSetImpl();
+ inSetOne.addProperty("oneName", "oneValue");
+ orgTask.addInputSet(inSetOne);
+
+ InputSetImpl inSetTwo = new InputSetImpl();
+ inSetTwo.addProperty("twoName", "twoValue");
+ orgTask.addInputSet(inSetTwo);
+
+ ObjectName taskID = saveNode(orgTask);
+
+ Task wasTask = loadNode(taskID);
+
+ List<InputSet> inSets = wasTask.getInputSets();
+ assertEquals(2, inSets.size());
+ InputSet wasOne = inSets.get(0);
+ assertEquals("oneValue", wasOne.getProperty("oneName").getValue());
+ InputSet wasTwo = inSets.get(1);
+ assertEquals("twoValue", wasTwo.getProperty("twoName").getValue());
+
+ deleteNode(wasTask);
+ }
+
+ public void testOutputSet() throws Exception
+ {
+ TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+
+ OutputSetImpl outSetOne = new OutputSetImpl();
+ outSetOne.addProperty("oneName", "oneValue");
+ orgTask.addOutputSet(outSetOne);
+
+ OutputSetImpl outSetTwo = new OutputSetImpl();
+ outSetTwo.addProperty("twoName", "twoValue");
+ orgTask.addOutputSet(outSetTwo);
+
+ ObjectName taskID = saveNode(orgTask);
+
+ Task wasTask = loadNode(taskID);
+
+ List<OutputSet> outSets = wasTask.getOutputSets();
+ assertEquals(2, outSets.size());
+ OutputSet wasOne = outSets.get(0);
+ assertEquals("oneValue", wasOne.getProperty("oneName").getValue());
+ OutputSet wasTwo = outSets.get(1);
+ assertEquals("twoValue", wasTwo.getProperty("twoName").getValue());
+
+ deleteNode(wasTask);
+ }
+
+ public void testIORules() throws Exception
+ {
+ TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+ orgTask.addIORule(new ExpressionImpl("ioOne"));
+ orgTask.addIORule(new ExpressionImpl("ioTwo"));
+
+ ObjectName taskID = saveNode(orgTask);
+
+ Task wasTask = loadNode(taskID);
+
+ List<Expression> rules = wasTask.getIORules();
+ assertEquals(2, rules.size());
+ Expression wasOne = rules.get(0);
+ assertEquals("ioOne", wasOne.getExpressionBody());
+ Expression wasTwo = rules.get(1);
+ assertEquals("ioTwo", wasTwo.getExpressionBody());
+
+ deleteNode(wasTask);
+ }
+
+ private ObjectName saveNode(Node node)
+ {
+ Session session = service.createSession();
+ Transaction tx = session.beginTransaction();
+ try
+ {
+ service.saveNode(session, node);
+ tx.commit();
+
+ return node.getKey();
+ }
+ finally
+ {
+ session.close();
+ }
+ }
+
+ private Task loadNode(ObjectName nodeID)
+ {
+ Session session = service.createSession();
+ try
+ {
+ Task task = service.loadNode(session, TaskImpl.class, nodeID);
+ Hibernate.initialize(task);
+ return task;
+ }
+ finally
+ {
+ session.close();
+ }
+ }
+
+ private void deleteNode(Node node)
+ {
+ Session session = service.createSession();
+ Transaction tx = session.beginTransaction();
+ try
+ {
+ service.deleteNode(session, node);
+ tx.commit();
+ }
+ catch(StaleStateException ex)
+ {
+ // ignore, because the node was already deleted by a cascade
+ }
+ finally
+ {
+ session.close();
+ }
+ }
+}
Property changes on: projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/service/persistence/TaskPersistenceTest.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/ri/src/test/resources/log4j.xml
===================================================================
--- projects/spec/trunk/modules/ri/src/test/resources/log4j.xml 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/test/resources/log4j.xml 2008-10-10 06:56:39 UTC (rev 2516)
@@ -24,7 +24,7 @@
<param name="Target" value="System.out" />
<param name="Threshold" value="INFO" />
<layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} [%t] %-5p %C{1} : %m%n" />
+ <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{1}] %m%n" />
</layout>
</appender>
@@ -32,17 +32,11 @@
<!-- Limit categories -->
<!-- ================ -->
- <category name="org.jbpm">
- <priority value="DEBUG" />
- </category>
-
<category name="org.hibernate">
<priority value="INFO" />
</category>
-
- <!-- hide optimistic locking failures -->
- <category name="org.hibernate.event.def.AbstractFlushingEventListener">
- <priority value="FATAL" />
+ <category name="org.hibernate.persister">
+ <priority value="DEBUG" />
</category>
<!-- ======================= -->
@@ -54,4 +48,4 @@
<appender-ref ref="FILE"/>
</root>
-</log4j:configuration>
+</log4j:configuration>
\ No newline at end of file
Modified: projects/spec/trunk/pom.xml
===================================================================
--- projects/spec/trunk/pom.xml 2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/pom.xml 2008-10-10 06:56:39 UTC (rev 2516)
@@ -42,6 +42,7 @@
<properties>
<hibernate.version>3.2.6.ga</hibernate.version>
<log4j.version>1.2.14</log4j.version>
+ <mysql.connector.version>5.1.6</mysql.connector.version>
<slf4j.version>1.5.3</slf4j.version>
</properties>
@@ -56,6 +57,11 @@
<!-- Please sort by groupid -->
<dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ <version>${mysql.connector.version}</version>
+ </dependency>
+ <dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>${hibernate.version}</version>
@@ -153,6 +159,29 @@
</build>
</profile>
+ <!--
+ Name: no-database
+ Descr: Setup the default database
+ -->
+ <profile>
+ <id>no-database</id>
+ <activation>
+ <property>
+ <name>!database</name>
+ </property>
+ </activation>
+ <properties>
+ <database>mysql</database>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ </profile>
+
<!--
Name: skiptests
Desc: Skips the tests
More information about the jbpm-commits
mailing list