[jbpm-commits] JBoss JBPM SVN: r4305 - in jbpm4/trunk/modules: api/src/main/java/org/jbpm/task and 19 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Sat Mar 21 13:50:10 EDT 2009


Author: tom.baeyens at jboss.com
Date: 2009-03-21 13:50:09 -0400 (Sat, 21 Mar 2009)
New Revision: 4305

Added:
   jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/task/swimlane/
   jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/task/swimlane/TaskSwimlaneTest.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/TaskExtension.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/Assignable.java
Removed:
   jbpm4/trunk/modules/api/src/main/java/org/jbpm/task/TaskExtension.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/StartActivities.java
Modified:
   jbpm4/trunk/modules/api/src/main/java/org/jbpm/session/TaskDbSession.java
   jbpm4/trunk/modules/api/src/main/resources/jpdl.xsd
   jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.definition.hbm.xml
   jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.execution.hbm.xml
   jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.jpdl.hbm.xml
   jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.task.hbm.xml
   jbpm4/trunk/modules/examples/.project
   jbpm4/trunk/modules/examples/src/test/resources/jbpm.definition.hbm.xml
   jbpm4/trunk/modules/examples/src/test/resources/jbpm.execution.hbm.xml
   jbpm4/trunk/modules/examples/src/test/resources/jbpm.jpdl.hbm.xml
   jbpm4/trunk/modules/examples/src/test/resources/jbpm.task.hbm.xml
   jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/task/swimlane/process.jpdl.xml
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StartBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/JpdlExecution.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/JpdlProcessDefinition.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
   jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.definition.hbm.xml
   jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.execution.hbm.xml
   jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.jpdl.hbm.xml
   jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.task.hbm.xml
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/DeleteTaskCmd.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/NewTaskCmd.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/deploy/CheckProcessDeployer.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/deploy/DeployerManager.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/HibernateTaskDbSession.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/ParticipantImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/SwimlaneDefinitionImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/SwimlaneImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskDefinitionImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/tx/StandardTransaction.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/HibernateSessionDescriptor.java
   jbpm4/trunk/modules/pvm/src/test/resources/jbpm.definition.hbm.xml
   jbpm4/trunk/modules/pvm/src/test/resources/jbpm.execution.hbm.xml
   jbpm4/trunk/modules/pvm/src/test/resources/jbpm.task.hbm.xml
   jbpm4/trunk/modules/test-db/src/test/resources/jbpm.definition.hbm.xml
   jbpm4/trunk/modules/test-db/src/test/resources/jbpm.execution.hbm.xml
   jbpm4/trunk/modules/test-db/src/test/resources/jbpm.jpdl.hbm.xml
   jbpm4/trunk/modules/test-db/src/test/resources/jbpm.task.hbm.xml
Log:
JBPM-2080 JBPM-2024 JBPM-2104 added swimlanes

Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/session/TaskDbSession.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/session/TaskDbSession.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/session/TaskDbSession.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -30,7 +30,7 @@
  */
 public interface TaskDbSession extends DbSession {
   
-  Task newTask();
+  Task createTask();
 
   Task findTaskByDbid(long taskDbid);
 

Deleted: jbpm4/trunk/modules/api/src/main/java/org/jbpm/task/TaskExtension.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/task/TaskExtension.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/task/TaskExtension.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -1,39 +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.task;
-
-
-/**
- * @author Tom Baeyens
- */
-public interface TaskExtension {
-  
-  TaskDefinition getTaskDefinition();
-  TaskDefinition getTaskDefinition(String name);
-
-  Task createTask(TaskDefinition taskDefinition);  
-
-  SwimlaneDefinition getSwimlaneDefinition(String name);
-
-  Swimlane getSwimlane(String name);
-  Swimlane createSwimlane(SwimlaneDefinition swimlaneDefinition);
-}

Modified: jbpm4/trunk/modules/api/src/main/resources/jpdl.xsd
===================================================================
--- jbpm4/trunk/modules/api/src/main/resources/jpdl.xsd	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/api/src/main/resources/jpdl.xsd	2009-03-21 17:50:09 UTC (rev 4305)
@@ -315,7 +315,7 @@
         </documentation></annotation>
         <complexType>
           <sequence>
-            <element name="handler" type="tns:wireObjectType"></element>
+            <element name="handler" minOccurs="0"  type="tns:wireObjectType" />
             <element ref="tns:transition" minOccurs="0" maxOccurs="unbounded" />
           </sequence>
           <attributeGroup ref="tns:activityAttributes" />
@@ -661,11 +661,13 @@
     <annotation><documentation>Elements of type swimlaneType will be used in the 
       process to enumerate all the participating swimlanes. 
     </documentation></annotation>
+    <sequence>
+    </sequence>
     <attribute name="name" type="string"/>
     <attributeGroup ref="tns:assignmentAttributes"></attributeGroup>
   </complexType>
   
-  <element name="swimlane" type="tns:swimlaneType">
+  <element name="swimlane" type="tns:swimlaneType"  >
     <annotation><documentation>A participating swimlane for this process
     </documentation></annotation>
   </element>

Modified: jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.definition.hbm.xml
===================================================================
--- jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.definition.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.definition.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -4,11 +4,15 @@
 <hibernate-mapping package="org.jbpm.pvm.internal.model" default-access="field">
 
   <!-- ### PROCESS DEFINITION ############################################# -->
-  <class name="ProcessDefinitionImpl" table="JBPM_PROCESS">
+  <class name="ProcessDefinitionImpl" 
+         table="JBPM_PROCESS"
+         discriminator-value="pvm">
     <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
+    <discriminator><column name="CLASS_" /></discriminator>
+
     <version name="dbversion" column="DBVERSION_" />
     <many-to-one name="properties"
                  class="WireProperties" 

Modified: jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.execution.hbm.xml
===================================================================
--- jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.execution.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.execution.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -19,10 +19,13 @@
   </typedef>
 
   <!-- ### PROCESS DEFINITION ############################################# -->
-  <class name="ExecutionImpl" table="JBPM_EXECUTION">
+  <class name="ExecutionImpl" 
+         table="JBPM_EXECUTION"
+         discriminator-value="pvm">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
+    <discriminator><column name="CLASS_" /></discriminator>
     <version name="dbversion" column="DBVERSION_" />
     
     <many-to-one name="activity" 
@@ -34,8 +37,7 @@
 
     <property name="hasVariables" column="HASVARS_" />
     <map name="variables"
-         cascade="all-delete-orphan"
-         table="JBPM_VARIABLE">
+         cascade="all-delete-orphan">
       <key foreign-key="FK_VAR_EXECUTION">
          <column name="EXECUTION_" index="IDX_VAR_EXECUTION"/>
       </key>

Modified: jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.jpdl.hbm.xml
===================================================================
--- jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.jpdl.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.jpdl.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -3,13 +3,39 @@
 
 <hibernate-mapping default-access="field">
 
-  <joined-subclass name="org.jbpm.jpdl.internal.model.JpdlProcessDefinition" table="JBPM_JPDL_PROCDEF"  extends="org.jbpm.pvm.internal.model.ProcessDefinitionImpl">
-    <key column="DBID_"/>
-  </joined-subclass>
+  <subclass name="org.jbpm.jpdl.internal.model.JpdlProcessDefinition" 
+            extends="org.jbpm.pvm.internal.model.ProcessDefinitionImpl"
+            discriminator-value="jpdl">
+    <map name="swimlaneDefinitions"
+         cascade="all-delete-orphan">
+      <key foreign-key="FK_SWLDEF_PROCESS">
+         <column name="PROCESS_SWL_" index="IDX_SWLDEF_PROCESS"/>
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl" />
+    </map>
+    <map name="taskDefinitions"
+         cascade="all-delete-orphan">
+      <key foreign-key="FK_TSKDEF_PROCESS">
+         <column name="PROCESS_" index="IDX_TSKDEF_PROCESS"/>
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.task.TaskDefinitionImpl" />
+    </map>
+  </subclass>
 
-  <joined-subclass name="org.jbpm.jpdl.internal.model.JpdlExecution" table="JBPM_JPDL_EXECUTION" extends="org.jbpm.pvm.internal.model.ExecutionImpl">
-    <key column="DBID_"/>
-  </joined-subclass>
+  <subclass name="org.jbpm.jpdl.internal.model.JpdlExecution" 
+            extends="org.jbpm.pvm.internal.model.ExecutionImpl"
+            discriminator-value="jpdl">
+    <map name="swimlanes"
+         cascade="all-delete-orphan">
+      <key foreign-key="FK_SWIMLANE_EXEC">
+         <column name="EXECUTION_" index="IDX_SWIMLANE_EXEC"/>
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.task.SwimlaneImpl" />
+    </map>
+  </subclass>
 
   <class name="org.jbpm.jpdl.internal.activity.JpdlActivity" table="JBPM_JPDL_ACTIVITY"  abstract="true" discriminator-value="X">
     <id name="dbid" column="DBID_">

Modified: jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.task.hbm.xml
===================================================================
--- jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.task.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/distro/src/main/resources/config-tool/hibernate/mapping.files/jbpm.task.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -4,21 +4,19 @@
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 <hibernate-mapping auto-import="false" package="org.jbpm.pvm.internal.task" default-access="field">
 
-  <!-- ### TASK DEFINITION ################################################ -->
-  <class name="TaskDefinitionImpl" discriminator-value="T">
+  <!-- ### SWIMLANE DEFINITION ############################################ -->
+  <class name="SwimlaneDefinitionImpl" 
+         table="JBPM_TASKDEF"
+         discriminator-value="S" >
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
-    <discriminator type="char" column="CLASS_"/>
-    <version name="dbversion" column="DBVERSION_" />
+    <discriminator><column name="CLASS_" /></discriminator>
 
+    <version name="dbversion" column="DBVERSION_" />
     <property name="name" column="NAME_"/>
     <property name="description" column="DESCR_"/>
 
-    <property name="priority" column="PRIORITY_"/>
-    <property name="dueDateDuration" column="DUEDATE_"/>
-    <property name="isBlocking" column="BLOCK_"/>
-    <property name="isSignalling" column="SIGNAL_"/>
     <property name="assigneeExpression" column="ASS_EXPR_"/>
     <property name="assigneeExpressionLanguage" column="ASS_EXPR_LANG_"/>
     <property name="candidateUsersExpression" column="CNDUSR_EXPR_"/>
@@ -30,25 +28,35 @@
                  column="ASSIGNER_DESCR_" 
                  cascade="all"
                  class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
-                 foreign-key="FK_TSK_ASIG_DESCR"
-                 index="IDX_TSK_ASIG_DESCR" />
+                 foreign-key="FK_SWL_ASIG_DESCR"
+                 index="IDX_SWL_ASIG_DESCR" />
 
-    <many-to-one name="swimlaneDefinition"
-                 column="SWIMLANE_DEF_" 
-                 cascade="all"
-                 class="SwimlaneDefinitionImpl"
-                 foreign-key="FK_TSK_SWIML_DEF"
-                 index="IDX_TSK_SWIML_DEF" />
-
-		<list name="subTaskDefinitions" cascade="all-delete-orphan">
-			<key column="TASKDEF_" />
-			<list-index column="TASKDEF_IDX_" />
-			<one-to-many class="TaskDefinitionImpl" />
-		</list>
-  </class>
+    <!-- ### TASK DEFINITION ################################################ -->
+    <subclass name="TaskDefinitionImpl" discriminator-value="T">
   
+      <property name="priority" column="PRIORITY_"/>
+      <property name="dueDateDuration" column="DUEDATE_"/>
+      <property name="isBlocking" column="BLOCK_"/>
+      <property name="isSignalling" column="SIGNAL_"/>
+      
+      <many-to-one name="swimlaneDefinition"
+                   column="SWIMLANE_DEF_" 
+                   cascade="all"
+                   class="SwimlaneDefinitionImpl"
+                   foreign-key="FK_TSK_SWIML_DEF"
+                   index="IDX_TSK_SWIML_DEF" />
+  
+      <list name="subTaskDefinitions" cascade="all-delete-orphan">
+        <key column="TASKDEF_" />
+        <list-index column="TASKDEF_IDX_" />
+        <one-to-many class="TaskDefinitionImpl" />
+      </list>
+    </subclass>
+  </class>
+
   <!-- ### TASK ########################################################### -->
   <class name="TaskImpl" 
+         table="JBPM_TASK"
          discriminator-value="T">
     <id name="dbid" column="DBID_">
       <generator class="native" />
@@ -109,7 +117,7 @@
   </class>
   
   <!-- ### PARTICIPANT #################################################### -->
-  <class name="ParticipantImpl">
+  <class name="ParticipantImpl" table="JBPM_PARTICIPANT">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
@@ -132,19 +140,8 @@
 
   </class>
   
-  <!-- ### SWIMLANE DEFINITION ############################################ -->
-  <class name="SwimlaneDefinitionImpl">
-    <id name="dbid" column="DBID_">
-      <generator class="native" />
-    </id>
-    <version name="dbversion" column="DBVERSION_" />
-    
-    <property name="name" column="NAME_"/>
-  </class>
-
-
   <!-- ### SWIMLANE ####################################################### -->
-  <class name="SwimlaneImpl">
+  <class name="SwimlaneImpl" table="JBPM_SWIMLANE">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
@@ -161,7 +158,7 @@
     <many-to-one name="execution"
                  class="org.jbpm.pvm.internal.model.ExecutionImpl" 
                  column="EXECUTION_" 
-                 foreign-key="FK_SWIMLANE_EXEC" />
+                 foreign-key="none" />
 
     <set name="participants" cascade="all-delete-orphan">
       <key column="SWIMLANE_" />
@@ -169,8 +166,8 @@
     </set>
     
   </class>
+
   
-  
   <!-- ### QUERIES ######################################################## -->
 
   <query name="findTasks">

Modified: jbpm4/trunk/modules/examples/.project
===================================================================
--- jbpm4/trunk/modules/examples/.project	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/examples/.project	2009-03-21 17:50:09 UTC (rev 4305)
@@ -11,8 +11,13 @@
 			</arguments>
 		</buildCommand>
 		<buildCommand>
-			<name>org.maven.ide.eclipse.maven2Builder</name>
+			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
+			<triggers>full,incremental,</triggers>
 			<arguments>
+				<dictionary>
+					<key>LaunchConfigHandle</key>
+					<value>&lt;project&gt;/.externalToolBuilders/org.maven.ide.eclipse.maven2Builder.launch</value>
+				</dictionary>
 			</arguments>
 		</buildCommand>
 	</buildSpec>

Added: jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/task/swimlane/TaskSwimlaneTest.java
===================================================================
--- jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/task/swimlane/TaskSwimlaneTest.java	                        (rev 0)
+++ jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/task/swimlane/TaskSwimlaneTest.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -0,0 +1,75 @@
+/*
+ * 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.examples.task.swimlane;
+
+import java.util.List;
+
+import org.jbpm.task.Task;
+import org.jbpm.test.JbpmTestCase;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class TaskSwimlaneTest extends JbpmTestCase {
+
+  public void testTaskSwimlane() {
+    // create johndoe and joesmoe as members of the sales group
+    String salesGroupId = identityService.createGroup("sales");
+
+    identityService.createUser("johndoe", "John", "Doe");
+    identityService.createMembership("johndoe", salesGroupId);
+
+    deployJpdlResource("org/jbpm/examples/task/swimlane/process.jpdl.xml");
+    
+    executionService.startProcessInstanceByKey("TaskSwimlane");
+    
+    List<Task> taskList = taskService.getGroupTaskList("johndoe", 0, 10);
+    assertEquals(1, taskList.size());
+    Task task = taskList.get(0);
+    long taskDbid = task.getDbid();
+    assertEquals("enter order data", task.getName());
+    assertNull(task.getAssignee());
+    
+    // lets assume that johndoe takes the task
+    taskService.setUserId("johndoe");
+    taskService.takeTask(taskDbid);
+    
+    // submit the task
+    taskService.submitTask(taskDbid);
+
+    // the next task will be created and assigned directly to johndoe
+    // this is because johndoe was the person that took the previous task 
+    // in the salesRepresentative swimlane.  so that person is most likely 
+    // to know the context of this case
+    
+    // we'll check that the group task lists for johndoe and joesmoe are empty
+    assertEquals(0, taskService.getGroupTaskList("johndoe", 0, 10).size());
+
+    // and that the task is directly assigned to johndoe
+    taskList = taskService.getPersonalTaskList("johndoe", 0, 10);
+    assertEquals(1, taskList.size());
+    task = taskList.get(0);
+    assertEquals("calculate quote", task.getName());
+    assertEquals("johndoe", task.getAssignee());
+  }
+}


Property changes on: jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/task/swimlane/TaskSwimlaneTest.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: jbpm4/trunk/modules/examples/src/test/resources/jbpm.definition.hbm.xml
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/jbpm.definition.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/examples/src/test/resources/jbpm.definition.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -4,11 +4,15 @@
 <hibernate-mapping package="org.jbpm.pvm.internal.model" default-access="field">
 
   <!-- ### PROCESS DEFINITION ############################################# -->
-  <class name="ProcessDefinitionImpl" table="JBPM_PROCESS">
+  <class name="ProcessDefinitionImpl" 
+         table="JBPM_PROCESS"
+         discriminator-value="pvm">
     <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
+    <discriminator><column name="CLASS_" /></discriminator>
+
     <version name="dbversion" column="DBVERSION_" />
     <many-to-one name="properties"
                  class="WireProperties" 

Modified: jbpm4/trunk/modules/examples/src/test/resources/jbpm.execution.hbm.xml
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/jbpm.execution.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/examples/src/test/resources/jbpm.execution.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -19,10 +19,13 @@
   </typedef>
 
   <!-- ### PROCESS DEFINITION ############################################# -->
-  <class name="ExecutionImpl" table="JBPM_EXECUTION">
+  <class name="ExecutionImpl" 
+         table="JBPM_EXECUTION"
+         discriminator-value="pvm">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
+    <discriminator><column name="CLASS_" /></discriminator>
     <version name="dbversion" column="DBVERSION_" />
     
     <many-to-one name="activity" 
@@ -34,8 +37,7 @@
 
     <property name="hasVariables" column="HASVARS_" />
     <map name="variables"
-         cascade="all-delete-orphan"
-         table="JBPM_VARIABLE">
+         cascade="all-delete-orphan">
       <key foreign-key="FK_VAR_EXECUTION">
          <column name="EXECUTION_" index="IDX_VAR_EXECUTION"/>
       </key>
@@ -203,7 +205,7 @@
       <generator class="native" />
     </id>
     <version name="dbversion" column="DBVERSION_" />
-    <property name="blob" type="blob" column="BLOB_VALUE_" />
+    <property name="blob" type="blob"><column name="BLOB_VALUE_" /></property>
     <property name="bytes" type="binary" column="BINARY_VALUE_"/>
     <property name="clob" type="clob" column="CLOB_VALUE_" />
     <property name="text" type="text" column="TEXT_VALUE_"/>

Modified: jbpm4/trunk/modules/examples/src/test/resources/jbpm.jpdl.hbm.xml
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/jbpm.jpdl.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/examples/src/test/resources/jbpm.jpdl.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -3,13 +3,39 @@
 
 <hibernate-mapping default-access="field">
 
-  <joined-subclass name="org.jbpm.jpdl.internal.model.JpdlProcessDefinition" table="JBPM_JPDL_PROCDEF"  extends="org.jbpm.pvm.internal.model.ProcessDefinitionImpl">
-    <key column="DBID_"/>
-  </joined-subclass>
+  <subclass name="org.jbpm.jpdl.internal.model.JpdlProcessDefinition" 
+            extends="org.jbpm.pvm.internal.model.ProcessDefinitionImpl"
+            discriminator-value="jpdl">
+    <map name="swimlaneDefinitions"
+         cascade="all-delete-orphan">
+      <key foreign-key="FK_SWLDEF_PROCESS">
+         <column name="PROCESS_SWL_" index="IDX_SWLDEF_PROCESS"/>
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl" />
+    </map>
+    <map name="taskDefinitions"
+         cascade="all-delete-orphan">
+      <key foreign-key="FK_TSKDEF_PROCESS">
+         <column name="PROCESS_" index="IDX_TSKDEF_PROCESS"/>
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.task.TaskDefinitionImpl" />
+    </map>
+  </subclass>
 
-  <joined-subclass name="org.jbpm.jpdl.internal.model.JpdlExecution" table="JBPM_JPDL_EXECUTION" extends="org.jbpm.pvm.internal.model.ExecutionImpl">
-    <key column="DBID_"/>
-  </joined-subclass>
+  <subclass name="org.jbpm.jpdl.internal.model.JpdlExecution" 
+            extends="org.jbpm.pvm.internal.model.ExecutionImpl"
+            discriminator-value="jpdl">
+    <map name="swimlanes"
+         cascade="all-delete-orphan">
+      <key foreign-key="FK_SWIMLANE_EXEC">
+         <column name="EXECUTION_" index="IDX_SWIMLANE_EXEC"/>
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.task.SwimlaneImpl" />
+    </map>
+  </subclass>
 
   <class name="org.jbpm.jpdl.internal.activity.JpdlActivity" table="JBPM_JPDL_ACTIVITY"  abstract="true" discriminator-value="X">
     <id name="dbid" column="DBID_">

Modified: jbpm4/trunk/modules/examples/src/test/resources/jbpm.task.hbm.xml
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/jbpm.task.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/examples/src/test/resources/jbpm.task.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -4,21 +4,19 @@
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 <hibernate-mapping auto-import="false" package="org.jbpm.pvm.internal.task" default-access="field">
 
-  <!-- ### TASK DEFINITION ################################################ -->
-  <class name="TaskDefinitionImpl" discriminator-value="T">
+  <!-- ### SWIMLANE DEFINITION ############################################ -->
+  <class name="SwimlaneDefinitionImpl" 
+         table="JBPM_TASKDEF"
+         discriminator-value="S" >
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
-    <discriminator type="char" column="CLASS_"/>
-    <version name="dbversion" column="DBVERSION_" />
+    <discriminator><column name="CLASS_" /></discriminator>
 
+    <version name="dbversion" column="DBVERSION_" />
     <property name="name" column="NAME_"/>
     <property name="description" column="DESCR_"/>
 
-    <property name="priority" column="PRIORITY_"/>
-    <property name="dueDateDuration" column="DUEDATE_"/>
-    <property name="isBlocking" column="BLOCK_"/>
-    <property name="isSignalling" column="SIGNAL_"/>
     <property name="assigneeExpression" column="ASS_EXPR_"/>
     <property name="assigneeExpressionLanguage" column="ASS_EXPR_LANG_"/>
     <property name="candidateUsersExpression" column="CNDUSR_EXPR_"/>
@@ -30,25 +28,35 @@
                  column="ASSIGNER_DESCR_" 
                  cascade="all"
                  class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
-                 foreign-key="FK_TSK_ASIG_DESCR"
-                 index="IDX_TSK_ASIG_DESCR" />
+                 foreign-key="FK_SWL_ASIG_DESCR"
+                 index="IDX_SWL_ASIG_DESCR" />
 
-    <many-to-one name="swimlaneDefinition"
-                 column="SWIMLANE_DEF_" 
-                 cascade="all"
-                 class="SwimlaneDefinitionImpl"
-                 foreign-key="FK_TSK_SWIML_DEF"
-                 index="IDX_TSK_SWIML_DEF" />
-
-		<list name="subTaskDefinitions" cascade="all-delete-orphan">
-			<key column="TASKDEF_" />
-			<list-index column="TASKDEF_IDX_" />
-			<one-to-many class="TaskDefinitionImpl" />
-		</list>
-  </class>
+    <!-- ### TASK DEFINITION ################################################ -->
+    <subclass name="TaskDefinitionImpl" discriminator-value="T">
   
+      <property name="priority" column="PRIORITY_"/>
+      <property name="dueDateDuration" column="DUEDATE_"/>
+      <property name="isBlocking" column="BLOCK_"/>
+      <property name="isSignalling" column="SIGNAL_"/>
+      
+      <many-to-one name="swimlaneDefinition"
+                   column="SWIMLANE_DEF_" 
+                   cascade="all"
+                   class="SwimlaneDefinitionImpl"
+                   foreign-key="FK_TSK_SWIML_DEF"
+                   index="IDX_TSK_SWIML_DEF" />
+  
+      <list name="subTaskDefinitions" cascade="all-delete-orphan">
+        <key column="TASKDEF_" />
+        <list-index column="TASKDEF_IDX_" />
+        <one-to-many class="TaskDefinitionImpl" />
+      </list>
+    </subclass>
+  </class>
+
   <!-- ### TASK ########################################################### -->
   <class name="TaskImpl" 
+         table="JBPM_TASK"
          discriminator-value="T">
     <id name="dbid" column="DBID_">
       <generator class="native" />
@@ -109,7 +117,7 @@
   </class>
   
   <!-- ### PARTICIPANT #################################################### -->
-  <class name="ParticipantImpl">
+  <class name="ParticipantImpl" table="JBPM_PARTICIPANT">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
@@ -132,19 +140,8 @@
 
   </class>
   
-  <!-- ### SWIMLANE DEFINITION ############################################ -->
-  <class name="SwimlaneDefinitionImpl">
-    <id name="dbid" column="DBID_">
-      <generator class="native" />
-    </id>
-    <version name="dbversion" column="DBVERSION_" />
-    
-    <property name="name" column="NAME_"/>
-  </class>
-
-
   <!-- ### SWIMLANE ####################################################### -->
-  <class name="SwimlaneImpl">
+  <class name="SwimlaneImpl" table="JBPM_SWIMLANE">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
@@ -161,7 +158,7 @@
     <many-to-one name="execution"
                  class="org.jbpm.pvm.internal.model.ExecutionImpl" 
                  column="EXECUTION_" 
-                 foreign-key="FK_SWIMLANE_EXEC" />
+                 foreign-key="none" />
 
     <set name="participants" cascade="all-delete-orphan">
       <key column="SWIMLANE_" />
@@ -169,8 +166,8 @@
     </set>
     
   </class>
+
   
-  
   <!-- ### QUERIES ######################################################## -->
 
   <query name="findTasks">

Modified: jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/task/swimlane/process.jpdl.xml
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/task/swimlane/process.jpdl.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/task/swimlane/process.jpdl.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -1,26 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<process name="swimlane" xmlns="http://jbpm.org/4/jpdl">
+<process name="TaskSwimlane" xmlns="http://jbpm.org/4/jpdl">
 
-  <swimlane name="customer"
-      assignee="johndoe">
-  </swimlane>
+  <swimlane name="sales representative"
+            candidate-groups="sales" />
 
   <start g="20,20,48,48">
-    <transition to="open case" />
+    <transition to="enter order data" />
   </start>
   
-  <task 
-      name="open case"
-      swimlane="customer" 
-      g="96,16,127,52">
+  <task name="enter order data"
+        swimlane="sales representative" 
+        g="96,16,127,52">
 
-    <transition to="verify"/>
+    <transition to="calculate quote"/>
   </task>
 
   <task 
-      name="verify" 
-      swimlane="customer"
+      name="calculate quote" 
+      swimlane="sales representative"
       g="255,16,88,52">
   </task>
 

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StartBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StartBinding.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StartBinding.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -21,7 +21,7 @@
  */
 package org.jbpm.jpdl.internal.activity;
 
-import org.jbpm.jpdl.internal.xml.StartActivities;
+import org.jbpm.jpdl.internal.model.JpdlProcessDefinition;
 import org.jbpm.pvm.internal.model.ActivityImpl;
 import org.jbpm.pvm.internal.xml.Parse;
 import org.jbpm.pvm.internal.xml.Parser;
@@ -39,8 +39,15 @@
 
   public Object parse(Element element, Parse parse, Parser parser) {
     ActivityImpl startActivity = parse.findObject(ActivityImpl.class);
-    StartActivities startActivities = parse.findObject(StartActivities.class);
-    startActivities.add(startActivity);
+    JpdlProcessDefinition processDefinition = parse.findObject(JpdlProcessDefinition.class);
+    
+    if (processDefinition.getInitial()==null) {
+      processDefinition.setInitial(startActivity);
+      
+    } else {
+      parse.addProblem("multiple start events not yet supported");
+    }
+    
     return new StartActivity();
   }
 

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -26,8 +26,10 @@
 import org.jbpm.JbpmException;
 import org.jbpm.activity.ActivityExecution;
 import org.jbpm.env.Environment;
+import org.jbpm.jpdl.internal.model.JpdlExecution;
 import org.jbpm.model.Activity;
 import org.jbpm.model.Transition;
+import org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl;
 import org.jbpm.pvm.internal.task.TaskDefinitionImpl;
 import org.jbpm.pvm.internal.task.TaskImpl;
 import org.jbpm.session.TaskDbSession;
@@ -44,15 +46,13 @@
   
   public void execute(ActivityExecution execution) {
     TaskDbSession taskDbSession = Environment.getFromCurrent(TaskDbSession.class);
-    TaskImpl task = TaskImpl.create();
+    TaskImpl task = (TaskImpl) taskDbSession.createTask();
     task.setExecution(execution);
+    task.setName(execution.getActivityName());
     
-    taskDefinition.initialize(task);
+    JpdlExecution jpdlExecution = (JpdlExecution) execution;
+    jpdlExecution.initializeTask(task, taskDefinition);
     
-    if (task.getName()==null) {
-      task.setName(execution.getActivityName());
-    }
-    
     taskDbSession.saveTask(task);
     
     execution.historyTaskStart(task);
@@ -77,7 +77,7 @@
     }
   }
 
-  public TaskDefinitionImpl getTaskDefinition() {
+  public SwimlaneDefinitionImpl getTaskDefinition() {
     return taskDefinition;
   }
   public void setTaskDefinition(TaskDefinitionImpl taskDefinition) {

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskBinding.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskBinding.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -21,13 +21,14 @@
  */
 package org.jbpm.jpdl.internal.activity;
 
+import org.jbpm.jpdl.internal.model.JpdlProcessDefinition;
+import org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl;
 import org.jbpm.pvm.internal.task.TaskDefinitionImpl;
 import org.jbpm.pvm.internal.util.XmlUtil;
 import org.jbpm.pvm.internal.xml.Parse;
 import org.jbpm.pvm.internal.xml.Parser;
 import org.w3c.dom.Element;
 
-
 /**
  * @author Tom Baeyens
  */
@@ -50,25 +51,48 @@
 
   public static TaskDefinitionImpl parseTaskDefinition(Element element, Parse parse, Parser parser) {
     TaskDefinitionImpl taskDefinition = new TaskDefinitionImpl();
+
+    taskDefinition.setName(XmlUtil.attribute(element, "name"));
+
+    String swimlaneName = XmlUtil.attribute(element, "swimlane");
+    if (swimlaneName!=null) {
+      JpdlProcessDefinition jpdlProcessDefinition = parse.findObject(JpdlProcessDefinition.class);
+      SwimlaneDefinitionImpl swimlaneDefinition = jpdlProcessDefinition.getSwimlaneDefinition(swimlaneName);
+      if (swimlaneDefinition!=null) {
+        taskDefinition.setSwimlaneDefinition(swimlaneDefinition);
+      } else {
+        parse.addProblem("swimlane "+swimlaneName+" not declared");
+      }
+    }
+
+    parseAssignmentAttributes(element, taskDefinition);
     
+    return taskDefinition;
+  }
+
+  public static void parseAssignmentAttributes(Element element, SwimlaneDefinitionImpl swimlaneDefinition) {
+    Element descriptionElement = XmlUtil.element(element, "description");
+    if (descriptionElement!=null) {
+      String description = XmlUtil.getContentText(descriptionElement);
+      swimlaneDefinition.setDescription(description);
+    }
+    
     String assigneeExpression = XmlUtil.attribute(element, "assignee");
-    taskDefinition.setAssigneeExpression(assigneeExpression);
+    swimlaneDefinition.setAssigneeExpression(assigneeExpression);
     
     String assigneeExpressionLanguage = XmlUtil.attribute(element, "assignee-lang");
-    taskDefinition.setAssigneeExpressionLanguage(assigneeExpressionLanguage);
+    swimlaneDefinition.setAssigneeExpressionLanguage(assigneeExpressionLanguage);
     
     String candidateUsersExpression = XmlUtil.attribute(element, "candidate-users");
-    taskDefinition.setCandidateUsersExpression(candidateUsersExpression);
+    swimlaneDefinition.setCandidateUsersExpression(candidateUsersExpression);
     
     String candidateUsersExpressionLanguage = XmlUtil.attribute(element, "candidate-users-lang");
-    taskDefinition.setCandidateUsersExpressionLanguage(candidateUsersExpressionLanguage);
+    swimlaneDefinition.setCandidateUsersExpressionLanguage(candidateUsersExpressionLanguage);
     
     String candidateGroupsExpression = XmlUtil.attribute(element, "candidate-groups");
-    taskDefinition.setCandidateGroupsExpression(candidateGroupsExpression);
+    swimlaneDefinition.setCandidateGroupsExpression(candidateGroupsExpression);
     
     String candidateGroupsExpressionLanguage = XmlUtil.attribute(element, "candidate-groups-lang");
-    taskDefinition.setCandidateGroupsExpressionLanguage(candidateGroupsExpressionLanguage);
-    
-    return taskDefinition;
+    swimlaneDefinition.setCandidateGroupsExpressionLanguage(candidateGroupsExpressionLanguage);
   }
 }

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/JpdlExecution.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/JpdlExecution.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/JpdlExecution.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -22,21 +22,25 @@
 package org.jbpm.jpdl.internal.model;
 
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
-import java.util.Set;
+import java.util.StringTokenizer;
 
+import org.hibernate.Session;
 import org.jbpm.JbpmException;
 import org.jbpm.env.Environment;
+import org.jbpm.internal.log.Log;
 import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.pvm.internal.script.ScriptManager;
+import org.jbpm.pvm.internal.task.Assignable;
+import org.jbpm.pvm.internal.task.ParticipantImpl;
+import org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl;
 import org.jbpm.pvm.internal.task.SwimlaneImpl;
+import org.jbpm.pvm.internal.task.TaskDefinitionImpl;
 import org.jbpm.pvm.internal.task.TaskImpl;
 import org.jbpm.session.TaskDbSession;
-import org.jbpm.task.Swimlane;
-import org.jbpm.task.SwimlaneDefinition;
-import org.jbpm.task.Task;
-import org.jbpm.task.TaskDefinition;
-import org.jbpm.task.TaskExtension;
+import org.jbpm.task.GroupRef;
+import org.jbpm.task.Participant;
+import org.jbpm.task.UserRef;
 
 /**
  * @author Tom Baeyens
@@ -44,22 +48,11 @@
 public class JpdlExecution extends ExecutionImpl implements TaskExtension {
 
   private static final long serialVersionUID = 1L;
+  
+  private static Log log = Log.getLog(JpdlExecution.class.getName());
 
-  protected Set<TaskImpl> tasks = new HashSet<TaskImpl>();
   protected Map<String, SwimlaneImpl> swimlanes = new HashMap<String, SwimlaneImpl>();
   
-  public <T> T getExtension(Class<T> extensionClass) {
-    if (extensionClass==null) {
-      throw new JbpmException("extensionClass is null.");
-    }
-
-    if (extensionClass.equals(TaskExtension.class)) {
-      return (T) this;
-    }
-
-    throw new JbpmException("unsuppported extension "+extensionClass);
-  }
-  
   public void deleting() {
     TaskDbSession taskDbSession = Environment.getFromCurrent(TaskDbSession.class);
     if (taskDbSession!=null) {
@@ -67,28 +60,98 @@
     }
   }
 
-  public Swimlane createSwimlane(SwimlaneDefinition swimlaneDefinition) {
-    return null;
-  }
+  public void initializeTask(TaskImpl task, TaskDefinitionImpl taskDefinition) {
+    if (taskDefinition.getName()!=null) {
+      task.setName(taskDefinition.getName());
+    }
+    task.setDescription(taskDefinition.getDescription());
+    task.setBlocking(taskDefinition.isBlocking());
+    task.setSignalling(taskDefinition.isSignalling());
+    task.setPriority(taskDefinition.getPriority());
+    
+    SwimlaneDefinitionImpl swimlaneDefinition = taskDefinition.getSwimlaneDefinition();
+    if (swimlaneDefinition!=null) {
+      SwimlaneImpl swimlane = getInitializedSwimlane(swimlaneDefinition);
+      task.setSwimlane(swimlane);
+      
+      // copy the swimlane assignments to the task
+      task.setAssignee(swimlane.getAssignee());
+      for (ParticipantImpl participant: swimlane.getParticipants()) {
+        task.addParticipant(participant.getIdentityRef(), participant.getParticipation());
+      }
+    }
 
-  public Swimlane getSwimlane(String name) {
-    return null;
+    initializeAssignments(taskDefinition, task);
   }
 
-  public SwimlaneDefinition getSwimlaneDefinition(String name) {
-    return null;
-  }
+  public SwimlaneImpl getInitializedSwimlane(SwimlaneDefinitionImpl swimlaneDefinition) {
+    Session session = Environment.getFromCurrent(Session.class);
+    JpdlExecution jpdlProcessInstance = (JpdlExecution) session.load(JpdlExecution.class, getProcessInstance().getDbid());
+    
+    String swimlaneName = swimlaneDefinition.getName();
+    SwimlaneImpl swimlane = jpdlProcessInstance.getSwimlanes().get(swimlaneName);
+    if (swimlane==null) {
+      // initialize swimlane
+      swimlane = new SwimlaneImpl();
+      swimlane.setName(swimlaneName);
+      swimlane.setExecution(this);
+      jpdlProcessInstance.getSwimlanes().put(swimlaneName, swimlane);
+      initializeAssignments(swimlaneDefinition, swimlane);
+    }
 
-  public TaskDefinition getTaskDefinition() {
-    return null;
+    return swimlane;
   }
 
-  public TaskDefinition getTaskDefinition(String name) {
-    return null;
+  public void initializeAssignments(SwimlaneDefinitionImpl assignmentDefinition, Assignable assignable) {
+    String assigneeExpression = assignmentDefinition.getAssigneeExpression();
+    if (assigneeExpression!=null) {
+      String assignee = resolveAssignmentExpression(assigneeExpression, 
+                                                    assignmentDefinition.getAssigneeExpressionLanguage());
+      assignable.setAssignee(assignee);
+      
+      if (log.isTraceEnabled()) log.trace("task "+name+" assigned to "+assignee+" using expression "+assigneeExpression);
+    }
+    
+    String candidateUsersExpression = assignmentDefinition.getCandidateUsersExpression();
+    if (candidateUsersExpression!=null) {
+      String candidateUsers = 
+          resolveAssignmentExpression(candidateUsersExpression, 
+                                      assignmentDefinition.getCandidateUsersExpressionLanguage());
+      StringTokenizer tokenizer = new StringTokenizer(candidateUsers, ",");
+      while (tokenizer.hasMoreTokens()) {
+        String candidateUser = tokenizer.nextToken();
+        assignable.addParticipant(new UserRef(candidateUser), Participant.CANDIDATE);
+      }
+    }
+  
+    String candidateGroupsExpression = assignmentDefinition.getCandidateGroupsExpression();
+    if (candidateGroupsExpression!=null) {
+      String candidateGroups = 
+            resolveAssignmentExpression(candidateGroupsExpression, 
+                                        assignmentDefinition.getCandidateGroupsExpressionLanguage());
+      StringTokenizer tokenizer = new StringTokenizer(candidateGroups, ",");
+      while (tokenizer.hasMoreTokens()) {
+        String candidateGroup = tokenizer.nextToken();
+        assignable.addParticipant(new GroupRef(candidateGroup), Participant.CANDIDATE);
+      }
+    }
   }
 
-  public Task createTask(TaskDefinition taskDefinition) {
-    TaskDbSession taskDbSession = Environment.getFromCurrent(TaskDbSession.class);
-    return null;
+  protected String resolveAssignmentExpression(String expression, String expressionLanguage) {
+    ScriptManager scriptManager = Environment.getFromCurrent(ScriptManager.class);
+    Object result = scriptManager.evaluateExpression(expression, this, expressionLanguage);
+    if ( (result ==null)
+         || (result instanceof String)
+       ) {
+      return (String) result;
+    }
+    throw new JbpmException("result of assignment expression "+expression+" is "+result+" ("+result.getClass().getName()+") instead of String");
   }
+  
+  public Map<String, SwimlaneImpl> getSwimlanes() {
+    return swimlanes;
+  }
+  public void setSwimlanes(Map<String, SwimlaneImpl> swimlanes) {
+    this.swimlanes = swimlanes;
+  }
 }

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/JpdlProcessDefinition.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/JpdlProcessDefinition.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/JpdlProcessDefinition.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -21,9 +21,13 @@
  */
 package org.jbpm.jpdl.internal.model;
 
-import org.jbpm.client.ClientProcessInstance;
+import java.util.HashMap;
+import java.util.Map;
+
 import org.jbpm.pvm.internal.model.ExecutionImpl;
 import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
+import org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl;
+import org.jbpm.pvm.internal.task.TaskDefinitionImpl;
 
 /**
  * @author Tom Baeyens
@@ -31,8 +35,31 @@
 public class JpdlProcessDefinition extends ProcessDefinitionImpl {
 
   private static final long serialVersionUID = 1L;
+  
+  Map<String, SwimlaneDefinitionImpl> swimlaneDefinitions = new HashMap<String, SwimlaneDefinitionImpl>();
+  Map<String, TaskDefinitionImpl> taskDefinitions = new HashMap<String, TaskDefinitionImpl>();
 
   protected ExecutionImpl newProcessInstance() {
     return new JpdlExecution();
   }
+
+  public SwimlaneDefinitionImpl createSwimlaneDefinition(String name) {
+    SwimlaneDefinitionImpl swimlaneDefinition = new SwimlaneDefinitionImpl();
+    swimlaneDefinitions.put(name, swimlaneDefinition);
+    return swimlaneDefinition;
+  }
+
+  public SwimlaneDefinitionImpl getSwimlaneDefinition(String name) {
+    return swimlaneDefinitions.get(name);
+  }
+
+  public TaskDefinitionImpl createTaskDefinition(String name) {
+    TaskDefinitionImpl taskDefinition = new TaskDefinitionImpl();
+    taskDefinitions.put(name, taskDefinition);
+    return taskDefinition;
+  }
+  
+  public Map<String, TaskDefinitionImpl> getTaskDefinitions() {
+    return taskDefinitions;
+  }
 }

Copied: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/TaskExtension.java (from rev 4304, jbpm4/trunk/modules/api/src/main/java/org/jbpm/task/TaskExtension.java)
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/TaskExtension.java	                        (rev 0)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/TaskExtension.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -0,0 +1,31 @@
+/*
+ * 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.jpdl.internal.model;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public interface TaskExtension {
+
+  
+}


Property changes on: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/TaskExtension.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:mergeinfo
   + 
Name: svn:eol-style
   + LF

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -25,24 +25,18 @@
 import java.util.Enumeration;
 import java.util.List;
 
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.SAXParser;
-
 import org.jbpm.activity.ActivityBehaviour;
 import org.jbpm.internal.log.Log;
 import org.jbpm.jpdl.internal.activity.JpdlActivityBinding;
+import org.jbpm.jpdl.internal.activity.TaskBinding;
 import org.jbpm.jpdl.internal.model.JpdlProcessDefinition;
 import org.jbpm.pvm.internal.model.ActivityImpl;
-import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
+import org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl;
 import org.jbpm.pvm.internal.util.ReflectUtil;
 import org.jbpm.pvm.internal.util.XmlUtil;
-import org.jbpm.pvm.internal.xml.DomBuilder;
 import org.jbpm.pvm.internal.xml.Parse;
 import org.jbpm.pvm.internal.xml.Parser;
-import org.w3c.dom.Document;
 import org.w3c.dom.Element;
-import org.xml.sax.InputSource;
-import org.xml.sax.XMLReader;
 
 /**
  * @author Tom Baeyens
@@ -90,13 +84,13 @@
   }
 
   public Object parseDocumentElement(Element documentElement, Parse parse) {
-    ProcessDefinitionImpl processDefinition = (ProcessDefinitionImpl) parse.getDocumentObject();
+    JpdlProcessDefinition processDefinition = (JpdlProcessDefinition) parse.getDocumentObject();
     if (processDefinition==null) {
       processDefinition = new JpdlProcessDefinition();
+      parse.setDocumentObject(processDefinition);
     }
     
-    StartActivities startActivities = new StartActivities();
-    parse.pushObject(startActivities);
+    parse.pushObject(processDefinition);
     try {
       // process attribues
       String name = XmlUtil.attribute(documentElement, "name", true, parse);
@@ -125,8 +119,16 @@
       parse.pushObject(unresolvedTransitions);
       
       // swimlanes
+      List<Element> swimlaneElements = XmlUtil.elements(documentElement, "swimlane");
+      for (Element swimlaneElement: swimlaneElements) {
+        String swimlaneName = XmlUtil.attribute(swimlaneElement, "name", true, parse);
+        if (swimlaneName!=null) {
+          SwimlaneDefinitionImpl swimlaneDefinition = 
+              processDefinition.createSwimlaneDefinition(swimlaneName);
+          TaskBinding.parseAssignmentAttributes(swimlaneElement, swimlaneDefinition);
+        }
+      }
       
-      
       // activities
       List<Element> elements = XmlUtil.elements(documentElement);
       for (Element element: elements) {
@@ -156,14 +158,8 @@
     }
     
 
-    if (startActivities.size()==0) {
+    if (processDefinition.getInitial()==null) {
       parse.addProblem("no start activity in process");
-    } else if (startActivities.size()>1) {
-      parse.addProblem("multiple start events not yet supported");
-      // TODO verify that all start events have conditions
-    } else {
-      ActivityImpl uniqueStartEvent = startActivities.get(0);
-      processDefinition.setInitial(uniqueStartEvent);
     }
     
     return processDefinition;

Deleted: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/StartActivities.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/StartActivities.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/StartActivities.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -1,50 +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.jpdl.internal.xml;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.jbpm.pvm.internal.model.ActivityImpl;
-
-
-/**
- * @author Tom Baeyens
- */
-public class StartActivities {
-  
-  List<ActivityImpl> startEvents = new ArrayList<ActivityImpl>();
-  
-  
-  public void add(ActivityImpl startEventActivity) {
-    startEvents.add(startEventActivity);
-  }
-
-  public int size() {
-    return startEvents.size();
-  }
-
-  public ActivityImpl get(int i) {
-    return startEvents.get(i);
-  }
-
-}

Modified: jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.definition.hbm.xml
===================================================================
--- jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.definition.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.definition.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -4,11 +4,15 @@
 <hibernate-mapping package="org.jbpm.pvm.internal.model" default-access="field">
 
   <!-- ### PROCESS DEFINITION ############################################# -->
-  <class name="ProcessDefinitionImpl" table="JBPM_PROCESS">
+  <class name="ProcessDefinitionImpl" 
+         table="JBPM_PROCESS"
+         discriminator-value="pvm">
     <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
+    <discriminator><column name="CLASS_" /></discriminator>
+
     <version name="dbversion" column="DBVERSION_" />
     <many-to-one name="properties"
                  class="WireProperties" 

Modified: jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.execution.hbm.xml
===================================================================
--- jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.execution.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.execution.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -19,10 +19,13 @@
   </typedef>
 
   <!-- ### PROCESS DEFINITION ############################################# -->
-  <class name="ExecutionImpl" table="JBPM_EXECUTION">
+  <class name="ExecutionImpl" 
+         table="JBPM_EXECUTION"
+         discriminator-value="pvm">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
+    <discriminator><column name="CLASS_" /></discriminator>
     <version name="dbversion" column="DBVERSION_" />
     
     <many-to-one name="activity" 
@@ -34,8 +37,7 @@
 
     <property name="hasVariables" column="HASVARS_" />
     <map name="variables"
-         cascade="all-delete-orphan"
-         table="JBPM_VARIABLE">
+         cascade="all-delete-orphan">
       <key foreign-key="FK_VAR_EXECUTION">
          <column name="EXECUTION_" index="IDX_VAR_EXECUTION"/>
       </key>
@@ -203,7 +205,7 @@
       <generator class="native" />
     </id>
     <version name="dbversion" column="DBVERSION_" />
-    <property name="blob" type="blob" column="BLOB_VALUE_" />
+    <property name="blob" type="blob"><column name="BLOB_VALUE_" /></property>
     <property name="bytes" type="binary" column="BINARY_VALUE_"/>
     <property name="clob" type="clob" column="CLOB_VALUE_" />
     <property name="text" type="text" column="TEXT_VALUE_"/>

Modified: jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.jpdl.hbm.xml
===================================================================
--- jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.jpdl.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.jpdl.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -3,13 +3,39 @@
 
 <hibernate-mapping default-access="field">
 
-  <joined-subclass name="org.jbpm.jpdl.internal.model.JpdlProcessDefinition" table="JBPM_JPDL_PROCDEF"  extends="org.jbpm.pvm.internal.model.ProcessDefinitionImpl">
-    <key column="DBID_"/>
-  </joined-subclass>
+  <subclass name="org.jbpm.jpdl.internal.model.JpdlProcessDefinition" 
+            extends="org.jbpm.pvm.internal.model.ProcessDefinitionImpl"
+            discriminator-value="jpdl">
+    <map name="swimlaneDefinitions"
+         cascade="all-delete-orphan">
+      <key foreign-key="FK_SWLDEF_PROCESS">
+         <column name="PROCESS_SWL_" index="IDX_SWLDEF_PROCESS"/>
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl" />
+    </map>
+    <map name="taskDefinitions"
+         cascade="all-delete-orphan">
+      <key foreign-key="FK_TSKDEF_PROCESS">
+         <column name="PROCESS_" index="IDX_TSKDEF_PROCESS"/>
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.task.TaskDefinitionImpl" />
+    </map>
+  </subclass>
 
-  <joined-subclass name="org.jbpm.jpdl.internal.model.JpdlExecution" table="JBPM_JPDL_EXECUTION" extends="org.jbpm.pvm.internal.model.ExecutionImpl">
-    <key column="DBID_"/>
-  </joined-subclass>
+  <subclass name="org.jbpm.jpdl.internal.model.JpdlExecution" 
+            extends="org.jbpm.pvm.internal.model.ExecutionImpl"
+            discriminator-value="jpdl">
+    <map name="swimlanes"
+         cascade="all-delete-orphan">
+      <key foreign-key="FK_SWIMLANE_EXEC">
+         <column name="EXECUTION_" index="IDX_SWIMLANE_EXEC"/>
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.task.SwimlaneImpl" />
+    </map>
+  </subclass>
 
   <class name="org.jbpm.jpdl.internal.activity.JpdlActivity" table="JBPM_JPDL_ACTIVITY"  abstract="true" discriminator-value="X">
     <id name="dbid" column="DBID_">

Modified: jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.task.hbm.xml
===================================================================
--- jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.task.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.task.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -4,21 +4,19 @@
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 <hibernate-mapping auto-import="false" package="org.jbpm.pvm.internal.task" default-access="field">
 
-  <!-- ### TASK DEFINITION ################################################ -->
-  <class name="TaskDefinitionImpl" discriminator-value="T">
+  <!-- ### SWIMLANE DEFINITION ############################################ -->
+  <class name="SwimlaneDefinitionImpl" 
+         table="JBPM_TASKDEF"
+         discriminator-value="S" >
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
-    <discriminator type="char" column="CLASS_"/>
-    <version name="dbversion" column="DBVERSION_" />
+    <discriminator><column name="CLASS_" /></discriminator>
 
+    <version name="dbversion" column="DBVERSION_" />
     <property name="name" column="NAME_"/>
     <property name="description" column="DESCR_"/>
 
-    <property name="priority" column="PRIORITY_"/>
-    <property name="dueDateDuration" column="DUEDATE_"/>
-    <property name="isBlocking" column="BLOCK_"/>
-    <property name="isSignalling" column="SIGNAL_"/>
     <property name="assigneeExpression" column="ASS_EXPR_"/>
     <property name="assigneeExpressionLanguage" column="ASS_EXPR_LANG_"/>
     <property name="candidateUsersExpression" column="CNDUSR_EXPR_"/>
@@ -30,25 +28,35 @@
                  column="ASSIGNER_DESCR_" 
                  cascade="all"
                  class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
-                 foreign-key="FK_TSK_ASIG_DESCR"
-                 index="IDX_TSK_ASIG_DESCR" />
+                 foreign-key="FK_SWL_ASIG_DESCR"
+                 index="IDX_SWL_ASIG_DESCR" />
 
-    <many-to-one name="swimlaneDefinition"
-                 column="SWIMLANE_DEF_" 
-                 cascade="all"
-                 class="SwimlaneDefinitionImpl"
-                 foreign-key="FK_TSK_SWIML_DEF"
-                 index="IDX_TSK_SWIML_DEF" />
-
-		<list name="subTaskDefinitions" cascade="all-delete-orphan">
-			<key column="TASKDEF_" />
-			<list-index column="TASKDEF_IDX_" />
-			<one-to-many class="TaskDefinitionImpl" />
-		</list>
-  </class>
+    <!-- ### TASK DEFINITION ################################################ -->
+    <subclass name="TaskDefinitionImpl" discriminator-value="T">
   
+      <property name="priority" column="PRIORITY_"/>
+      <property name="dueDateDuration" column="DUEDATE_"/>
+      <property name="isBlocking" column="BLOCK_"/>
+      <property name="isSignalling" column="SIGNAL_"/>
+      
+      <many-to-one name="swimlaneDefinition"
+                   column="SWIMLANE_DEF_" 
+                   cascade="all"
+                   class="SwimlaneDefinitionImpl"
+                   foreign-key="FK_TSK_SWIML_DEF"
+                   index="IDX_TSK_SWIML_DEF" />
+  
+      <list name="subTaskDefinitions" cascade="all-delete-orphan">
+        <key column="TASKDEF_" />
+        <list-index column="TASKDEF_IDX_" />
+        <one-to-many class="TaskDefinitionImpl" />
+      </list>
+    </subclass>
+  </class>
+
   <!-- ### TASK ########################################################### -->
   <class name="TaskImpl" 
+         table="JBPM_TASK"
          discriminator-value="T">
     <id name="dbid" column="DBID_">
       <generator class="native" />
@@ -109,7 +117,7 @@
   </class>
   
   <!-- ### PARTICIPANT #################################################### -->
-  <class name="ParticipantImpl">
+  <class name="ParticipantImpl" table="JBPM_PARTICIPANT">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
@@ -132,19 +140,8 @@
 
   </class>
   
-  <!-- ### SWIMLANE DEFINITION ############################################ -->
-  <class name="SwimlaneDefinitionImpl">
-    <id name="dbid" column="DBID_">
-      <generator class="native" />
-    </id>
-    <version name="dbversion" column="DBVERSION_" />
-    
-    <property name="name" column="NAME_"/>
-  </class>
-
-
   <!-- ### SWIMLANE ####################################################### -->
-  <class name="SwimlaneImpl">
+  <class name="SwimlaneImpl" table="JBPM_SWIMLANE">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
@@ -161,7 +158,7 @@
     <many-to-one name="execution"
                  class="org.jbpm.pvm.internal.model.ExecutionImpl" 
                  column="EXECUTION_" 
-                 foreign-key="FK_SWIMLANE_EXEC" />
+                 foreign-key="none" />
 
     <set name="participants" cascade="all-delete-orphan">
       <key column="SWIMLANE_" />
@@ -169,8 +166,8 @@
     </set>
     
   </class>
+
   
-  
   <!-- ### QUERIES ######################################################## -->
 
   <query name="findTasks">

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/DeleteTaskCmd.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/DeleteTaskCmd.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/DeleteTaskCmd.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -24,6 +24,7 @@
 import org.jbpm.JbpmException;
 import org.jbpm.cmd.Command;
 import org.jbpm.env.Environment;
+import org.jbpm.pvm.internal.task.Assignable;
 import org.jbpm.pvm.internal.task.TaskImpl;
 import org.jbpm.session.DbSession;
 
@@ -42,7 +43,7 @@
 
   public Void execute(Environment environment) throws Exception {
     DbSession dbSession = environment.get(DbSession.class);
-    TaskImpl task = (TaskImpl) dbSession.get(TaskImpl.class, taskDbid);
+    Assignable task = (Assignable) dbSession.get(TaskImpl.class, taskDbid);
     if (task!=null) {
       dbSession.delete(task);
     } else {

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/NewTaskCmd.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/NewTaskCmd.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/NewTaskCmd.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -21,9 +21,9 @@
  */
 package org.jbpm.pvm.internal.cmd;
 
-import org.jbpm.cmd.Command;
 import org.jbpm.env.Environment;
 import org.jbpm.pvm.internal.task.TaskImpl;
+import org.jbpm.session.TaskDbSession;
 import org.jbpm.task.Task;
 
 /**
@@ -40,7 +40,8 @@
   }
 
   public Task execute(Environment environment) throws Exception {
-    TaskImpl task = TaskImpl.create();
+    TaskDbSession taskDbSession = environment.get(TaskDbSession.class);
+    TaskImpl task = (TaskImpl) taskDbSession.createTask();
     task.setParentTaskDbid(parentTaskDbid);
     return task;
   }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/deploy/CheckProcessDeployer.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/deploy/CheckProcessDeployer.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/deploy/CheckProcessDeployer.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -22,7 +22,6 @@
 package org.jbpm.pvm.internal.deploy;
 
 import java.io.Serializable;
-import java.util.List;
 
 import org.jbpm.ProcessDefinition;
 import org.jbpm.client.ClientProcessDefinition;
@@ -69,7 +68,7 @@
       // A problem was already added by the JpdlParser
       return;
     }
-       
+
     checkKey((ProcessDefinitionImpl)processDefinition, deployment, pvmDbSession);
     checkVersion((ProcessDefinitionImpl)processDefinition, deployment, pvmDbSession);
     checkId((ProcessDefinitionImpl)processDefinition, deployment, pvmDbSession);

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/deploy/DeployerManager.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/deploy/DeployerManager.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/deploy/DeployerManager.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -57,7 +57,7 @@
     }
     
     for (Deployer deployer: deployers) {
-      log.debug("applying deployer "+deployer+" to "+deployment);
+      if (log.isTraceEnabled()) log.trace("applying deployer "+deployer+" to "+deployment);
       deployer.deploy(deployment);
     }
   }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/HibernateTaskDbSession.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/HibernateTaskDbSession.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/HibernateTaskDbSession.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -26,8 +26,10 @@
 import org.hibernate.Query;
 import org.jbpm.Execution;
 import org.jbpm.internal.log.Log;
+import org.jbpm.pvm.internal.task.LifeCycle;
 import org.jbpm.pvm.internal.task.SwimlaneImpl;
 import org.jbpm.pvm.internal.task.TaskImpl;
+import org.jbpm.pvm.internal.util.Clock;
 import org.jbpm.session.TaskDbSession;
 import org.jbpm.task.Task;
 
@@ -62,10 +64,18 @@
     }
   }
 
-  public Task newTask() {
-    return TaskImpl.create();
+  public Task createTask() {
+    TaskImpl task = newTask();
+    task.setCreate(Clock.getCurrentTime());
+    task.setState(LifeCycle.initialise(task)); 
+    return task;
   }
 
+  /** override to customize task type */
+  protected TaskImpl newTask() {
+    return new TaskImpl();
+  }
+
   public void deletingExecution(Execution execution) {
     deleteTasks(execution);
     deleteSwimlanes(execution);

Added: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/Assignable.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/Assignable.java	                        (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/Assignable.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -0,0 +1,34 @@
+/*
+ * 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.pvm.internal.task;
+
+import org.jbpm.task.IdentityRef;
+import org.jbpm.task.Participant;
+
+/**
+ * @author Tom Baeyens
+ */
+public interface Assignable {
+
+  void setAssignee(String assigned);
+  Participant addParticipant(IdentityRef identityRef, String participation);
+}
\ No newline at end of file


Property changes on: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/Assignable.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/ParticipantImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/ParticipantImpl.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/ParticipantImpl.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -43,7 +43,7 @@
   protected String userId;
   protected String groupId; 
   protected String participation;
-  protected TaskImpl task;
+  protected Assignable task;
   protected SwimlaneImpl swimlane;
   
   public ParticipantImpl() {
@@ -75,10 +75,10 @@
     }
   }
 
-  public TaskImpl getTask() {
+  public Assignable getTask() {
     return task;
   }
-  public void setTask(TaskImpl task) {
+  public void setTask(Assignable task) {
     this.task = task;
   }
   public long getDbid() {

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/SwimlaneDefinitionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/SwimlaneDefinitionImpl.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/SwimlaneDefinitionImpl.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -22,35 +22,37 @@
 package org.jbpm.pvm.internal.task;
 
 import java.io.Serializable;
+import java.util.StringTokenizer;
 
+import org.jbpm.JbpmException;
+import org.jbpm.env.Environment;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.pvm.internal.model.ProcessElementImpl;
+import org.jbpm.pvm.internal.script.ScriptManager;
 import org.jbpm.pvm.internal.util.EqualsUtil;
+import org.jbpm.pvm.internal.wire.Descriptor;
+import org.jbpm.task.GroupRef;
+import org.jbpm.task.Participant;
+import org.jbpm.task.UserRef;
 
 /**
  * is a process role (aka participant).
  */
-public class SwimlaneDefinitionImpl implements Serializable {
+public class SwimlaneDefinitionImpl extends ProcessElementImpl implements Serializable {
 
   private static final long serialVersionUID = 1L;
 
-  protected long dbid;
-  protected int dbversion;
-  protected String name = null;
+  protected String name;
+  protected String description;
 
-  /**
-   * expression that resolves to 1 single actorId.
-   */
-  protected String actorIdExpression = null;
+  protected String assigneeExpression;
+  protected String assigneeExpressionLanguage;
+  protected String candidateUsersExpression;
+  protected String candidateUsersExpressionLanguage;
+  protected String candidateGroupsExpression;
+  protected String candidateGroupsExpressionLanguage;
+  protected Descriptor assignerDescriptor;
 
-  /**
-   * expression that resolves to a comma separated list of actorIds.
-   */
-  protected String candidatesExpression = null;
-
-  /**
-   * expression that resolves to an AssignmentHandler implementation.
-   */
-  protected String assignmentExpression = null;
-
   // equals ///////////////////////////////////////////////////////////////////
   // hack to support comparing hibernate proxies against the real objects
   // since this always falls back to ==, we don't need to overwrite the hashcode
@@ -58,41 +60,60 @@
     return EqualsUtil.equals(this, o);
   }
 
-  public void setActorIdExpression(String actorIdExpression) {
-    // Note: combination of actorIdExpression and candidatesExpression is allowed 
-    this.actorIdExpression = actorIdExpression;
-    this.assignmentExpression = null;
-  }
-  public void setCandidatesExpression(String pooledActorsExpression) {
-    // Note: combination of actorIdExpression and pooledActorsExpression is allowed 
-    this.candidatesExpression = pooledActorsExpression;
-    this.assignmentExpression = null;
-  }
-  public void setAssignmentExpression(String assignmentExpression) {
-    // assignment expressions and assignmentDelegation are mutually exclusive
-    this.actorIdExpression = null;
-    this.candidatesExpression = null;
-    this.assignmentExpression = assignmentExpression;
-  }
-
   // getters and setters //////////////////////////////////////////////////////
 
-  public long getDbid() {
-    return dbid;
+  public String getAssigneeExpression() {
+    return assigneeExpression;
   }
+  public String getName() {
+    return name;
+  }
   public void setName(String name) {
     this.name = name;
   }
-  public String getName() {
-    return name;
+  public String getDescription() {
+    return description;
   }
-  public String getActorIdExpression() {
-    return actorIdExpression;
+  public void setDescription(String description) {
+    this.description = description;
   }
-  public String getCandidatesExpression() {
-    return candidatesExpression;
+  public void setAssigneeExpression(String assigneeExpression) {
+    this.assigneeExpression = assigneeExpression;
   }
-  public String getAssignmentExpression() {
-    return assignmentExpression;
+  public Descriptor getAssignerDescriptor() {
+    return assignerDescriptor;
   }
+  public void setAssignerDescriptor(Descriptor assignerDescriptor) {
+    this.assignerDescriptor = assignerDescriptor;
+  }
+  public String getAssigneeExpressionLanguage() {
+    return assigneeExpressionLanguage;
+  }
+  public void setAssigneeExpressionLanguage(String assigneeExpressionLanguage) {
+    this.assigneeExpressionLanguage = assigneeExpressionLanguage;
+  }
+  public String getCandidateUsersExpression() {
+    return candidateUsersExpression;
+  }
+  public void setCandidateUsersExpression(String candidateUsersExpression) {
+    this.candidateUsersExpression = candidateUsersExpression;
+  }
+  public String getCandidateUsersExpressionLanguage() {
+    return candidateUsersExpressionLanguage;
+  }
+  public void setCandidateUsersExpressionLanguage(String candidateUsersExpressionLanguage) {
+    this.candidateUsersExpressionLanguage = candidateUsersExpressionLanguage;
+  }
+  public String getCandidateGroupsExpression() {
+    return candidateGroupsExpression;
+  }
+  public void setCandidateGroupsExpression(String candidateGroupsExpression) {
+    this.candidateGroupsExpression = candidateGroupsExpression;
+  }
+  public String getCandidateGroupsExpressionLanguage() {
+    return candidateGroupsExpressionLanguage;
+  }
+  public void setCandidateGroupsExpressionLanguage(String candidateGroupsExpressionLanguage) {
+    this.candidateGroupsExpressionLanguage = candidateGroupsExpressionLanguage;
+  }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/SwimlaneImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/SwimlaneImpl.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/SwimlaneImpl.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -36,7 +36,7 @@
 /**
  * runtime process role for a specific process instance.
  */
-public class SwimlaneImpl implements Serializable, Swimlane {
+public class SwimlaneImpl implements Serializable, Swimlane, Assignable {
 
   private static final long serialVersionUID = 1L;
 

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskDefinitionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskDefinitionImpl.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskDefinitionImpl.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -22,32 +22,17 @@
 package org.jbpm.pvm.internal.task;
 
 import java.io.Serializable;
-import java.util.Date;
 import java.util.List;
-import java.util.StringTokenizer;
 
-import org.jbpm.JbpmException;
-import org.jbpm.env.Environment;
-import org.jbpm.pvm.internal.cal.Duration;
-import org.jbpm.pvm.internal.model.ExecutionImpl;
-import org.jbpm.pvm.internal.model.ProcessElementImpl;
-import org.jbpm.pvm.internal.script.ScriptManager;
 import org.jbpm.pvm.internal.util.Priority;
-import org.jbpm.pvm.internal.wire.Descriptor;
-import org.jbpm.task.GroupRef;
-import org.jbpm.task.Participant;
-import org.jbpm.task.UserRef;
 
 /**
  * defines a task and how the actor(s) must be calculated at runtime.
  */
-public class TaskDefinitionImpl extends ProcessElementImpl implements Serializable {
+public class TaskDefinitionImpl extends SwimlaneDefinitionImpl implements Serializable {
   
   private static final long serialVersionUID = 1L;
 
-  protected String name;
-  protected String description;
-
   /** @see #isBlocking() */
   protected boolean isBlocking;
   
@@ -59,102 +44,7 @@
   protected List<TaskDefinitionImpl> subTaskDefinitions;
   protected int priority = Priority.NORMAL;
   protected SwimlaneDefinitionImpl swimlaneDefinition;
-  protected String assigneeExpression;
-  protected String assigneeExpressionLanguage;
-  protected String candidateUsersExpression;
-  protected String candidateUsersExpressionLanguage;
-  protected String candidateGroupsExpression;
-  protected String candidateGroupsExpressionLanguage;
-  protected Descriptor assignerDescriptor;
 
-  public void initialize(TaskImpl task) {
-    task.setName(name);
-    task.setDescription(description);
-    task.setBlocking(isBlocking);
-    task.setSignalling(isSignalling);
-    task.setPriority(priority);
-    
-    // TODO duedate calculation
-    
-    if (assigneeExpression!=null) {
-      String assignee = resolveAssignmentExpression(assigneeExpression, assigneeExpressionLanguage, task.getExecution());
-      task.setAssignee(assignee);
-    }
-    
-    if (candidateUsersExpression!=null) {
-      String candidateUsers = resolveAssignmentExpression(candidateUsersExpression, candidateUsersExpressionLanguage, task.getExecution());
-      StringTokenizer tokenizer = new StringTokenizer(candidateUsers, ",");
-      while (tokenizer.hasMoreTokens()) {
-        String candidateUser = tokenizer.nextToken();
-        task.addParticipant(new UserRef(candidateUser), Participant.CANDIDATE);
-      }
-    }
-
-    if (candidateGroupsExpression!=null) {
-      String candidateGroups = resolveAssignmentExpression(candidateGroupsExpression, candidateGroupsExpressionLanguage, task.getExecution());
-      StringTokenizer tokenizer = new StringTokenizer(candidateGroups, ",");
-      while (tokenizer.hasMoreTokens()) {
-        String candidateGroup = tokenizer.nextToken();
-        task.addParticipant(new GroupRef(candidateGroup), Participant.CANDIDATE);
-      }
-    }
-  }
-  
-  protected String resolveAssignmentExpression(String expression, String expressionLanguage, ExecutionImpl execution) {
-    ScriptManager scriptManager = Environment.getFromCurrent(ScriptManager.class);
-    Object result = scriptManager.evaluateExpression(expression, execution, expressionLanguage);
-    if ( (result ==null)
-         || (result instanceof String)
-       ) {
-      return (String) result;
-    }
-    throw new JbpmException("result of assignment expression is "+result.getClass().getName()+" instead of String");
-  }
-
-  // getters and setters //////////////////////////////////////////////////////
-  
-  public String getAssigneeExpression() {
-    return assigneeExpression;
-  }
-  public void setAssigneeExpression(String assigneeExpression) {
-    this.assigneeExpression = assigneeExpression;
-  }
-  public Descriptor getAssignerDescriptor() {
-    return assignerDescriptor;
-  }
-  public void setAssignerDescriptor(Descriptor assignerDescriptor) {
-    this.assignerDescriptor = assignerDescriptor;
-  }
-  public String getAssigneeExpressionLanguage() {
-    return assigneeExpressionLanguage;
-  }
-  public void setAssigneeExpressionLanguage(String assigneeExpressionLanguage) {
-    this.assigneeExpressionLanguage = assigneeExpressionLanguage;
-  }
-  public String getCandidateUsersExpression() {
-    return candidateUsersExpression;
-  }
-  public void setCandidateUsersExpression(String candidateUsersExpression) {
-    this.candidateUsersExpression = candidateUsersExpression;
-  }
-  public String getCandidateUsersExpressionLanguage() {
-    return candidateUsersExpressionLanguage;
-  }
-  public void setCandidateUsersExpressionLanguage(String candidateUsersExpressionLanguage) {
-    this.candidateUsersExpressionLanguage = candidateUsersExpressionLanguage;
-  }
-  public String getCandidateGroupsExpression() {
-    return candidateGroupsExpression;
-  }
-  public void setCandidateGroupsExpression(String candidateGroupsExpression) {
-    this.candidateGroupsExpression = candidateGroupsExpression;
-  }
-  public String getCandidateGroupsExpressionLanguage() {
-    return candidateGroupsExpressionLanguage;
-  }
-  public void setCandidateGroupsExpressionLanguage(String candidateGroupsExpressionLanguage) {
-    this.candidateGroupsExpressionLanguage = candidateGroupsExpressionLanguage;
-  }
   public boolean isBlocking() {
     return isBlocking;
   }
@@ -185,18 +75,6 @@
   public void setSwimlaneDefinition(SwimlaneDefinitionImpl swimlaneDefinition) {
     this.swimlaneDefinition = swimlaneDefinition;
   }
-  public String getName() {
-    return name;
-  }
-  public void setName(String name) {
-    this.name = name;
-  }
-  public String getDescription() {
-    return description;
-  }
-  public void setDescription(String description) {
-    this.description = description;
-  }
   public String getDueDateDuration() {
     return dueDateDuration;
   }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -28,33 +28,40 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.StringTokenizer;
 
 import org.jbpm.Execution;
 import org.jbpm.JbpmException;
+import org.jbpm.activity.ActivityExecution;
 import org.jbpm.env.Environment;
+import org.jbpm.internal.log.Log;
 import org.jbpm.model.Comment;
 import org.jbpm.pvm.internal.env.Authentication;
 import org.jbpm.pvm.internal.model.CommentImpl;
 import org.jbpm.pvm.internal.model.ExecutionImpl;
 import org.jbpm.pvm.internal.model.ScopeInstanceImpl;
+import org.jbpm.pvm.internal.script.ScriptManager;
 import org.jbpm.pvm.internal.util.Clock;
 import org.jbpm.pvm.internal.util.EqualsUtil;
 import org.jbpm.pvm.internal.util.Priority;
+import org.jbpm.task.GroupRef;
 import org.jbpm.task.IdentityRef;
 import org.jbpm.task.Participant;
 import org.jbpm.task.Swimlane;
 import org.jbpm.task.Task;
+import org.jbpm.task.UserRef;
 
 /**
  * is one task instance that can be assigned to an actor (read: put in 
  * someones task list) and that can trigger the continuation of execution 
  * of the token upon completion.
  */
-public class TaskImpl extends ScopeInstanceImpl implements Serializable, Task {
+public class TaskImpl extends ScopeInstanceImpl implements Serializable, Task, Assignable {
 
   private static final long serialVersionUID = 1L;
-  // private static final Logger log = Logger.getLogger(TaskImpl.class.getName());
   
+  private static Log log = Log.getLog(TaskImpl.class.getName());
+  
   protected String id;
   protected String name;
   protected String description;
@@ -79,47 +86,47 @@
 
   protected SwimlaneImpl swimlane;
   
-  protected TaskImpl superTask;
+  protected Assignable superTask;
   protected Set<TaskImpl> subTasks;
   
   protected Long executionDbid;
   protected Long parentTaskDbid;
   
-  protected TaskImpl() {
+  public TaskImpl() {
   }
   
-  // creating a task
+  // parent for variable lookup /////////////////////////////////////////////// 
 
-  public static TaskImpl create() {
-    TaskImpl task = new TaskImpl();
-
-    /*
-    // if a task class name is configured
-    Environment environment = Environment.getCurrent();
-    String taskClassName = environment!=null ? (String) environment.get(TaskImpl.CONTEXTKEY_TASK_CLASS_NAME, TaskImpl.SEARCHORDER_TASK_CLASS_NAME) : null;
-    if (taskClassName!=null) {
-      // dynamically instantiate it
-      ClassLoader classLoader = environment.getClassLoader();
-      Class<?> taskClass = ReflectUtil.loadClass(classLoader, taskClassName);
-      task = (TaskImpl) ReflectUtil.newInstance(taskClass);
+  public ScopeInstanceImpl getParentVariableScope() {
+    return execution;
+  }
+  
+  // assignment ///////////////////////////////////////////////////////////////
+  
+  public void take() {
+    if (assignee!=null) {
+      throw new JbpmException("task "+dbid+" is already taken by "+assignee);
     }
-    // otherwise just use the default task implementation type 
-    else {
-      task = new TaskImpl();
+    Authentication authentication = Environment.getFromCurrent(Authentication.class);
+    assignee = authentication.getUserId();
+    if (assignee==null) {
+      throw new JbpmException("no currently authenticated user");
     }
-    */
+    log.trace("user "+assignee+" takes "+this);
+    
+    propagateAssigneeToSwimlane();
+  }
 
-    task.setCreate(Clock.getCurrentTime());
+  public void setAssignee(String assigned) {
+    this.assignee = assigned;
+    propagateAssigneeToSwimlane();
+  }
 
-    // initialise the task state
-    task.state = LifeCycle.initialise(task); 
-
-    return task;
+  protected void propagateAssigneeToSwimlane() {
+    if (swimlane!=null) {
+      swimlane.setAssignee(assignee);
+    }
   }
-  
-  public ScopeInstanceImpl getParentVariableScope() {
-    return execution;
-  }
 
   // participants /////////////////////////////////////////////////////////////
   
@@ -150,7 +157,10 @@
     if (participation==null) {
       throw new JbpmException("participation is null");
     }
-    ParticipantImpl participant = new ParticipantImpl(identityRef, participation);
+    return addParticipant(new ParticipantImpl(identityRef, participation));
+  }
+
+  public Participant addParticipant(ParticipantImpl participant) {
     participant.setTask(this);
     if (participants==null) {
       participants = new HashSet<ParticipantImpl>();
@@ -189,17 +199,6 @@
     return null;
   }
 
-  public void take() {
-    if (assignee!=null) {
-      throw new JbpmException("task "+dbid+" is already taken by "+assignee);
-    }
-    Authentication authentication = Environment.getFromCurrent(Authentication.class);
-    assignee = authentication.getUserId();
-    if (assignee==null) {
-      throw new JbpmException("no currently authenticated user");
-    }
-  }
-
   // comments /////////////////////////////////////////////////////////////////
 
   public List<Comment> getComments() {
@@ -364,19 +363,16 @@
   public String getAssignee() {
     return assignee;
   }
-  public void setAssignee(String assigned) {
-    this.assignee = assigned;
-  }
   public Swimlane getSwimlane() {
     return swimlane;
   }
   public void setSwimlane(SwimlaneImpl swimlane) {
     this.swimlane = swimlane;
   }
-  public TaskImpl getSuperTask() {
+  public Assignable getSuperTask() {
     return superTask;
   }
-  public void setSuperTask(TaskImpl superTask) {
+  public void setSuperTask(Assignable superTask) {
     this.superTask = superTask;
   }
   public Integer getProgress() {
@@ -394,4 +390,16 @@
   public void setParentTaskDbid(Long parentTaskDbid) {
     this.parentTaskDbid = parentTaskDbid;
   }
+  public void setParticipants(Set<ParticipantImpl> participants) {
+    this.participants = participants;
+  }
+  public void setState(String state) {
+    this.state = state;
+  }
+  public void setExecution(ExecutionImpl execution) {
+    this.execution = execution;
+  }
+  public void setSubTasks(Set<TaskImpl> subTasks) {
+    this.subTasks = subTasks;
+  }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/tx/StandardTransaction.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/tx/StandardTransaction.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/tx/StandardTransaction.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -56,7 +56,7 @@
   // methods for interceptor //////////////////////////////////////////////////
 
   public void begin() {
-    log.debug("beginning "+this);
+    if (log.isTraceEnabled()) log.trace("beginning "+this);
     state = State.ACTIVE;
   }
 
@@ -102,7 +102,7 @@
         // prepare //////////////////////////////////////////////////////////////
         // the prepare loop will be skipped at the first exception
         for (StandardResource standardResource: resources) {
-          log.trace("preparing resource "+standardResource);
+          if (log.isTraceEnabled()) log.trace("preparing resource "+standardResource);
           standardResource.prepare();
         }
       }
@@ -110,7 +110,7 @@
     // for any exception in the prepare phase, we'll rollback
     } catch (Exception exception) {
       try {
-        log.debug("resource threw exception in prepare.  rolling back.");
+        if (log.isTraceEnabled()) log.trace("resource threw exception in prepare.  rolling back.");
         rollbackResources();
       } catch (Exception rollbackException) {
         log.error("rollback failed as well", rollbackException);
@@ -134,7 +134,7 @@
       // all the resources are commited 
       for (StandardResource standardResource: resources) {
         try {
-          log.trace("committing resource "+standardResource);
+          if (log.isTraceEnabled()) log.trace("committing resource "+standardResource);
           standardResource.commit();
           
         // Exceptions in the commit phase will not lead to rollback, since some resources
@@ -151,7 +151,7 @@
     
     state = State.COMMITTED;
     afterCompletion();
-    log.debug("committed "+this);
+    if (log.isTraceEnabled()) log.trace("committed "+this);
     
     if (commitException!=null) {
       if (commitException instanceof RuntimeException) {
@@ -172,7 +172,7 @@
       throw new TransactionException("rollback on transaction in state "+state);
     }
 
-    log.trace("rolling back "+this);
+    if (log.isTraceEnabled()) log.trace("rolling back "+this);
 
     beforeCompletion();
     rollbackResources();
@@ -183,7 +183,7 @@
     if (resources!=null) {
       for (StandardResource resource: resources) {
         try {
-          log.trace("rolling back resource "+resource);
+          if (log.isTraceEnabled()) log.trace("rolling back resource "+resource);
           resource.rollback();
         } catch (Exception e) {
           log.error("rollback failed for resource "+resource);
@@ -195,7 +195,7 @@
     
     afterCompletion();
 
-    log.debug("rolled back");
+    if (log.isTraceEnabled()) log.trace("rolled back");
   }
   
   // synchronizations /////////////////////////////////////////////////////////

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/HibernateSessionDescriptor.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/HibernateSessionDescriptor.java	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/descriptor/HibernateSessionDescriptor.java	2009-03-21 17:50:09 UTC (rev 4305)
@@ -69,16 +69,16 @@
     // open the hibernate-session
     Session session = null;
     if (useCurrent) {
-      log.debug("getting current hibernate session");
+      if (log.isTraceEnabled()) log.trace("getting current hibernate session");
       session = sessionFactory.getCurrentSession();
       
     } else if (connectionName!=null) {
       Connection connection = (Connection) wireContext.get(connectionName);
-      log.debug("creating hibernate session with connection "+connection);
+      if (log.isTraceEnabled()) log.trace("creating hibernate session with connection "+connection);
       session = sessionFactory.openSession(connection);
 
     } else {
-      log.debug("creating hibernate session");
+      if (log.isTraceEnabled()) log.trace("creating hibernate session");
       session = sessionFactory.openSession();
     }
     

Modified: jbpm4/trunk/modules/pvm/src/test/resources/jbpm.definition.hbm.xml
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/resources/jbpm.definition.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/test/resources/jbpm.definition.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -4,11 +4,15 @@
 <hibernate-mapping package="org.jbpm.pvm.internal.model" default-access="field">
 
   <!-- ### PROCESS DEFINITION ############################################# -->
-  <class name="ProcessDefinitionImpl" table="JBPM_PROCESS">
+  <class name="ProcessDefinitionImpl" 
+         table="JBPM_PROCESS"
+         discriminator-value="pvm">
     <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
+    <discriminator><column name="CLASS_" /></discriminator>
+
     <version name="dbversion" column="DBVERSION_" />
     <many-to-one name="properties"
                  class="WireProperties" 

Modified: jbpm4/trunk/modules/pvm/src/test/resources/jbpm.execution.hbm.xml
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/resources/jbpm.execution.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/test/resources/jbpm.execution.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -19,10 +19,13 @@
   </typedef>
 
   <!-- ### PROCESS DEFINITION ############################################# -->
-  <class name="ExecutionImpl" table="JBPM_EXECUTION">
+  <class name="ExecutionImpl" 
+         table="JBPM_EXECUTION"
+         discriminator-value="pvm">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
+    <discriminator><column name="CLASS_" /></discriminator>
     <version name="dbversion" column="DBVERSION_" />
     
     <many-to-one name="activity" 
@@ -34,8 +37,7 @@
 
     <property name="hasVariables" column="HASVARS_" />
     <map name="variables"
-         cascade="all-delete-orphan"
-         table="JBPM_VARIABLE">
+         cascade="all-delete-orphan">
       <key foreign-key="FK_VAR_EXECUTION">
          <column name="EXECUTION_" index="IDX_VAR_EXECUTION"/>
       </key>
@@ -203,7 +205,7 @@
       <generator class="native" />
     </id>
     <version name="dbversion" column="DBVERSION_" />
-    <property name="blob" type="blob" column="BLOB_VALUE_" />
+    <property name="blob" type="blob"><column name="BLOB_VALUE_" /></property>
     <property name="bytes" type="binary" column="BINARY_VALUE_"/>
     <property name="clob" type="clob" column="CLOB_VALUE_" />
     <property name="text" type="text" column="TEXT_VALUE_"/>

Modified: jbpm4/trunk/modules/pvm/src/test/resources/jbpm.task.hbm.xml
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/resources/jbpm.task.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/pvm/src/test/resources/jbpm.task.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -4,21 +4,19 @@
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 <hibernate-mapping auto-import="false" package="org.jbpm.pvm.internal.task" default-access="field">
 
-  <!-- ### TASK DEFINITION ################################################ -->
-  <class name="TaskDefinitionImpl" discriminator-value="T">
+  <!-- ### SWIMLANE DEFINITION ############################################ -->
+  <class name="SwimlaneDefinitionImpl" 
+         table="JBPM_TASKDEF"
+         discriminator-value="S" >
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
-    <discriminator type="char" column="CLASS_"/>
-    <version name="dbversion" column="DBVERSION_" />
+    <discriminator><column name="CLASS_" /></discriminator>
 
+    <version name="dbversion" column="DBVERSION_" />
     <property name="name" column="NAME_"/>
     <property name="description" column="DESCR_"/>
 
-    <property name="priority" column="PRIORITY_"/>
-    <property name="dueDateDuration" column="DUEDATE_"/>
-    <property name="isBlocking" column="BLOCK_"/>
-    <property name="isSignalling" column="SIGNAL_"/>
     <property name="assigneeExpression" column="ASS_EXPR_"/>
     <property name="assigneeExpressionLanguage" column="ASS_EXPR_LANG_"/>
     <property name="candidateUsersExpression" column="CNDUSR_EXPR_"/>
@@ -30,25 +28,35 @@
                  column="ASSIGNER_DESCR_" 
                  cascade="all"
                  class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
-                 foreign-key="FK_TSK_ASIG_DESCR"
-                 index="IDX_TSK_ASIG_DESCR" />
+                 foreign-key="FK_SWL_ASIG_DESCR"
+                 index="IDX_SWL_ASIG_DESCR" />
 
-    <many-to-one name="swimlaneDefinition"
-                 column="SWIMLANE_DEF_" 
-                 cascade="all"
-                 class="SwimlaneDefinitionImpl"
-                 foreign-key="FK_TSK_SWIML_DEF"
-                 index="IDX_TSK_SWIML_DEF" />
-
-		<list name="subTaskDefinitions" cascade="all-delete-orphan">
-			<key column="TASKDEF_" />
-			<list-index column="TASKDEF_IDX_" />
-			<one-to-many class="TaskDefinitionImpl" />
-		</list>
-  </class>
+    <!-- ### TASK DEFINITION ################################################ -->
+    <subclass name="TaskDefinitionImpl" discriminator-value="T">
   
+      <property name="priority" column="PRIORITY_"/>
+      <property name="dueDateDuration" column="DUEDATE_"/>
+      <property name="isBlocking" column="BLOCK_"/>
+      <property name="isSignalling" column="SIGNAL_"/>
+      
+      <many-to-one name="swimlaneDefinition"
+                   column="SWIMLANE_DEF_" 
+                   cascade="all"
+                   class="SwimlaneDefinitionImpl"
+                   foreign-key="FK_TSK_SWIML_DEF"
+                   index="IDX_TSK_SWIML_DEF" />
+  
+      <list name="subTaskDefinitions" cascade="all-delete-orphan">
+        <key column="TASKDEF_" />
+        <list-index column="TASKDEF_IDX_" />
+        <one-to-many class="TaskDefinitionImpl" />
+      </list>
+    </subclass>
+  </class>
+
   <!-- ### TASK ########################################################### -->
   <class name="TaskImpl" 
+         table="JBPM_TASK"
          discriminator-value="T">
     <id name="dbid" column="DBID_">
       <generator class="native" />
@@ -109,7 +117,7 @@
   </class>
   
   <!-- ### PARTICIPANT #################################################### -->
-  <class name="ParticipantImpl">
+  <class name="ParticipantImpl" table="JBPM_PARTICIPANT">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
@@ -132,19 +140,8 @@
 
   </class>
   
-  <!-- ### SWIMLANE DEFINITION ############################################ -->
-  <class name="SwimlaneDefinitionImpl">
-    <id name="dbid" column="DBID_">
-      <generator class="native" />
-    </id>
-    <version name="dbversion" column="DBVERSION_" />
-    
-    <property name="name" column="NAME_"/>
-  </class>
-
-
   <!-- ### SWIMLANE ####################################################### -->
-  <class name="SwimlaneImpl">
+  <class name="SwimlaneImpl" table="JBPM_SWIMLANE">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
@@ -161,7 +158,7 @@
     <many-to-one name="execution"
                  class="org.jbpm.pvm.internal.model.ExecutionImpl" 
                  column="EXECUTION_" 
-                 foreign-key="FK_SWIMLANE_EXEC" />
+                 foreign-key="none" />
 
     <set name="participants" cascade="all-delete-orphan">
       <key column="SWIMLANE_" />
@@ -169,8 +166,8 @@
     </set>
     
   </class>
+
   
-  
   <!-- ### QUERIES ######################################################## -->
 
   <query name="findTasks">

Modified: jbpm4/trunk/modules/test-db/src/test/resources/jbpm.definition.hbm.xml
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/resources/jbpm.definition.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/test-db/src/test/resources/jbpm.definition.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -4,11 +4,15 @@
 <hibernate-mapping package="org.jbpm.pvm.internal.model" default-access="field">
 
   <!-- ### PROCESS DEFINITION ############################################# -->
-  <class name="ProcessDefinitionImpl" table="JBPM_PROCESS">
+  <class name="ProcessDefinitionImpl" 
+         table="JBPM_PROCESS"
+         discriminator-value="pvm">
     <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
+    <discriminator><column name="CLASS_" /></discriminator>
+
     <version name="dbversion" column="DBVERSION_" />
     <many-to-one name="properties"
                  class="WireProperties" 

Modified: jbpm4/trunk/modules/test-db/src/test/resources/jbpm.execution.hbm.xml
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/resources/jbpm.execution.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/test-db/src/test/resources/jbpm.execution.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -19,10 +19,13 @@
   </typedef>
 
   <!-- ### PROCESS DEFINITION ############################################# -->
-  <class name="ExecutionImpl" table="JBPM_EXECUTION">
+  <class name="ExecutionImpl" 
+         table="JBPM_EXECUTION"
+         discriminator-value="pvm">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
+    <discriminator><column name="CLASS_" /></discriminator>
     <version name="dbversion" column="DBVERSION_" />
     
     <many-to-one name="activity" 
@@ -34,8 +37,7 @@
 
     <property name="hasVariables" column="HASVARS_" />
     <map name="variables"
-         cascade="all-delete-orphan"
-         table="JBPM_VARIABLE">
+         cascade="all-delete-orphan">
       <key foreign-key="FK_VAR_EXECUTION">
          <column name="EXECUTION_" index="IDX_VAR_EXECUTION"/>
       </key>
@@ -203,7 +205,7 @@
       <generator class="native" />
     </id>
     <version name="dbversion" column="DBVERSION_" />
-    <property name="blob" type="blob" column="BLOB_VALUE_" />
+    <property name="blob" type="blob"><column name="BLOB_VALUE_" /></property>
     <property name="bytes" type="binary" column="BINARY_VALUE_"/>
     <property name="clob" type="clob" column="CLOB_VALUE_" />
     <property name="text" type="text" column="TEXT_VALUE_"/>

Modified: jbpm4/trunk/modules/test-db/src/test/resources/jbpm.jpdl.hbm.xml
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/resources/jbpm.jpdl.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/test-db/src/test/resources/jbpm.jpdl.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -3,13 +3,39 @@
 
 <hibernate-mapping default-access="field">
 
-  <joined-subclass name="org.jbpm.jpdl.internal.model.JpdlProcessDefinition" table="JBPM_JPDL_PROCDEF"  extends="org.jbpm.pvm.internal.model.ProcessDefinitionImpl">
-    <key column="DBID_"/>
-  </joined-subclass>
+  <subclass name="org.jbpm.jpdl.internal.model.JpdlProcessDefinition" 
+            extends="org.jbpm.pvm.internal.model.ProcessDefinitionImpl"
+            discriminator-value="jpdl">
+    <map name="swimlaneDefinitions"
+         cascade="all-delete-orphan">
+      <key foreign-key="FK_SWLDEF_PROCESS">
+         <column name="PROCESS_SWL_" index="IDX_SWLDEF_PROCESS"/>
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl" />
+    </map>
+    <map name="taskDefinitions"
+         cascade="all-delete-orphan">
+      <key foreign-key="FK_TSKDEF_PROCESS">
+         <column name="PROCESS_" index="IDX_TSKDEF_PROCESS"/>
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.task.TaskDefinitionImpl" />
+    </map>
+  </subclass>
 
-  <joined-subclass name="org.jbpm.jpdl.internal.model.JpdlExecution" table="JBPM_JPDL_EXECUTION" extends="org.jbpm.pvm.internal.model.ExecutionImpl">
-    <key column="DBID_"/>
-  </joined-subclass>
+  <subclass name="org.jbpm.jpdl.internal.model.JpdlExecution" 
+            extends="org.jbpm.pvm.internal.model.ExecutionImpl"
+            discriminator-value="jpdl">
+    <map name="swimlanes"
+         cascade="all-delete-orphan">
+      <key foreign-key="FK_SWIMLANE_EXEC">
+         <column name="EXECUTION_" index="IDX_SWIMLANE_EXEC"/>
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.task.SwimlaneImpl" />
+    </map>
+  </subclass>
 
   <class name="org.jbpm.jpdl.internal.activity.JpdlActivity" table="JBPM_JPDL_ACTIVITY"  abstract="true" discriminator-value="X">
     <id name="dbid" column="DBID_">

Modified: jbpm4/trunk/modules/test-db/src/test/resources/jbpm.task.hbm.xml
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/resources/jbpm.task.hbm.xml	2009-03-21 09:33:54 UTC (rev 4304)
+++ jbpm4/trunk/modules/test-db/src/test/resources/jbpm.task.hbm.xml	2009-03-21 17:50:09 UTC (rev 4305)
@@ -4,21 +4,19 @@
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 <hibernate-mapping auto-import="false" package="org.jbpm.pvm.internal.task" default-access="field">
 
-  <!-- ### TASK DEFINITION ################################################ -->
-  <class name="TaskDefinitionImpl" discriminator-value="T">
+  <!-- ### SWIMLANE DEFINITION ############################################ -->
+  <class name="SwimlaneDefinitionImpl" 
+         table="JBPM_TASKDEF"
+         discriminator-value="S" >
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
-    <discriminator type="char" column="CLASS_"/>
-    <version name="dbversion" column="DBVERSION_" />
+    <discriminator><column name="CLASS_" /></discriminator>
 
+    <version name="dbversion" column="DBVERSION_" />
     <property name="name" column="NAME_"/>
     <property name="description" column="DESCR_"/>
 
-    <property name="priority" column="PRIORITY_"/>
-    <property name="dueDateDuration" column="DUEDATE_"/>
-    <property name="isBlocking" column="BLOCK_"/>
-    <property name="isSignalling" column="SIGNAL_"/>
     <property name="assigneeExpression" column="ASS_EXPR_"/>
     <property name="assigneeExpressionLanguage" column="ASS_EXPR_LANG_"/>
     <property name="candidateUsersExpression" column="CNDUSR_EXPR_"/>
@@ -30,25 +28,35 @@
                  column="ASSIGNER_DESCR_" 
                  cascade="all"
                  class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
-                 foreign-key="FK_TSK_ASIG_DESCR"
-                 index="IDX_TSK_ASIG_DESCR" />
+                 foreign-key="FK_SWL_ASIG_DESCR"
+                 index="IDX_SWL_ASIG_DESCR" />
 
-    <many-to-one name="swimlaneDefinition"
-                 column="SWIMLANE_DEF_" 
-                 cascade="all"
-                 class="SwimlaneDefinitionImpl"
-                 foreign-key="FK_TSK_SWIML_DEF"
-                 index="IDX_TSK_SWIML_DEF" />
-
-		<list name="subTaskDefinitions" cascade="all-delete-orphan">
-			<key column="TASKDEF_" />
-			<list-index column="TASKDEF_IDX_" />
-			<one-to-many class="TaskDefinitionImpl" />
-		</list>
-  </class>
+    <!-- ### TASK DEFINITION ################################################ -->
+    <subclass name="TaskDefinitionImpl" discriminator-value="T">
   
+      <property name="priority" column="PRIORITY_"/>
+      <property name="dueDateDuration" column="DUEDATE_"/>
+      <property name="isBlocking" column="BLOCK_"/>
+      <property name="isSignalling" column="SIGNAL_"/>
+      
+      <many-to-one name="swimlaneDefinition"
+                   column="SWIMLANE_DEF_" 
+                   cascade="all"
+                   class="SwimlaneDefinitionImpl"
+                   foreign-key="FK_TSK_SWIML_DEF"
+                   index="IDX_TSK_SWIML_DEF" />
+  
+      <list name="subTaskDefinitions" cascade="all-delete-orphan">
+        <key column="TASKDEF_" />
+        <list-index column="TASKDEF_IDX_" />
+        <one-to-many class="TaskDefinitionImpl" />
+      </list>
+    </subclass>
+  </class>
+
   <!-- ### TASK ########################################################### -->
   <class name="TaskImpl" 
+         table="JBPM_TASK"
          discriminator-value="T">
     <id name="dbid" column="DBID_">
       <generator class="native" />
@@ -109,7 +117,7 @@
   </class>
   
   <!-- ### PARTICIPANT #################################################### -->
-  <class name="ParticipantImpl">
+  <class name="ParticipantImpl" table="JBPM_PARTICIPANT">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
@@ -132,19 +140,8 @@
 
   </class>
   
-  <!-- ### SWIMLANE DEFINITION ############################################ -->
-  <class name="SwimlaneDefinitionImpl">
-    <id name="dbid" column="DBID_">
-      <generator class="native" />
-    </id>
-    <version name="dbversion" column="DBVERSION_" />
-    
-    <property name="name" column="NAME_"/>
-  </class>
-
-
   <!-- ### SWIMLANE ####################################################### -->
-  <class name="SwimlaneImpl">
+  <class name="SwimlaneImpl" table="JBPM_SWIMLANE">
     <id name="dbid" column="DBID_">
       <generator class="native" />
     </id>
@@ -161,7 +158,7 @@
     <many-to-one name="execution"
                  class="org.jbpm.pvm.internal.model.ExecutionImpl" 
                  column="EXECUTION_" 
-                 foreign-key="FK_SWIMLANE_EXEC" />
+                 foreign-key="none" />
 
     <set name="participants" cascade="all-delete-orphan">
       <key column="SWIMLANE_" />
@@ -169,8 +166,8 @@
     </set>
     
   </class>
+
   
-  
   <!-- ### QUERIES ######################################################## -->
 
   <query name="findTasks">




More information about the jbpm-commits mailing list