[jbpm-commits] JBoss JBPM SVN: r1620 - in jbpm4/task: trunk and 26 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Jul 14 10:00:53 EDT 2008


Author: heiko.braun at jboss.com
Date: 2008-07-14 10:00:53 -0400 (Mon, 14 Jul 2008)
New Revision: 1620

Added:
   jbpm4/task/trunk/
   jbpm4/task/trunk/.classpath
   jbpm4/task/trunk/.project
   jbpm4/task/trunk/hudson/
   jbpm4/task/trunk/hudson/ant.properties.example
   jbpm4/task/trunk/hudson/apache-tomcat/
   jbpm4/task/trunk/hudson/apache-tomcat/conf/
   jbpm4/task/trunk/hudson/apache-tomcat/conf/server.xml
   jbpm4/task/trunk/hudson/apache-tomcat/conf/tomcat-users.xml
   jbpm4/task/trunk/hudson/build.xml
   jbpm4/task/trunk/hudson/hudson-home/
   jbpm4/task/trunk/hudson/hudson-home/config.xml
   jbpm4/task/trunk/hudson/hudson-home/hudson.tasks.Mailer.xml
   jbpm4/task/trunk/hudson/hudson-home/hudson.tasks.Maven.xml
   jbpm4/task/trunk/hudson/hudson-home/jobs/
   jbpm4/task/trunk/hudson/hudson-home/jobs/jBPM4/
   jbpm4/task/trunk/hudson/hudson-home/jobs/jBPM4/config.xml
   jbpm4/task/trunk/modules/
   jbpm4/task/trunk/modules/core/
   jbpm4/task/trunk/modules/core/pom.xml
   jbpm4/task/trunk/modules/core/src/
   jbpm4/task/trunk/modules/core/src/main/
   jbpm4/task/trunk/modules/core/src/main/doc/
   jbpm4/task/trunk/modules/core/src/main/doc/models.uml
   jbpm4/task/trunk/modules/core/src/main/java/
   jbpm4/task/trunk/modules/core/src/main/java/org/
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Assigner.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Role.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/RoleType.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Swimlane.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/SwimlaneDefinition.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Task.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/TaskDefinition.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/TaskException.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/TaskService.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/CreateTask.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/DeleteTask.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/GetTask.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/UpdateTask.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/db/
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/db/TaskDbSession.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/LifeCycle.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/LifeCycleParser.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/LifeCycleState.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/RoleImpl.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/SwimlaneDefinitionImpl.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/SwimlaneImpl.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskDefinitionImpl.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskExecution.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskImpl.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskServiceImpl.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/default.lifecycle.xml
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/task.model.jpg
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskDbSessionBinding.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskDbSessionDescriptor.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskServiceBinding.java
   jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskServiceDescriptor.java
   jbpm4/task/trunk/modules/core/src/main/resources/
   jbpm4/task/trunk/modules/core/src/main/resources/hibernate.task.hbm.xml
   jbpm4/task/trunk/modules/core/src/main/resources/hibernate.task.queries.hbm.xml
   jbpm4/task/trunk/modules/core/src/main/resources/pvm.hibernate.mappings.xml
   jbpm4/task/trunk/modules/core/src/main/resources/pvm.wire.bindings.xml
   jbpm4/task/trunk/modules/core/src/test/
   jbpm4/task/trunk/modules/core/src/test/java/
   jbpm4/task/trunk/modules/core/src/test/java/org/
   jbpm4/task/trunk/modules/core/src/test/java/org/jbpm/
   jbpm4/task/trunk/modules/core/src/test/java/org/jbpm/task/
   jbpm4/task/trunk/modules/core/src/test/java/org/jbpm/task/TaskDbTest.java
   jbpm4/task/trunk/modules/core/src/test/java/org/jbpm/task/TaskServiceTest.java
   jbpm4/task/trunk/modules/core/src/test/java/org/jbpm/task/TaskTest.java
   jbpm4/task/trunk/modules/core/src/test/resources/
   jbpm4/task/trunk/modules/core/src/test/resources/org.jbpm.task.cfg.xml
   jbpm4/task/trunk/pom.xml
Log:
Start Task project

Added: jbpm4/task/trunk/.classpath
===================================================================
--- jbpm4/task/trunk/.classpath	                        (rev 0)
+++ jbpm4/task/trunk/.classpath	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="modules/jpdl/target/classes" path="modules/jpdl/src/main/java"/>
+	<classpathentry kind="src" output="modules/jpdl/target/classes" path="modules/jpdl/src/main/resources"/>
+	<classpathentry kind="src" output="modules/jpdl/target/test-classes" path="modules/jpdl/src/test/java"/>
+	<classpathentry kind="src" output="modules/jpdl/target/test-classes" path="modules/jpdl/src/test/resources"/>
+	<classpathentry kind="src" output="modules/identity/target/classes" path="modules/identity/src/main/java"/>
+	<classpathentry kind="src" output="modules/identity/target/classes" path="modules/identity/src/main/resources"/>
+	<classpathentry kind="src" output="modules/identity/target/test-classes" path="modules/identity/src/test/java"/>
+	<classpathentry kind="src" output="modules/identity/target/test-classes" path="modules/identity/src/test/resources"/>
+	<classpathentry kind="src" output="modules/task/target/classes" path="modules/task/src/main/java"/>
+	<classpathentry kind="src" output="modules/task/target/classes" path="modules/task/src/main/resources"/>
+	<classpathentry kind="src" output="modules/task/target/test-classes" path="modules/task/src/test/java"/>
+	<classpathentry kind="src" output="modules/task/target/test-classes" path="modules/task/src/test/resources"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Added: jbpm4/task/trunk/.project
===================================================================
--- jbpm4/task/trunk/.project	                        (rev 0)
+++ jbpm4/task/trunk/.project	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>jbpm</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.maven.ide.eclipse.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.maven.ide.eclipse.maven2Nature</nature>
+	</natures>
+</projectDescription>

Added: jbpm4/task/trunk/hudson/ant.properties.example
===================================================================
--- jbpm4/task/trunk/hudson/ant.properties.example	                        (rev 0)
+++ jbpm4/task/trunk/hudson/ant.properties.example	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,25 @@
+#
+# A sample ant properties file
+#
+# $Id: ant.properties.example 3995 2007-07-26 08:52:45Z thomas.diesler at jboss.com $
+
+# JBoss remote repository
+jboss.repository=http://repository.jboss.org
+
+# Hudson QA Environment
+hudson.username=changeme
+hudson.password=changeme
+
+hudson.maven.path=/usr/java/apache-maven-2.0.9
+
+hudson.root=/usr/share/java/workspace
+hudson.host=jbws.dyndns.org
+hudson.admin.port=8150
+hudson.http.port=8180
+
+hudson.mail.recipients=
+hudson.smtp.host=localhost
+
+# Hudson setup
+apache-tomcat=5.5.20
+sun-hudson=1.226

Added: jbpm4/task/trunk/hudson/apache-tomcat/conf/server.xml
===================================================================
--- jbpm4/task/trunk/hudson/apache-tomcat/conf/server.xml	                        (rev 0)
+++ jbpm4/task/trunk/hudson/apache-tomcat/conf/server.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,57 @@
+
+<Server port="@hudson.admin.port@" shutdown="SHUTDOWN">
+  
+  <!-- Comment these entries out to disable JMX MBeans support used for the 
+  administration web application -->
+  <Listener className="org.apache.catalina.core.AprLifecycleListener"/>
+  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
+  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
+  <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
+  
+  <!-- Global JNDI resources -->
+  <GlobalNamingResources>
+    
+    <!-- Test entry for demonstration purposes -->
+    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
+    
+    <!-- Editable user database that can also be used by
+    UserDatabaseRealm to authenticate users -->
+    <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved"
+      factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml"/>
+    
+  </GlobalNamingResources>
+  
+  <!-- Define the Tomcat Stand-Alone Service -->
+  <Service name="Catalina">
+    
+    <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
+    <Connector port="@hudson.http.port@" maxHttpHeaderSize="8192" maxThreads="150" 
+      minSpareThreads="25" maxSpareThreads="75" 
+      enableLookups="false" redirectPort="8443" acceptCount="100"
+      connectionTimeout="20000" disableUploadTimeout="true"/>
+    
+    <!-- Define the top level container in our container hierarchy -->
+    <Engine name="Catalina" defaultHost="localhost">
+      
+      <!-- This Realm uses the UserDatabase configured in the global JNDI
+      resources under the key "UserDatabase".  Any edits
+      that are performed against this UserDatabase are immediately
+      available for use by the Realm.  -->
+      <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
+      
+      <!-- Define the default virtual host
+      Note: XML Schema validation will not work with Xerces 2.2.
+      -->
+      <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
+        
+        <Context path="/hudson">
+          <Environment description="" name="HUDSON_HOME" type="java.lang.String" value="@hudson.home@"/>
+        </Context>
+        
+      </Host>
+      
+    </Engine>
+    
+  </Service>
+  
+</Server>
\ No newline at end of file


Property changes on: jbpm4/task/trunk/hudson/apache-tomcat/conf/server.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/task/trunk/hudson/apache-tomcat/conf/tomcat-users.xml
===================================================================
--- jbpm4/task/trunk/hudson/apache-tomcat/conf/tomcat-users.xml	                        (rev 0)
+++ jbpm4/task/trunk/hudson/apache-tomcat/conf/tomcat-users.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding='utf-8'?>
+<tomcat-users>
+  <role rolename="admin"/>
+  <user username="@hudson.username@" password="@hudson.password@" roles="admin"/>
+</tomcat-users>


Property changes on: jbpm4/task/trunk/hudson/apache-tomcat/conf/tomcat-users.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/task/trunk/hudson/build.xml
===================================================================
--- jbpm4/task/trunk/hudson/build.xml	                        (rev 0)
+++ jbpm4/task/trunk/hudson/build.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- ====================================================================== -->
+<!--                                                                        -->
+<!--  JBoss, the OpenSource J2EE webOS                                      -->
+<!--                                                                        -->
+<!--  Distributable under LGPL license.                                     -->
+<!--  See terms of license at http://www.gnu.org.                           -->
+<!--                                                                        -->
+<!-- ====================================================================== -->
+
+<!-- $Id$ -->
+
+<project>
+  
+  <property name="hudson.dir" value="${basedir}"/>
+  <property name="hudson.target.dir" value="${hudson.dir}/target"/>
+  
+  <!-- ================================================================== -->
+  <!-- Initialization                                                     -->
+  <!-- ================================================================== -->
+  
+  <target name="init">
+    
+    <!-- Check if ant.properties is available -->
+    <available property="ant.properties.available" file="${basedir}/ant.properties"/>
+    <fail message="Cannot find ant.properties. Did you copy/edit ant.properties.example?" unless="ant.properties.available"/>
+    
+    <property file="${basedir}/ant.properties"/>
+    
+    <xmlproperty file="${basedir}/../pom.xml"/>
+    <property name="version.id" value="${project.version}"/>
+    <property name="repository.id" value="${project.version}"/>
+    
+    <echo message="version.id=${version.id}"/>
+    <echo message="repository.id=${repository.id}"/>
+  </target>
+  
+  <target name="init-hudson" depends="init">
+    
+    <property name="hudson.tomcat" value="${hudson.root}/jbpm-hudson-${version.id}/apache-tomcat"/>
+    <property name="hudson.home" value="${hudson.root}/jbpm-hudson-${version.id}/hudson-home"/>
+    <echo/>
+    <echo message="hudson.root = ${hudson.root}"/>
+    <echo message="hudson.home = ${hudson.home}"/>
+    <echo/>
+    
+    <available file="${hudson.root}" property="hudson.root.available"/>
+    <available file="${hudson.tomcat}" property="hudson.tomcat.available"/>
+    <fail message="Hudson root not available" unless="hudson.root.available"/>
+    
+    <property name="hudson.username.${hudson.username}" value="true"/>
+    <fail message="Cannot use default hudson username: ${hudson.username}" if="hudson.username.changeme"/>
+    <property name="hudson.password.${hudson.password}" value="true"/>
+    <fail message="Cannot use default hudson password: ${hudson.password}" if="hudson.password.changeme"/>
+    
+    <property name="thirdparty.dir" value="${hudson.target.dir}/thirdparty"/>
+    <mkdir dir="${thirdparty.dir}"/>
+    
+  </target>
+	
+  <!-- 
+    Setup the Hudson Tomcat instance 
+  -->
+  <target name="hudson-tomcat-setup" depends="init-hudson" unless="hudson.tomcat.available">
+    
+    <get src="${jboss.repository}/apache-tomcat/${apache-tomcat}/lib/apache-tomcat.zip" dest="${thirdparty.dir}/apache-tomcat.zip" usetimestamp="true" verbose="true"/>
+    <get src="${jboss.repository}/sun-hudson/${sun-hudson}/lib/hudson.war" dest="${thirdparty.dir}/hudson.war" usetimestamp="true" verbose="true"/>
+    
+    <mkdir dir="${hudson.root}"/>
+    <unzip src="${thirdparty.dir}/apache-tomcat.zip" dest="${hudson.root}"/>
+    <move file="${hudson.root}/apache-tomcat-${apache-tomcat}" tofile="${hudson.tomcat}"/>
+    <chmod perm="+x">
+      <fileset dir="${hudson.tomcat}/bin">
+        <include name="*.sh"/>
+      </fileset>
+    </chmod>
+    
+    <!-- Configure Tomcat -->
+    <copy todir="${hudson.tomcat}/webapps" file="${thirdparty.dir}/hudson.war"/>
+    <copy todir="${hudson.tomcat}" overwrite="true">
+      <fileset dir="${hudson.dir}/apache-tomcat">
+        <include name="**/*.xml"/>
+      </fileset>
+      <filterset>
+        <filtersfile file="${hudson.dir}/ant.properties"/>
+        <filter token="hudson.home" value="${hudson.home}"/>
+      </filterset>
+    </copy>
+  </target>
+  
+  <!-- 
+    Update the Hudson version
+  -->
+  <target name="hudson-update" depends="init-hudson">
+    
+    <get src="${jboss.repository}/sun-hudson/${sun-hudson}/lib/hudson.war" dest="${thirdparty.dir}/hudson.war" usetimestamp="false" verbose="true"/>
+    
+    <delete dir="${hudson.tomcat}/webapps/hudson"/>
+    <copy todir="${hudson.tomcat}/webapps" file="${thirdparty.dir}/hudson.war"/>
+  </target>
+
+  <!-- 
+    Setup the Hudson QA environment
+  -->
+  <target name="hudson-setup" depends="init-hudson,hudson-tomcat-setup" 
+    description="Setup the Hudson QA environment">
+    
+    <!-- get the svn url -->
+    <exec dir="${hudson.dir}/.." executable="svn" failonerror="true" output="${hudson.target.dir}/svn-info.xml">
+      <arg line="info"/>
+      <arg line="--xml"/>
+    </exec>
+    <xmlproperty file="${hudson.target.dir}/svn-info.xml"/>
+    <property name="hudson.jbpm.url" value="${info.entry.url}"/>
+    
+    <!-- Configure Hudson -->
+    <copy todir="${hudson.home}" overwrite="true">
+      <fileset dir="${hudson.dir}/hudson-home">
+        <include name="jobs/*/config.xml"/>
+        <include name="users/*/config.xml"/>
+        <include name="*.xml"/>
+      </fileset>
+      <filterset>
+        <filter token="hudson.jbpm.url" value="${hudson.jbpm.url}"/>
+        <filter token="hudson.home" value="${hudson.home}"/>
+        <filter token="version.id" value="${version.id}"/>
+        <filtersfile file="${hudson.dir}/ant.properties"/>
+      </filterset>
+    </copy>
+
+    <echo/>
+    <echo message="*************************************"/>
+    <echo message="* Hudson setup successfully         *"/>
+    <echo message="* ant hudson-start                  *"/>
+    <echo message="*************************************"/>
+    <echo/>
+
+  </target>
+  
+  <target name="hudson-stop" depends="init-hudson" description="Stops the Hudson QA environment">
+    
+    <exec executable="${hudson.tomcat}/bin/catalina.sh" failonerror="true">
+      <arg line="stop"/>
+    </exec>
+
+    <echo/>
+    <echo message="*************************************"/>
+    <echo message="* Hudson stopped successfully       *"/>
+    <echo message="* ant hudson-start                  *"/>
+    <echo message="*************************************"/>
+    <echo/>
+
+  </target>
+  
+  <target name="hudson-start" depends="init-hudson" description="Start the Hudson QA environment">
+    
+    <property environment="env"/>
+    <fail message="unset JBOSS_REPOSITORY=${env.JBOSS_REPOSITORY}" if="env.JBOSS_REPOSITORY"/>
+
+    <exec executable="${hudson.tomcat}/bin/catalina.sh" failonerror="true" output="${hudson.target.dir}/hudson.log">
+      <env key="CATALINA_OPTS" value="-Xmx512m -Djava.awt.headless=true"/>
+      <arg line="start"/>
+    </exec>
+
+    <echo/>
+    <echo message="*************************************"/>
+    <echo message="* Hudson started successfully       *"/>
+    <echo message="* http://localhost:${hudson.http.port}/hudson      *"/>
+    <echo message="*************************************"/>
+    <echo/>
+
+  </target>
+  
+</project>


Property changes on: jbpm4/task/trunk/hudson/build.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/task/trunk/hudson/hudson-home/config.xml
===================================================================
--- jbpm4/task/trunk/hudson/hudson-home/config.xml	                        (rev 0)
+++ jbpm4/task/trunk/hudson/hudson-home/config.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,17 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<hudson>
+  <numExecutors>1</numExecutors>
+  <useSecurity>true</useSecurity>
+  <systemMessage>
+    <![CDATA[
+  <h2>jBPM- at version.id@ QA Environment</h2>
+
+  <table>
+  <tr><th align=left>jBPM:</th><td>@hudson.jbpm.url@</td></tr>
+  </table>
+]]>
+  </systemMessage>
+  <jdks/>
+  <slaves/>
+  <quietPeriod>5</quietPeriod>
+</hudson>
\ No newline at end of file


Property changes on: jbpm4/task/trunk/hudson/hudson-home/config.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/task/trunk/hudson/hudson-home/hudson.tasks.Mailer.xml
===================================================================
--- jbpm4/task/trunk/hudson/hudson-home/hudson.tasks.Mailer.xml	                        (rev 0)
+++ jbpm4/task/trunk/hudson/hudson-home/hudson.tasks.Mailer.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<hudson.tasks.Mailer-DescriptorImpl>
+  <defaultSuffix></defaultSuffix>
+  <hudsonUrl>http://@hudson.host@:@hudson.http.port@/hudson/</hudsonUrl>
+  <adminAddress>thomas.diesler at jboss.com</adminAddress>
+  <smtpHost>@hudson.smtp.host@</smtpHost>
+</hudson.tasks.Mailer-DescriptorImpl>


Property changes on: jbpm4/task/trunk/hudson/hudson-home/hudson.tasks.Mailer.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/task/trunk/hudson/hudson-home/hudson.tasks.Maven.xml
===================================================================
--- jbpm4/task/trunk/hudson/hudson-home/hudson.tasks.Maven.xml	                        (rev 0)
+++ jbpm4/task/trunk/hudson/hudson-home/hudson.tasks.Maven.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,9 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<hudson.tasks.Maven_-DescriptorImpl>
+  <installations>
+    <hudson.tasks.Maven_-MavenInstallation>
+      <name>apache-maven</name>
+      <mavenHome>@hudson.maven.path@</mavenHome>
+    </hudson.tasks.Maven_-MavenInstallation>
+  </installations>
+</hudson.tasks.Maven_-DescriptorImpl>
\ No newline at end of file


Property changes on: jbpm4/task/trunk/hudson/hudson-home/hudson.tasks.Maven.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/task/trunk/hudson/hudson-home/jobs/jBPM4/config.xml
===================================================================
--- jbpm4/task/trunk/hudson/hudson-home/jobs/jBPM4/config.xml	                        (rev 0)
+++ jbpm4/task/trunk/hudson/hudson-home/jobs/jBPM4/config.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,28 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<hudson.maven.MavenModuleSet>
+  <rootModule>
+    <groupId>org.jboss.jbpm</groupId>
+    <artifactId>jbpm</artifactId>
+  </rootModule>
+  <goals>test</goals>
+  <reporters/>
+  <scm class="hudson.scm.SubversionSCM">
+    <locations>
+      <hudson.scm.SubversionSCM_-ModuleLocation>
+        <remote>@hudson.jbpm.url@</remote>
+        <local>jpdl</local>
+      </hudson.scm.SubversionSCM_-ModuleLocation>
+    </locations>
+    <useUpdate>true</useUpdate>
+    <browser class="hudson.scm.browsers.ViewSVN">
+      <url>http://fisheye.jboss.com/browse/JbpmSvn/</url>
+    </browser>
+  </scm>
+  <canRoam>true</canRoam>
+  <disabled>false</disabled>
+  <triggers class="vector"/>
+  <keepDependencies>false</keepDependencies>
+  <properties/>
+  <description></description>
+  <actions class="vector"/>
+</hudson.maven.MavenModuleSet>
\ No newline at end of file


Property changes on: jbpm4/task/trunk/hudson/hudson-home/jobs/jBPM4/config.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/task/trunk/modules/core/pom.xml
===================================================================
--- jbpm4/task/trunk/modules/core/pom.xml	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/pom.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- ====================================================================== -->
+<!--                                                                        -->
+<!--  JBoss, the OpenSource J2EE webOS                                      -->
+<!--                                                                        -->
+<!--  Distributable under LGPL license.                                     -->
+<!--  See terms of license at http://www.gnu.org.                           -->
+<!--                                                                        -->
+<!-- ====================================================================== -->
+
+<!-- $Id$ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+   <modelVersion>4.0.0</modelVersion>
+
+   <name>JBoss jBPM 4 - Task Core</name>
+   <groupId>org.jboss.jbpm</groupId>
+   <artifactId>task-core</artifactId>
+   <packaging>jar</packaging>
+
+   <!-- Parent -->
+   <parent>
+      <groupId>org.jboss.jbpm</groupId>
+      <artifactId>jbpm</artifactId>
+      <version>4.0.0-SNAPSHOT</version>
+   </parent>
+
+   <!-- Properties -->
+   <properties>
+
+   </properties>
+
+   <!-- Dependencies -->
+   <dependencies>
+      <!-- jBPM Dependencies -->
+      <dependency>
+         <groupId>org.jboss.jbpm.pvm</groupId>
+         <artifactId>pvm-core</artifactId>
+      </dependency>
+
+      <dependency>
+         <groupId>org.jboss.jbpm</groupId>
+         <artifactId>jbpm-api</artifactId>
+      </dependency>
+
+      <!-- Compile Dependencies -->
+      <dependency>
+         <groupId>log4j</groupId>
+         <artifactId>log4j</artifactId>
+      </dependency>
+
+      <dependency>
+         <groupId>junit</groupId>
+         <artifactId>junit</artifactId>
+      </dependency>
+
+   </dependencies>
+
+
+   <!-- Plugins -->
+   <build>
+      <plugins>        
+         <plugin>
+            <artifactId>maven-compiler-plugin</artifactId>
+            <configuration>
+               <showDeprecation>false</showDeprecation>
+               <testExcludes>
+                 <exclude>org/jbpm/task/TaskDbTest.java</exclude>
+                 <exclude>org/jbpm/task/TaskTest.java</exclude>
+               </testExcludes>
+            </configuration>
+         </plugin>
+         <plugin>
+            <artifactId>maven-jar-plugin</artifactId>
+            <configuration>
+               <excludes>
+                  <exclude>hibernate.cfg.xml</exclude>
+                  <exclude>jbpm.cfg.xml</exclude>
+                  <exclude>jbpm.mail.templates.xml</exclude>
+               </excludes>
+            </configuration>
+         </plugin>
+         <plugin>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <configuration>
+               <excludes>
+                 <exclude>org/jbpm/task/TaskServiceTest.java</exclude>
+               </excludes>
+            </configuration>
+         </plugin>
+      </plugins>
+   </build>
+</project>


Property changes on: jbpm4/task/trunk/modules/core/pom.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/task/trunk/modules/core/src/main/doc/models.uml
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/doc/models.uml	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/doc/models.uml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,1250 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<XPD:PROJECT xmlns:XPD="http://www.staruml.com" version="1">
+<XPD:HEADER>
+<XPD:SUBUNITS>
+</XPD:SUBUNITS>
+<XPD:PROFILES>
+</XPD:PROFILES>
+</XPD:HEADER>
+<XPD:BODY>
+<XPD:OBJ name="DocumentElement" type="UMLProject" guid="dizqvgl3LkeHjy/ks6kH8wAA">
+<XPD:ATTR name="Title" type="string">Untitled</XPD:ATTR>
+<XPD:ATTR name="#OwnedElements" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLModel" guid="28q8akawHUut/vt9cqGzHQAA">
+<XPD:ATTR name="Name" type="string">Task</XPD:ATTR>
+<XPD:REF name="Namespace">dizqvgl3LkeHjy/ks6kH8wAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLClassDiagram" guid="y2Dig32fuk2qfbzhVMV12gAA">
+<XPD:ATTR name="Name" type="string">Task</XPD:ATTR>
+<XPD:REF name="DiagramOwner">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLClassDiagramView" guid="/N3kDxf0DUmenjfOISss4wAA">
+<XPD:REF name="Diagram">y2Dig32fuk2qfbzhVMV12gAA</XPD:REF>
+<XPD:ATTR name="#OwnedViews" type="integer">14</XPD:ATTR>
+<XPD:OBJ name="OwnedViews[0]" type="UMLClassView" guid="BEGpovprr0OpCDXKEafPPAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">452</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">112</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">127</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">56</XPD:ATTR>
+<XPD:REF name="Model">HvFFmfu3EU2Q5JpvC4V1dAAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="cb1HAOVGbUGhz+5u0aVooAAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="9T7IkvwqGEqMzkPM65WmMAAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">Task</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="18KTnjDHzEGH+Q+GkR1ClQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="JiknLGb/Z0Cu9nqlyaNn3AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="Nb2y5cEn8E++FPMih7TpfAAA">
+<XPD:REF name="Model">HvFFmfu3EU2Q5JpvC4V1dAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="9sAfjtNojEiLZ2kkSKHULgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">HvFFmfu3EU2Q5JpvC4V1dAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="UIi+TBpteUG0OFM1uqHsaAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">HvFFmfu3EU2Q5JpvC4V1dAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[1]" type="UMLClassView" guid="fs8kGcLd20yQW3uybthdSwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">268</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">68</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">97</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">30</XPD:ATTR>
+<XPD:REF name="Model">uTvluPMq6EiVrEzIldF+CwAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="f5cPYbMir0W8/tl+uePzMAAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="Kxi/geJq70m18XV0vWefYwAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">TaskDefinition</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="MTLywrlLUECL0ZhK/KmVawAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="yXGzgAKcbUiqP0djDFiJuQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="PuerV6iAkkGmjsZdqAJEEAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">uTvluPMq6EiVrEzIldF+CwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="M7WkDdTEmkKEx7odnins/gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">uTvluPMq6EiVrEzIldF+CwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="FxIHioj58Ei2Xjj6rcXj8wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">uTvluPMq6EiVrEzIldF+CwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[2]" type="UMLClassView" guid="MH9M/bx8Akm+nfvMLj/xkAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">64</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">180</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">118</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">30</XPD:ATTR>
+<XPD:REF name="Model">GioGPK3R6Ue8w6V2t8TzvgAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="JxjsAefJoEmgKonRE54TqAAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="f6BUZLh9CU6aYJF1xVRY7gAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">SwimlaneDefinition</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="Sjax149rckKdVbycxgQpXgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="0dfMlb1+6Ue/2vl1YFxW3QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="yTCES2vNVUaDe5fVHcuuNwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">GioGPK3R6Ue8w6V2t8TzvgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="H4oGMkjhHEyBhi/8rQaD7wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">GioGPK3R6Ue8w6V2t8TzvgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="otxfkH9A4EakNQ1lqnfSRwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">GioGPK3R6Ue8w6V2t8TzvgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[3]" type="UMLClassView" guid="ror19oxT9kuTiijsBoK/bAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">268</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">168</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">99</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">57</XPD:ATTR>
+<XPD:REF name="Model">ijjMqBZ6REK0iCxeAVpgAAAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="2kE7oGVvZkyuBlPJ5a/RcAAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="GEzmoSK3r0WGznrtX32JzQAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">Swimlane</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="2YKnNa31ik2ojBUwCEjvpQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="t4P5eBSAJkqqeh3Hg2hmBwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="4rjyvONTNUiPcfx1G59ibQAA">
+<XPD:REF name="Model">ijjMqBZ6REK0iCxeAVpgAAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="//L9vrH53EOscgK+ByNq7QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">ijjMqBZ6REK0iCxeAVpgAAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="cMsAJi5+eEWIlooBLw2zGQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">ijjMqBZ6REK0iCxeAVpgAAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[4]" type="UMLClassView" guid="gaiFlhWKiUe6Ca6zyb+P9wAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">660</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">120</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">86</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">30</XPD:ATTR>
+<XPD:REF name="Model">NKuLMRCxwkeVGSHi+kJ4PAAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="lmMUO8llAEOBRgv+t/sDnQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="Vh5aRoisiEWlEtggSfVlAgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">Comment</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="Rbp+SfECfEi50IPNbuybxwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="iO3UrPh5+UasGCA9ehmwrAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="i2nM8GNG40KTTd1cuy4DtQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">NKuLMRCxwkeVGSHi+kJ4PAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="nu4ZY/6DP0S6WVnGJAA4PAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">NKuLMRCxwkeVGSHi+kJ4PAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="+CwsKO2rIEie2/cKkqFrtQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">NKuLMRCxwkeVGSHi+kJ4PAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[5]" type="UMLClassView" guid="S4BlySM5kUW/YiK6Pey5zQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">660</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">172</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">112</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">61</XPD:ATTR>
+<XPD:REF name="Model">nDDKC4LElEWTybRg7a79OQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="EG+yjZiZSk6dQYbTSchLIgAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="kfnvHZmp/U6vqgIWtfgo+wAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">Role</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="Dc5QO3PXY0CqLVjbgof6XgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="k5EEwBtSDUKqEQ+8PQDYdgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="d7UQQXomaUeNgE4YzwfwjAAA">
+<XPD:REF name="Model">nDDKC4LElEWTybRg7a79OQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="VNUc47aFgky/2uiWcvDu+wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">nDDKC4LElEWTybRg7a79OQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="7X2ZbAYJSkq2jDYnXuXq0wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">nDDKC4LElEWTybRg7a79OQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[6]" type="UMLAssociationView" guid="vlPPTxt05ky9R0jdt64xogAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="LineStyle" type="LineStyleKind">lsRectilinear</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">660,180;608,180;608,160;578,160</XPD:ATTR>
+<XPD:REF name="Model">G9y2XZEWjU+fF6GadfrMNQAA</XPD:REF>
+<XPD:REF name="Head">BEGpovprr0OpCDXKEafPPAAA</XPD:REF>
+<XPD:REF name="Tail">S4BlySM5kUW/YiK6Pey5zQAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="WYg7QywiKEKtk0JHTnhPQAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">G9y2XZEWjU+fF6GadfrMNQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="xrCsE8KnX0Oh8sZQo4nXUgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">G9y2XZEWjU+fF6GadfrMNQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="fHicZJt+ckSbT0efOqS9KgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">G9y2XZEWjU+fF6GadfrMNQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="N1AaoL+Z4ECW6JuSkuWnfAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">EZ8r6H+KEUOwFX+TBkkkkQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="zGcniyozykOgAgWYPsbL8AAA">
+<XPD:ATTR name="Alpha" type="real">-0,27829978479133</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">21,8403296678416</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">+roles</XPD:ATTR>
+<XPD:REF name="Model">j7CvxXw8zUuJA8N8a0/lZwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="TPkwMum6MEK5T0dcpz4jJAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">EZ8r6H+KEUOwFX+TBkkkkQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="6vZm1k5uTkiVNM7aHsMJswAA">
+<XPD:ATTR name="Alpha" type="real">0,620249823820819</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">17,2046505340853</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">*</XPD:ATTR>
+<XPD:REF name="Model">j7CvxXw8zUuJA8N8a0/lZwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="2/8qn+mwQEC+A0Z7e54FFAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">EZ8r6H+KEUOwFX+TBkkkkQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="CTPYQGO6lE+AUGXQx1gMjAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">j7CvxXw8zUuJA8N8a0/lZwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="2LswS62HG0m6CPejDe/PEwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-908</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-968</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">EZ8r6H+KEUOwFX+TBkkkkQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="W6sN09AH1kSIQllKiGn4egAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-908</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-968</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">j7CvxXw8zUuJA8N8a0/lZwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[7]" type="UMLAssociationView" guid="kCEQ989tnUi8utrj1r+WuwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="LineStyle" type="LineStyleKind">lsRectilinear</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">660,140;578,140</XPD:ATTR>
+<XPD:REF name="Model">ucLP51aO/EenmVgZ5kHf+gAA</XPD:REF>
+<XPD:REF name="Head">BEGpovprr0OpCDXKEafPPAAA</XPD:REF>
+<XPD:REF name="Tail">gaiFlhWKiUe6Ca6zyb+P9wAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="PVDNxCwBS06I5wevxolefgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">ucLP51aO/EenmVgZ5kHf+gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="q7l9uyxHbkKezfMiZkEUtwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">ucLP51aO/EenmVgZ5kHf+gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="Y2oOGzv6QE20GosmIVezrgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">ucLP51aO/EenmVgZ5kHf+gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="C67aHXPFBk+hpaUbSC5qQwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">y1D4yhmlCUuZRScC0SWorwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="asLFqkfz1kOieET4xs6NTwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">otiWB8zxNUWzDwH20HQwxQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="9a+PmYwA106lZnqm/AD3xwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">y1D4yhmlCUuZRScC0SWorwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="NCcc+zjELUir3iJ7uWwrjwAA">
+<XPD:ATTR name="Alpha" type="real">-0,540419941447379</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">11,6619037896906</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">*</XPD:ATTR>
+<XPD:REF name="Model">otiWB8zxNUWzDwH20HQwxQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="0ib1VsXba06m432Y4S+q/wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">y1D4yhmlCUuZRScC0SWorwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="CTg2tLYVQ0uVIrDKnq5wMAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">otiWB8zxNUWzDwH20HQwxQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="YZwZYYU4yk+prP+8GOLHNQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-908</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-968</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">y1D4yhmlCUuZRScC0SWorwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="mVHxvbQtUUa5+NHlAOUrQwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-908</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-968</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">otiWB8zxNUWzDwH20HQwxQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[8]" type="UMLAssociationView" guid="/4J9gJdnhE2I6S8pR8e8CwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="LineStyle" type="LineStyleKind">lsRectilinear</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">452,148;396,148;396,176;366,176</XPD:ATTR>
+<XPD:REF name="Model">gPaQ+DIN6EWZ4BdgEPOxBAAA</XPD:REF>
+<XPD:REF name="Head">ror19oxT9kuTiijsBoK/bAAA</XPD:REF>
+<XPD:REF name="Tail">BEGpovprr0OpCDXKEafPPAAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="rd3R8mu5OUu9cvZ6Z/4NggAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">gPaQ+DIN6EWZ4BdgEPOxBAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="GY3pM5HSK0iI2veru1WgUwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">gPaQ+DIN6EWZ4BdgEPOxBAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="DsV6M80A20K/A48wJowMVAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">gPaQ+DIN6EWZ4BdgEPOxBAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="2Hiiw/pWfUCivqUfdBW8OwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">pIDN0gCe306T092GLUvstgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="4EX0iPgXT0WYxWFInd77KQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">hKHk5PnDTkKXfRG2jmcJJAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="+KVkT8ozQkemNWISCynPpQAA">
+<XPD:ATTR name="Alpha" type="real">0,463647323286684</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15,6524758424985</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">0..1</XPD:ATTR>
+<XPD:REF name="Model">pIDN0gCe306T092GLUvstgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="34tfoxrPFkqQ6azctOeNhgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">hKHk5PnDTkKXfRG2jmcJJAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="Ma86Ms4jpU6yL/qb2Bb7CQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">pIDN0gCe306T092GLUvstgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="RTUJ+/IcmkmU5J4z/G0vWAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">hKHk5PnDTkKXfRG2jmcJJAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="C2iw/esZgEmhWgrr+NZg+QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-948</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-972</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">pIDN0gCe306T092GLUvstgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="Q/HJJURAq0OyhISJkhdf6wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-948</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-972</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">hKHk5PnDTkKXfRG2jmcJJAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[9]" type="UMLAssociationView" guid="l0EW19sL+k++O39a+OyjxQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="LineStyle" type="LineStyleKind">lsRectilinear</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">660,216;366,216</XPD:ATTR>
+<XPD:REF name="Model">+Ae9qqvOAEiQr4SuowB4xgAA</XPD:REF>
+<XPD:REF name="Head">ror19oxT9kuTiijsBoK/bAAA</XPD:REF>
+<XPD:REF name="Tail">S4BlySM5kUW/YiK6Pey5zQAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="Hzr4oQcJrkuoVCYMb8ik2QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">+Ae9qqvOAEiQr4SuowB4xgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="Dd5BXxX0k0uHTHP6wlvpSgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">+Ae9qqvOAEiQr4SuowB4xgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="Tpgj7+i4REuc+JlFB3AxGAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">+Ae9qqvOAEiQr4SuowB4xgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="Iz0U5YCBrka8yPUrXxKlCgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">qhpWc/+HW0SLBBtfjX4WFwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="3DFnlxZwKkOSCvZ3x80JIAAA">
+<XPD:ATTR name="Alpha" type="real">-0,191184519777575</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">31,5753068076939</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">+candidates</XPD:ATTR>
+<XPD:REF name="Model">Y3XN0KcISUujsCKot7FRwQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="PN0Z99QsQ0aA06SWVhrzdgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">qhpWc/+HW0SLBBtfjX4WFwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="ZVJgTp3++0aX2CB2R8hCuQAA">
+<XPD:ATTR name="Alpha" type="real">0,785398663397698</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">14,142135623731</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">*</XPD:ATTR>
+<XPD:REF name="Model">Y3XN0KcISUujsCKot7FRwQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="wAtztCseO0m7PZc49MG+agAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">qhpWc/+HW0SLBBtfjX4WFwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="AnVW30FHVU+3Ccfw7YrxnAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">Y3XN0KcISUujsCKot7FRwQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="ft42mcFsHECO0yQKn8iDQQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-948</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-972</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">qhpWc/+HW0SLBBtfjX4WFwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="Ooz9JUM66E+ASSUnOnh1KwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-948</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-972</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">Y3XN0KcISUujsCKot7FRwQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[10]" type="UMLAssociationView" guid="s97DNIncIUyqxXbneTudIQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="LineStyle" type="LineStyleKind">lsRectilinear</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">364,88;392,88;392,120;452,120</XPD:ATTR>
+<XPD:REF name="Model">u9wX0QGdzEKXDMUSuMeSlAAA</XPD:REF>
+<XPD:REF name="Head">BEGpovprr0OpCDXKEafPPAAA</XPD:REF>
+<XPD:REF name="Tail">fs8kGcLd20yQW3uybthdSwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="5nJJhIKfP0aphx/wCbPj8QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">u9wX0QGdzEKXDMUSuMeSlAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="GF15CGpxb0ihKLCpqEgiPwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">u9wX0QGdzEKXDMUSuMeSlAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="mQ03MxKHVEGf7/sHqs6UNQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">u9wX0QGdzEKXDMUSuMeSlAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="TFju0xnXzUeFLEfbHAgvxwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">0vFa396IN0SfuCWKBLJF0AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="ABsrUukx4UKDMLhPlPcXaAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">zekdyR8yEUmNFK08gWI5UgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="6pSDVmO3RUiGwA0KZzySZgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">0vFa396IN0SfuCWKBLJF0AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="llvYWWfx/E6vLX4zQ9IOHwAA">
+<XPD:ATTR name="Alpha" type="real">0,620249148145143</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">17,2046505340853</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">0..1</XPD:ATTR>
+<XPD:REF name="Model">zekdyR8yEUmNFK08gWI5UgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="ZP18gpDXvEaqIO5x2PK4vwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">0vFa396IN0SfuCWKBLJF0AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="6oYASua5iUi3jt++CaJaRgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">zekdyR8yEUmNFK08gWI5UgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="LrU5/QaN5kabGVbUYT2uVwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-948</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-972</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">0vFa396IN0SfuCWKBLJF0AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="fncRPs0eyUay6gLlnfmaoAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-948</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-972</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">zekdyR8yEUmNFK08gWI5UgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[11]" type="UMLAssociationView" guid="hEfg3zF9T0KZqM6LoHkeywAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="LineStyle" type="LineStyleKind">lsRectilinear</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">181,193;268,193</XPD:ATTR>
+<XPD:REF name="Model">lT1ML7PzwUGLyiBN6ZM9ewAA</XPD:REF>
+<XPD:REF name="Head">ror19oxT9kuTiijsBoK/bAAA</XPD:REF>
+<XPD:REF name="Tail">MH9M/bx8Akm+nfvMLj/xkAAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="Xp9wRzdQwUiqwJCNI5b4JQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">lT1ML7PzwUGLyiBN6ZM9ewAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="dQQcX7/IbUGZGP/exqC6OQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">lT1ML7PzwUGLyiBN6ZM9ewAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="wowPjb5qSEiE1UD8gtsPVAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">lT1ML7PzwUGLyiBN6ZM9ewAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="fZzGyZZt1US3pySjYdbe3AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">xnq3//AvmkaNPVRDsIkseAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="kerBdAuXP0qGhUBsKsaVBgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">gXiNnV7a90+F3ShZ01TMFAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="AmXw2BgBNk+PLXzTBtMTqgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">xnq3//AvmkaNPVRDsIkseAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="24szT2Qfg0uwuXHurF5FawAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">gXiNnV7a90+F3ShZ01TMFAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="UHz2AHAHTk6b0UBy27uYsgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">xnq3//AvmkaNPVRDsIkseAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="4pcy4Hj8vUuVJIBH55+G8wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">gXiNnV7a90+F3ShZ01TMFAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="oiGUCSbvcE2jf8t3N6P8eAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-948</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-972</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">xnq3//AvmkaNPVRDsIkseAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="n+zAECOm3kuPp0U6fGa9qQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-948</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-972</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">gXiNnV7a90+F3ShZ01TMFAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[12]" type="UMLAssociationView" guid="0Q8MZMRv3keC5G0P3jqvLgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="LineStyle" type="LineStyleKind">lsRectilinear</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">540,112;540,92;612,92;612,120;578,120</XPD:ATTR>
+<XPD:REF name="Model">AVjFcKW/SkGrDDjIOVRD+gAA</XPD:REF>
+<XPD:REF name="Head">BEGpovprr0OpCDXKEafPPAAA</XPD:REF>
+<XPD:REF name="Tail">BEGpovprr0OpCDXKEafPPAAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="d3Kypc5e9USTEK3RieUIQgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">AVjFcKW/SkGrDDjIOVRD+gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="uD+JnEzcwkSPAPXtxxC+uQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">AVjFcKW/SkGrDDjIOVRD+gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="rnjCjREV6kK6FI664NzbmQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">AVjFcKW/SkGrDDjIOVRD+gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="cfgsL9WLv0C08ZQHcVaKFAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">wi5BJHl4RkiqqqtC44D95QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="GDNhCHzLh0WvJJ1jxSWCbAAA">
+<XPD:ATTR name="Alpha" type="real">-0,765792532386477</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">36,0693775937429</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">+subTasks</XPD:ATTR>
+<XPD:REF name="Model">s0hHwXTeU02e7YGLMAX0PAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="5qWWjDhi90uAUXDD5YSGkAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">wi5BJHl4RkiqqqtC44D95QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="X0imqN7kTUWC5VgPlkJ00gAA">
+<XPD:ATTR name="Alpha" type="real">-0,519146152707896</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">16,1245154965971</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">*</XPD:ATTR>
+<XPD:REF name="Model">s0hHwXTeU02e7YGLMAX0PAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="L1KmK8JoRUSHUwvrb5aMcQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">wi5BJHl4RkiqqqtC44D95QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="qjcLVMn3yEiW/FQqSOppuwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">s0hHwXTeU02e7YGLMAX0PAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="ghdCa3kzQUCEmb8k45FU/AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-924</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-972</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">wi5BJHl4RkiqqqtC44D95QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="poFTZVOeaUWdQnmYEjp2JgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-924</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-972</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">s0hHwXTeU02e7YGLMAX0PAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[13]" type="UMLAssociationView" guid="9vrgDuSQRkuGM2KpgQ681wAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="LineStyle" type="LineStyleKind">lsRectilinear</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">712,120;712,96;774,96;774,132;745,132</XPD:ATTR>
+<XPD:REF name="Model">3DEhC+Nv0kK7uqtxV6JcZwAA</XPD:REF>
+<XPD:REF name="Head">gaiFlhWKiUe6Ca6zyb+P9wAA</XPD:REF>
+<XPD:REF name="Tail">gaiFlhWKiUe6Ca6zyb+P9wAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="HPgV9SBY2kahngUOTUUnqgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">3DEhC+Nv0kK7uqtxV6JcZwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="4xtJRUX4cUW2j7LzmJ71HgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">3DEhC+Nv0kK7uqtxV6JcZwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="cOI/0aN4FEmtKry1i0zsGgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">3DEhC+Nv0kK7uqtxV6JcZwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="mJSLnpapqEe+JCw/l9ZrWgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">9l7hGk4Y/kqJrk9GldzJ6QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="MRGwgnyuZkenbLrSBgMGowAA">
+<XPD:ATTR name="Alpha" type="real">-0,564569214907821</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">35,5105618091294</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">+replies</XPD:ATTR>
+<XPD:REF name="Model">zWDSiZ7kIEKvhXHKxmicAwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="mbaATlJxY064398AzNkbrAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">9l7hGk4Y/kqJrk9GldzJ6QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="NDIxC9Q5bUq5Bq5jTTb6DAAA">
+<XPD:ATTR name="Alpha" type="real">-0,463647636778485</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">20,1246117974981</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">*</XPD:ATTR>
+<XPD:REF name="Model">zWDSiZ7kIEKvhXHKxmicAwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="vQr9dU7oMkScUooE1diouQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">9l7hGk4Y/kqJrk9GldzJ6QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="E7w5n6j9t02OUqefF5g+GQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0,785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">zWDSiZ7kIEKvhXHKxmicAwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="v+lh/JYNEk2ckddRKkYMqgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-908</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-976</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">9l7hGk4Y/kqJrk9GldzJ6QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="Hccf2ZoTsUGJM1WkqVxZHAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-908</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-976</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">zWDSiZ7kIEKvhXHKxmicAwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:ATTR name="#OwnedElements" type="integer">15</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLClass" guid="HvFFmfu3EU2Q5JpvC4V1dAAA">
+<XPD:ATTR name="Name" type="string">Task</XPD:ATTR>
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">BEGpovprr0OpCDXKEafPPAAA</XPD:REF>
+<XPD:REF name="Views[1]">Nb2y5cEn8E++FPMih7TpfAAA</XPD:REF>
+<XPD:REF name="Views[2]">9sAfjtNojEiLZ2kkSKHULgAA</XPD:REF>
+<XPD:REF name="Views[3]">UIi+TBpteUG0OFM1uqHsaAAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">6</XPD:ATTR>
+<XPD:REF name="Associations[0]">EZ8r6H+KEUOwFX+TBkkkkQAA</XPD:REF>
+<XPD:REF name="Associations[1]">y1D4yhmlCUuZRScC0SWorwAA</XPD:REF>
+<XPD:REF name="Associations[2]">hKHk5PnDTkKXfRG2jmcJJAAA</XPD:REF>
+<XPD:REF name="Associations[3]">0vFa396IN0SfuCWKBLJF0AAA</XPD:REF>
+<XPD:REF name="Associations[4]">s0hHwXTeU02e7YGLMAX0PAAA</XPD:REF>
+<XPD:REF name="Associations[5]">wi5BJHl4RkiqqqtC44D95QAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="j/qyRKyyK0yfML2GQCwouQAA">
+<XPD:ATTR name="Name" type="string">assignee</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">HvFFmfu3EU2Q5JpvC4V1dAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[1]" type="UMLClass" guid="uTvluPMq6EiVrEzIldF+CwAA">
+<XPD:ATTR name="Name" type="string">TaskDefinition</XPD:ATTR>
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">fs8kGcLd20yQW3uybthdSwAA</XPD:REF>
+<XPD:REF name="Views[1]">PuerV6iAkkGmjsZdqAJEEAAA</XPD:REF>
+<XPD:REF name="Views[2]">M7WkDdTEmkKEx7odnins/gAA</XPD:REF>
+<XPD:REF name="Views[3]">FxIHioj58Ei2Xjj6rcXj8wAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">zekdyR8yEUmNFK08gWI5UgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[2]" type="UMLClass" guid="GioGPK3R6Ue8w6V2t8TzvgAA">
+<XPD:ATTR name="Name" type="string">SwimlaneDefinition</XPD:ATTR>
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">MH9M/bx8Akm+nfvMLj/xkAAA</XPD:REF>
+<XPD:REF name="Views[1]">yTCES2vNVUaDe5fVHcuuNwAA</XPD:REF>
+<XPD:REF name="Views[2]">H4oGMkjhHEyBhi/8rQaD7wAA</XPD:REF>
+<XPD:REF name="Views[3]">otxfkH9A4EakNQ1lqnfSRwAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Associations[0]">zKLAXgKQ/02weDYbKw8WmwAA</XPD:REF>
+<XPD:REF name="Associations[1]">gXiNnV7a90+F3ShZ01TMFAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[3]" type="UMLClass" guid="ijjMqBZ6REK0iCxeAVpgAAAA">
+<XPD:ATTR name="Name" type="string">Swimlane</XPD:ATTR>
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">ror19oxT9kuTiijsBoK/bAAA</XPD:REF>
+<XPD:REF name="Views[1]">4rjyvONTNUiPcfx1G59ibQAA</XPD:REF>
+<XPD:REF name="Views[2]">//L9vrH53EOscgK+ByNq7QAA</XPD:REF>
+<XPD:REF name="Views[3]">cMsAJi5+eEWIlooBLw2zGQAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">4</XPD:ATTR>
+<XPD:REF name="Associations[0]">pIDN0gCe306T092GLUvstgAA</XPD:REF>
+<XPD:REF name="Associations[1]">qhpWc/+HW0SLBBtfjX4WFwAA</XPD:REF>
+<XPD:REF name="Associations[2]">YROrTOuSWkmpMzIJdfaf/QAA</XPD:REF>
+<XPD:REF name="Associations[3]">xnq3//AvmkaNPVRDsIkseAAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="UrpmYKHol0y1p0QVb2Y+KQAA">
+<XPD:ATTR name="Name" type="string">assignee</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">ijjMqBZ6REK0iCxeAVpgAAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[4]" type="UMLClass" guid="NKuLMRCxwkeVGSHi+kJ4PAAA">
+<XPD:ATTR name="Name" type="string">Comment</XPD:ATTR>
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">gaiFlhWKiUe6Ca6zyb+P9wAA</XPD:REF>
+<XPD:REF name="Views[1]">i2nM8GNG40KTTd1cuy4DtQAA</XPD:REF>
+<XPD:REF name="Views[2]">nu4ZY/6DP0S6WVnGJAA4PAAA</XPD:REF>
+<XPD:REF name="Views[3]">+CwsKO2rIEie2/cKkqFrtQAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">3</XPD:ATTR>
+<XPD:REF name="Associations[0]">otiWB8zxNUWzDwH20HQwxQAA</XPD:REF>
+<XPD:REF name="Associations[1]">zWDSiZ7kIEKvhXHKxmicAwAA</XPD:REF>
+<XPD:REF name="Associations[2]">9l7hGk4Y/kqJrk9GldzJ6QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[5]" type="UMLClass" guid="nDDKC4LElEWTybRg7a79OQAA">
+<XPD:ATTR name="Name" type="string">Role</XPD:ATTR>
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">S4BlySM5kUW/YiK6Pey5zQAA</XPD:REF>
+<XPD:REF name="Views[1]">d7UQQXomaUeNgE4YzwfwjAAA</XPD:REF>
+<XPD:REF name="Views[2]">VNUc47aFgky/2uiWcvDu+wAA</XPD:REF>
+<XPD:REF name="Views[3]">7X2ZbAYJSkq2jDYnXuXq0wAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Associations[0]">j7CvxXw8zUuJA8N8a0/lZwAA</XPD:REF>
+<XPD:REF name="Associations[1]">Y3XN0KcISUujsCKot7FRwQAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="R6W0j/ihTUmtVv3QsErV3wAA">
+<XPD:ATTR name="Name" type="string">userId</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">nDDKC4LElEWTybRg7a79OQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="0OEKBDLZWUKGfeR2HVdi8wAA">
+<XPD:ATTR name="Name" type="string">roleType</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">RoleType</XPD:ATTR>
+<XPD:REF name="Owner">nDDKC4LElEWTybRg7a79OQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[6]" type="UMLAssociation" guid="G9y2XZEWjU+fF6GadfrMNQAA">
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">vlPPTxt05ky9R0jdt64xogAA</XPD:REF>
+<XPD:REF name="Views[1]">WYg7QywiKEKtk0JHTnhPQAAA</XPD:REF>
+<XPD:REF name="Views[2]">xrCsE8KnX0Oh8sZQo4nXUgAA</XPD:REF>
+<XPD:REF name="Views[3]">fHicZJt+ckSbT0efOqS9KgAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="j7CvxXw8zUuJA8N8a0/lZwAA">
+<XPD:ATTR name="Name" type="string">roles</XPD:ATTR>
+<XPD:ATTR name="Multiplicity" type="string">*</XPD:ATTR>
+<XPD:REF name="Association">G9y2XZEWjU+fF6GadfrMNQAA</XPD:REF>
+<XPD:REF name="Participant">nDDKC4LElEWTybRg7a79OQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">zGcniyozykOgAgWYPsbL8AAA</XPD:REF>
+<XPD:REF name="Views[1]">6vZm1k5uTkiVNM7aHsMJswAA</XPD:REF>
+<XPD:REF name="Views[2]">CTPYQGO6lE+AUGXQx1gMjAAA</XPD:REF>
+<XPD:REF name="Views[3]">W6sN09AH1kSIQllKiGn4egAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="EZ8r6H+KEUOwFX+TBkkkkQAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">G9y2XZEWjU+fF6GadfrMNQAA</XPD:REF>
+<XPD:REF name="Participant">HvFFmfu3EU2Q5JpvC4V1dAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">N1AaoL+Z4ECW6JuSkuWnfAAA</XPD:REF>
+<XPD:REF name="Views[1]">TPkwMum6MEK5T0dcpz4jJAAA</XPD:REF>
+<XPD:REF name="Views[2]">2/8qn+mwQEC+A0Z7e54FFAAA</XPD:REF>
+<XPD:REF name="Views[3]">2LswS62HG0m6CPejDe/PEwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[7]" type="UMLAssociation" guid="ucLP51aO/EenmVgZ5kHf+gAA">
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">kCEQ989tnUi8utrj1r+WuwAA</XPD:REF>
+<XPD:REF name="Views[1]">PVDNxCwBS06I5wevxolefgAA</XPD:REF>
+<XPD:REF name="Views[2]">q7l9uyxHbkKezfMiZkEUtwAA</XPD:REF>
+<XPD:REF name="Views[3]">Y2oOGzv6QE20GosmIVezrgAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="otiWB8zxNUWzDwH20HQwxQAA">
+<XPD:ATTR name="Multiplicity" type="string">*</XPD:ATTR>
+<XPD:REF name="Association">ucLP51aO/EenmVgZ5kHf+gAA</XPD:REF>
+<XPD:REF name="Participant">NKuLMRCxwkeVGSHi+kJ4PAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">asLFqkfz1kOieET4xs6NTwAA</XPD:REF>
+<XPD:REF name="Views[1]">NCcc+zjELUir3iJ7uWwrjwAA</XPD:REF>
+<XPD:REF name="Views[2]">CTg2tLYVQ0uVIrDKnq5wMAAA</XPD:REF>
+<XPD:REF name="Views[3]">mVHxvbQtUUa5+NHlAOUrQwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="y1D4yhmlCUuZRScC0SWorwAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">ucLP51aO/EenmVgZ5kHf+gAA</XPD:REF>
+<XPD:REF name="Participant">HvFFmfu3EU2Q5JpvC4V1dAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">C67aHXPFBk+hpaUbSC5qQwAA</XPD:REF>
+<XPD:REF name="Views[1]">9a+PmYwA106lZnqm/AD3xwAA</XPD:REF>
+<XPD:REF name="Views[2]">0ib1VsXba06m432Y4S+q/wAA</XPD:REF>
+<XPD:REF name="Views[3]">YZwZYYU4yk+prP+8GOLHNQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[8]" type="UMLAssociation" guid="gPaQ+DIN6EWZ4BdgEPOxBAAA">
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">/4J9gJdnhE2I6S8pR8e8CwAA</XPD:REF>
+<XPD:REF name="Views[1]">rd3R8mu5OUu9cvZ6Z/4NggAA</XPD:REF>
+<XPD:REF name="Views[2]">GY3pM5HSK0iI2veru1WgUwAA</XPD:REF>
+<XPD:REF name="Views[3]">DsV6M80A20K/A48wJowMVAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="hKHk5PnDTkKXfRG2jmcJJAAA">
+<XPD:REF name="Association">gPaQ+DIN6EWZ4BdgEPOxBAAA</XPD:REF>
+<XPD:REF name="Participant">HvFFmfu3EU2Q5JpvC4V1dAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">4EX0iPgXT0WYxWFInd77KQAA</XPD:REF>
+<XPD:REF name="Views[1]">34tfoxrPFkqQ6azctOeNhgAA</XPD:REF>
+<XPD:REF name="Views[2]">RTUJ+/IcmkmU5J4z/G0vWAAA</XPD:REF>
+<XPD:REF name="Views[3]">Q/HJJURAq0OyhISJkhdf6wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="pIDN0gCe306T092GLUvstgAA">
+<XPD:ATTR name="Multiplicity" type="string">0..1</XPD:ATTR>
+<XPD:REF name="Association">gPaQ+DIN6EWZ4BdgEPOxBAAA</XPD:REF>
+<XPD:REF name="Participant">ijjMqBZ6REK0iCxeAVpgAAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">2Hiiw/pWfUCivqUfdBW8OwAA</XPD:REF>
+<XPD:REF name="Views[1]">+KVkT8ozQkemNWISCynPpQAA</XPD:REF>
+<XPD:REF name="Views[2]">Ma86Ms4jpU6yL/qb2Bb7CQAA</XPD:REF>
+<XPD:REF name="Views[3]">C2iw/esZgEmhWgrr+NZg+QAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[9]" type="UMLAssociation" guid="+Ae9qqvOAEiQr4SuowB4xgAA">
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">l0EW19sL+k++O39a+OyjxQAA</XPD:REF>
+<XPD:REF name="Views[1]">Hzr4oQcJrkuoVCYMb8ik2QAA</XPD:REF>
+<XPD:REF name="Views[2]">Dd5BXxX0k0uHTHP6wlvpSgAA</XPD:REF>
+<XPD:REF name="Views[3]">Tpgj7+i4REuc+JlFB3AxGAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="Y3XN0KcISUujsCKot7FRwQAA">
+<XPD:ATTR name="Name" type="string">candidates</XPD:ATTR>
+<XPD:ATTR name="Multiplicity" type="string">*</XPD:ATTR>
+<XPD:REF name="Association">+Ae9qqvOAEiQr4SuowB4xgAA</XPD:REF>
+<XPD:REF name="Participant">nDDKC4LElEWTybRg7a79OQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">3DFnlxZwKkOSCvZ3x80JIAAA</XPD:REF>
+<XPD:REF name="Views[1]">ZVJgTp3++0aX2CB2R8hCuQAA</XPD:REF>
+<XPD:REF name="Views[2]">AnVW30FHVU+3Ccfw7YrxnAAA</XPD:REF>
+<XPD:REF name="Views[3]">Ooz9JUM66E+ASSUnOnh1KwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="qhpWc/+HW0SLBBtfjX4WFwAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">+Ae9qqvOAEiQr4SuowB4xgAA</XPD:REF>
+<XPD:REF name="Participant">ijjMqBZ6REK0iCxeAVpgAAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Iz0U5YCBrka8yPUrXxKlCgAA</XPD:REF>
+<XPD:REF name="Views[1]">PN0Z99QsQ0aA06SWVhrzdgAA</XPD:REF>
+<XPD:REF name="Views[2]">wAtztCseO0m7PZc49MG+agAA</XPD:REF>
+<XPD:REF name="Views[3]">ft42mcFsHECO0yQKn8iDQQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[10]" type="UMLAssociation" guid="u9wX0QGdzEKXDMUSuMeSlAAA">
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">s97DNIncIUyqxXbneTudIQAA</XPD:REF>
+<XPD:REF name="Views[1]">5nJJhIKfP0aphx/wCbPj8QAA</XPD:REF>
+<XPD:REF name="Views[2]">GF15CGpxb0ihKLCpqEgiPwAA</XPD:REF>
+<XPD:REF name="Views[3]">mQ03MxKHVEGf7/sHqs6UNQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="zekdyR8yEUmNFK08gWI5UgAA">
+<XPD:ATTR name="Multiplicity" type="string">0..1</XPD:ATTR>
+<XPD:REF name="Association">u9wX0QGdzEKXDMUSuMeSlAAA</XPD:REF>
+<XPD:REF name="Participant">uTvluPMq6EiVrEzIldF+CwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">ABsrUukx4UKDMLhPlPcXaAAA</XPD:REF>
+<XPD:REF name="Views[1]">llvYWWfx/E6vLX4zQ9IOHwAA</XPD:REF>
+<XPD:REF name="Views[2]">6oYASua5iUi3jt++CaJaRgAA</XPD:REF>
+<XPD:REF name="Views[3]">fncRPs0eyUay6gLlnfmaoAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="0vFa396IN0SfuCWKBLJF0AAA">
+<XPD:REF name="Association">u9wX0QGdzEKXDMUSuMeSlAAA</XPD:REF>
+<XPD:REF name="Participant">HvFFmfu3EU2Q5JpvC4V1dAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">TFju0xnXzUeFLEfbHAgvxwAA</XPD:REF>
+<XPD:REF name="Views[1]">6pSDVmO3RUiGwA0KZzySZgAA</XPD:REF>
+<XPD:REF name="Views[2]">ZP18gpDXvEaqIO5x2PK4vwAA</XPD:REF>
+<XPD:REF name="Views[3]">LrU5/QaN5kabGVbUYT2uVwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[11]" type="UMLAssociation" guid="VOv3sCvVzEOalgoa+JC9YgAA">
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="YROrTOuSWkmpMzIJdfaf/QAA">
+<XPD:REF name="Association">VOv3sCvVzEOalgoa+JC9YgAA</XPD:REF>
+<XPD:REF name="Participant">ijjMqBZ6REK0iCxeAVpgAAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="zKLAXgKQ/02weDYbKw8WmwAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">VOv3sCvVzEOalgoa+JC9YgAA</XPD:REF>
+<XPD:REF name="Participant">GioGPK3R6Ue8w6V2t8TzvgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[12]" type="UMLAssociation" guid="lT1ML7PzwUGLyiBN6ZM9ewAA">
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">hEfg3zF9T0KZqM6LoHkeywAA</XPD:REF>
+<XPD:REF name="Views[1]">Xp9wRzdQwUiqwJCNI5b4JQAA</XPD:REF>
+<XPD:REF name="Views[2]">dQQcX7/IbUGZGP/exqC6OQAA</XPD:REF>
+<XPD:REF name="Views[3]">wowPjb5qSEiE1UD8gtsPVAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="gXiNnV7a90+F3ShZ01TMFAAA">
+<XPD:REF name="Association">lT1ML7PzwUGLyiBN6ZM9ewAA</XPD:REF>
+<XPD:REF name="Participant">GioGPK3R6Ue8w6V2t8TzvgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">kerBdAuXP0qGhUBsKsaVBgAA</XPD:REF>
+<XPD:REF name="Views[1]">24szT2Qfg0uwuXHurF5FawAA</XPD:REF>
+<XPD:REF name="Views[2]">4pcy4Hj8vUuVJIBH55+G8wAA</XPD:REF>
+<XPD:REF name="Views[3]">n+zAECOm3kuPp0U6fGa9qQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="xnq3//AvmkaNPVRDsIkseAAA">
+<XPD:REF name="Association">lT1ML7PzwUGLyiBN6ZM9ewAA</XPD:REF>
+<XPD:REF name="Participant">ijjMqBZ6REK0iCxeAVpgAAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">fZzGyZZt1US3pySjYdbe3AAA</XPD:REF>
+<XPD:REF name="Views[1]">AmXw2BgBNk+PLXzTBtMTqgAA</XPD:REF>
+<XPD:REF name="Views[2]">UHz2AHAHTk6b0UBy27uYsgAA</XPD:REF>
+<XPD:REF name="Views[3]">oiGUCSbvcE2jf8t3N6P8eAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[13]" type="UMLAssociation" guid="AVjFcKW/SkGrDDjIOVRD+gAA">
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">0Q8MZMRv3keC5G0P3jqvLgAA</XPD:REF>
+<XPD:REF name="Views[1]">d3Kypc5e9USTEK3RieUIQgAA</XPD:REF>
+<XPD:REF name="Views[2]">uD+JnEzcwkSPAPXtxxC+uQAA</XPD:REF>
+<XPD:REF name="Views[3]">rnjCjREV6kK6FI664NzbmQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="s0hHwXTeU02e7YGLMAX0PAAA">
+<XPD:ATTR name="Name" type="string">subTasks</XPD:ATTR>
+<XPD:ATTR name="Multiplicity" type="string">*</XPD:ATTR>
+<XPD:REF name="Association">AVjFcKW/SkGrDDjIOVRD+gAA</XPD:REF>
+<XPD:REF name="Participant">HvFFmfu3EU2Q5JpvC4V1dAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">GDNhCHzLh0WvJJ1jxSWCbAAA</XPD:REF>
+<XPD:REF name="Views[1]">X0imqN7kTUWC5VgPlkJ00gAA</XPD:REF>
+<XPD:REF name="Views[2]">qjcLVMn3yEiW/FQqSOppuwAA</XPD:REF>
+<XPD:REF name="Views[3]">poFTZVOeaUWdQnmYEjp2JgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="wi5BJHl4RkiqqqtC44D95QAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">AVjFcKW/SkGrDDjIOVRD+gAA</XPD:REF>
+<XPD:REF name="Participant">HvFFmfu3EU2Q5JpvC4V1dAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">cfgsL9WLv0C08ZQHcVaKFAAA</XPD:REF>
+<XPD:REF name="Views[1]">5qWWjDhi90uAUXDD5YSGkAAA</XPD:REF>
+<XPD:REF name="Views[2]">L1KmK8JoRUSHUwvrb5aMcQAA</XPD:REF>
+<XPD:REF name="Views[3]">ghdCa3kzQUCEmb8k45FU/AAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[14]" type="UMLAssociation" guid="3DEhC+Nv0kK7uqtxV6JcZwAA">
+<XPD:REF name="Namespace">28q8akawHUut/vt9cqGzHQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">9vrgDuSQRkuGM2KpgQ681wAA</XPD:REF>
+<XPD:REF name="Views[1]">HPgV9SBY2kahngUOTUUnqgAA</XPD:REF>
+<XPD:REF name="Views[2]">4xtJRUX4cUW2j7LzmJ71HgAA</XPD:REF>
+<XPD:REF name="Views[3]">cOI/0aN4FEmtKry1i0zsGgAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="zWDSiZ7kIEKvhXHKxmicAwAA">
+<XPD:ATTR name="Name" type="string">replies</XPD:ATTR>
+<XPD:ATTR name="Multiplicity" type="string">*</XPD:ATTR>
+<XPD:REF name="Association">3DEhC+Nv0kK7uqtxV6JcZwAA</XPD:REF>
+<XPD:REF name="Participant">NKuLMRCxwkeVGSHi+kJ4PAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">MRGwgnyuZkenbLrSBgMGowAA</XPD:REF>
+<XPD:REF name="Views[1]">NDIxC9Q5bUq5Bq5jTTb6DAAA</XPD:REF>
+<XPD:REF name="Views[2]">E7w5n6j9t02OUqefF5g+GQAA</XPD:REF>
+<XPD:REF name="Views[3]">Hccf2ZoTsUGJM1WkqVxZHAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="9l7hGk4Y/kqJrk9GldzJ6QAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">3DEhC+Nv0kK7uqtxV6JcZwAA</XPD:REF>
+<XPD:REF name="Participant">NKuLMRCxwkeVGSHi+kJ4PAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">mJSLnpapqEe+JCw/l9ZrWgAA</XPD:REF>
+<XPD:REF name="Views[1]">mbaATlJxY064398AzNkbrAAA</XPD:REF>
+<XPD:REF name="Views[2]">vQr9dU7oMkScUooE1diouQAA</XPD:REF>
+<XPD:REF name="Views[3]">v+lh/JYNEk2ckddRKkYMqgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:BODY>
+</XPD:PROJECT>

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Assigner.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Assigner.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Assigner.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,33 @@
+/*
+ * 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;
+
+import java.io.Serializable;
+
+/** interface to delegate {@link Task} or {@link Swimlane} assignment.
+ * @author Tom Baeyens
+ */
+public interface Assigner extends Serializable {
+
+  /** sets the actorId and candidates for the given task. */
+  void assign(Task task) throws Exception;
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Role.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Role.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Role.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,44 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.task;
+
+/** a role that a person fullfills for a task.
+ * 
+ * @author Tom Baeyens
+ */
+public interface Role {
+
+  long getDbid();
+
+  String getIdentityId();
+  void setIdentityId(String identityId);
+
+  RoleType getRoleType();
+  void setRoleType(RoleType roleType);
+
+  String getDescription();
+  void setDescription(String description);
+
+  Task getTask();
+
+  Swimlane getSwimlane();
+}
\ No newline at end of file


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/RoleType.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/RoleType.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/RoleType.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,30 @@
+package org.jbpm.task;
+
+/** roleType of a person that is related to a task determines the 
+ * privileges that are granted on the task.  */ 
+public enum RoleType {
+
+  /** can do anything with the task */
+  OWNER, 
+  
+  /** alternative owner, but as long as this person is not the owner. 
+   * This person is allowed to make comments, but nothing else. */
+  CANDIDATE, 
+  
+  /** person that will be using the result of this task.  This person is 
+   * allowed to make comments, but nothing else. */
+  CLIENT, 
+  
+  /** person that is allowed to watch-but-not-touch this task */
+  VIEWER,
+  
+  /** a person that was assigned to a task, but got replaced because of 
+   * absence or another reason. This way, a trace can be left in case 
+   * This person returns and wants to take back his tasks that got 
+   * reassigned. */
+  REPLACED_ASSIGNEE;
+
+  public String toString() {
+    return super.toString().toLowerCase().replace('_', '-');
+  }
+}
\ No newline at end of file


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Swimlane.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Swimlane.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Swimlane.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,46 @@
+/*
+ * 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;
+
+import java.io.Serializable;
+import java.util.Collection;
+
+/** a runtime process role that can store an assignment so that 
+ * multiple related tasks are assigned to the same actor.
+ *  
+ * @author Tom Baeyens
+ */
+public interface Swimlane extends Serializable {
+
+  long getDbid();
+
+  String getName();
+
+  String getAssignee();
+  void setAssignee(String assignee);
+
+  Collection<Role> getCandidates();
+  Role createCandidate(String identityId);
+  void removeCandidate(Role candidate);
+
+  SwimlaneDefinition getSwimlaneDefinition();
+}
\ No newline at end of file


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/SwimlaneDefinition.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/SwimlaneDefinition.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/SwimlaneDefinition.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,39 @@
+/*
+ * 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;
+
+import java.io.Serializable;
+
+/** design-time declaration of a swimlane.
+ * 
+ * @author Tom Baeyens
+ */
+public interface SwimlaneDefinition extends Serializable {
+
+  long getDbid();
+  
+  String getName();
+  
+  String getActorIdExpression();
+  String getCandidatesExpression();
+  String getAssignmentExpression();
+}
\ No newline at end of file


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Task.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Task.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/Task.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,78 @@
+/*
+ * 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;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.jbpm.pvm.Execution;
+import org.jbpm.pvm.model.Comment;
+
+/** runtime task.
+ * @author Tom Baeyens
+ */
+public interface Task extends Serializable {
+  
+  long getDbid();
+
+  String getName();
+  void setName(String name);
+
+  String getDescription();
+  void setDescription(String description);
+
+  void submit();
+  void submit(Map<String, Object> variables);
+
+  boolean isBlocking();
+  void setBlocking(boolean isBlocking);
+
+  boolean isSignalling();
+  void setSignalling(boolean isSignalling);
+
+  int getPriority();
+  void setPriority(int priority);
+
+  Date getCreate();
+  void setCreate(Date create);
+
+  Date getDueDate();
+  void setDueDate(Date dueDate);
+
+  List<Comment> getComments();
+  Comment createComment(String message);
+  void removeComment(Comment comment);
+
+  Set<Task> getSubTasks();
+  Task createSubTask(String name);
+  Task createSubTask(TaskDefinition subtaskDefinition);
+  void removeSubTask(Task subtask);
+
+  Execution getExecution();
+
+  Swimlane getSwimlane();
+
+  TaskDefinition getTaskDefinition();
+}
\ No newline at end of file


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/TaskDefinition.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/TaskDefinition.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/TaskDefinition.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,66 @@
+/*
+ * 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;
+
+import java.util.List;
+
+import org.jbpm.pvm.internal.wire.Descriptor;
+import org.jbpm.task.impl.SwimlaneDefinitionImpl;
+import org.jbpm.task.impl.TaskDefinitionImpl;
+
+/** design-time declaration of a task.
+ * 
+ * @author Tom Baeyens
+ */
+public interface TaskDefinition { //FIXME: extends ProcessElement {
+
+  String getName();
+
+  String getForm();
+
+  String getAssigneeExpression();
+
+  Descriptor getAssignerDescriptor();
+
+  String getCandidatesExpression();
+
+  String getDueDateDuration();
+
+  /** indicates whether the process must be blocked as long as this task is 
+   * not completed.  blocking should be turned off by default (isBlocking=false).
+   * but if a user (through the process language) sets isBlocking to true, then
+   * the process cannot be signalled until all blocking tasks are completed first. */
+  boolean isBlocking();
+
+  /** indicates if completion of this task causes a signal on the related execution.
+   * This is to support n-out-of-m.  Whenever an execution leaves a task node, all the 
+   * tasks that are not completed, related to that execution should loose their 
+   * signalling power. */
+  boolean isSignalling();
+
+  int getPriority();
+
+  List<TaskDefinitionImpl> getSubTaskDefinitions();
+
+  SwimlaneDefinitionImpl getSwimlaneDefinition();
+
+}
\ No newline at end of file


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/TaskException.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/TaskException.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/TaskException.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,40 @@
+/*
+ * 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;
+
+public class TaskException extends RuntimeException {
+
+  private static final long serialVersionUID = 1L;
+
+  public TaskException() {
+    super();
+  }
+  public TaskException(String msg, Throwable cause) {
+    super(msg, cause);
+  }
+  public TaskException(String msg) {
+    super(msg);
+  }
+  public TaskException(Throwable cause) {
+    super(cause);
+  }
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/TaskService.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/TaskService.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/TaskService.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,44 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.task;
+
+import java.util.List;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public interface TaskService {
+  
+  Task createTask();
+  Task createTask(long taskDefinitionDbid);
+  Task createTask(long taskDefinitionDbid, long executionDbid);
+
+  Task getTask(long taskDbid);
+  void updateTask(Task task);
+  void deleteTask(long taskDbid);
+  
+  List<Task> getPersonalTaskListPage(int firstResult, int maxResults);
+  List<Task> getPersonalTaskListPage(String userId, int firstResult, int maxResults);
+  List<Task> getGroupTaskListPage(List<String> identityIds, int firstResult, int maxResults);
+
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/CreateTask.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/CreateTask.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/CreateTask.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,80 @@
+/*
+ * 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.cmd;
+
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.pvm.session.DbSession;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.task.Task;
+import org.jbpm.task.impl.TaskDefinitionImpl;
+import org.jbpm.task.impl.TaskImpl;
+
+/**
+ * @author Tom Baeyens
+ */
+public class CreateTask implements Command
+{
+
+  private static final long serialVersionUID = 1L;
+  
+  protected Long taskDefinitionDbid;
+  protected Long executionDbid;
+  
+  public CreateTask() {
+  }
+
+  public CreateTask(long taskDefinitionDbid) {
+    this.taskDefinitionDbid = taskDefinitionDbid;
+  }
+
+  public CreateTask(long taskDefinitionDbid, long executionDbid) {
+    this.taskDefinitionDbid = taskDefinitionDbid;
+    this.executionDbid = executionDbid;
+  }
+
+  public Object execute(Environment environment) throws Exception {
+    TaskDefinitionImpl taskDefinition = null;
+    ExecutionImpl execution = null;
+
+    if (taskDefinitionDbid!=null) {
+      DbSession dbSession = environment.get(DbSession.class);
+      taskDefinition = dbSession.get(TaskDefinitionImpl.class, taskDefinitionDbid);
+    }
+
+    if (executionDbid!=null) {
+      DbSession dbSession = environment.get(DbSession.class);
+      execution = dbSession.get(ExecutionImpl.class, executionDbid);
+    }
+    
+    Task task = null;
+    if (taskDefinition==null) {
+      task = TaskImpl.create();
+    } else if (execution==null) {
+      task = TaskImpl.create(taskDefinition);
+    } else {
+      task = TaskImpl.create(taskDefinition, execution);
+    }
+    
+    return task;
+  }
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/DeleteTask.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/DeleteTask.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/DeleteTask.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,50 @@
+/*
+ * 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.cmd;
+
+import org.jbpm.task.impl.TaskImpl;
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.pvm.session.DbSession;
+
+/**
+ * @author Tom Baeyens
+ */
+public class DeleteTask implements Command
+{
+
+  private static final long serialVersionUID = 1L;
+
+  protected long taskDbid;
+  
+  public DeleteTask(long taskDbid) {
+    this.taskDbid = taskDbid;
+  }
+
+  public Object execute(Environment environment) throws Exception {
+    DbSession dbSession = environment.get(DbSession.class);
+    TaskImpl task = dbSession.get(TaskImpl.class, taskDbid);
+    dbSession.delete(task);
+    return null;
+  }
+
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/GetTask.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/GetTask.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/GetTask.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,47 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.task.cmd;
+
+import org.jbpm.task.impl.TaskImpl;
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.pvm.session.DbSession;
+
+/**
+ * @author Tom Baeyens
+ */
+public class GetTask implements Command
+{
+
+  private static final long serialVersionUID = 1L;
+  
+  protected long taskDbid;
+  
+  public GetTask(long taskDbid) {
+    this.taskDbid = taskDbid;
+  }
+
+  public Object execute(Environment environment) throws Exception {
+    DbSession dbSession = environment.get(DbSession.class);
+    return dbSession.get(TaskImpl.class, taskDbid);
+  }
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/UpdateTask.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/UpdateTask.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/cmd/UpdateTask.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,50 @@
+/*
+ * 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.cmd;
+
+import org.jbpm.task.Task;
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.session.DbSession;
+import org.jbpm.pvm.env.Environment;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class UpdateTask implements Command
+{
+
+  private static final long serialVersionUID = 1L;
+  
+  protected Task task;
+
+  public UpdateTask(Task task) {
+    this.task = task;
+  }
+
+  public Object execute(Environment environment) throws Exception {
+    DbSession dbSession = environment.get(DbSession.class);
+    dbSession.save(task);
+    return null;
+  }
+
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/db/TaskDbSession.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/db/TaskDbSession.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/db/TaskDbSession.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,35 @@
+/*
+ * 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.db;
+
+import org.jbpm.pvm.session.DbSession;
+import org.jbpm.pvm.internal.hibernate.HibernateDbSession;
+
+/** persistence interface for tasks.
+ * 
+ * @author Tom Baeyens
+ */
+public class TaskDbSession extends HibernateDbSession implements DbSession
+{
+
+  // TODO
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/LifeCycle.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/LifeCycle.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/LifeCycle.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,94 @@
+/*
+ * 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.impl;
+
+import org.jbpm.pvm.Execution;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.pvm.internal.model.NodeImpl;
+import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
+import org.jbpm.pvm.internal.xml.Parse;
+import org.jbpm.pvm.model.Node;
+import org.jbpm.task.TaskException;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Tom Baeyens
+ */
+public class LifeCycle {
+  
+  private static LifeCycleParser lifeCycleParser = new LifeCycleParser();
+  private static Map<String, ProcessDefinitionImpl> lifeCycleProcesses = new HashMap<String, ProcessDefinitionImpl>();
+
+  public static String initialise(TaskImpl task) {
+
+    throw new RuntimeException("FIXME: LifeCycle#initialise()");
+
+    /*ProcessDefinitionImpl lifeCycle = getLifeCycle(task);
+    Map<String, Object> lifeCycleVariables = new HashMap<String, Object>();
+    lifeCycleVariables.put("task", task);
+    Execution lifeCycleExecution = lifeCycle.startExecution(lifeCycleVariables);
+    return lifeCycleExecution.getNode().getName();*/
+  }
+
+  public static ProcessDefinitionImpl getLifeCycle(TaskImpl task) {
+
+     throw new RuntimeException("FIXME: LifeCycle#getLifeCycle()");
+
+   /* if (task==null) {
+      throw new TaskException("task is null");
+    }
+    String resource = task.getLifeCycleResource();
+    if (resource==null) {
+      throw new TaskException("task "+task.getClass().getName()+" did'nt return a lifecycle");
+    }
+    ProcessDefinitionImpl lifeCycleProcess = null;
+    synchronized (lifeCycleProcesses) { 
+      lifeCycleProcess = lifeCycleProcesses.get(resource);
+      if (lifeCycleProcess==null) {
+        Parse parse = new Parse();
+        lifeCycleProcess = (ProcessDefinitionImpl) lifeCycleParser.parseResource(resource, null, parse);
+        if (parse.hasProblems()) {
+          throw new TaskException("process lifecycle "+resource+" parsing problems: "+parse.getProblems().toString() );
+        }
+        lifeCycleProcesses.put(resource, lifeCycleProcess);
+      }
+    }
+    return lifeCycleProcess;*/
+  }
+
+  protected void fireLifeCycleEvent(String eventName, TaskImpl task) {
+    throw new RuntimeException("FIXME: LifeCycle#fireLifeCycleEvent()");
+     /*
+    ExecutionImpl lifeCycleExecution = new ExecutionImpl();
+    ProcessDefinitionImpl lifeCycleProcess = getLifeCycle(task);
+    lifeCycleExecution.setProcess(lifeCycleProcess);
+    String state = task.getState();
+    Node node = lifeCycleProcess.getNode(state);
+    lifeCycleExecution.setNode((NodeImpl) node);
+    lifeCycleExecution.signal(eventName);
+    task.state = lifeCycleExecution.getNode().getName();
+    */
+  }
+
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/LifeCycleParser.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/LifeCycleParser.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/LifeCycleParser.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,110 @@
+/*
+ * 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.impl;
+
+import java.util.List;
+
+import org.jbpm.pvm.internal.xml.Parser;
+import org.jbpm.pvm.internal.xml.Parse;
+import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
+import org.jbpm.pvm.internal.model.NodeImpl;
+import org.jbpm.pvm.internal.util.XmlUtil;
+import org.w3c.dom.Element;
+
+/**
+ * @author Tom Baeyens
+ */
+public class LifeCycleParser extends Parser
+{
+
+  public Object parseDocumentElement(Element element, Parse parse) {
+    ProcessDefinitionImpl lifeCycleProcess = new ProcessDefinitionImpl();
+    
+    List<Element> stateElements = XmlUtil.elements(element, "state");
+    if (stateElements!=null) {
+      for (Element stateElement: stateElements) {
+        parseState(stateElement, lifeCycleProcess, parse);
+      }
+      for (Element stateElement: stateElements) {
+        parseTransitions(stateElement, lifeCycleProcess, parse);
+      }
+    }
+    
+    String initialStateName = null;
+    if (element.hasAttribute("initial")) {
+      initialStateName = element.getAttribute("initial");
+      NodeImpl initial = (NodeImpl) lifeCycleProcess.getNode(initialStateName);
+      if (initial!=null) {
+        lifeCycleProcess.setInitial(initial);
+      } else {
+        parse.addProblem("initial "+initialStateName+" doesn't exist");
+      }
+    }
+    
+    return lifeCycleProcess;
+  }
+
+  public void parseTransitions(Element element, ProcessDefinitionImpl lifeCycleProcess, Parse parse) {
+    if (! element.hasAttribute("name")) {
+      parse.addProblem("state doesn't have a name: "+XmlUtil.toString(element));
+      return;
+    }
+    String stateName = element.getAttribute("name");
+    NodeImpl state = (NodeImpl) lifeCycleProcess.getNode(stateName);
+    
+    List<Element> transitionElements = XmlUtil.elements(element, "transition");
+    if (transitionElements!=null) {
+      for (Element transitionElement: transitionElements) {
+        parseTransition(transitionElement, state, parse);
+      }
+    }
+  }
+
+  public void parseTransition(Element element, NodeImpl state, Parse parse) {
+    if (! element.hasAttribute("name")) {
+      parse.addProblem("transition doesn't have a name: "+XmlUtil.toString(element));
+      return;
+    }
+    String transitionName = element.getAttribute("name");
+    if (! element.hasAttribute("to")) {
+      parse.addProblem("transition "+transitionName+" doesn't have a to attribute indicating the destination state: "+XmlUtil.toString(element));
+      return;
+    }
+    String destinationName = element.getAttribute("to");
+    NodeImpl destination = (NodeImpl) state.getProcessDefinition().getNode(destinationName);
+    if (destination!=null) {
+      state.createOutgoingTransition(destination, transitionName);
+    } else {
+      parse.addProblem("destination "+destinationName+" of "+transitionName+" is unknown");
+    }
+  }
+
+  public void parseState(Element element, ProcessDefinitionImpl lifeCycleProcess, Parse parse) {
+    if (! element.hasAttribute("name")) {
+      parse.addProblem("state doesn't have an id: "+XmlUtil.toString(element));
+      return;
+    }
+    String stateName = element.getAttribute("name");
+    NodeImpl state = lifeCycleProcess.createNode(stateName);
+    state.setBehaviour(new LifeCycleState());
+  }
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/LifeCycleState.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/LifeCycleState.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/LifeCycleState.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,49 @@
+/*
+ * 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.impl;
+
+import java.util.Map;
+
+import org.jbpm.pvm.activity.ExternalActivity;
+import org.jbpm.pvm.activity.ActivityExecution;
+
+/**
+ * @author Tom Baeyens
+ */
+public class LifeCycleState implements ExternalActivity
+{
+
+  private static final long serialVersionUID = 1L;
+
+
+  public void execute(ActivityExecution execution) throws Exception {
+    execution.waitForSignal();
+  }
+  
+  public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) throws Exception {
+    execution.take(signalName);
+  }
+
+  /*public Set<SignalDefinition> getSignals(Execution execution) throws Exception {
+    return null;
+  } */
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/RoleImpl.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/RoleImpl.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/RoleImpl.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,82 @@
+/*
+ * 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.impl;
+
+import java.io.Serializable;
+
+import org.jbpm.task.Role;
+import org.jbpm.task.RoleType;
+
+
+/** the relation between a task and a person.
+ * @author Tom Baeyens
+ */
+public class RoleImpl implements Serializable, Role {
+
+  private static final long serialVersionUID = 1L;
+  
+  protected long dbid;
+  protected int dbversion;
+  protected String identityId;
+  protected RoleType roleType;
+  protected String description;
+  protected TaskImpl task;
+  protected SwimlaneImpl swimlane;
+  
+  public String toString() {
+    return roleType.toString()+"("+identityId+")";
+  }
+  
+  public TaskImpl getTask() {
+    return task;
+  }
+  public void setTask(TaskImpl task) {
+    this.task = task;
+  }
+  public String getDescription() {
+    return description;
+  }
+  public void setDescription(String description) {
+    this.description = description;
+  }
+  public long getDbid() {
+    return dbid;
+  }
+  public SwimlaneImpl getSwimlane() {
+    return swimlane;
+  }
+  public void setSwimlane(SwimlaneImpl swimlane) {
+    this.swimlane = swimlane;
+  }
+  public RoleType getRoleType() {
+    return roleType;
+  }
+  public void setRoleType(RoleType roleType) {
+    this.roleType = roleType;
+  }
+  public String getIdentityId() {
+    return identityId;
+  }
+  public void setIdentityId(String identityId) {
+    this.identityId = identityId;
+  }
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/SwimlaneDefinitionImpl.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/SwimlaneDefinitionImpl.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/SwimlaneDefinitionImpl.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,99 @@
+/*
+ * 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.impl;
+
+import java.io.Serializable;
+
+import org.jbpm.task.SwimlaneDefinition;
+import org.jbpm.pvm.internal.util.EqualsUtil;
+
+/**
+ * is a process role (aka participant).
+ */
+public class SwimlaneDefinitionImpl implements Serializable, SwimlaneDefinition {
+
+  private static final long serialVersionUID = 1L;
+
+  protected long dbid;
+  protected int dbversion;
+  protected String name = null;
+
+  /**
+   * expression that resolves to 1 single actorId.
+   */
+  protected String actorIdExpression = null;
+
+  /**
+   * 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
+  public boolean equals(Object o) {
+    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 void setName(String name) {
+    this.name = name;
+  }
+  public String getName() {
+    return name;
+  }
+  public String getActorIdExpression() {
+    return actorIdExpression;
+  }
+  public String getCandidatesExpression() {
+    return candidatesExpression;
+  }
+  public String getAssignmentExpression() {
+    return assignmentExpression;
+  }
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/SwimlaneImpl.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/SwimlaneImpl.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/SwimlaneImpl.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,120 @@
+/*
+ * 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.impl;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jbpm.task.Role;
+import org.jbpm.task.RoleType;
+import org.jbpm.task.Swimlane;
+import org.jbpm.task.SwimlaneDefinition;
+import org.jbpm.task.TaskException;
+import org.jbpm.pvm.internal.util.EqualsUtil;
+
+/**
+ * runtime process role for a specific process instance.
+ */
+public class SwimlaneImpl implements Serializable, Swimlane {
+
+  private static final long serialVersionUID = 1L;
+
+  protected long dbid;
+  protected int dbversion;
+  protected String name = null;
+  protected String assignee = null;
+  protected Set<RoleImpl> candidates = null;
+  protected SwimlaneDefinition swimlaneDefinition = null;
+  
+  // assignment methods ///////////////////////////////////////////////////////
+
+  public String getAssignee() {
+    return assignee;
+  }
+
+  public void setAssignee(String assignee) {
+    this.assignee = assignee;
+  }
+
+  // candidates ///////////////////////////////////////////////////////////////
+
+  public Collection<Role> getCandidates() {
+    if (candidates==null) {
+      return Collections.EMPTY_LIST;
+    }
+    return (Collection)candidates;
+  }
+  
+  public Role createCandidate(String identityId) {
+    if (identityId==null) {
+      throw new TaskException("identityId is null");
+    }
+    RoleImpl role = new RoleImpl();
+    role.setIdentityId(identityId);
+    role.setRoleType(RoleType.CANDIDATE);
+    role.setSwimlane(this);
+    if (candidates==null) {
+      candidates = new HashSet<RoleImpl>();
+    }
+    candidates.add(role);
+    return role;
+  }
+  
+  public void removeCandidate(Role candidate) {
+    if (candidate==null) {
+      throw new TaskException("candidate is null");
+    }
+    if ( (candidates!=null)
+         && (candidates.remove(candidate))
+       ) {
+      ((RoleImpl)candidate).setTask(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
+  public boolean equals(Object o) {
+    return EqualsUtil.equals(this, o);
+  }
+  
+  // getters and setters //////////////////////////////////////////////////////
+
+  public long getDbid() {
+    return dbid;
+  }
+  public String getName() {
+    return name;
+  }
+  public SwimlaneDefinition getSwimlaneDefinition() {
+    return swimlaneDefinition;
+  }
+  public void setSwimlaneDefinition(SwimlaneDefinition swimlaneDefinition) {
+    this.swimlaneDefinition = swimlaneDefinition;
+  }
+  public void setName(String name) {
+    this.name = name;
+  }
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskDefinitionImpl.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskDefinitionImpl.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskDefinitionImpl.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,129 @@
+/*
+ * 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.impl;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.jbpm.pvm.internal.model.ProcessElementImpl;
+import org.jbpm.pvm.internal.wire.Descriptor;
+import org.jbpm.pvm.internal.util.Priority;
+import org.jbpm.task.TaskDefinition;
+
+/**
+ * defines a task and how the actor(s) must be calculated at runtime.
+ */
+public class TaskDefinitionImpl extends ProcessElementImpl implements Serializable, TaskDefinition {
+  
+  private static final long serialVersionUID = 1L;
+
+  protected String name;
+  protected String description;
+
+  /** @see #isBlocking() */
+  protected boolean isBlocking;
+  
+  /** @see #isSignalling() */
+  protected boolean isSignalling = true;
+
+  protected String dueDateDuration;
+  protected List<TaskDefinitionImpl> subTaskDefinitions;
+  protected int priority = Priority.NORMAL;
+  protected SwimlaneDefinitionImpl swimlaneDefinition;
+  protected String assigneeExpression;
+  protected String candidatesExpression;
+  protected Descriptor assignerDescriptor;
+  
+
+  public String getForm() {
+    return (String) (properties!=null ? properties.get("form") : null);
+  }
+
+  // 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 getCandidatesExpression() {
+    return candidatesExpression;
+  }
+  public void setCandidatesExpression(String candidatesExpression) {
+    this.candidatesExpression = candidatesExpression;
+  }
+  public boolean isBlocking() {
+    return isBlocking;
+  }
+  public void setBlocking(boolean isBlocking) {
+    this.isBlocking = isBlocking;
+  }
+  public boolean isSignalling() {
+    return isSignalling;
+  }
+  public void setSignalling(boolean isSignalling) {
+    this.isSignalling = isSignalling;
+  }
+  public int getPriority() {
+    return priority;
+  }
+  public void setPriority(int priority) {
+    this.priority = priority;
+  }
+  public List<TaskDefinitionImpl> getSubTaskDefinitions() {
+    return subTaskDefinitions;
+  }
+  public void setSubTaskDefinitions(List<TaskDefinitionImpl> subTaskDefinitions) {
+    this.subTaskDefinitions = subTaskDefinitions;
+  }
+  public SwimlaneDefinitionImpl getSwimlaneDefinition() {
+    return swimlaneDefinition;
+  }
+  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;
+  }
+  public void setDueDateDuration(String dueDateDuration) {
+    this.dueDateDuration = dueDateDuration;
+  }
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskExecution.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskExecution.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskExecution.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,36 @@
+/*
+ * 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.impl;
+
+import java.util.Map;
+
+import org.jbpm.task.Swimlane;
+import org.jbpm.task.Task;
+
+/**
+ * @author Tom Baeyens
+ */
+public interface TaskExecution {
+
+  Map<String, ? extends Task> getTasks();
+  Map<String, ? extends Swimlane> getSwimlanes();
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskImpl.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskImpl.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskImpl.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,393 @@
+/*
+ * 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.impl;
+
+import org.jbpm.pvm.Execution;
+import org.jbpm.pvm.model.Comment;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.pvm.internal.model.CommentImpl;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.pvm.internal.util.Clock;
+import org.jbpm.pvm.internal.util.Priority;
+import org.jbpm.pvm.internal.util.ReflectUtil;
+import org.jbpm.pvm.internal.util.EqualsUtil;
+import org.jbpm.pvm.internal.cal.Duration;
+import org.jbpm.task.*;
+
+import java.io.Serializable;
+import java.util.*;
+
+/**
+ * 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 implements Serializable, Task {
+
+  private static final long serialVersionUID = 1L;
+  // private static final Logger log = Logger.getLogger(TaskImpl.class.getName());
+  
+  // could be made configurable:
+  public static final String CONTEXTKEY_TASK_CLASS_NAME = "taskClassName";
+  public static final String[] SEARCHORDER_TASK_CLASS_NAME = new String[]{
+    "FIXME: DefaultEnvironment.CONTEXTNAME_APPLICATION" //DefaultEnvironment.CONTEXTNAME_APPLICATION
+  };
+
+  protected long dbid;
+  protected int dbversion;
+  protected String name;
+  protected String description;
+
+  protected String assignee;
+  protected Set<RoleImpl> roles;
+
+  protected Date create;
+  protected Date dueDate;
+  protected Integer progress;
+
+  //FIXME: protected VariableMap variableMap;
+  protected List<CommentImpl> comments;
+
+  protected int priority = Priority.NORMAL;
+
+  protected String state;
+
+  protected Execution execution;
+  protected boolean isSignalling = true;
+  protected boolean isBlocking;
+
+  protected TaskDefinitionImpl taskDefinition;
+  protected SwimlaneImpl swimlane;
+  
+  protected TaskImpl superTask;
+  protected Set<TaskImpl> subTasks;
+  
+  protected TaskImpl() {
+  }
+  
+  // creating a task
+  
+  public static TaskImpl create() {
+    return create(null, null);
+  }
+  
+  public static TaskImpl create(TaskDefinitionImpl taskDefinition) {
+    return create(taskDefinition, null);
+  }
+  
+  public static TaskImpl create(TaskDefinitionImpl taskDefinition, ExecutionImpl execution) {
+    TaskImpl task = null;
+    // 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);
+  
+    // otherwise just use the default task implementation type 
+    } else {
+      task = new TaskImpl();
+    }
+
+    task.create = Clock.getCurrentTime();
+
+    task.setTaskDefinition(taskDefinition);
+    task.setExecution(execution);
+    
+    // initialise the task state
+    task.state = LifeCycle.initialise(task); 
+
+    return task;
+  }
+
+  public void setTaskDefinition(TaskDefinitionImpl taskDefinition) {
+    this.taskDefinition = taskDefinition;
+    if (taskDefinition!=null) {
+      this.name = taskDefinition.getName();
+      this.description = taskDefinition.getDescription();
+      this.isBlocking = taskDefinition.isBlocking();
+      this.isSignalling = taskDefinition.isSignalling();
+      this.priority = taskDefinition.getPriority();
+      
+      String durationText = taskDefinition.getDueDateDuration();
+      if (durationText!=null) {
+        this.dueDate = calculateDueDate(new Duration(durationText));
+      }
+    }
+  }
+  
+  protected static Date calculateDueDate(Duration dueDate) {
+    // TODO
+    return null;
+  }
+
+  // assigning a task /////////////////////////////////////////////////////////
+  
+  public String getAssignee() {
+    return assignee;
+  }
+
+  public void setAssignee(String assignee) {
+    this.assignee = assignee;
+    // TODO fire the assignment event
+  }
+
+  // roles ////////////////////////////////////////////////////////////////////
+  
+  public Set<RoleImpl> getRoles() {
+    if (roles==null) {
+      return Collections.EMPTY_SET;
+    }
+    return roles;
+  }
+  
+  public Set<RoleImpl> getAllRoles() {
+    Set<RoleImpl> allRoles = null;
+    if (roles!=null) {
+      allRoles = new HashSet<RoleImpl>(roles);
+    } else {
+      allRoles = new HashSet<RoleImpl>();
+    }
+    if (swimlane!=null) {
+      allRoles.addAll((Set)swimlane.getCandidates());
+    }
+    return allRoles;
+  }
+  
+  public Role addRole(String identityId, RoleType roleType) {
+    if (identityId==null) {
+      throw new TaskException("userId is null");
+    }
+    if (roleType==null) {
+      throw new TaskException("roleType is null");
+    }
+    RoleImpl role = new RoleImpl();
+    role.setIdentityId(identityId);
+    role.setTask(this);
+    role.setRoleType(roleType);
+    if (roles==null) {
+      roles = new HashSet<RoleImpl>();
+    }
+    roles.add(role);
+    return role;
+  }
+  
+  public void removeRole(Role role) {
+    if (role==null) {
+      throw new TaskException("role is null");
+    }
+    if ( (roles!=null)
+         && (roles.remove(role))
+       ) {
+      ((RoleImpl)role).setTask(null);
+    }
+  }
+  
+  // completion ///////////////////////////////////////////////////////////////
+
+  public void submit() {
+    submit(null);
+  }
+
+  public void submit(Map<String, Object> variables) {
+  }
+
+  // comments /////////////////////////////////////////////////////////////////
+
+  public List<Comment> getComments() {
+    if (comments==null) {
+      return Collections.EMPTY_LIST;
+    }
+    return (List) comments;
+  }
+
+  public Comment createComment(String commentText) {
+    if (comments==null) {
+      comments = new ArrayList<CommentImpl>();
+    }
+    CommentImpl comment = new CommentImpl(commentText);
+    comments.add(comment);
+    return comment;
+  }
+
+  public void removeComment(Comment comment) {
+    if (comment==null) {
+      throw new TaskException("comment is null");
+    }
+    if (comments!=null) {
+      comments.remove(comment);
+    }
+  }
+  
+  // subtasks /////////////////////////////////////////////////////////////////
+  
+  public Set<Task> getSubTasks() {
+    if (subTasks==null) {
+      return Collections.EMPTY_SET;
+    }
+    return (Set) subTasks;
+  }
+
+  public Task createSubTask(String name) {
+    if (subTasks==null) {
+      subTasks = new HashSet<TaskImpl>();
+    }
+    TaskImpl subtask = new TaskImpl();
+    subtask.setName(name);
+    addSubTask(subtask);
+    return subtask;
+  }
+  
+  public Task createSubTask(TaskDefinition subtaskDefinition) {
+    if (subtaskDefinition==null) {
+      throw new TaskException("subtaskDefinition is null");
+    }
+    if (subTasks==null) {
+      subTasks = new HashSet<TaskImpl>();
+    }
+    TaskImpl subtask = create(taskDefinition);
+    addSubTask(subtask);
+    return subtask;
+  }
+  
+  public Task addSubTask(TaskImpl subtask) {
+    if (subTasks==null) {
+      subTasks = new HashSet<TaskImpl>();
+    }
+    subtask.setSuperTask(this);
+    subTasks.add(subtask);
+    return subtask;
+  }
+
+  public void removeSubTask(Task subtask) {
+    if (subtask==null) {
+      throw new TaskException("subtask is null");
+    }
+    if ( (subTasks!=null)
+         && (subTasks.remove(subtask))
+       ) {
+      ((TaskImpl)subtask).setSuperTask(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
+  public boolean equals(Object o) {
+    return EqualsUtil.equals(this, o);
+  }
+
+  public String getLifeCycleResource() {
+    // the default lifecycle can be overridden in subclasses
+    return "org/jbpm/task/impl/default.lifecycle.xml";
+  }
+  
+  // modified getters and setters /////////////////////////////////////////////
+  public void setProgress(Integer progress) {
+    if ( (progress<0)
+         || (progress>100)
+       ) {
+      throw new TaskException("task progress is a percentage (integer) and must be expressed between 0 and 100");
+    }
+    this.progress = progress;
+  }
+  
+  // getters and setters //////////////////////////////////////////////////////
+  
+  public String getDescription() {
+    return description;
+  }
+  public void setDescription(String description) {
+    this.description = description;
+  }
+  public String getName() {
+    return name;
+  }
+  public void setName(String name) {
+    this.name = name;
+  }
+  public boolean isBlocking() {
+    return isBlocking;
+  }
+  public void setBlocking(boolean isBlocking) {
+    this.isBlocking = isBlocking;
+  }
+  public boolean isSignalling() {
+    return isSignalling;
+  }
+  public void setSignalling(boolean isSignalling) {
+    this.isSignalling = isSignalling;
+  }
+  public int getPriority() {
+    return priority;
+  }
+  public void setPriority(int priority) {
+    this.priority = priority;
+  }
+  public void setComments(List<CommentImpl> comments) {
+    this.comments = comments;
+  }
+  public Date getCreate() {
+    return create;
+  }
+  public void setCreate(Date create) {
+    this.create = create;
+  }
+  public Date getDueDate() {
+    return dueDate;
+  }
+  public void setDueDate(Date dueDate) {
+    this.dueDate = dueDate;
+  }
+  public Execution getExecution() {
+    return execution;
+  }
+  public void setExecution(Execution execution) {
+    this.execution = execution;
+  }
+  public String getState() {
+    return state;
+  }
+  public Swimlane getSwimlane() {
+    return swimlane;
+  }
+  public void setSwimlane(SwimlaneImpl swimlane) {
+    this.swimlane = swimlane;
+  }
+  public long getDbid() {
+    return dbid;
+  }
+  public TaskDefinition getTaskDefinition() {
+    return taskDefinition;
+  }
+  public TaskImpl getSuperTask() {
+    return superTask;
+  }
+  public void setSuperTask(TaskImpl superTask) {
+    this.superTask = superTask;
+  }
+  public Integer getProgress() {
+    return progress;
+  }
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskServiceImpl.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskServiceImpl.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/TaskServiceImpl.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,91 @@
+/*
+ * 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.impl;
+
+import java.util.List;
+
+import org.jbpm.task.Task;
+import org.jbpm.task.TaskService;
+import org.jbpm.task.cmd.CreateTask;
+import org.jbpm.task.cmd.DeleteTask;
+import org.jbpm.task.cmd.GetTask;
+import org.jbpm.task.cmd.UpdateTask;
+import org.jbpm.pvm.internal.cmd.CommandService;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class TaskServiceImpl implements TaskService {
+  
+  protected CommandService commandService;
+  
+  public TaskServiceImpl() {
+  }
+
+  public TaskServiceImpl(CommandService commandService) {
+    this.commandService = commandService;
+  }
+
+  public Task createTask() {
+    return (Task) commandService.execute(new CreateTask());
+  }
+
+  public Task createTask(long taskDefinitionDbid) {
+    return (Task) commandService.execute(new CreateTask(taskDefinitionDbid));
+  }
+  
+  public Task createTask(long taskDefinitionDbid, long executionDbid) {
+    return (Task) commandService.execute(new CreateTask(taskDefinitionDbid, executionDbid));
+  }
+
+  public void deleteTask(long taskDbid) {
+    commandService.execute(new DeleteTask(taskDbid));
+  }
+
+  public Task getTask(long taskDbid) {
+    return (Task) commandService.execute(new GetTask(taskDbid));
+  }
+
+  public void updateTask(Task task) {
+    commandService.execute(new UpdateTask(task));
+  }
+
+  public List<Task> getGroupTaskListPage(List<String> identityIds, int firstResult, int maxResults) {
+    throw new UnsupportedOperationException("TODO");
+  }
+
+  public List<Task> getPersonalTaskListPage(int firstResult, int maxResults) {
+    throw new UnsupportedOperationException("TODO");
+  }
+
+  public List<Task> getPersonalTaskListPage(String userId, int firstResult, int maxResults) {
+    throw new UnsupportedOperationException("TODO");
+  }
+  
+  public CommandService getCommandService() {
+    return commandService;
+  }
+  public void setCommandService(CommandService commandService) {
+    this.commandService = commandService;
+  }
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/default.lifecycle.xml
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/default.lifecycle.xml	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/default.lifecycle.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,13 @@
+<task-lifecycle initial="open">
+  <state name="open">
+    <transition name="complete" to="completed" />
+    <transition name="suspend" to="suspended" />
+    <transition name="cancel" to="cancelled" />
+  </state>
+  <state name="suspended">
+    <transition name="resume" to="open" />
+    <transition name="cancel" to="cancelled" />
+  </state>
+  <state name="cancelled" />
+  <state name="completed" />
+</task-lifecycle>


Property changes on: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/impl/default.lifecycle.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/task.model.jpg
===================================================================
(Binary files differ)


Property changes on: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/task.model.jpg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskDbSessionBinding.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskDbSessionBinding.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskDbSessionBinding.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,51 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.task.xml;
+
+import org.jbpm.pvm.internal.xml.Binding;
+import org.jbpm.pvm.internal.xml.Parser;
+import org.jbpm.pvm.internal.xml.Parse;
+import org.w3c.dom.Element;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class TaskDbSessionBinding implements Binding
+{
+
+
+   public String getCategory()
+   {
+      throw new RuntimeException("NYI");
+   }
+
+   public boolean matches(Element element)
+   {
+      throw new RuntimeException("NYI");
+   }
+
+   public Object parse(Element element, Parse parse, Parser parser) {
+    return new TaskDbSessionDescriptor();
+  }
+
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskDbSessionDescriptor.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskDbSessionDescriptor.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskDbSessionDescriptor.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,52 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.task.xml;
+
+import org.hibernate.Session;
+import org.jbpm.task.db.TaskDbSession;
+import org.jbpm.pvm.internal.wire.WireDefinition;
+import org.jbpm.pvm.internal.wire.WireContext;
+import org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class TaskDbSessionDescriptor extends AbstractDescriptor
+{
+
+  private static final long serialVersionUID = 1L;
+
+  public Object construct(WireContext wireContext) {
+    return new TaskDbSession();
+  }
+  
+  public void initialize(Object object, WireContext wireContext) {
+    Session session = wireContext.get(Session.class);
+    TaskDbSession taskDbSession = (TaskDbSession) object;
+    taskDbSession.setSession(session);
+  }
+
+  public Class< ? > getType(WireDefinition wireDefinition) {
+    return TaskDbSession.class;
+  }
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskServiceBinding.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskServiceBinding.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskServiceBinding.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,51 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.task.xml;
+
+import org.jbpm.pvm.internal.xml.Binding;
+import org.jbpm.pvm.internal.xml.Parser;
+import org.jbpm.pvm.internal.xml.Parse;
+import org.w3c.dom.Element;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class TaskServiceBinding implements Binding
+{
+
+
+   public String getCategory()
+   {
+      throw new RuntimeException("NYI");
+   }
+
+   public boolean matches(Element element)
+   {
+      throw new RuntimeException("NYI");
+   }
+
+   public Object parse(Element element, Parse parse, Parser parser) {
+    return new TaskServiceDescriptor();
+  }
+
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskServiceDescriptor.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskServiceDescriptor.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/java/org/jbpm/task/xml/TaskServiceDescriptor.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,51 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.task.xml;
+
+import org.jbpm.task.impl.TaskServiceImpl;
+import org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor;
+import org.jbpm.pvm.internal.wire.WireContext;
+import org.jbpm.pvm.internal.wire.WireDefinition;
+import org.jbpm.pvm.internal.cmd.CommandService;
+
+/**
+ * @author Tom Baeyens
+ */
+public class TaskServiceDescriptor extends AbstractDescriptor
+{
+
+  private static final long serialVersionUID = 1L;
+
+  public Object construct(WireContext wireContext) {
+    return new TaskServiceImpl();
+  }
+
+  public void initialize(Object object, WireContext wireContext) {
+    CommandService commandService = wireContext.get(CommandService.class);
+    TaskServiceImpl taskService = (TaskServiceImpl) object;
+    taskService.setCommandService(commandService);
+  }
+
+  public Class< ? > getType(WireDefinition wireDefinition) {
+    return TaskServiceImpl.class;
+  }
+}


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

Added: jbpm4/task/trunk/modules/core/src/main/resources/hibernate.task.hbm.xml
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/resources/hibernate.task.hbm.xml	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/resources/hibernate.task.hbm.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,152 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping auto-import="false" package="org.jbpm.task.impl" default-access="field">
+
+  <!-- ### TASK DEFINITION ################################################ -->
+  <class name="TaskDefinitionImpl" discriminator-value="T">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator type="char" column="CLASS_"/>
+    <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="ASSIGNEE_EXPR_"/>
+    <property name="candidatesExpression" column="CANDIDATES_EXPR_"/>
+
+    <many-to-one name="assignerDescriptor"
+                 column="ASSIGNER_DESCR_" 
+                 cascade="all"
+                 class="org.jbpm.wire.descriptor.AbstractDescriptor"
+                 foreign-key="FK_TSK_ASIG_DESCR"
+                 index="IDX_TSK_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 ########################################################### -->
+  <class name="TaskImpl" 
+         discriminator-value="T">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator type="char" column="CLASS_"/>
+    <version name="dbversion" column="DBVERSION_" />
+
+    <property name="name" column="NAME_"/>
+    <property name="description" column="DESCR_"/>
+    <property name="assignee" column="ASSIGNEE_"/>
+    
+    <set name="roles" cascade="all-delete-orphan">
+      <key column="TASK_" foreign-key="FK_ROLE_TASK" />
+      <one-to-many class="RoleImpl" />
+    </set>
+    
+    <property name="priority" column="PRIORITY_"/>
+    <property name="create" column="CREATE_"/>
+    <property name="dueDate" column="DUEDATE_"/>
+    <property name="progress" column="PROGRESS_"/>
+    
+    <many-to-one name="variableMap"
+                 class="org.jbpm.pvm.impl.VariableMap" 
+                 column="VARMAP_" 
+                 foreign-key="FK_TASK_VARMAP"
+                 cascade="all" />
+
+    <many-to-one name="swimlane"
+                 class="SwimlaneImpl" 
+                 column="SWIMLANE_" 
+                 foreign-key="FK_TASK_SWIML" />
+
+    <many-to-one name="taskDefinition"
+                 column="TASK_DEF_" 
+                 class="TaskDefinitionImpl"
+                 foreign-key="FK_TSK_DEF"
+                 index="IDX_TSK_DEF" />
+
+		<list name="comments" cascade="all-delete-orphan">
+			<key column="TASK_" />
+			<list-index column="TASK_IDX_" />
+			<one-to-many class="org.jbpm.pvm.impl.CommentImpl" />
+		</list>
+
+    <set name="subTasks" cascade="all-delete-orphan">
+      <key column="SUPERTASK_" foreign-key="FK_TASK_SUPERTASK" />
+      <one-to-many class="TaskImpl" />
+    </set>
+    
+  </class>
+  
+  <!-- ### ROLE ########################################################### -->
+  <class name="RoleImpl" 
+         discriminator-value="R">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator type="char" column="CLASS_"/>
+    <version name="dbversion" column="DBVERSION_" />
+    
+    <property name="identityId" column="IDENTITYID_"/>
+    <property name="roleType" type="org.jbpm.task.RoleType" column="ROLETYPE_" />
+    <property name="description" column="DESCR_"/>
+
+    <many-to-one name="task"
+                 class="TaskImpl" 
+                 column="TASK_" 
+                 foreign-key="FK_ROLE_TASK" />
+
+  </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">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    
+    <property name="name" column="NAME_"/>
+    <property name="assignee" column="ASSIGNEE_"/>
+
+    <many-to-one name="swimlaneDefinition"
+                 class="SwimlaneDefinitionImpl" 
+                 column="SWIMLANEDEF_" 
+                 foreign-key="FK_SWIMLANE_DEF" />
+
+    <set name="candidates" cascade="all-delete-orphan">
+      <key column="SWIMLANE_" foreign-key="FK_ROLE_SWIMLANE" />
+      <one-to-many class="RoleImpl" />
+    </set>
+
+  </class>
+
+</hibernate-mapping>


Property changes on: jbpm4/task/trunk/modules/core/src/main/resources/hibernate.task.hbm.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/task/trunk/modules/core/src/main/resources/hibernate.task.queries.hbm.xml
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/resources/hibernate.task.queries.hbm.xml	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/resources/hibernate.task.queries.hbm.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE hibernate-mapping PUBLIC
+      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping>
+
+
+  <query name="findTasks">
+    <![CDATA[
+     select task
+     from org.jbpm.task.impl.TaskImpl as task
+    ]]>
+  </query>
+  
+
+</hibernate-mapping>
\ No newline at end of file


Property changes on: jbpm4/task/trunk/modules/core/src/main/resources/hibernate.task.queries.hbm.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/task/trunk/modules/core/src/main/resources/pvm.hibernate.mappings.xml
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/resources/pvm.hibernate.mappings.xml	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/resources/pvm.hibernate.mappings.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,4 @@
+<mappings>
+  <mapping resource="hibernate.task.hbm.xml" />
+  <mapping resource="hibernate.task.queries.hbm.xml" />
+</mappings>


Property changes on: jbpm4/task/trunk/modules/core/src/main/resources/pvm.hibernate.mappings.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/task/trunk/modules/core/src/main/resources/pvm.wire.bindings.xml
===================================================================
--- jbpm4/task/trunk/modules/core/src/main/resources/pvm.wire.bindings.xml	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/main/resources/pvm.wire.bindings.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,6 @@
+<wire-bindings>
+
+  <binding tag="task-db-session" class="org.jbpm.task.xml.TaskDbSessionBinding" category="descriptor" />
+  <binding tag="task-service" class="org.jbpm.task.xml.TaskServiceBinding" category="descriptor" />
+
+</wire-bindings>


Property changes on: jbpm4/task/trunk/modules/core/src/main/resources/pvm.wire.bindings.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/task/trunk/modules/core/src/test/java/org/jbpm/task/TaskDbTest.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/test/java/org/jbpm/task/TaskDbTest.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/test/java/org/jbpm/task/TaskDbTest.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,391 @@
+/*
+ * 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;
+
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.pvm.env.EnvironmentFactory;
+import org.jbpm.pvm.internal.util.Clock;
+import org.jbpm.pvm.internal.util.Priority;
+import org.jbpm.pvm.model.Comment;
+import org.jbpm.pvm.session.DbSession;
+import org.jbpm.pvm.test.base.DbTestCase;
+import org.jbpm.task.impl.RoleImpl;
+import org.jbpm.task.impl.SwimlaneImpl;
+import org.jbpm.task.impl.TaskDefinitionImpl;
+import org.jbpm.task.impl.TaskImpl;
+
+import java.util.*;
+
+/**
+ * @author Tom Baeyens
+ */
+public class TaskDbTest extends DbTestCase
+{
+
+  public void testTask() {
+    Date now = new Date();
+    Date inFiveMinutes = new Date(now.getTime()+ (5*60*1000));
+
+    TaskImpl task;
+    try {
+      Clock.setCurrentTime(now);
+      task = TaskImpl.create();
+    } finally {
+      Clock.setCurrentTime(null);
+    }
+    task.setName("hello");
+    task.setDescription("say hello to your neighbour developer");
+    task.setDueDate(inFiveMinutes);
+    task.setPriority(Priority.HIGHEST);
+    
+    task = reload(task, TaskImpl.class);
+    
+    assertEquals("hello", task.getName());
+    assertEquals("say hello to your neighbour developer", task.getDescription());
+    assertEquals(now, task.getCreate());
+    assertEquals(inFiveMinutes, task.getDueDate());
+    assertEquals(Priority.HIGHEST, task.getPriority());
+  }
+
+  public void testTaskAssignment() {
+    TaskImpl task = TaskImpl.create();
+    task.setAssignee("john doe");
+
+    task = reload(task, TaskImpl.class);
+    
+    assertEquals("john doe", task.getAssignee());
+  }
+
+  public void testTaskReassignmentAssignment() {
+    TaskImpl task = TaskImpl.create();
+    task.setAssignee("johndoe");
+    assertEquals("johndoe", task.getAssignee());
+
+    task = reload(task, TaskImpl.class);
+    
+    task.setAssignee("joesmoe");
+
+    task = reload(task, TaskImpl.class);
+    
+    assertEquals("joesmoe", task.getAssignee());
+  }
+
+  public void testTaskRoles() {
+    TaskImpl task = TaskImpl.create();
+    
+    assertNotNull(task.getRoles());
+    assertEquals(0, task.getRoles().size());
+    
+    task.addRole("john doe", RoleType.CLIENT).setDescription("uses the result");
+    task.addRole("joe smoe", RoleType.OWNER).setDescription("does what he wants");
+    task.addRole("jack black", RoleType.CANDIDATE).setDescription("can take this task");
+    task.addRole("jim slim", RoleType.VIEWER).setDescription("is allowed to see");
+    task.addRole("jeff nef", RoleType.REPLACED_ASSIGNEE).setDescription("is sick");
+
+    task = reload(task, TaskImpl.class);
+
+    Map<String, RoleImpl> roleMap = getRoleMap(task.getRoles());
+    
+    assertEquals(RoleType.CLIENT, roleMap.get("john doe").getRoleType());
+    assertEquals("uses the result", roleMap.get("john doe").getDescription());
+
+    assertEquals(RoleType.OWNER, roleMap.get("joe smoe").getRoleType());
+    assertEquals("does what he wants", roleMap.get("joe smoe").getDescription());
+
+    assertEquals(RoleType.CANDIDATE, roleMap.get("jack black").getRoleType());
+    assertEquals("can take this task", roleMap.get("jack black").getDescription());
+
+    assertEquals(RoleType.VIEWER, roleMap.get("jim slim").getRoleType());
+    assertEquals("is allowed to see", roleMap.get("jim slim").getDescription());
+
+    assertEquals(RoleType.REPLACED_ASSIGNEE, roleMap.get("jeff nef").getRoleType());
+    assertEquals("is sick", roleMap.get("jeff nef").getDescription());
+    
+    assertEquals(5, roleMap.size());
+    
+    task.removeRole(roleMap.get("john doe"));
+
+    task = reload(task, TaskImpl.class);
+
+    assertEquals(4, task.getRoles().size());
+    task.removeRole(getRoleMap(task.getRoles()).get("joe smoe"));
+
+    task = reload(task, TaskImpl.class);
+
+    assertEquals(3, task.getRoles().size());
+    task.removeRole(getRoleMap(task.getRoles()).get("jack black"));
+
+    task = reload(task, TaskImpl.class);
+
+    assertEquals(2, task.getRoles().size());
+    task.removeRole(getRoleMap(task.getRoles()).get("jim slim"));
+
+    task = reload(task, TaskImpl.class);
+
+    assertEquals(1, task.getRoles().size());
+    task.removeRole(getRoleMap(task.getRoles()).get("jeff nef"));
+
+    task = reload(task, TaskImpl.class);
+
+    assertEquals(0, getRoleMap(task.getRoles()).size());
+  }
+
+  public static Map<String, RoleImpl> getRoleMap(Set<RoleImpl> roles) {
+    Map<String, RoleImpl> roleMap = new HashMap<String, RoleImpl>();
+    for (RoleImpl role: roles) {
+      roleMap.put(role.getIdentityId(), role);
+    }
+    return roleMap;
+  }
+  
+  public void testTaskAllRoles() {
+    SwimlaneImpl manager = new SwimlaneImpl();
+
+    manager.createCandidate("joe smoe").setDescription("too much tostesteron");
+    manager.createCandidate("jack black").setDescription("the pigeon");
+    manager.createCandidate("jim slim").setDescription("lame duck");
+    
+    manager = reload(manager, SwimlaneImpl.class);
+    
+    TaskImpl task = TaskImpl.create();
+    assertNotNull(task.getAllRoles());
+    assertEquals(0, task.getAllRoles().size());
+
+    task.addRole("john doe", RoleType.CLIENT).setDescription("uses the result");
+    assertEquals(1, task.getAllRoles().size());
+
+    task.addRole("jeff nef", RoleType.REPLACED_ASSIGNEE).setDescription("is sick");
+    task.setSwimlane(manager);
+    
+    task = reload(task, TaskImpl.class);
+    
+    Map<String, RoleImpl> roleMap = getRoleMap(task.getAllRoles());
+    
+    assertEquals(RoleType.CLIENT, roleMap.get("john doe").getRoleType());
+    assertEquals("uses the result", roleMap.get("john doe").getDescription());
+
+    assertEquals(RoleType.CANDIDATE, roleMap.get("joe smoe").getRoleType());
+    assertEquals("too much tostesteron", roleMap.get("joe smoe").getDescription());
+
+    assertEquals(RoleType.CANDIDATE, roleMap.get("jack black").getRoleType());
+    assertEquals("the pigeon", roleMap.get("jack black").getDescription());
+
+    assertEquals(RoleType.CANDIDATE, roleMap.get("jim slim").getRoleType());
+    assertEquals("lame duck", roleMap.get("jim slim").getDescription());
+
+    assertEquals(RoleType.REPLACED_ASSIGNEE, roleMap.get("jeff nef").getRoleType());
+    assertEquals("is sick", roleMap.get("jeff nef").getDescription());
+    
+    assertEquals(5, roleMap.size());
+    
+    task.removeRole(roleMap.get("john doe"));
+    
+    task = reload(task, TaskImpl.class);
+    manager = environment.get(DbSession.class).get(SwimlaneImpl.class, manager.getDbid());
+    
+    assertEquals(4, task.getAllRoles().size());
+    manager.removeCandidate(getRoleMap(task.getAllRoles()).get("joe smoe"));
+
+    task = reload(task, TaskImpl.class);
+    manager = environment.get(DbSession.class).get(SwimlaneImpl.class, manager.getDbid());
+
+    assertEquals(3, task.getAllRoles().size());
+    manager.removeCandidate(getRoleMap(task.getAllRoles()).get("jack black"));
+
+    task = reload(task, TaskImpl.class);
+    manager = environment.get(DbSession.class).get(SwimlaneImpl.class, manager.getDbid());
+
+    assertEquals(2, task.getAllRoles().size());
+    manager.removeCandidate(getRoleMap(task.getAllRoles()).get("jim slim"));
+
+    task = reload(task, TaskImpl.class);
+    manager = environment.get(DbSession.class).get(SwimlaneImpl.class, manager.getDbid());
+
+    assertEquals(1, task.getAllRoles().size());
+    task.removeRole(getRoleMap(task.getAllRoles()).get("jeff nef"));
+
+    task = reload(task, TaskImpl.class);
+
+    assertEquals(0, task.getAllRoles().size());
+  }
+
+  public void testTaskComment() {
+    EnvironmentFactory environmentFactory = EnvironmentFactory.parseXmlString("<environment/>");
+    TaskImpl task = TaskImpl.create();
+    
+    Environment environment = environmentFactory.openEnvironment();
+    try {
+      environment.setUserId("john doe");
+      task.createComment("should I really do this ?  yuk.");
+    } finally {
+      environment.close();
+    }
+    
+    task = reload(task, TaskImpl.class);
+    
+    environment = environmentFactory.openEnvironment();
+    try {
+      environment.setUserId("joe smoe");
+      task.createComment("yes, you should really do it.");
+    } finally {
+      environment.close();
+    }
+    
+    task = reload(task, TaskImpl.class);
+    
+    List<Comment> comments = task.getComments();
+    assertNotNull(comments);
+    
+    assertEquals("should I really do this ?  yuk.", comments.get(0).getMessage());
+    assertEquals("john doe", comments.get(0).getUserId());
+    
+    assertEquals("yes, you should really do it.", comments.get(1).getMessage());
+    assertEquals("joe smoe", comments.get(1).getUserId());
+  }
+
+  public void testTaskCommentReplies() {
+    TaskImpl task = TaskImpl.create();
+    Comment comment = task.createComment("hi, how are you?");
+    Comment reply = comment.createReply("i'm fine, thanks");
+    reply = reply.createReply("nice wheather, huh");
+    reply.createReply("snow's great fun");
+
+    task = reload(task, TaskImpl.class);
+
+    comment = task.createComment("are you going to the office?");
+    reply = comment.createReply("no not now");
+    reply = reply.createReply("when are you going");
+    reply.createReply("later");
+
+    task = reload(task, TaskImpl.class);
+
+    List<Comment> comments = task.getComments();
+    assertEquals("hi, how are you?", comments.get(0).getMessage());
+    assertEquals("i'm fine, thanks", comments.get(0).getReplies().get(0).getMessage());
+    assertEquals("nice wheather, huh", comments.get(0).getReplies().get(0).getReplies().get(0).getMessage());
+    assertEquals("snow's great fun", comments.get(0).getReplies().get(0).getReplies().get(0).getReplies().get(0).getMessage());
+    
+    assertEquals("are you going to the office?", comments.get(1).getMessage());
+    assertEquals("no not now", comments.get(1).getReplies().get(0).getMessage());
+    assertEquals("when are you going", comments.get(1).getReplies().get(0).getReplies().get(0).getMessage());
+    assertEquals("later", comments.get(1).getReplies().get(0).getReplies().get(0).getReplies().get(0).getMessage());
+    
+    comment = task.getComments().get(0);
+    comment.removeReply(comment.getReplies().get(0));
+
+    task = reload(task, TaskImpl.class);
+
+    assertEquals("hi, how are you?", comment.getMessage());
+    assertTrue(comment.getReplies().isEmpty());
+    assertEquals(2, task.getComments().size());
+
+    task.removeComment(task.getComments().get(1));
+
+    task = reload(task, TaskImpl.class);
+
+    assertEquals(1, task.getComments().size());
+    assertEquals("hi, how are you?", comment.getMessage());
+  }
+
+  public void testTaskWithDefinition() {
+    TaskDefinitionImpl taskDefinition = new TaskDefinitionImpl();
+    taskDefinition.setName("hello");
+    taskDefinition.setPriority(Priority.HIGH);
+
+    taskDefinition = reload(taskDefinition, TaskDefinitionImpl.class);
+
+    TaskImpl task = TaskImpl.create(taskDefinition);
+
+    task = reload(task, TaskImpl.class);
+    
+    assertEquals("hello", task.getName());
+    assertEquals(Priority.HIGH, task.getPriority());
+    assertEquals("hello", task.getTaskDefinition().getName());
+  }
+
+  public void testSubTasks() {
+    TaskImpl improveWorld = TaskImpl.create();
+    improveWorld.setName("improve the world");
+    
+    improveWorld.createSubTask("try to automate everything");
+    
+    improveWorld = reload(improveWorld, TaskImpl.class);
+
+    improveWorld.createSubTask("discover the problem is in the workflow part");
+    TaskImpl writeWorkflowEngine = (TaskImpl) improveWorld.createSubTask("write an open source workflow engine");
+    writeWorkflowEngine.createSubTask("create a sf.net project");
+    Task commitCode = writeWorkflowEngine.createSubTask("commit code to cvs");
+    writeWorkflowEngine.createSubTask("nurture it and grow it");
+    writeWorkflowEngine.createSubTask("harvest a beautiful project");
+
+    improveWorld.createSubTask("automate everything with workflow");
+    improveWorld.createSubTask("create peace everywhere");
+
+    improveWorld = reload(improveWorld, TaskImpl.class);
+    
+    writeWorkflowEngine = environment.get(DbSession.class).get(TaskImpl.class, writeWorkflowEngine.getDbid());
+
+    Set<String> expectedSubtaskNames = new HashSet<String>();
+    expectedSubtaskNames.add("try to automate everything");
+    expectedSubtaskNames.add("discover the problem is in the workflow part");
+    expectedSubtaskNames.add("write an open source workflow engine");
+    expectedSubtaskNames.add("automate everything with workflow");
+    expectedSubtaskNames.add("create peace everywhere");
+    
+    Set<Task> subtasks = improveWorld.getSubTasks();
+    Set<String> subtaskNames = new HashSet<String>();
+    for (Task subtask: subtasks) {
+      subtaskNames.add(subtask.getName());
+    }
+    
+    assertEquals(expectedSubtaskNames, subtaskNames);
+
+    expectedSubtaskNames = new HashSet<String>();
+    expectedSubtaskNames.add("create a sf.net project");
+    expectedSubtaskNames.add("commit code to cvs");
+    expectedSubtaskNames.add("nurture it and grow it");
+    expectedSubtaskNames.add("harvest a beautiful project");
+    
+    subtasks = writeWorkflowEngine.getSubTasks();
+    subtaskNames = new HashSet<String>();
+    for (Task subtask: subtasks) {
+      subtaskNames.add(subtask.getName());
+    }
+
+    assertEquals(expectedSubtaskNames, subtaskNames);
+    
+    writeWorkflowEngine = reload(writeWorkflowEngine, TaskImpl.class);
+    commitCode = environment.get(DbSession.class).get(TaskImpl.class, commitCode.getDbid());
+    writeWorkflowEngine.removeSubTask(commitCode);
+    expectedSubtaskNames.remove("commit code to cvs");
+
+    writeWorkflowEngine = reload(writeWorkflowEngine, TaskImpl.class);
+
+    subtasks = writeWorkflowEngine.getSubTasks();
+    subtaskNames = new HashSet<String>();
+    for (Task subtask: subtasks) {
+      subtaskNames.add(subtask.getName());
+    }
+
+    assertEquals(expectedSubtaskNames, subtaskNames);
+  }
+}


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

Added: jbpm4/task/trunk/modules/core/src/test/java/org/jbpm/task/TaskServiceTest.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/test/java/org/jbpm/task/TaskServiceTest.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/test/java/org/jbpm/task/TaskServiceTest.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,67 @@
+/*
+ * 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;
+
+import java.util.Date;
+import java.util.List;
+
+import org.hibernate.Session;
+import org.jbpm.task.impl.TaskImpl;
+import org.jbpm.pvm.test.base.ServiceTestCase;
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.internal.cmd.CommandService;
+import org.jbpm.pvm.env.Environment;
+
+/**
+ * @author Tom Baeyens
+ */
+public class TaskServiceTest extends ServiceTestCase
+{
+
+  public void testTaskService() {
+    TaskService taskService = getEnvironmentFactory().get(TaskService.class);
+    
+    Task task = taskService.createTask();
+    task.setName("doing the dishes");
+    Date now = new Date();
+    task.setDueDate(now);
+    taskService.updateTask(task);
+
+    long taskDbid = task.getDbid();
+    task = taskService.getTask(taskDbid);
+    assertEquals("doing the dishes", task.getName());
+    assertEquals(now, task.getDueDate());
+    
+    taskService.deleteTask(taskDbid);
+    
+    // verify that the task table is empty
+    getEnvironmentFactory().get(CommandService.class).execute(new Command() {
+      public Object execute(Environment environment) throws Exception {
+        Session session = environment.get(Session.class);
+        List tasks = session.createQuery("from "+TaskImpl.class.getName()).list();
+        assertEquals(0, tasks.size());
+        return null;
+      }
+    });
+  }
+
+}


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

Added: jbpm4/task/trunk/modules/core/src/test/java/org/jbpm/task/TaskTest.java
===================================================================
--- jbpm4/task/trunk/modules/core/src/test/java/org/jbpm/task/TaskTest.java	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/test/java/org/jbpm/task/TaskTest.java	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,312 @@
+/*
+ * 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;
+
+import org.jbpm.pvm.internal.util.Clock;
+import org.jbpm.pvm.internal.util.Priority;
+import org.jbpm.pvm.test.base.JbpmTestCase;
+import org.jbpm.pvm.env.EnvironmentFactory;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.pvm.model.Comment;
+import org.jbpm.task.impl.RoleImpl;
+import org.jbpm.task.impl.SwimlaneImpl;
+import org.jbpm.task.impl.TaskDefinitionImpl;
+import org.jbpm.task.impl.TaskImpl;
+
+import java.util.*;
+
+/**
+ * @author Tom Baeyens
+ */
+public class TaskTest extends JbpmTestCase
+{
+
+  public void testTask() {
+    Date now = new Date();
+    Date inFiveMinutes = new Date(now.getTime()+ (5*60*1000));
+
+    TaskImpl task;
+    try {
+      Clock.setCurrentTime(now);
+      task = TaskImpl.create();
+    } finally {
+      Clock.setCurrentTime(null);
+    }
+    task.setName("hello");
+    task.setDescription("say hello to your neighbour developer");
+    task.setDueDate(inFiveMinutes);
+    task.setPriority(Priority.HIGHEST);
+    
+    assertEquals("hello", task.getName());
+    assertEquals("say hello to your neighbour developer", task.getDescription());
+    assertEquals(now, task.getCreate());
+    assertEquals(inFiveMinutes, task.getDueDate());
+    assertEquals(Priority.HIGHEST, task.getPriority());
+  }
+
+  public void testTaskAssignment() {
+    TaskImpl task = TaskImpl.create();
+    task.setAssignee("john doe");
+    assertEquals("john doe", task.getAssignee());
+  }
+
+  public void testTaskReassignmentAssignment() {
+    TaskImpl task = TaskImpl.create();
+    task.setAssignee("johndoe");
+    assertEquals("johndoe", task.getAssignee());
+    task.setAssignee("joesmoe");
+    assertEquals("joesmoe", task.getAssignee());
+  }
+
+  public void testTaskRoles() {
+    TaskImpl task = TaskImpl.create();
+    
+    assertNotNull(task.getRoles());
+    assertEquals(0, task.getRoles().size());
+    
+    task.addRole("john doe", RoleType.CLIENT).setDescription("uses the result");
+    task.addRole("joe smoe", RoleType.OWNER).setDescription("does what he wants");
+    task.addRole("jack black", RoleType.CANDIDATE).setDescription("can take this task");
+    task.addRole("jim slim", RoleType.VIEWER).setDescription("is allowed to see");
+    task.addRole("jeff nef", RoleType.REPLACED_ASSIGNEE).setDescription("is sick");
+    
+    Set<RoleImpl> roles = task.getRoles();
+    Map<String, RoleImpl> roleMap = new HashMap<String, RoleImpl>();
+    for (RoleImpl role: roles) {
+      roleMap.put(role.getIdentityId(), role);
+    }
+    
+    assertEquals(RoleType.CLIENT, roleMap.get("john doe").getRoleType());
+    assertEquals("uses the result", roleMap.get("john doe").getDescription());
+
+    assertEquals(RoleType.OWNER, roleMap.get("joe smoe").getRoleType());
+    assertEquals("does what he wants", roleMap.get("joe smoe").getDescription());
+
+    assertEquals(RoleType.CANDIDATE, roleMap.get("jack black").getRoleType());
+    assertEquals("can take this task", roleMap.get("jack black").getDescription());
+
+    assertEquals(RoleType.VIEWER, roleMap.get("jim slim").getRoleType());
+    assertEquals("is allowed to see", roleMap.get("jim slim").getDescription());
+
+    assertEquals(RoleType.REPLACED_ASSIGNEE, roleMap.get("jeff nef").getRoleType());
+    assertEquals("is sick", roleMap.get("jeff nef").getDescription());
+    
+    assertEquals(5, roles.size());
+    
+    task.removeRole(roleMap.get("john doe"));
+    assertEquals(4, task.getRoles().size());
+    task.removeRole(roleMap.get("joe smoe"));
+    assertEquals(3, task.getRoles().size());
+    task.removeRole(roleMap.get("jack black"));
+    assertEquals(2, task.getRoles().size());
+    task.removeRole(roleMap.get("jim slim"));
+    assertEquals(1, task.getRoles().size());
+    task.removeRole(roleMap.get("jeff nef"));
+    assertEquals(0, roles.size());
+  }
+
+  public void testTaskAllRoles() {
+    TaskImpl task = TaskImpl.create();
+    
+    assertNotNull(task.getAllRoles());
+    assertEquals(0, task.getAllRoles().size());
+    
+    task.addRole("john doe", RoleType.CLIENT).setDescription("uses the result");
+    
+    SwimlaneImpl manager = new SwimlaneImpl();
+    task.setSwimlane(manager);
+
+    manager.createCandidate("joe smoe").setDescription("tostesteron ambition");
+    manager.createCandidate("jack black").setDescription("the pigeon");
+    manager.createCandidate("jim slim").setDescription("lame duck");
+    
+    task.addRole("jeff nef", RoleType.REPLACED_ASSIGNEE).setDescription("is sick");
+    
+    Set<RoleImpl> roles = task.getAllRoles();
+    Map<String, RoleImpl> roleMap = new HashMap<String, RoleImpl>();
+    for (RoleImpl role: roles) {
+      roleMap.put(role.getIdentityId(), role);
+    }
+    
+    assertEquals(RoleType.CLIENT, roleMap.get("john doe").getRoleType());
+    assertEquals("uses the result", roleMap.get("john doe").getDescription());
+
+    assertEquals(RoleType.CANDIDATE, roleMap.get("joe smoe").getRoleType());
+    assertEquals("tostesteron ambition", roleMap.get("joe smoe").getDescription());
+
+    assertEquals(RoleType.CANDIDATE, roleMap.get("jack black").getRoleType());
+    assertEquals("the pigeon", roleMap.get("jack black").getDescription());
+
+    assertEquals(RoleType.CANDIDATE, roleMap.get("jim slim").getRoleType());
+    assertEquals("lame duck", roleMap.get("jim slim").getDescription());
+
+    assertEquals(RoleType.REPLACED_ASSIGNEE, roleMap.get("jeff nef").getRoleType());
+    assertEquals("is sick", roleMap.get("jeff nef").getDescription());
+    
+    assertEquals(5, roles.size());
+    
+    task.removeRole(roleMap.get("john doe"));
+    assertEquals(4, task.getAllRoles().size());
+    manager.removeCandidate(roleMap.get("joe smoe"));
+    assertEquals(3, task.getAllRoles().size());
+    manager.removeCandidate(roleMap.get("jack black"));
+    assertEquals(2, task.getAllRoles().size());
+    manager.removeCandidate(roleMap.get("jim slim"));
+    assertEquals(1, task.getAllRoles().size());
+    task.removeRole(roleMap.get("jeff nef"));
+    assertEquals(0, task.getAllRoles().size());
+  }
+
+  public void testTaskComment() {
+    EnvironmentFactory environmentFactory = EnvironmentFactory.parseXmlString("<environment/>");
+    TaskImpl task = TaskImpl.create();
+    
+    Environment environment = environmentFactory.openEnvironment();
+    try {
+      environment.setUserId("john doe");
+      task.createComment("should I really do this ?  yuk.");
+    } finally {
+      environment.close();
+    }
+    
+    environment = environmentFactory.openEnvironment();
+    try {
+      environment.setUserId("joe smoe");
+      task.createComment("yes, you should really do it.");
+    } finally {
+      environment.close();
+    }
+    
+    List<Comment> comments = task.getComments();
+    assertNotNull(comments);
+    
+    assertEquals("should I really do this ?  yuk.", comments.get(0).getMessage());
+    assertEquals("john doe", comments.get(0).getUserId());
+    
+    assertEquals("yes, you should really do it.", comments.get(1).getMessage());
+    assertEquals("joe smoe", comments.get(1).getUserId());
+  }
+
+  public void testTaskCommentReplies() {
+    TaskImpl task = TaskImpl.create();
+    Comment comment = task.createComment("hi, how are you?");
+    Comment reply = comment.createReply("i'm fine, thanks");
+    reply = reply.createReply("nice wheather, huh");
+    reply.createReply("snow's great fun");
+    
+    comment = task.createComment("are you going to the office?");
+    reply = comment.createReply("no not now");
+    reply = reply.createReply("when are you going");
+    reply.createReply("later");
+    
+    List<Comment> comments = task.getComments();
+    assertEquals("hi, how are you?", comments.get(0).getMessage());
+    assertEquals("i'm fine, thanks", comments.get(0).getReplies().get(0).getMessage());
+    assertEquals("nice wheather, huh", comments.get(0).getReplies().get(0).getReplies().get(0).getMessage());
+    assertEquals("snow's great fun", comments.get(0).getReplies().get(0).getReplies().get(0).getReplies().get(0).getMessage());
+    
+    assertEquals("are you going to the office?", comments.get(1).getMessage());
+    assertEquals("no not now", comments.get(1).getReplies().get(0).getMessage());
+    assertEquals("when are you going", comments.get(1).getReplies().get(0).getReplies().get(0).getMessage());
+    assertEquals("later", comments.get(1).getReplies().get(0).getReplies().get(0).getReplies().get(0).getMessage());
+    
+    comment = task.getComments().get(0);
+    comment.removeReply(comment.getReplies().get(0));
+    
+    assertEquals("hi, how are you?", comment.getMessage());
+    assertTrue(comment.getReplies().isEmpty());
+    assertEquals(2, task.getComments().size());
+
+    task.removeComment(task.getComments().get(1));
+    
+    assertEquals(1, task.getComments().size());
+    assertEquals("hi, how are you?", comment.getMessage());
+  }
+
+  public void testTaskWithDefinition() {
+    TaskDefinitionImpl taskDefinition = new TaskDefinitionImpl();
+    taskDefinition.setName("hello");
+    taskDefinition.setPriority(Priority.HIGH);
+    
+    TaskImpl task = TaskImpl.create(taskDefinition);
+    assertEquals("hello", task.getName());
+    assertEquals(Priority.HIGH, task.getPriority());
+    assertEquals("hello", task.getTaskDefinition().getName());
+  }
+
+  public void testSubTasks() {
+    TaskImpl improveWorld = TaskImpl.create();
+    improveWorld.setName("improve the world");
+    
+    improveWorld.createSubTask("try to automate everything");
+    improveWorld.createSubTask("discover the problem is in the workflow part");
+    Task writeWorkflowEngine = improveWorld.createSubTask("write an open source workflow engine");
+    writeWorkflowEngine.createSubTask("create a sf.net project");
+    Task commitCode = writeWorkflowEngine.createSubTask("commit code to cvs");
+    writeWorkflowEngine.createSubTask("nurture it and grow it");
+    writeWorkflowEngine.createSubTask("harvest a beautiful project");
+    
+    improveWorld.createSubTask("automate everything with workflow");
+    improveWorld.createSubTask("create peace everywhere");
+
+    Set<String> expectedSubtaskNames = new HashSet<String>();
+    expectedSubtaskNames.add("try to automate everything");
+    expectedSubtaskNames.add("discover the problem is in the workflow part");
+    expectedSubtaskNames.add("write an open source workflow engine");
+    expectedSubtaskNames.add("automate everything with workflow");
+    expectedSubtaskNames.add("create peace everywhere");
+    
+    Set<Task> subtasks = improveWorld.getSubTasks();
+    Set<String> subtaskNames = new HashSet<String>();
+    for (Task subtask: subtasks) {
+      subtaskNames.add(subtask.getName());
+    }
+    
+    assertEquals(expectedSubtaskNames, subtaskNames);
+
+    expectedSubtaskNames = new HashSet<String>();
+    expectedSubtaskNames.add("create a sf.net project");
+    expectedSubtaskNames.add("commit code to cvs");
+    expectedSubtaskNames.add("nurture it and grow it");
+    expectedSubtaskNames.add("harvest a beautiful project");
+    
+    subtasks = writeWorkflowEngine.getSubTasks();
+    subtaskNames = new HashSet<String>();
+    for (Task subtask: subtasks) {
+      subtaskNames.add(subtask.getName());
+    }
+
+    assertEquals(expectedSubtaskNames, subtaskNames);
+    
+    writeWorkflowEngine.removeSubTask(commitCode);
+    
+    expectedSubtaskNames.remove("commit code to cvs");
+
+    subtasks = writeWorkflowEngine.getSubTasks();
+    subtaskNames = new HashSet<String>();
+    for (Task subtask: subtasks) {
+      subtaskNames.add(subtask.getName());
+    }
+
+    assertEquals(expectedSubtaskNames, subtaskNames);
+  }
+}


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

Added: jbpm4/task/trunk/modules/core/src/test/resources/org.jbpm.task.cfg.xml
===================================================================
--- jbpm4/task/trunk/modules/core/src/test/resources/org.jbpm.task.cfg.xml	                        (rev 0)
+++ jbpm4/task/trunk/modules/core/src/test/resources/org.jbpm.task.cfg.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,31 @@
+<environment>
+
+  <application>
+  
+    <pvm-service />
+    <task-service />
+
+    <standard-command-service>
+      <retry-interceptor />
+      <environment-interceptor />
+      <transaction-interceptor />
+    </standard-command-service>
+  
+    <hibernate-configuration>
+      <properties resource="hibernate.properties" />
+      <mappings resources="pvm.hibernate.mappings.xml" />
+      <cache-configuration resource="pvm.definition.cache.xml" usage="nonstrict-read-write" />
+    </hibernate-configuration>
+    <hibernate-session-factory />
+    <variable-types resource="pvm.variable.types.xml" />
+
+  </application>
+
+  <block>
+    <standard-transaction />
+    <hibernate-session />
+    <pvm-db-session />
+    <task-db-session />
+  </block>
+
+</environment>


Property changes on: jbpm4/task/trunk/modules/core/src/test/resources/org.jbpm.task.cfg.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/task/trunk/pom.xml
===================================================================
--- jbpm4/task/trunk/pom.xml	                        (rev 0)
+++ jbpm4/task/trunk/pom.xml	2008-07-14 14:00:53 UTC (rev 1620)
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- ====================================================================== -->
+<!--                                                                        -->
+<!--  JBoss, the OpenSource J2EE webOS                                      -->
+<!--                                                                        -->
+<!--  Distributable under LGPL license.                                     -->
+<!--  See terms of license at http://www.gnu.org.                           -->
+<!--                                                                        -->
+<!-- ====================================================================== -->
+
+<!-- $Id$ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+   <modelVersion>4.0.0</modelVersion>
+
+   <name>JBoss jBPM 4 - Task</name>
+   <groupId>org.jboss.jbpm</groupId>
+   <artifactId>task</artifactId>
+   <packaging>pom</packaging>
+
+   <version>4.0.0-SNAPSHOT</version>
+
+   <!-- Parent -->
+   <parent>
+      <groupId>org.jboss.jbpm</groupId>
+      <artifactId>jbpm-parent</artifactId>
+      <version>1.0.0-SNAPSHOT</version>
+   </parent>
+
+   <!-- Modules -->
+   <modules>
+      <module>modules/core</module>
+   </modules>
+
+   <!-- Properties -->
+   <properties>
+      <pvm.version>1.0.0-SNAPSHOT</pvm.version>
+      <jboss.jbpm.api.version>1.0.0-SNAPSHOT</jboss.jbpm.api.version>
+      <junit.version>3.8.2</junit.version>
+      <log4j.version>1.2.14</log4j.version>
+   </properties>
+
+   <!-- DependencyManagement -->
+   <dependencyManagement>
+      <dependencies>
+         <!-- jBPM Dependencies -->
+         <dependency>
+            <groupId>org.jboss.jbpm.pvm</groupId>
+            <artifactId>pvm-core</artifactId>
+            <version>${pvm.version}</version>
+         </dependency>
+
+         <dependency>
+            <groupId>org.jboss.jbpm</groupId>
+            <artifactId>jbpm-api</artifactId>
+            <version>${jboss.jbpm.api.version}</version>
+         </dependency>
+
+         <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>${log4j.version}</version>
+         </dependency>
+
+         <!-- Compile Dependencies -->
+         <!--dependency>
+           <groupId>bsh</groupId>
+           <artifactId>bsh</artifactId>
+         </dependency-->
+
+         <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit.version}</version>
+         </dependency>
+
+      </dependencies>
+   </dependencyManagement>
+   <!-- Plugins -->
+   <build>
+      <plugins>
+         <plugin>
+            <artifactId>maven-javadoc-plugin</artifactId>
+         </plugin>
+      </plugins>
+   </build>
+
+   <!-- DistributionManagement -->
+   <distributionManagement>
+      <site>
+         <id>jbws.dyndns.org</id>
+         <url>file:///home/tdiesler/workspace/jbpm-site</url>
+      </site>
+   </distributionManagement>
+
+   <!-- Profiles -->
+   <profiles>
+
+      <!--
+        Name: skiptests
+        Desc: Skips the tests
+      -->
+      <profile>
+         <id>skiptests</id>
+         <build>
+            <plugins>
+               <plugin>
+                  <artifactId>maven-surefire-plugin</artifactId>
+                  <configuration>
+                     <skipTests>true</skipTests>
+                  </configuration>
+               </plugin>
+            </plugins>
+         </build>
+      </profile>
+   </profiles>
+
+   <reporting>
+      <plugins>
+         <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-javadoc-plugin</artifactId>
+            <configuration>
+               <quiet>true</quiet>
+               <source>1.5</source>
+               <verbose>false</verbose>
+               <excludePackageNames>*.internal:*.test</excludePackageNames>
+            </configuration>
+         </plugin>
+      </plugins>
+   </reporting>
+
+    <repositories>
+      <repository>
+         <id>maven2.java.net</id>
+         <name>Java.net Repository for Maven 2</name>
+         <url>http://download.java.net/maven/2/</url>
+      </repository>
+      <repository>
+         <id>java.net</id>
+         <url>http://download.java.net/maven/1/</url>
+         <layout>legacy</layout>
+      </repository>
+      <repository>
+         <id>repository.jboss.org</id>
+         <url>http://repository.jboss.org/maven2</url>
+         <snapshots>
+            <enabled>false</enabled>
+         </snapshots>
+      </repository>
+      <repository>
+         <id>snapshots.jboss.org</id>
+         <url>http://snapshots.jboss.org/maven2</url>
+         <snapshots>
+            <enabled>true</enabled>
+         </snapshots>
+      </repository>
+   </repositories>
+
+</project>


Property changes on: jbpm4/task/trunk/pom.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF




More information about the jbpm-commits mailing list