[jbpm-commits] JBoss JBPM SVN: r1619 - in jbpm4/indentity: trunk and 31 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Jul 14 09:57:17 EDT 2008


Author: heiko.braun at jboss.com
Date: 2008-07-14 09:57:16 -0400 (Mon, 14 Jul 2008)
New Revision: 1619

Added:
   jbpm4/indentity/trunk/
   jbpm4/indentity/trunk/.classpath
   jbpm4/indentity/trunk/.project
   jbpm4/indentity/trunk/hudson/
   jbpm4/indentity/trunk/hudson/ant.properties.example
   jbpm4/indentity/trunk/hudson/apache-tomcat/
   jbpm4/indentity/trunk/hudson/apache-tomcat/conf/
   jbpm4/indentity/trunk/hudson/apache-tomcat/conf/server.xml
   jbpm4/indentity/trunk/hudson/apache-tomcat/conf/tomcat-users.xml
   jbpm4/indentity/trunk/hudson/build.xml
   jbpm4/indentity/trunk/hudson/hudson-home/
   jbpm4/indentity/trunk/hudson/hudson-home/config.xml
   jbpm4/indentity/trunk/hudson/hudson-home/hudson.tasks.Mailer.xml
   jbpm4/indentity/trunk/hudson/hudson-home/hudson.tasks.Maven.xml
   jbpm4/indentity/trunk/hudson/hudson-home/jobs/
   jbpm4/indentity/trunk/hudson/hudson-home/jobs/jBPM4/
   jbpm4/indentity/trunk/hudson/hudson-home/jobs/jBPM4/config.xml
   jbpm4/indentity/trunk/modules/
   jbpm4/indentity/trunk/modules/core/
   jbpm4/indentity/trunk/modules/core/pom.xml
   jbpm4/indentity/trunk/modules/core/src/
   jbpm4/indentity/trunk/modules/core/src/main/
   jbpm4/indentity/trunk/modules/core/src/main/doc/
   jbpm4/indentity/trunk/modules/core/src/main/doc/models.uml
   jbpm4/indentity/trunk/modules/core/src/main/java/
   jbpm4/indentity/trunk/modules/core/src/main/java/org/
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/hibernate.identity.hbm.xml
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/hibernate.identity.queries.hbm.xml
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/Group.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/Identity.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/IdentityException.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/IdentityService.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/Membership.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/User.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/auth/
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/auth/IdentityLoginModule.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/auth/IdentityPrincipal.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/auth/package.html
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/CreateMembership.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/DeleteGroup.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/DeleteMembership.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/DeleteUser.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetGroup.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetGroups.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMemberships.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMembershipsForGroup.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMembershipsForRole.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMembershipsForUser.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetUser.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetUsers.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/SaveGroup.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/SaveUser.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/UpdateGroup.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/UpdateMembership.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/UpdateUser.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/package.html
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/hibernate/
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/hibernate/PermissionUserType.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/hibernate/package.html
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/identity-db.png
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/identity-java.png
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/GroupImpl.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/IdentityImpl.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/IdentityServiceImpl.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/MembershipImpl.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/Permissions.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/UserImpl.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/package.html
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/package.html
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/AuthenticationSession.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/IdentityDbSession.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/QueryOptions.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/package.html
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityDbSessionBinding.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityDbSessionDescriptor.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityServiceBinding.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityServiceDescriptor.java
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/package.html
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/pvm.hibernate.mappings.xml
   jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/pvm.wire.bindings.xml
   jbpm4/indentity/trunk/modules/core/src/main/resources/
   jbpm4/indentity/trunk/modules/core/src/main/resources/org/
   jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/
   jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/hibernate.identity.hbm.xml
   jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/hibernate.identity.queries.hbm.xml
   jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/id/
   jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/id/environment.cfg.xml
   jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/pvm.hibernate.mappings.xml
   jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/pvm.wire.bindings.xml
   jbpm4/indentity/trunk/modules/core/src/main/resources/release.notes.html
   jbpm4/indentity/trunk/modules/core/src/test/
   jbpm4/indentity/trunk/modules/core/src/test/java/
   jbpm4/indentity/trunk/modules/core/src/test/java/org/
   jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/
   jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/
   jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/AllTests.java
   jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/IdentityServiceTest.java
   jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/ObjectEqualityDbTest.java
   jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/UserTest.java
   jbpm4/indentity/trunk/modules/core/src/test/resources/
   jbpm4/indentity/trunk/modules/core/src/test/resources/org.jbpm.id.cfg.xml
   jbpm4/indentity/trunk/pom.xml
Log:
Start identity project

Added: jbpm4/indentity/trunk/.classpath
===================================================================
--- jbpm4/indentity/trunk/.classpath	                        (rev 0)
+++ jbpm4/indentity/trunk/.classpath	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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/indentity/trunk/.project
===================================================================
--- jbpm4/indentity/trunk/.project	                        (rev 0)
+++ jbpm4/indentity/trunk/.project	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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/indentity/trunk/hudson/ant.properties.example
===================================================================
--- jbpm4/indentity/trunk/hudson/ant.properties.example	                        (rev 0)
+++ jbpm4/indentity/trunk/hudson/ant.properties.example	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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/indentity/trunk/hudson/apache-tomcat/conf/server.xml
===================================================================
--- jbpm4/indentity/trunk/hudson/apache-tomcat/conf/server.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/hudson/apache-tomcat/conf/server.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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/indentity/trunk/hudson/apache-tomcat/conf/server.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/indentity/trunk/hudson/apache-tomcat/conf/tomcat-users.xml
===================================================================
--- jbpm4/indentity/trunk/hudson/apache-tomcat/conf/tomcat-users.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/hudson/apache-tomcat/conf/tomcat-users.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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/indentity/trunk/hudson/apache-tomcat/conf/tomcat-users.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/indentity/trunk/hudson/build.xml
===================================================================
--- jbpm4/indentity/trunk/hudson/build.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/hudson/build.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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/indentity/trunk/hudson/build.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/indentity/trunk/hudson/hudson-home/config.xml
===================================================================
--- jbpm4/indentity/trunk/hudson/hudson-home/config.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/hudson/hudson-home/config.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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/indentity/trunk/hudson/hudson-home/config.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/indentity/trunk/hudson/hudson-home/hudson.tasks.Mailer.xml
===================================================================
--- jbpm4/indentity/trunk/hudson/hudson-home/hudson.tasks.Mailer.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/hudson/hudson-home/hudson.tasks.Mailer.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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/indentity/trunk/hudson/hudson-home/hudson.tasks.Mailer.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/indentity/trunk/hudson/hudson-home/hudson.tasks.Maven.xml
===================================================================
--- jbpm4/indentity/trunk/hudson/hudson-home/hudson.tasks.Maven.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/hudson/hudson-home/hudson.tasks.Maven.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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/indentity/trunk/hudson/hudson-home/hudson.tasks.Maven.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/indentity/trunk/hudson/hudson-home/jobs/jBPM4/config.xml
===================================================================
--- jbpm4/indentity/trunk/hudson/hudson-home/jobs/jBPM4/config.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/hudson/hudson-home/jobs/jBPM4/config.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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/indentity/trunk/hudson/hudson-home/jobs/jBPM4/config.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/indentity/trunk/modules/core/pom.xml
===================================================================
--- jbpm4/indentity/trunk/modules/core/pom.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/pom.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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 - Identity Core</name>
+   <groupId>org.jboss.jbpm</groupId>
+   <artifactId>jbpm-identity</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>
+                  
+               </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/id/IdentityServiceTest.java</exclude>
+                 <exclude>org/jbpm/id/ObjectEqualityDbTest.java</exclude>
+               </excludes>
+            </configuration>
+         </plugin>
+      </plugins>
+   </build>
+</project>


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

Added: jbpm4/indentity/trunk/modules/core/src/main/doc/models.uml
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/doc/models.uml	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/doc/models.uml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,2104 @@
+<?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:PROFILE>UMLStandard</XPD:PROFILE>
+<XPD:PROFILE>ERD</XPD:PROFILE>
+</XPD:PROFILES>
+</XPD:HEADER>
+<XPD:BODY>
+<XPD:OBJ name="DocumentElement" type="UMLProject" guid="SFKy0gfzeUOt9WIuFpuPJwAA">
+<XPD:ATTR name="Title" type="string">Untitled</XPD:ATTR>
+<XPD:ATTR name="#OwnedElements" type="integer">5</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLModel" guid="MmlfE7IrhkaBnJGisyKhAwAA">
+<XPD:ATTR name="Name" type="string">Use Case Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">useCaseModel</XPD:ATTR>
+<XPD:REF name="Namespace">SFKy0gfzeUOt9WIuFpuPJwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLUseCaseDiagram" guid="Lre0gSFS5kyvvJRm2jE/iwAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:REF name="DiagramOwner">MmlfE7IrhkaBnJGisyKhAwAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLUseCaseDiagramView" guid="prGt17glb0m5rNIgkyAUCgAA">
+<XPD:REF name="Diagram">Lre0gSFS5kyvvJRm2jE/iwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[1]" type="UMLModel" guid="VXiDLgpRU0OwRgwSvXn4gwAA">
+<XPD:ATTR name="Name" type="string">Analysis Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">analysisModel</XPD:ATTR>
+<XPD:REF name="Namespace">SFKy0gfzeUOt9WIuFpuPJwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLClassDiagram" guid="YqxKUxZYckG8E48rhS13TAAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:ATTR name="DefaultDiagram" type="boolean">True</XPD:ATTR>
+<XPD:ATTR name="DiagramType" type="string">RobustnessDiagram</XPD:ATTR>
+<XPD:REF name="DiagramOwner">VXiDLgpRU0OwRgwSvXn4gwAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLClassDiagramView" guid="cwXqF9WhRUeKn8BXIRTJkAAA">
+<XPD:REF name="Diagram">YqxKUxZYckG8E48rhS13TAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[2]" type="UMLModel" guid="2VWhDnmwo0ix2f/qWIJoQQAA">
+<XPD:ATTR name="Name" type="string">Design Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">designModel</XPD:ATTR>
+<XPD:REF name="Namespace">SFKy0gfzeUOt9WIuFpuPJwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLClassDiagram" guid="LD6gEBruw0KnrfR/LeUZawAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:ATTR name="DefaultDiagram" type="boolean">True</XPD:ATTR>
+<XPD:REF name="DiagramOwner">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLClassDiagramView" guid="YrSY0VG8w02y8rpl+N2f/QAA">
+<XPD:REF name="Diagram">LD6gEBruw0KnrfR/LeUZawAA</XPD:REF>
+<XPD:ATTR name="#OwnedViews" type="integer">15</XPD:ATTR>
+<XPD:OBJ name="OwnedViews[0]" type="UMLClassView" guid="L2HdIRUnB0KXWhOPLM7ZpgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">132</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">188</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">93</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">98</XPD:ATTR>
+<XPD:REF name="Model">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="GPE+JFO9iE+R/MZOP7vNlQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="ZSAN1lAw9kWgAfyXQTMU7AAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">User</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="NZFWyMOt2U6zPNlH5ldSIwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="MFa0e2rvCEW8MhBe60umswAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="PCheRuZpRE2Cu7BHAZygzQAA">
+<XPD:REF name="Model">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="3X85kOLWpUiaGCtvLd14vgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="PISF5PqtpUK/sqjlfUCDKgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[1]" type="UMLClassView" guid="E500kzt0P0SHU5an75+xnAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">520</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">192</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">86</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">72</XPD:ATTR>
+<XPD:REF name="Model">XgXvqt8MvEWJpcTpmlr/gwAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="FBTxJQnx70W37IBq7WHITAAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="Byx4uX107U2HVPPCi/206wAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">Group</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="Cjxi6bnhiESc4wQO7J7gWQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="R4siFGcmx0ml/fKsC5Ga6AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="Ix54/fgyE0OgAFdJsnDHdQAA">
+<XPD:REF name="Model">XgXvqt8MvEWJpcTpmlr/gwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="wYOONhbS00e6hVsC/nMJlgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">XgXvqt8MvEWJpcTpmlr/gwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="v1nVF813xESep4TRjSoR1gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">XgXvqt8MvEWJpcTpmlr/gwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[2]" type="UMLClassView" guid="l+E+cqk2k0uv4Rb7dTLqMAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">340</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">188</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">80</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">46</XPD:ATTR>
+<XPD:REF name="Model">Ynz++EPVBEO+oLLjSnR28wAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="gvAMAwhucU6rzIAiMAR+OgAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="pJT+G+IaZ0+5CoKVQt/2KgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">Membership</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="/T4QK0Euy0elA8MGWEeeZAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="SrUMoXaLW0axt2cZgQa2ywAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="PRH3gL3GZ02sv0aEnkuYLwAA">
+<XPD:REF name="Model">Ynz++EPVBEO+oLLjSnR28wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="raOvHDd4uUS/RR/IVf6+PgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">Ynz++EPVBEO+oLLjSnR28wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="giZaGg0cQEabhP5Lsf4/TAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">Ynz++EPVBEO+oLLjSnR28wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[3]" type="UMLAssociationView" guid="W5n7V+vwlUGjMFnJf37MogAA">
+<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">520,208;419,208</XPD:ATTR>
+<XPD:REF name="Model">QhRocEhIrkaE5uj2ohPq5gAA</XPD:REF>
+<XPD:REF name="Head">l+E+cqk2k0uv4Rb7dTLqMAAA</XPD:REF>
+<XPD:REF name="Tail">E500kzt0P0SHU5an75+xnAAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="dbHwqetg8kmzdqQoUlJWswAA">
+<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">QhRocEhIrkaE5uj2ohPq5gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="1OBnuYS3G0OvhFYBVoRDXQAA">
+<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">QhRocEhIrkaE5uj2ohPq5gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="s4VGjXkWCEiW40SU2m6OrAAA">
+<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">QhRocEhIrkaE5uj2ohPq5gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="lmAnsiNM3UaEmq2J1weEsgAA">
+<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">0JXs2qIxuUmGr64mRyKhLAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="gijKfDnYMECeJARlV0Nf7gAA">
+<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">soqpOs+N+EW0aZFgmrucIgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="sV1/SH8e7Ue0EB+tKuDwnQAA">
+<XPD:ATTR name="Alpha" type="real">-0,750928729856491</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">20,5182845286832</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">*</XPD:ATTR>
+<XPD:REF name="Model">0JXs2qIxuUmGr64mRyKhLAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="E8hD81MhbE2Ah3mfMHzB3AAA">
+<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">soqpOs+N+EW0aZFgmrucIgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="k359rPVc6kWREynY5VpOagAA">
+<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">0JXs2qIxuUmGr64mRyKhLAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="Y6OHTzw26EOpFDT0eLjFXAAA">
+<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">soqpOs+N+EW0aZFgmrucIgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="Wmi3PHMvV0izAPrirJdSRQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1004</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">0JXs2qIxuUmGr64mRyKhLAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="2H4gUzEPG0GLFhscXPMshwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1004</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">soqpOs+N+EW0aZFgmrucIgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[4]" type="UMLClassView" guid="I32qylNMgUK3mfG9ixTzTgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">164</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">76</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">60</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">30</XPD:ATTR>
+<XPD:ATTR name="AutoResize" type="boolean">True</XPD:ATTR>
+<XPD:REF name="Model">bvcCRaiVmk+m3reKH7sc/wAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="eHlwSqzogEqoFv6ZPW/vaQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="sjszB0daZkyTD1FLp7/FFgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">Property</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="ZdBRUryn00W9y1db8Dpy9gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="KnsOauU6fU64kJZKJn6FeAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="fgxJfmJNK0qtFwijq/U4wAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">bvcCRaiVmk+m3reKH7sc/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="mEqfMFRXcUq2vdhCvdFzqwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">bvcCRaiVmk+m3reKH7sc/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="Sxa3OS4Ye025alDKatOrcQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">bvcCRaiVmk+m3reKH7sc/wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[5]" type="UMLAssociationView" guid="+3pDc3s10k+dylAT4cTgfAAA">
+<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">224,208;340,208</XPD:ATTR>
+<XPD:REF name="Model">Fj6ASOgcyECxoYQZUWzkzAAA</XPD:REF>
+<XPD:REF name="Head">l+E+cqk2k0uv4Rb7dTLqMAAA</XPD:REF>
+<XPD:REF name="Tail">L2HdIRUnB0KXWhOPLM7ZpgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="PtY42ndC6Ui0UHMIUQmAlQAA">
+<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">Fj6ASOgcyECxoYQZUWzkzAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="C5KX2a7bV0ieV3QO7iucHAAA">
+<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">Fj6ASOgcyECxoYQZUWzkzAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="Xtxm7iLNKkSOtX/rx4nY4AAA">
+<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">Fj6ASOgcyECxoYQZUWzkzAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="tC5K3gOzDkycYmSm1wLziAAA">
+<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">gilud8NU0kmzD1wV9qEyXQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="EYrhrmuI6UGG/zIPivtajAAA">
+<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">OF9NCyGii06fGXHEe8x2rQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="Mjj895W9A024aab3DXHOqwAA">
+<XPD:ATTR name="Alpha" type="real">0,588002859957923</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">21,6333076527839</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">*</XPD:ATTR>
+<XPD:REF name="Model">gilud8NU0kmzD1wV9qEyXQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="wyPXuYcslU+z1jCzzf/dSwAA">
+<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">OF9NCyGii06fGXHEe8x2rQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="QIfQxO8ksU6m2ryXfrz+3wAA">
+<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">gilud8NU0kmzD1wV9qEyXQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="PE6xEyD5T0+SnnDpgq3cwwAA">
+<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">OF9NCyGii06fGXHEe8x2rQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="f+lYO4RsvUCHDffrTWdUdQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1004</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">gilud8NU0kmzD1wV9qEyXQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="c02edfyeO0OWXROuRqBEEQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1004</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">OF9NCyGii06fGXHEe8x2rQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[6]" type="UMLClassView" guid="QMFbZuboe0ecFo6y0DORigAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">324</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">40</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">109</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">73</XPD:ATTR>
+<XPD:REF name="Model">aMse2dPTW0e1cPWgT5yomQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="Ec7ZKYI7IkiYIY7A1E1bngAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="uubzIUcaDEuokGPfa7m5SgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">Identity</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="SmxkuZyWh0qA3LZHFViPkQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="iS8KUBmlmkiQqrxthyjfOgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="WiOfDt4Gc0ScTBymY0XAQAAA">
+<XPD:REF name="Model">aMse2dPTW0e1cPWgT5yomQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="FtUTKGcdEU2VslTd4qBTdQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">aMse2dPTW0e1cPWgT5yomQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="MUQnZMVWvEGBT5zf6s+VlQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">aMse2dPTW0e1cPWgT5yomQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[7]" type="UMLAssociationView" guid="olV5jVIJkUCkNM5V1aRuxgAA">
+<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">223,100;324,100</XPD:ATTR>
+<XPD:REF name="Model">nt47VeFLgE2DKmj6jnBJsgAA</XPD:REF>
+<XPD:REF name="Head">QMFbZuboe0ecFo6y0DORigAA</XPD:REF>
+<XPD:REF name="Tail">I32qylNMgUK3mfG9ixTzTgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="78HwQ5VAf0mKUjDAZlSv+gAA">
+<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">nt47VeFLgE2DKmj6jnBJsgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="0XvbOz1WIECUEovZiFMyBQAA">
+<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">nt47VeFLgE2DKmj6jnBJsgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="Pdrud5iH90ir4+RUn+5zyAAA">
+<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">nt47VeFLgE2DKmj6jnBJsgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="ZV9bIgO/cEa2T1i3gP2RgwAA">
+<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">zQnxl/F/akaOYTyJZmmaWAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="ohf1xcO4+0SBEj6xa2yk0wAA">
+<XPD:ATTR name="Alpha" type="real">0,348770906260332</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">35,1140997321589</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">+properties</XPD:ATTR>
+<XPD:REF name="Model">bRIeqXEQUEq6yYT2Bh73fgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="sb2xeiKxfkqoQZAupd/eRQAA">
+<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">zQnxl/F/akaOYTyJZmmaWAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="WW+cbl/U6kOcqOl7y3BhawAA">
+<XPD:ATTR name="Alpha" type="real">-1,07685436154523</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">14,7648230602334</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">*</XPD:ATTR>
+<XPD:REF name="Model">bRIeqXEQUEq6yYT2Bh73fgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="3ECDAGInrUCw2A3lQ5/G2QAA">
+<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">zQnxl/F/akaOYTyJZmmaWAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="pFRi4mBs60iDLHyD1592FgAA">
+<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">bRIeqXEQUEq6yYT2Bh73fgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="bLQI36E5I0euChpmnVMjpQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">zQnxl/F/akaOYTyJZmmaWAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="pliCSpFyREq7LYrItI84jgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">bRIeqXEQUEq6yYT2Bh73fgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[8]" type="UMLGeneralizationView" guid="k91NXSq4rUCcYGXuCoL52wAA">
+<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">180,188;180,156;376,156;376,112</XPD:ATTR>
+<XPD:REF name="Model">jScvqiffCkWS63+XW17yvQAA</XPD:REF>
+<XPD:REF name="Head">QMFbZuboe0ecFo6y0DORigAA</XPD:REF>
+<XPD:REF name="Tail">L2HdIRUnB0KXWhOPLM7ZpgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="6Rjd5wogjkikgsTLr+hQowAA">
+<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">jScvqiffCkWS63+XW17yvQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="sG+MI8BsDEGYnxXsbuQkXQAA">
+<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">jScvqiffCkWS63+XW17yvQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="st5jQWrG2E+BZpdDJIWZ5QAA">
+<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">jScvqiffCkWS63+XW17yvQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[9]" type="UMLGeneralizationView" guid="HfXQ5YktLkyuJ9C4svEcgwAA">
+<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">376,188;376,112</XPD:ATTR>
+<XPD:REF name="Model">kMS+BSoX8kiIzvTJ0cLsDwAA</XPD:REF>
+<XPD:REF name="Head">QMFbZuboe0ecFo6y0DORigAA</XPD:REF>
+<XPD:REF name="Tail">l+E+cqk2k0uv4Rb7dTLqMAAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="CtFgC3GAeEewRNRMUcaF7wAA">
+<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">kMS+BSoX8kiIzvTJ0cLsDwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="sF+4M0BWg0OcvQBFaCqW8QAA">
+<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">kMS+BSoX8kiIzvTJ0cLsDwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="rfKGy1SYXk+nsTfVm2e2rQAA">
+<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">kMS+BSoX8kiIzvTJ0cLsDwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[10]" type="UMLGeneralizationView" guid="hpD9m8hdjkuXekiShHOpBgAA">
+<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">568,192;568,156;376,156;376,112</XPD:ATTR>
+<XPD:REF name="Model">4aX/GFTn8EyXxIVomfyQ3gAA</XPD:REF>
+<XPD:REF name="Head">QMFbZuboe0ecFo6y0DORigAA</XPD:REF>
+<XPD:REF name="Tail">E500kzt0P0SHU5an75+xnAAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="Y/u2vRvanUevrfAKoOHLfgAA">
+<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">4aX/GFTn8EyXxIVomfyQ3gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="USeRZdDEYUiAZ6LSZLvBPAAA">
+<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">4aX/GFTn8EyXxIVomfyQ3gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="MMp8gtSwq0aiLyQ8bDXzHwAA">
+<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">4aX/GFTn8EyXxIVomfyQ3gAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[11]" type="UMLClassView" guid="CZ89By4EIUyI3CRYe6yjJwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">164</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">36</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">72</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">30</XPD:ATTR>
+<XPD:ATTR name="AutoResize" type="boolean">True</XPD:ATTR>
+<XPD:REF name="Model">FACTDREeV0mbJsmh5kHXYgAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="L4X/bDhqDEKmer6mBl+pUgAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="hELH/po0VkmgOK7Tm4sWpgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">Permission</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="adOT2Tu/RkS/kIOVYE6yHwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="6t5NwcpMI06wrpeAdew8PgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="x17Xjk6SX0eNlHGvJpmxbwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">FACTDREeV0mbJsmh5kHXYgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="vjfwcEizSkumg6DsL8VLLAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">FACTDREeV0mbJsmh5kHXYgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="crMBoRxUaUO5o3pewfhz6QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">FACTDREeV0mbJsmh5kHXYgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[12]" type="UMLAssociationView" guid="3T+jKUvfOUetJbB3ng7nXgAA">
+<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">235,56;324,56</XPD:ATTR>
+<XPD:REF name="Model">Gql7ZxA7NUOTF94WRCKJ2QAA</XPD:REF>
+<XPD:REF name="Head">QMFbZuboe0ecFo6y0DORigAA</XPD:REF>
+<XPD:REF name="Tail">CZ89By4EIUyI3CRYe6yjJwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="PjCe4HcL60u9kK5Ry++MVwAA">
+<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">Gql7ZxA7NUOTF94WRCKJ2QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="FJxt5nQ6NUqVrDXkcGYaUwAA">
+<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">Gql7ZxA7NUOTF94WRCKJ2QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="z+AExyvbLkCBPVfFbjMyDgAA">
+<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">Gql7ZxA7NUOTF94WRCKJ2QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="GDJ3MHW7u0KIGKrMBc3CEwAA">
+<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">sOc2bvULS0WTKJUYaZpUqwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="f7kZt9Z9C0WOS8o/d+JisgAA">
+<XPD:ATTR name="Alpha" type="real">0,314231825596509</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">42,0594816896262</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">+permissions</XPD:ATTR>
+<XPD:REF name="Model">NI3mXjy5GE6jWXrj7AJUDgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="c4Z6Mva2AUCX6csUAbpI1AAA">
+<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">sOc2bvULS0WTKJUYaZpUqwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="bR1JwusL+EqHkWICU4Lw/AAA">
+<XPD:ATTR name="Alpha" type="real">-0,540419206153081</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">17,4928556845359</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">*</XPD:ATTR>
+<XPD:REF name="Model">NI3mXjy5GE6jWXrj7AJUDgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="4PpTtWgYxkKWRa+N6gupIAAA">
+<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">sOc2bvULS0WTKJUYaZpUqwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="3pbTtoUVkkGY33OU53SpjQAA">
+<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">NI3mXjy5GE6jWXrj7AJUDgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="wBkIgbbNEEqWXxxK+MMG4QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">sOc2bvULS0WTKJUYaZpUqwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="/2fLJ4PTRkK+aBZPGbXfxAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">NI3mXjy5GE6jWXrj7AJUDgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[13]" type="UMLAssociationView" guid="3eBOJwYoDECDEdMphMhvzQAA">
+<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">164,90;96,90;96,224;132,224</XPD:ATTR>
+<XPD:REF name="Model">BV50PoLPGk6ILDiJJDDtIAAA</XPD:REF>
+<XPD:REF name="Head">L2HdIRUnB0KXWhOPLM7ZpgAA</XPD:REF>
+<XPD:REF name="Tail">I32qylNMgUK3mfG9ixTzTgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="KUNywwz+v06zFvdrRhw6nQAA">
+<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">BV50PoLPGk6ILDiJJDDtIAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="S+wS9Htrj0S6r5f1cSXkpQAA">
+<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">BV50PoLPGk6ILDiJJDDtIAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="Ogcf4OjenU+o7fQDHeAaXAAA">
+<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">BV50PoLPGk6ILDiJJDDtIAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="sxXKO8gzekeyW3jQBcb8ngAA">
+<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">daXt33JgCkCECD/gf4IpvgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="9wxzZtYrFUyBHvFZTvxa4QAA">
+<XPD:ATTR name="Alpha" type="real">-0,179853539792487</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">44,7213595499958</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">+preferences</XPD:ATTR>
+<XPD:REF name="Model">5FT2YpPYNUCBElvb9K8eygAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="g5Npiue9oEyxcM2aJl0xlwAA">
+<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">daXt33JgCkCECD/gf4IpvgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="/FcZb+MCjkmv0Tq7Q69WVgAA">
+<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">5FT2YpPYNUCBElvb9K8eygAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="1lKxOkupSU+kTCLuelpzFgAA">
+<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">daXt33JgCkCECD/gf4IpvgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="Si1+loMA0kWcFI8sI++KDQAA">
+<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">5FT2YpPYNUCBElvb9K8eygAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="6zTN9eorWU6V0SH1If1vnwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1008</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">daXt33JgCkCECD/gf4IpvgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="VfIos/OQtU+xI6hNP/05fwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1008</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">5FT2YpPYNUCBElvb9K8eygAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[14]" type="UMLAssociationView" guid="ZeoFoac3WE6KXIpyCIgIhQAA">
+<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">584,192;584,172;676,172;676,227;605,227</XPD:ATTR>
+<XPD:REF name="Model">LoaGoSPyIkCr07RS19RJwgAA</XPD:REF>
+<XPD:REF name="Head">E500kzt0P0SHU5an75+xnAAA</XPD:REF>
+<XPD:REF name="Tail">E500kzt0P0SHU5an75+xnAAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="jNzzmMOAGkiUIz1nRXhQdAAA">
+<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">LoaGoSPyIkCr07RS19RJwgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="ZCBHEMsIYkmNXGHsASeT0QAA">
+<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">LoaGoSPyIkCr07RS19RJwgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="eq6ZJ28G7Uejf3JBIWV85wAA">
+<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">LoaGoSPyIkCr07RS19RJwgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="aQTlPaHwekmHeJLj1gADdQAA">
+<XPD:ATTR name="Alpha" type="real">0,345555453103004</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">26,5706605111728</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">+children</XPD:ATTR>
+<XPD:REF name="Model">iuAemlPRREaMAXICRLp2RwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="zPkxUjcRHEu5WvRCyuU0OwAA">
+<XPD:ATTR name="Alpha" type="real">-0,631079138194524</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">32,2024843762092</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">+parent</XPD:ATTR>
+<XPD:REF name="Model">xqS9idj2IkCHkImTf1WWBQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="j56a+gafU0S04zqYZOJl2wAA">
+<XPD:ATTR name="Alpha" type="real">-0,885066271334398</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">14,2126704035519</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">*</XPD:ATTR>
+<XPD:REF name="Model">iuAemlPRREaMAXICRLp2RwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="VKXIv3oY2EaY2Qz5aovRIwAA">
+<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">xqS9idj2IkCHkImTf1WWBQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="0aaDYyD3K0ahuToSb/bt7gAA">
+<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">iuAemlPRREaMAXICRLp2RwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="SLYQ0SXbD0ampnxwK0rn3gAA">
+<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">xqS9idj2IkCHkImTf1WWBQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="HSoheQFynUGZ8ggqtgJXYAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">iuAemlPRREaMAXICRLp2RwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="uVZPpknS7kSuTy4o+T8G/QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">xqS9idj2IkCHkImTf1WWBQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedDiagrams[1]" type="UMLClassDiagram" guid="9D2qHFyxbUmfQy4rNNbgawAA">
+<XPD:ATTR name="Name" type="string">ER(IE) Diagram1</XPD:ATTR>
+<XPD:ATTR name="DiagramType" type="string">ER(IE) Diagram</XPD:ATTR>
+<XPD:REF name="DiagramOwner">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLClassDiagramView" guid="R/rfvrw0fUufhpPoHK0MnAAA">
+<XPD:REF name="Diagram">9D2qHFyxbUmfQy4rNNbgawAA</XPD:REF>
+<XPD:ATTR name="#OwnedViews" type="integer">8</XPD:ATTR>
+<XPD:OBJ name="OwnedViews[0]" type="UMLClassView" guid="soP9ko6CbUGyz/cZ4Mx6cgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="ShowExtendedNotation" type="boolean">True</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">44</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">56</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">142</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">144</XPD:ATTR>
+<XPD:ATTR name="StereotypeDisplay" type="UMLStereotypeDisplayKind">sdkNone</XPD:ATTR>
+<XPD:ATTR name="ShowOperationSignature" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="ShowCompartmentStereotype" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="ShowCompartmentVisibility" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">E1+uDXXaAkCLQt2z/TrtdQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="9jUFKk93qUypAqvwn9ZflQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="ISeVwP3ukE6kjCpgv7EcgAAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">USER</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="HH2/OYE4B0OyimfqiKNYpQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="qTahG3iHAUmG9LtbAk4yoQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="mtvq3WRJJ0isWgu9fHAT4wAA">
+<XPD:REF name="Model">E1+uDXXaAkCLQt2z/TrtdQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="JNzmUNX1IkqVkYfApY3v8AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">E1+uDXXaAkCLQt2z/TrtdQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="E3Q08iGMCEaNKzPT3uM1jQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">E1+uDXXaAkCLQt2z/TrtdQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[1]" type="UMLClassView" guid="V3lPgW2pFU2SCAI9JpzYnwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="ShowExtendedNotation" type="boolean">True</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">612</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">56</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">128</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">118</XPD:ATTR>
+<XPD:ATTR name="StereotypeDisplay" type="UMLStereotypeDisplayKind">sdkNone</XPD:ATTR>
+<XPD:ATTR name="ShowOperationSignature" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="ShowCompartmentStereotype" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="ShowCompartmentVisibility" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">LqtsSgler0ytdGl628lqCAAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="Rjq8j++wr0yNBEG+S837IgAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="bG/6lZvegUG1+CKWEJqjQgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">GROUP</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="lTGMNWcV1UiNUGd5SUaSlwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="7cn4CGzZhkmOWjSwsiu1TgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="BAgobnrLT0WRDViCG3kMnQAA">
+<XPD:REF name="Model">LqtsSgler0ytdGl628lqCAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="Smp2gAII5kGIXwz8aiAb3QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">LqtsSgler0ytdGl628lqCAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="/qhOVS1csEmJ5fk4ExsGTwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">LqtsSgler0ytdGl628lqCAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[2]" type="UMLClassView" guid="sbd2Gz/ktEOnP43bY99rBwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="ShowExtendedNotation" type="boolean">True</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">216</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">252</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">90</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">51</XPD:ATTR>
+<XPD:ATTR name="StereotypeDisplay" type="UMLStereotypeDisplayKind">sdkNone</XPD:ATTR>
+<XPD:ATTR name="ShowOperationSignature" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="ShowCompartmentStereotype" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="ShowCompartmentVisibility" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">KatzBbwK80WLqpTFygv5nwAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="bZtDoHtVbUmbh2kX9y0AeQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="shNJc+eRtkGxOyxQa5x83AAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">PERMISSION</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="BmMyQoOjB0eCwOe6xMhO0gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="SouKSShBJ0yFjRo+GXbfcgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="AL+A2Rhri0uEUuTAtEvw0QAA">
+<XPD:REF name="Model">KatzBbwK80WLqpTFygv5nwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="hCpXAlnj6UWg66moBPvUZQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">KatzBbwK80WLqpTFygv5nwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="onvlzSRsM0uUXoPyWsQUiQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">KatzBbwK80WLqpTFygv5nwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[3]" type="UMLClassView" guid="1/33Y0gMMUW31b/FxQ+QjwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="ShowExtendedNotation" type="boolean">True</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">308</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">56</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">143</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">105</XPD:ATTR>
+<XPD:ATTR name="StereotypeDisplay" type="UMLStereotypeDisplayKind">sdkNone</XPD:ATTR>
+<XPD:ATTR name="ShowOperationSignature" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="ShowCompartmentStereotype" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="ShowCompartmentVisibility" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">3yr+H4DhT0qXFxiWd2vfZAAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="SYSO9KBDO0C5HlbgsL5ahwAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="s/W/LKSE7k6WJB//YS2rpQAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">MEMBERSHIP</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="pqW/pFOEt0CX7HltHHw/rAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="PsA/QyWr6k+PnVWwxkr4BQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="C+WgmpajZ06aflKQkVhGWQAA">
+<XPD:REF name="Model">3yr+H4DhT0qXFxiWd2vfZAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="Z822K8KJIUe4S3rRJjMRTAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">3yr+H4DhT0qXFxiWd2vfZAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="rlmlfa9DU0WEaaLd7jXZ5AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">3yr+H4DhT0qXFxiWd2vfZAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[4]" type="UMLAssociationView" guid="5POJ1oGvBUSRa1kSdgvWeQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="ShowExtendedNotation" type="boolean">True</XPD:ATTR>
+<XPD:ATTR name="LineStyle" type="LineStyleKind">lsRectilinear</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">308,116;185,116</XPD:ATTR>
+<XPD:ATTR name="ShowCompartmentStereotype" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="ShowCompartmentVisibility" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">WHScUyOIrkiop7/BOTSpKAAA</XPD:REF>
+<XPD:REF name="Head">soP9ko6CbUGyz/cZ4Mx6cgAA</XPD:REF>
+<XPD:REF name="Tail">1/33Y0gMMUW31b/FxQ+QjwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="BaarGZxnuEmtyuwcHr2KUQAA">
+<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">WHScUyOIrkiop7/BOTSpKAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="ljR3hJYzr0yWwyORY9twvQAA">
+<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:ATTR name="Text" type="string">&lt;&lt;identifying&gt;&gt;</XPD:ATTR>
+<XPD:REF name="Model">WHScUyOIrkiop7/BOTSpKAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="81X7p2yA6UKseafg1CGWUgAA">
+<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">WHScUyOIrkiop7/BOTSpKAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="ev3aqh/430C1gbObY5BlegAA">
+<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">adEtdnQRk0qRVSxgPlaFGgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="EFRVWqUYsUS9IZZM1swL0gAA">
+<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">hEakj/zN50ehZ6WP7E05wAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="MeeG2NSHI0CKtijqgxE9HAAA">
+<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">adEtdnQRk0qRVSxgPlaFGgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="PpBsMs0fEEuLzojoB5MP0gAA">
+<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:ATTR name="Text" type="string">*</XPD:ATTR>
+<XPD:REF name="Model">hEakj/zN50ehZ6WP7E05wAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="4xa0aNdBW0m3hihbrq9cYAAA">
+<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">adEtdnQRk0qRVSxgPlaFGgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="+tjncZmPCEeDCsyPO6eTSQAA">
+<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">hEakj/zN50ehZ6WP7E05wAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="5ki3yYgd9kSg4EeW1mHv2gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">adEtdnQRk0qRVSxgPlaFGgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="sX2BZkX39UOSC9mdI9eGhAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">hEakj/zN50ehZ6WP7E05wAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[5]" type="UMLClassView" guid="ymgsmpJUxEWXvPUiSRqLtgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="ShowExtendedNotation" type="boolean">True</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">444</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">228</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">128</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">64</XPD:ATTR>
+<XPD:ATTR name="StereotypeDisplay" type="UMLStereotypeDisplayKind">sdkNone</XPD:ATTR>
+<XPD:ATTR name="ShowOperationSignature" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="ShowCompartmentStereotype" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="ShowCompartmentVisibility" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">fchUG9V6p0e3vWPnCiWIigAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="mVgPOvwaR0Cdp0E6ixIfswAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="niIZns3nC0+xekdf82L8MQAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">PROPERTY</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="EAkevls+zkCz6aGqSKdhngAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="d/K4repfTUaoiEYqyzq/3AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="TLu4PDlkEkynKOHIBPbzdQAA">
+<XPD:REF name="Model">fchUG9V6p0e3vWPnCiWIigAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="9Wxy/v8YOESColEkIKBLewAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">fchUG9V6p0e3vWPnCiWIigAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="nBY4pl+qqkquTnf+sUpAcAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">fchUG9V6p0e3vWPnCiWIigAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[6]" type="UMLAssociationView" guid="twffHrKJYkaFxkbR2Ti9MAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="ShowExtendedNotation" type="boolean">True</XPD:ATTR>
+<XPD:ATTR name="LineStyle" type="LineStyleKind">lsRectilinear</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">450,128;612,128</XPD:ATTR>
+<XPD:ATTR name="ShowCompartmentStereotype" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="ShowCompartmentVisibility" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">mhyaE4CKr0SEwmrnEpuK7wAA</XPD:REF>
+<XPD:REF name="Head">V3lPgW2pFU2SCAI9JpzYnwAA</XPD:REF>
+<XPD:REF name="Tail">1/33Y0gMMUW31b/FxQ+QjwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="ROAP9xLxeEu7TRCO9FaD9wAA">
+<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">mhyaE4CKr0SEwmrnEpuK7wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="g+KVCakhNE6rgZzQROd6NQAA">
+<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:ATTR name="Text" type="string">&lt;&lt;identifying&gt;&gt;</XPD:ATTR>
+<XPD:REF name="Model">mhyaE4CKr0SEwmrnEpuK7wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="zrU+z7IxY0ywNsHNj4P8DwAA">
+<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">mhyaE4CKr0SEwmrnEpuK7wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="jEFsKPFcPUqxdxgWV9ogKgAA">
+<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">QR7i8Rd8RUSbJe5lydEm5QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="9uVEk7fkQkycyXqWPyQ7DQAA">
+<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">ExNGgTikIkanuowy7Sn8QwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="WqtwUmMvFUi2KLwrOZwJFgAA">
+<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">QR7i8Rd8RUSbJe5lydEm5QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="maLd7KFPlk+qDCsTX3neQwAA">
+<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:ATTR name="Text" type="string">*</XPD:ATTR>
+<XPD:REF name="Model">ExNGgTikIkanuowy7Sn8QwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="u7jZnfO/g0i8X2SumjkgOwAA">
+<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">QR7i8Rd8RUSbJe5lydEm5QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="6lKyiYepIUqBy87nV2YwMgAA">
+<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">ExNGgTikIkanuowy7Sn8QwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="vXHlD+ikrEuub6qQYlQhSAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">QR7i8Rd8RUSbJe5lydEm5QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="8BzwGEjEB021SVZm6vYZHgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">ExNGgTikIkanuowy7Sn8QwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[7]" type="UMLNoteView" guid="+0P5DeJA7UOCAm6YU2HucAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">276</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">208</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">193</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">73</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">TODO: Complete this
+</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:ATTR name="#OwnedElements" type="integer">33</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLClass" guid="CgxQ3apT6EW3ma9tmpb6BQAA">
+<XPD:ATTR name="Name" type="string">User</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">L2HdIRUnB0KXWhOPLM7ZpgAA</XPD:REF>
+<XPD:REF name="Views[1]">PCheRuZpRE2Cu7BHAZygzQAA</XPD:REF>
+<XPD:REF name="Views[2]">3X85kOLWpUiaGCtvLd14vgAA</XPD:REF>
+<XPD:REF name="Views[3]">PISF5PqtpUK/sqjlfUCDKgAA</XPD:REF>
+<XPD:ATTR name="#Generalizations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Generalizations[0]">jScvqiffCkWS63+XW17yvQAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">9</XPD:ATTR>
+<XPD:REF name="Associations[0]">JOR1UkTs70arkSiao/lqoQAA</XPD:REF>
+<XPD:REF name="Associations[1]">OPpyFlEZf0+2AD3mg65OhQAA</XPD:REF>
+<XPD:REF name="Associations[2]">XB/v81DVP0au4uVhM+HXrQAA</XPD:REF>
+<XPD:REF name="Associations[3]">xAmC878NTEiZ0Em7K+NzJQAA</XPD:REF>
+<XPD:REF name="Associations[4]">OF9NCyGii06fGXHEe8x2rQAA</XPD:REF>
+<XPD:REF name="Associations[5]">xMLW8bt1sEGLyKtEHgvShwAA</XPD:REF>
+<XPD:REF name="Associations[6]">OwJKeHzbXkmvERbHa3ID+wAA</XPD:REF>
+<XPD:REF name="Associations[7]">UDBA1dP2kkyH8+oWhL0sNgAA</XPD:REF>
+<XPD:REF name="Associations[8]">daXt33JgCkCECD/gf4IpvgAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">5</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="dUelPhxTqkG3FWHeJn6QTAAA">
+<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="PtYY4wGWXkiGKSzhy+zkkgAA">
+<XPD:ATTR name="Name" type="string">name</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[2]" type="UMLAttribute" guid="lqZvT689rU292UmuO8tXEAAA">
+<XPD:ATTR name="Name" type="string">email</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[3]" type="UMLAttribute" guid="l8t49eGwGU+ozDZjo55HEQAA">
+<XPD:ATTR name="Name" type="string">phone</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[4]" type="UMLAttribute" guid="47LvQlCZZkWCjuC+9ZAg7AAA">
+<XPD:ATTR name="Name" type="string">address</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[1]" type="UMLClass" guid="XgXvqt8MvEWJpcTpmlr/gwAA">
+<XPD:ATTR name="Name" type="string">Group</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">E500kzt0P0SHU5an75+xnAAA</XPD:REF>
+<XPD:REF name="Views[1]">Ix54/fgyE0OgAFdJsnDHdQAA</XPD:REF>
+<XPD:REF name="Views[2]">wYOONhbS00e6hVsC/nMJlgAA</XPD:REF>
+<XPD:REF name="Views[3]">v1nVF813xESep4TRjSoR1gAA</XPD:REF>
+<XPD:ATTR name="#Generalizations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Generalizations[0]">4aX/GFTn8EyXxIVomfyQ3gAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">3</XPD:ATTR>
+<XPD:REF name="Associations[0]">soqpOs+N+EW0aZFgmrucIgAA</XPD:REF>
+<XPD:REF name="Associations[1]">xqS9idj2IkCHkImTf1WWBQAA</XPD:REF>
+<XPD:REF name="Associations[2]">iuAemlPRREaMAXICRLp2RwAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">3</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="46gqTAHqMkCJXe+IcOmV0QAA">
+<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">XgXvqt8MvEWJpcTpmlr/gwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="t2HdkEUdlEGm8o4gj5q7UgAA">
+<XPD:ATTR name="Name" type="string">name</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">XgXvqt8MvEWJpcTpmlr/gwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[2]" type="UMLAttribute" guid="qw/q6+smjUK2rl1PjRmfTQAA">
+<XPD:ATTR name="Name" type="string">type</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">XgXvqt8MvEWJpcTpmlr/gwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[2]" type="UMLClass" guid="Ynz++EPVBEO+oLLjSnR28wAA">
+<XPD:ATTR name="Name" type="string">Membership</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">l+E+cqk2k0uv4Rb7dTLqMAAA</XPD:REF>
+<XPD:REF name="Views[1]">PRH3gL3GZ02sv0aEnkuYLwAA</XPD:REF>
+<XPD:REF name="Views[2]">raOvHDd4uUS/RR/IVf6+PgAA</XPD:REF>
+<XPD:REF name="Views[3]">giZaGg0cQEabhP5Lsf4/TAAA</XPD:REF>
+<XPD:ATTR name="#Generalizations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Generalizations[0]">kMS+BSoX8kiIzvTJ0cLsDwAA</XPD:REF>
+<XPD:REF name="Generalizations[1]">O4ofQXJOAUSeIC6hqoTTJwAA</XPD:REF>
+<XPD:ATTR name="#Specializations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Specializations[0]">O4ofQXJOAUSeIC6hqoTTJwAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">5</XPD:ATTR>
+<XPD:REF name="Associations[0]">0JXs2qIxuUmGr64mRyKhLAAA</XPD:REF>
+<XPD:REF name="Associations[1]">mor9QkPqoEOoQVNZPKG6YgAA</XPD:REF>
+<XPD:REF name="Associations[2]">e6IURR4DJU6PWWZd5pxTfgAA</XPD:REF>
+<XPD:REF name="Associations[3]">X7MImrDBKE6NrwP5xkq4mgAA</XPD:REF>
+<XPD:REF name="Associations[4]">gilud8NU0kmzD1wV9qEyXQAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="vlBp4sUuTkecblET5hlxLAAA">
+<XPD:ATTR name="Name" type="string">role</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">Ynz++EPVBEO+oLLjSnR28wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[3]" type="UMLAssociation" guid="QhRocEhIrkaE5uj2ohPq5gAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">W5n7V+vwlUGjMFnJf37MogAA</XPD:REF>
+<XPD:REF name="Views[1]">dbHwqetg8kmzdqQoUlJWswAA</XPD:REF>
+<XPD:REF name="Views[2]">1OBnuYS3G0OvhFYBVoRDXQAA</XPD:REF>
+<XPD:REF name="Views[3]">s4VGjXkWCEiW40SU2m6OrAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="soqpOs+N+EW0aZFgmrucIgAA">
+<XPD:REF name="Association">QhRocEhIrkaE5uj2ohPq5gAA</XPD:REF>
+<XPD:REF name="Participant">XgXvqt8MvEWJpcTpmlr/gwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">gijKfDnYMECeJARlV0Nf7gAA</XPD:REF>
+<XPD:REF name="Views[1]">E8hD81MhbE2Ah3mfMHzB3AAA</XPD:REF>
+<XPD:REF name="Views[2]">Y6OHTzw26EOpFDT0eLjFXAAA</XPD:REF>
+<XPD:REF name="Views[3]">2H4gUzEPG0GLFhscXPMshwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="0JXs2qIxuUmGr64mRyKhLAAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akComposite</XPD:ATTR>
+<XPD:ATTR name="Multiplicity" type="string">*</XPD:ATTR>
+<XPD:REF name="Association">QhRocEhIrkaE5uj2ohPq5gAA</XPD:REF>
+<XPD:REF name="Participant">Ynz++EPVBEO+oLLjSnR28wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">lmAnsiNM3UaEmq2J1weEsgAA</XPD:REF>
+<XPD:REF name="Views[1]">sV1/SH8e7Ue0EB+tKuDwnQAA</XPD:REF>
+<XPD:REF name="Views[2]">k359rPVc6kWREynY5VpOagAA</XPD:REF>
+<XPD:REF name="Views[3]">Wmi3PHMvV0izAPrirJdSRQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[4]" type="UMLAssociation" guid="VM9fIa9vuk6CCcKKbE/IGQAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="mor9QkPqoEOoQVNZPKG6YgAA">
+<XPD:REF name="Association">VM9fIa9vuk6CCcKKbE/IGQAA</XPD:REF>
+<XPD:REF name="Participant">Ynz++EPVBEO+oLLjSnR28wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="JOR1UkTs70arkSiao/lqoQAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akComposite</XPD:ATTR>
+<XPD:REF name="Association">VM9fIa9vuk6CCcKKbE/IGQAA</XPD:REF>
+<XPD:REF name="Participant">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[5]" type="UMLAssociation" guid="APLkr+xou0qxz6czvTCoFwAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="OPpyFlEZf0+2AD3mg65OhQAA">
+<XPD:REF name="Association">APLkr+xou0qxz6czvTCoFwAA</XPD:REF>
+<XPD:REF name="Participant">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="e6IURR4DJU6PWWZd5pxTfgAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akComposite</XPD:ATTR>
+<XPD:REF name="Association">APLkr+xou0qxz6czvTCoFwAA</XPD:REF>
+<XPD:REF name="Participant">Ynz++EPVBEO+oLLjSnR28wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[6]" type="UMLClass" guid="bvcCRaiVmk+m3reKH7sc/wAA">
+<XPD:ATTR name="Name" type="string">Property</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">I32qylNMgUK3mfG9ixTzTgAA</XPD:REF>
+<XPD:REF name="Views[1]">fgxJfmJNK0qtFwijq/U4wAAA</XPD:REF>
+<XPD:REF name="Views[2]">mEqfMFRXcUq2vdhCvdFzqwAA</XPD:REF>
+<XPD:REF name="Views[3]">Sxa3OS4Ye025alDKatOrcQAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">7</XPD:ATTR>
+<XPD:REF name="Associations[0]">1HHLU4z6WU+sxNUuQoOlOQAA</XPD:REF>
+<XPD:REF name="Associations[1]">ccyCthzuL0ynMgmjR2LhbQAA</XPD:REF>
+<XPD:REF name="Associations[2]">gNRuYdpWTUu4ke5HMyr2PwAA</XPD:REF>
+<XPD:REF name="Associations[3]">2kOQGbCrXkS+2CSfxRDkGAAA</XPD:REF>
+<XPD:REF name="Associations[4]">1bmS+k2w5kWl+OFezOi1LQAA</XPD:REF>
+<XPD:REF name="Associations[5]">bRIeqXEQUEq6yYT2Bh73fgAA</XPD:REF>
+<XPD:REF name="Associations[6]">5FT2YpPYNUCBElvb9K8eygAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[7]" type="UMLAssociation" guid="tWqXaqWsOUK21+3DwxNacAAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="1HHLU4z6WU+sxNUuQoOlOQAA">
+<XPD:ATTR name="Name" type="string">preferences</XPD:ATTR>
+<XPD:REF name="Association">tWqXaqWsOUK21+3DwxNacAAA</XPD:REF>
+<XPD:REF name="Participant">bvcCRaiVmk+m3reKH7sc/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="XB/v81DVP0au4uVhM+HXrQAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">tWqXaqWsOUK21+3DwxNacAAA</XPD:REF>
+<XPD:REF name="Participant">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[8]" type="UMLAssociation" guid="+9I8v/V/B0mASHY4wocohQAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="xAmC878NTEiZ0Em7K+NzJQAA">
+<XPD:REF name="Association">+9I8v/V/B0mASHY4wocohQAA</XPD:REF>
+<XPD:REF name="Participant">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="X7MImrDBKE6NrwP5xkq4mgAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">+9I8v/V/B0mASHY4wocohQAA</XPD:REF>
+<XPD:REF name="Participant">Ynz++EPVBEO+oLLjSnR28wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[9]" type="UMLAssociation" guid="Fj6ASOgcyECxoYQZUWzkzAAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">+3pDc3s10k+dylAT4cTgfAAA</XPD:REF>
+<XPD:REF name="Views[1]">PtY42ndC6Ui0UHMIUQmAlQAA</XPD:REF>
+<XPD:REF name="Views[2]">C5KX2a7bV0ieV3QO7iucHAAA</XPD:REF>
+<XPD:REF name="Views[3]">Xtxm7iLNKkSOtX/rx4nY4AAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="OF9NCyGii06fGXHEe8x2rQAA">
+<XPD:REF name="Association">Fj6ASOgcyECxoYQZUWzkzAAA</XPD:REF>
+<XPD:REF name="Participant">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">EYrhrmuI6UGG/zIPivtajAAA</XPD:REF>
+<XPD:REF name="Views[1]">wyPXuYcslU+z1jCzzf/dSwAA</XPD:REF>
+<XPD:REF name="Views[2]">PE6xEyD5T0+SnnDpgq3cwwAA</XPD:REF>
+<XPD:REF name="Views[3]">c02edfyeO0OWXROuRqBEEQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="gilud8NU0kmzD1wV9qEyXQAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akComposite</XPD:ATTR>
+<XPD:ATTR name="Multiplicity" type="string">*</XPD:ATTR>
+<XPD:REF name="Association">Fj6ASOgcyECxoYQZUWzkzAAA</XPD:REF>
+<XPD:REF name="Participant">Ynz++EPVBEO+oLLjSnR28wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">tC5K3gOzDkycYmSm1wLziAAA</XPD:REF>
+<XPD:REF name="Views[1]">Mjj895W9A024aab3DXHOqwAA</XPD:REF>
+<XPD:REF name="Views[2]">QIfQxO8ksU6m2ryXfrz+3wAA</XPD:REF>
+<XPD:REF name="Views[3]">f+lYO4RsvUCHDffrTWdUdQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[10]" type="UMLAssociation" guid="3lrrAkWgykWDUj3lXxO3sQAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="xMLW8bt1sEGLyKtEHgvShwAA">
+<XPD:REF name="Association">3lrrAkWgykWDUj3lXxO3sQAA</XPD:REF>
+<XPD:REF name="Participant">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="ccyCthzuL0ynMgmjR2LhbQAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">3lrrAkWgykWDUj3lXxO3sQAA</XPD:REF>
+<XPD:REF name="Participant">bvcCRaiVmk+m3reKH7sc/wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[11]" type="UMLAssociation" guid="GJI5U/VQkUO2NUlexVcLoAAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="gNRuYdpWTUu4ke5HMyr2PwAA">
+<XPD:ATTR name="Name" type="string">properties</XPD:ATTR>
+<XPD:REF name="Association">GJI5U/VQkUO2NUlexVcLoAAA</XPD:REF>
+<XPD:REF name="Participant">bvcCRaiVmk+m3reKH7sc/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="OwJKeHzbXkmvERbHa3ID+wAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">GJI5U/VQkUO2NUlexVcLoAAA</XPD:REF>
+<XPD:REF name="Participant">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[12]" type="UMLAssociation" guid="xGUqjxObukWRK2+QIytyMwAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="2kOQGbCrXkS+2CSfxRDkGAAA">
+<XPD:REF name="Association">xGUqjxObukWRK2+QIytyMwAA</XPD:REF>
+<XPD:REF name="Participant">bvcCRaiVmk+m3reKH7sc/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="UDBA1dP2kkyH8+oWhL0sNgAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">xGUqjxObukWRK2+QIytyMwAA</XPD:REF>
+<XPD:REF name="Participant">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[13]" type="UMLClass" guid="aMse2dPTW0e1cPWgT5yomQAA">
+<XPD:ATTR name="Name" type="string">Identity</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">QMFbZuboe0ecFo6y0DORigAA</XPD:REF>
+<XPD:REF name="Views[1]">WiOfDt4Gc0ScTBymY0XAQAAA</XPD:REF>
+<XPD:REF name="Views[2]">FtUTKGcdEU2VslTd4qBTdQAA</XPD:REF>
+<XPD:REF name="Views[3]">MUQnZMVWvEGBT5zf6s+VlQAA</XPD:REF>
+<XPD:ATTR name="#Specializations" type="integer">3</XPD:ATTR>
+<XPD:REF name="Specializations[0]">jScvqiffCkWS63+XW17yvQAA</XPD:REF>
+<XPD:REF name="Specializations[1]">kMS+BSoX8kiIzvTJ0cLsDwAA</XPD:REF>
+<XPD:REF name="Specializations[2]">4aX/GFTn8EyXxIVomfyQ3gAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">3</XPD:ATTR>
+<XPD:REF name="Associations[0]">Xgr+aMUepEO0epjo0yp2PAAA</XPD:REF>
+<XPD:REF name="Associations[1]">zQnxl/F/akaOYTyJZmmaWAAA</XPD:REF>
+<XPD:REF name="Associations[2]">sOc2bvULS0WTKJUYaZpUqwAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">3</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="J7aOwaRGRkaVjfJcyXP3ZQAA">
+<XPD:ATTR name="Name" type="string">dbid</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">long</XPD:ATTR>
+<XPD:REF name="Owner">aMse2dPTW0e1cPWgT5yomQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="2MTbkr8DtEmqwwVH3GT2sAAA">
+<XPD:ATTR name="Name" type="string">dbversion</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">int</XPD:ATTR>
+<XPD:REF name="Owner">aMse2dPTW0e1cPWgT5yomQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[2]" type="UMLAttribute" guid="bSnqE8TcbUqrnys25KAPHgAA">
+<XPD:ATTR name="Name" type="string">notes</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">aMse2dPTW0e1cPWgT5yomQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[14]" type="UMLAssociation" guid="U/BzaqoFGkCyqin1PJ+DPAAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="Xgr+aMUepEO0epjo0yp2PAAA">
+<XPD:REF name="Association">U/BzaqoFGkCyqin1PJ+DPAAA</XPD:REF>
+<XPD:REF name="Participant">aMse2dPTW0e1cPWgT5yomQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="1bmS+k2w5kWl+OFezOi1LQAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">U/BzaqoFGkCyqin1PJ+DPAAA</XPD:REF>
+<XPD:REF name="Participant">bvcCRaiVmk+m3reKH7sc/wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[15]" type="UMLAssociation" guid="nt47VeFLgE2DKmj6jnBJsgAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">olV5jVIJkUCkNM5V1aRuxgAA</XPD:REF>
+<XPD:REF name="Views[1]">78HwQ5VAf0mKUjDAZlSv+gAA</XPD:REF>
+<XPD:REF name="Views[2]">0XvbOz1WIECUEovZiFMyBQAA</XPD:REF>
+<XPD:REF name="Views[3]">Pdrud5iH90ir4+RUn+5zyAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="bRIeqXEQUEq6yYT2Bh73fgAA">
+<XPD:ATTR name="Name" type="string">properties</XPD:ATTR>
+<XPD:ATTR name="Multiplicity" type="string">*</XPD:ATTR>
+<XPD:REF name="Association">nt47VeFLgE2DKmj6jnBJsgAA</XPD:REF>
+<XPD:REF name="Participant">bvcCRaiVmk+m3reKH7sc/wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">ohf1xcO4+0SBEj6xa2yk0wAA</XPD:REF>
+<XPD:REF name="Views[1]">WW+cbl/U6kOcqOl7y3BhawAA</XPD:REF>
+<XPD:REF name="Views[2]">pFRi4mBs60iDLHyD1592FgAA</XPD:REF>
+<XPD:REF name="Views[3]">pliCSpFyREq7LYrItI84jgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="zQnxl/F/akaOYTyJZmmaWAAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">nt47VeFLgE2DKmj6jnBJsgAA</XPD:REF>
+<XPD:REF name="Participant">aMse2dPTW0e1cPWgT5yomQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">ZV9bIgO/cEa2T1i3gP2RgwAA</XPD:REF>
+<XPD:REF name="Views[1]">sb2xeiKxfkqoQZAupd/eRQAA</XPD:REF>
+<XPD:REF name="Views[2]">3ECDAGInrUCw2A3lQ5/G2QAA</XPD:REF>
+<XPD:REF name="Views[3]">bLQI36E5I0euChpmnVMjpQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[16]" type="UMLGeneralization" guid="jScvqiffCkWS63+XW17yvQAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:REF name="Child">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+<XPD:REF name="Parent">aMse2dPTW0e1cPWgT5yomQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">k91NXSq4rUCcYGXuCoL52wAA</XPD:REF>
+<XPD:REF name="Views[1]">6Rjd5wogjkikgsTLr+hQowAA</XPD:REF>
+<XPD:REF name="Views[2]">sG+MI8BsDEGYnxXsbuQkXQAA</XPD:REF>
+<XPD:REF name="Views[3]">st5jQWrG2E+BZpdDJIWZ5QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[17]" type="UMLGeneralization" guid="kMS+BSoX8kiIzvTJ0cLsDwAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:REF name="Child">Ynz++EPVBEO+oLLjSnR28wAA</XPD:REF>
+<XPD:REF name="Parent">aMse2dPTW0e1cPWgT5yomQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">HfXQ5YktLkyuJ9C4svEcgwAA</XPD:REF>
+<XPD:REF name="Views[1]">CtFgC3GAeEewRNRMUcaF7wAA</XPD:REF>
+<XPD:REF name="Views[2]">sF+4M0BWg0OcvQBFaCqW8QAA</XPD:REF>
+<XPD:REF name="Views[3]">rfKGy1SYXk+nsTfVm2e2rQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[18]" type="UMLGeneralization" guid="4aX/GFTn8EyXxIVomfyQ3gAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:REF name="Child">XgXvqt8MvEWJpcTpmlr/gwAA</XPD:REF>
+<XPD:REF name="Parent">aMse2dPTW0e1cPWgT5yomQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">hpD9m8hdjkuXekiShHOpBgAA</XPD:REF>
+<XPD:REF name="Views[1]">Y/u2vRvanUevrfAKoOHLfgAA</XPD:REF>
+<XPD:REF name="Views[2]">USeRZdDEYUiAZ6LSZLvBPAAA</XPD:REF>
+<XPD:REF name="Views[3]">MMp8gtSwq0aiLyQ8bDXzHwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[19]" type="UMLGeneralization" guid="O4ofQXJOAUSeIC6hqoTTJwAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:REF name="Child">Ynz++EPVBEO+oLLjSnR28wAA</XPD:REF>
+<XPD:REF name="Parent">Ynz++EPVBEO+oLLjSnR28wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[20]" type="UMLClass" guid="FACTDREeV0mbJsmh5kHXYgAA">
+<XPD:ATTR name="Name" type="string">Permission</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">CZ89By4EIUyI3CRYe6yjJwAA</XPD:REF>
+<XPD:REF name="Views[1]">x17Xjk6SX0eNlHGvJpmxbwAA</XPD:REF>
+<XPD:REF name="Views[2]">vjfwcEizSkumg6DsL8VLLAAA</XPD:REF>
+<XPD:REF name="Views[3]">crMBoRxUaUO5o3pewfhz6QAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">NI3mXjy5GE6jWXrj7AJUDgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[21]" type="UMLAssociation" guid="Gql7ZxA7NUOTF94WRCKJ2QAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">3T+jKUvfOUetJbB3ng7nXgAA</XPD:REF>
+<XPD:REF name="Views[1]">PjCe4HcL60u9kK5Ry++MVwAA</XPD:REF>
+<XPD:REF name="Views[2]">FJxt5nQ6NUqVrDXkcGYaUwAA</XPD:REF>
+<XPD:REF name="Views[3]">z+AExyvbLkCBPVfFbjMyDgAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="NI3mXjy5GE6jWXrj7AJUDgAA">
+<XPD:ATTR name="Name" type="string">permissions</XPD:ATTR>
+<XPD:ATTR name="Multiplicity" type="string">*</XPD:ATTR>
+<XPD:REF name="Association">Gql7ZxA7NUOTF94WRCKJ2QAA</XPD:REF>
+<XPD:REF name="Participant">FACTDREeV0mbJsmh5kHXYgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">f7kZt9Z9C0WOS8o/d+JisgAA</XPD:REF>
+<XPD:REF name="Views[1]">bR1JwusL+EqHkWICU4Lw/AAA</XPD:REF>
+<XPD:REF name="Views[2]">3pbTtoUVkkGY33OU53SpjQAA</XPD:REF>
+<XPD:REF name="Views[3]">/2fLJ4PTRkK+aBZPGbXfxAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="sOc2bvULS0WTKJUYaZpUqwAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">Gql7ZxA7NUOTF94WRCKJ2QAA</XPD:REF>
+<XPD:REF name="Participant">aMse2dPTW0e1cPWgT5yomQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">GDJ3MHW7u0KIGKrMBc3CEwAA</XPD:REF>
+<XPD:REF name="Views[1]">c4Z6Mva2AUCX6csUAbpI1AAA</XPD:REF>
+<XPD:REF name="Views[2]">4PpTtWgYxkKWRa+N6gupIAAA</XPD:REF>
+<XPD:REF name="Views[3]">wBkIgbbNEEqWXxxK+MMG4QAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[22]" type="UMLAssociation" guid="BV50PoLPGk6ILDiJJDDtIAAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">3eBOJwYoDECDEdMphMhvzQAA</XPD:REF>
+<XPD:REF name="Views[1]">KUNywwz+v06zFvdrRhw6nQAA</XPD:REF>
+<XPD:REF name="Views[2]">S+wS9Htrj0S6r5f1cSXkpQAA</XPD:REF>
+<XPD:REF name="Views[3]">Ogcf4OjenU+o7fQDHeAaXAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="5FT2YpPYNUCBElvb9K8eygAA">
+<XPD:ATTR name="Name" type="string">preferences</XPD:ATTR>
+<XPD:ATTR name="Multiplicity" type="string">*</XPD:ATTR>
+<XPD:REF name="Association">BV50PoLPGk6ILDiJJDDtIAAA</XPD:REF>
+<XPD:REF name="Participant">bvcCRaiVmk+m3reKH7sc/wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">9wxzZtYrFUyBHvFZTvxa4QAA</XPD:REF>
+<XPD:REF name="Views[1]">/FcZb+MCjkmv0Tq7Q69WVgAA</XPD:REF>
+<XPD:REF name="Views[2]">Si1+loMA0kWcFI8sI++KDQAA</XPD:REF>
+<XPD:REF name="Views[3]">VfIos/OQtU+xI6hNP/05fwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="daXt33JgCkCECD/gf4IpvgAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">BV50PoLPGk6ILDiJJDDtIAAA</XPD:REF>
+<XPD:REF name="Participant">CgxQ3apT6EW3ma9tmpb6BQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">sxXKO8gzekeyW3jQBcb8ngAA</XPD:REF>
+<XPD:REF name="Views[1]">g5Npiue9oEyxcM2aJl0xlwAA</XPD:REF>
+<XPD:REF name="Views[2]">1lKxOkupSU+kTCLuelpzFgAA</XPD:REF>
+<XPD:REF name="Views[3]">6zTN9eorWU6V0SH1If1vnwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[23]" type="UMLAssociation" guid="LoaGoSPyIkCr07RS19RJwgAA">
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">ZeoFoac3WE6KXIpyCIgIhQAA</XPD:REF>
+<XPD:REF name="Views[1]">jNzzmMOAGkiUIz1nRXhQdAAA</XPD:REF>
+<XPD:REF name="Views[2]">ZCBHEMsIYkmNXGHsASeT0QAA</XPD:REF>
+<XPD:REF name="Views[3]">eq6ZJ28G7Uejf3JBIWV85wAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="xqS9idj2IkCHkImTf1WWBQAA">
+<XPD:ATTR name="Name" type="string">parent</XPD:ATTR>
+<XPD:REF name="Association">LoaGoSPyIkCr07RS19RJwgAA</XPD:REF>
+<XPD:REF name="Participant">XgXvqt8MvEWJpcTpmlr/gwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">zPkxUjcRHEu5WvRCyuU0OwAA</XPD:REF>
+<XPD:REF name="Views[1]">VKXIv3oY2EaY2Qz5aovRIwAA</XPD:REF>
+<XPD:REF name="Views[2]">SLYQ0SXbD0ampnxwK0rn3gAA</XPD:REF>
+<XPD:REF name="Views[3]">uVZPpknS7kSuTy4o+T8G/QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="iuAemlPRREaMAXICRLp2RwAA">
+<XPD:ATTR name="Name" type="string">children</XPD:ATTR>
+<XPD:ATTR name="Multiplicity" type="string">*</XPD:ATTR>
+<XPD:REF name="Association">LoaGoSPyIkCr07RS19RJwgAA</XPD:REF>
+<XPD:REF name="Participant">XgXvqt8MvEWJpcTpmlr/gwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">aQTlPaHwekmHeJLj1gADdQAA</XPD:REF>
+<XPD:REF name="Views[1]">j56a+gafU0S04zqYZOJl2wAA</XPD:REF>
+<XPD:REF name="Views[2]">0aaDYyD3K0ahuToSb/bt7gAA</XPD:REF>
+<XPD:REF name="Views[3]">HSoheQFynUGZ8ggqtgJXYAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[24]" type="UMLClass" guid="E1+uDXXaAkCLQt2z/TrtdQAA">
+<XPD:ATTR name="Name" type="string">USER</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">table</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">soP9ko6CbUGyz/cZ4Mx6cgAA</XPD:REF>
+<XPD:REF name="Views[1]">mtvq3WRJJ0isWgu9fHAT4wAA</XPD:REF>
+<XPD:REF name="Views[2]">JNzmUNX1IkqVkYfApY3v8AAA</XPD:REF>
+<XPD:REF name="Views[3]">E3Q08iGMCEaNKzPT3uM1jQAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Associations[0]">adEtdnQRk0qRVSxgPlaFGgAA</XPD:REF>
+<XPD:REF name="Associations[1]">UeIa4CNrnU+26vK9Pk289wAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">7</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="KsQ2ghKeUk20ra/IC1GunAAA">
+<XPD:ATTR name="Name" type="string">DBID_</XPD:ATTR>
+<XPD:REF name="Owner">E1+uDXXaAkCLQt2z/TrtdQAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="gCoIMHHPykWPFERw04UeJAAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">PK</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">True</XPD:ATTR>
+<XPD:REF name="TaggedModel">KsQ2ghKeUk20ra/IC1GunAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="6fd91UJOqUudPeM/dr61xgAA">
+<XPD:ATTR name="Name" type="string">DBVERSION_</XPD:ATTR>
+<XPD:REF name="Owner">E1+uDXXaAkCLQt2z/TrtdQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[2]" type="UMLAttribute" guid="Y2bcIvU2sUG6ZzoN3E2tJgAA">
+<XPD:ATTR name="Name" type="string">ID_</XPD:ATTR>
+<XPD:REF name="Owner">E1+uDXXaAkCLQt2z/TrtdQAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="7to8YXjFjU+dg+5OW090xAAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">IE</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">False</XPD:ATTR>
+<XPD:REF name="TaggedModel">Y2bcIvU2sUG6ZzoN3E2tJgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TaggedValues[1]" type="TaggedValue" guid="SyDlIifMN0yb7FQ0xnhAegAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">NullOption</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">NOT NULL</XPD:ATTR>
+<XPD:REF name="TaggedModel">Y2bcIvU2sUG6ZzoN3E2tJgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[3]" type="UMLAttribute" guid="iazoZtyQkkW/muorxJEIDAAA">
+<XPD:ATTR name="Name" type="string">NAME_</XPD:ATTR>
+<XPD:REF name="Owner">E1+uDXXaAkCLQt2z/TrtdQAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="e6lJdBXHSEirx/3aML0dBQAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">NullOption</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">NULL</XPD:ATTR>
+<XPD:REF name="TaggedModel">iazoZtyQkkW/muorxJEIDAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[4]" type="UMLAttribute" guid="hkIPXfC5DUGJByxoObiu1AAA">
+<XPD:ATTR name="Name" type="string">EMAIL_</XPD:ATTR>
+<XPD:REF name="Owner">E1+uDXXaAkCLQt2z/TrtdQAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="xx1c4tFcO0GU3fTG64g03QAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">NullOption</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">NULL</XPD:ATTR>
+<XPD:REF name="TaggedModel">hkIPXfC5DUGJByxoObiu1AAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[5]" type="UMLAttribute" guid="bflZA44jrEe8ib+3dReNKAAA">
+<XPD:ATTR name="Name" type="string">ADDRESS_</XPD:ATTR>
+<XPD:REF name="Owner">E1+uDXXaAkCLQt2z/TrtdQAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="SNsnJUHQi0CsDF16lDDF7QAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">NullOption</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">NULL</XPD:ATTR>
+<XPD:REF name="TaggedModel">bflZA44jrEe8ib+3dReNKAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[6]" type="UMLAttribute" guid="WMNVN6Hf8UmNMKOBEpx5JwAA">
+<XPD:ATTR name="Name" type="string">NOTES_</XPD:ATTR>
+<XPD:REF name="Owner">E1+uDXXaAkCLQt2z/TrtdQAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="TCdrzrt1hEui1ENFrJD6wgAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">NullOption</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">NULL</XPD:ATTR>
+<XPD:REF name="TaggedModel">WMNVN6Hf8UmNMKOBEpx5JwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[25]" type="UMLClass" guid="LqtsSgler0ytdGl628lqCAAA">
+<XPD:ATTR name="Name" type="string">GROUP</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">table</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">V3lPgW2pFU2SCAI9JpzYnwAA</XPD:REF>
+<XPD:REF name="Views[1]">BAgobnrLT0WRDViCG3kMnQAA</XPD:REF>
+<XPD:REF name="Views[2]">Smp2gAII5kGIXwz8aiAb3QAA</XPD:REF>
+<XPD:REF name="Views[3]">/qhOVS1csEmJ5fk4ExsGTwAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">3</XPD:ATTR>
+<XPD:REF name="Associations[0]">8ZDIPHZODUmk7i7JT0pT4gAA</XPD:REF>
+<XPD:REF name="Associations[1]">a7CbXwF1J0KxuDpsToiORwAA</XPD:REF>
+<XPD:REF name="Associations[2]">QR7i8Rd8RUSbJe5lydEm5QAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">6</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="vFv8VMORhUu86EudJQn7nwAA">
+<XPD:ATTR name="Name" type="string">DBID_</XPD:ATTR>
+<XPD:REF name="Owner">LqtsSgler0ytdGl628lqCAAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="2UFxwJelhky2z7haUpAr1wAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">PK</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">True</XPD:ATTR>
+<XPD:REF name="TaggedModel">vFv8VMORhUu86EudJQn7nwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="SMoXXGVbDE6b6D56K93VZgAA">
+<XPD:ATTR name="Name" type="string">PARENT_</XPD:ATTR>
+<XPD:REF name="Owner">LqtsSgler0ytdGl628lqCAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[2]" type="UMLAttribute" guid="n9kCNE9SJkywNRh9U08fEwAA">
+<XPD:ATTR name="Name" type="string">ID_</XPD:ATTR>
+<XPD:REF name="Owner">LqtsSgler0ytdGl628lqCAAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="2k0bAc9lT0usaUDXJpKq8AAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">NullOption</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">NULL</XPD:ATTR>
+<XPD:REF name="TaggedModel">n9kCNE9SJkywNRh9U08fEwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[3]" type="UMLAttribute" guid="1OzZ1YXoTUuP5RVjdoa4FQAA">
+<XPD:ATTR name="Name" type="string">NAME_</XPD:ATTR>
+<XPD:REF name="Owner">LqtsSgler0ytdGl628lqCAAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="jmpusCC9PUyGifmmhneDHAAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">NullOption</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">NULL</XPD:ATTR>
+<XPD:REF name="TaggedModel">1OzZ1YXoTUuP5RVjdoa4FQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[4]" type="UMLAttribute" guid="BEasoSOGyk+GK6uRwBKGlQAA">
+<XPD:ATTR name="Name" type="string">NOTES_</XPD:ATTR>
+<XPD:REF name="Owner">LqtsSgler0ytdGl628lqCAAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="Kd1rOyNdG0CG3Hy/tXXrYgAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">NullOption</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">NULL</XPD:ATTR>
+<XPD:REF name="TaggedModel">BEasoSOGyk+GK6uRwBKGlQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[5]" type="UMLAttribute" guid="Drc+M33qpE6+e+i8+9/8NgAA">
+<XPD:ATTR name="Name" type="string">TYPE_</XPD:ATTR>
+<XPD:REF name="Owner">LqtsSgler0ytdGl628lqCAAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="JqxAQATsNEeiMgaMKf+sJQAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">NullOption</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">NULL</XPD:ATTR>
+<XPD:REF name="TaggedModel">Drc+M33qpE6+e+i8+9/8NgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[26]" type="UMLClass" guid="KatzBbwK80WLqpTFygv5nwAA">
+<XPD:ATTR name="Name" type="string">PERMISSION</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">table</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">sbd2Gz/ktEOnP43bY99rBwAA</XPD:REF>
+<XPD:REF name="Views[1]">AL+A2Rhri0uEUuTAtEvw0QAA</XPD:REF>
+<XPD:REF name="Views[2]">hCpXAlnj6UWg66moBPvUZQAA</XPD:REF>
+<XPD:REF name="Views[3]">onvlzSRsM0uUXoPyWsQUiQAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">sJZ9jie8O0OHFWF4t8Do9QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[27]" type="UMLClass" guid="3yr+H4DhT0qXFxiWd2vfZAAA">
+<XPD:ATTR name="Name" type="string">MEMBERSHIP</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">table</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">1/33Y0gMMUW31b/FxQ+QjwAA</XPD:REF>
+<XPD:REF name="Views[1]">C+WgmpajZ06aflKQkVhGWQAA</XPD:REF>
+<XPD:REF name="Views[2]">Z822K8KJIUe4S3rRJjMRTAAA</XPD:REF>
+<XPD:REF name="Views[3]">rlmlfa9DU0WEaaLd7jXZ5AAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Associations[0]">hEakj/zN50ehZ6WP7E05wAAA</XPD:REF>
+<XPD:REF name="Associations[1]">ExNGgTikIkanuowy7Sn8QwAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">5</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="98k3q6qHa0+tgh4sR6P32AAA">
+<XPD:ATTR name="Name" type="string">DBID_</XPD:ATTR>
+<XPD:REF name="Owner">3yr+H4DhT0qXFxiWd2vfZAAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="kJbJ5TjD6UiAemINPznyEAAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">PK</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">True</XPD:ATTR>
+<XPD:REF name="TaggedModel">98k3q6qHa0+tgh4sR6P32AAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="Gy8x1/xbI0uoq3oRdT3PegAA">
+<XPD:ATTR name="Name" type="string">DBVERSION_</XPD:ATTR>
+<XPD:REF name="Owner">3yr+H4DhT0qXFxiWd2vfZAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[2]" type="UMLAttribute" guid="xDhjeu+ur0aQN8UJISqgkwAA">
+<XPD:ATTR name="Name" type="string">USER_</XPD:ATTR>
+<XPD:REF name="Owner">3yr+H4DhT0qXFxiWd2vfZAAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="3e1ELBEGOkOe8VC7BCqL3gAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">FK</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">True</XPD:ATTR>
+<XPD:REF name="TaggedModel">xDhjeu+ur0aQN8UJISqgkwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[3]" type="UMLAttribute" guid="MUuhRnP9sUyQjQOsDltE8wAA">
+<XPD:ATTR name="Name" type="string">GROUP_</XPD:ATTR>
+<XPD:REF name="Owner">3yr+H4DhT0qXFxiWd2vfZAAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="9/e3c4FePUW7fwMfciLRtgAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">FK</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">True</XPD:ATTR>
+<XPD:REF name="TaggedModel">MUuhRnP9sUyQjQOsDltE8wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[4]" type="UMLAttribute" guid="EJIZLQHUQkmsZM+sE4EbPAAA">
+<XPD:ATTR name="Name" type="string">ROLE_</XPD:ATTR>
+<XPD:REF name="Owner">3yr+H4DhT0qXFxiWd2vfZAAA</XPD:REF>
+<XPD:ATTR name="#TaggedValues" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="TaggedValues[0]" type="TaggedValue" guid="6R5DHK/i70CIhS206bkUYAAA">
+<XPD:ATTR name="ProfileName" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="TagDefinitionSetName" type="string">column</XPD:ATTR>
+<XPD:ATTR name="Name" type="string">NullOption</XPD:ATTR>
+<XPD:ATTR name="DataValue" type="string">NULL</XPD:ATTR>
+<XPD:REF name="TaggedModel">EJIZLQHUQkmsZM+sE4EbPAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[28]" type="UMLAssociation" guid="WHScUyOIrkiop7/BOTSpKAAA">
+<XPD:ATTR name="StereotypeProfile" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">identifying</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">5POJ1oGvBUSRa1kSdgvWeQAA</XPD:REF>
+<XPD:REF name="Views[1]">BaarGZxnuEmtyuwcHr2KUQAA</XPD:REF>
+<XPD:REF name="Views[2]">ljR3hJYzr0yWwyORY9twvQAA</XPD:REF>
+<XPD:REF name="Views[3]">81X7p2yA6UKseafg1CGWUgAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="hEakj/zN50ehZ6WP7E05wAAA">
+<XPD:ATTR name="Multiplicity" type="string">*</XPD:ATTR>
+<XPD:REF name="Association">WHScUyOIrkiop7/BOTSpKAAA</XPD:REF>
+<XPD:REF name="Participant">3yr+H4DhT0qXFxiWd2vfZAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">EFRVWqUYsUS9IZZM1swL0gAA</XPD:REF>
+<XPD:REF name="Views[1]">+tjncZmPCEeDCsyPO6eTSQAA</XPD:REF>
+<XPD:REF name="Views[2]">PpBsMs0fEEuLzojoB5MP0gAA</XPD:REF>
+<XPD:REF name="Views[3]">sX2BZkX39UOSC9mdI9eGhAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="adEtdnQRk0qRVSxgPlaFGgAA">
+<XPD:REF name="Association">WHScUyOIrkiop7/BOTSpKAAA</XPD:REF>
+<XPD:REF name="Participant">E1+uDXXaAkCLQt2z/TrtdQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">ev3aqh/430C1gbObY5BlegAA</XPD:REF>
+<XPD:REF name="Views[1]">4xa0aNdBW0m3hihbrq9cYAAA</XPD:REF>
+<XPD:REF name="Views[2]">MeeG2NSHI0CKtijqgxE9HAAA</XPD:REF>
+<XPD:REF name="Views[3]">5ki3yYgd9kSg4EeW1mHv2gAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[29]" type="UMLAssociation" guid="PKSQKd/tEUaocno9PCBHywAA">
+<XPD:ATTR name="StereotypeProfile" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">identifying</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="UeIa4CNrnU+26vK9Pk289wAA">
+<XPD:REF name="Association">PKSQKd/tEUaocno9PCBHywAA</XPD:REF>
+<XPD:REF name="Participant">E1+uDXXaAkCLQt2z/TrtdQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="8ZDIPHZODUmk7i7JT0pT4gAA">
+<XPD:REF name="Association">PKSQKd/tEUaocno9PCBHywAA</XPD:REF>
+<XPD:REF name="Participant">LqtsSgler0ytdGl628lqCAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[30]" type="UMLAssociation" guid="+g0lnLNTmUqUK2qZZssiuAAA">
+<XPD:ATTR name="StereotypeProfile" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">non-identifying</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="a7CbXwF1J0KxuDpsToiORwAA">
+<XPD:REF name="Association">+g0lnLNTmUqUK2qZZssiuAAA</XPD:REF>
+<XPD:REF name="Participant">LqtsSgler0ytdGl628lqCAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="sJZ9jie8O0OHFWF4t8Do9QAA">
+<XPD:REF name="Association">+g0lnLNTmUqUK2qZZssiuAAA</XPD:REF>
+<XPD:REF name="Participant">KatzBbwK80WLqpTFygv5nwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[31]" type="UMLClass" guid="fchUG9V6p0e3vWPnCiWIigAA">
+<XPD:ATTR name="Name" type="string">PROPERTY</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">table</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">ymgsmpJUxEWXvPUiSRqLtgAA</XPD:REF>
+<XPD:REF name="Views[1]">TLu4PDlkEkynKOHIBPbzdQAA</XPD:REF>
+<XPD:REF name="Views[2]">9Wxy/v8YOESColEkIKBLewAA</XPD:REF>
+<XPD:REF name="Views[3]">nBY4pl+qqkquTnf+sUpAcAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[32]" type="UMLAssociation" guid="mhyaE4CKr0SEwmrnEpuK7wAA">
+<XPD:ATTR name="StereotypeProfile" type="string">ERD</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">identifying</XPD:ATTR>
+<XPD:REF name="Namespace">2VWhDnmwo0ix2f/qWIJoQQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">twffHrKJYkaFxkbR2Ti9MAAA</XPD:REF>
+<XPD:REF name="Views[1]">ROAP9xLxeEu7TRCO9FaD9wAA</XPD:REF>
+<XPD:REF name="Views[2]">g+KVCakhNE6rgZzQROd6NQAA</XPD:REF>
+<XPD:REF name="Views[3]">zrU+z7IxY0ywNsHNj4P8DwAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="ExNGgTikIkanuowy7Sn8QwAA">
+<XPD:ATTR name="Multiplicity" type="string">*</XPD:ATTR>
+<XPD:REF name="Association">mhyaE4CKr0SEwmrnEpuK7wAA</XPD:REF>
+<XPD:REF name="Participant">3yr+H4DhT0qXFxiWd2vfZAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">9uVEk7fkQkycyXqWPyQ7DQAA</XPD:REF>
+<XPD:REF name="Views[1]">6lKyiYepIUqBy87nV2YwMgAA</XPD:REF>
+<XPD:REF name="Views[2]">maLd7KFPlk+qDCsTX3neQwAA</XPD:REF>
+<XPD:REF name="Views[3]">8BzwGEjEB021SVZm6vYZHgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="QR7i8Rd8RUSbJe5lydEm5QAA">
+<XPD:REF name="Association">mhyaE4CKr0SEwmrnEpuK7wAA</XPD:REF>
+<XPD:REF name="Participant">LqtsSgler0ytdGl628lqCAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">jEFsKPFcPUqxdxgWV9ogKgAA</XPD:REF>
+<XPD:REF name="Views[1]">u7jZnfO/g0i8X2SumjkgOwAA</XPD:REF>
+<XPD:REF name="Views[2]">WqtwUmMvFUi2KLwrOZwJFgAA</XPD:REF>
+<XPD:REF name="Views[3]">vXHlD+ikrEuub6qQYlQhSAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[3]" type="UMLModel" guid="G2koFuRIO0m4DEl9mngHsgAA">
+<XPD:ATTR name="Name" type="string">Implementation Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">implementationModel</XPD:ATTR>
+<XPD:REF name="Namespace">SFKy0gfzeUOt9WIuFpuPJwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLComponentDiagram" guid="+ZQSaBUWCkGCm41Bi6uo2wAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:REF name="DiagramOwner">G2koFuRIO0m4DEl9mngHsgAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLComponentDiagramView" guid="xYImRG3vn0mMmhaZGkoqlAAA">
+<XPD:REF name="Diagram">+ZQSaBUWCkGCm41Bi6uo2wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[4]" type="UMLModel" guid="9Q5ZuEj8X0CFUT3Hh8g14QAA">
+<XPD:ATTR name="Name" type="string">Deployment Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">deploymentModel</XPD:ATTR>
+<XPD:REF name="Namespace">SFKy0gfzeUOt9WIuFpuPJwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLDeploymentDiagram" guid="8UWrsJ0viEuWiAAK3AJdagAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:REF name="DiagramOwner">9Q5ZuEj8X0CFUT3Hh8g14QAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLDeploymentDiagramView" guid="SbtWKlDSX0OvJTZnoue0VQAA">
+<XPD:REF name="Diagram">8UWrsJ0viEuWiAAK3AJdagAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:BODY>
+</XPD:PROJECT>

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/hibernate.identity.hbm.xml
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/hibernate.identity.hbm.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/hibernate.identity.hbm.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,125 @@
+<?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.id.impl" default-access="field">
+
+  <!-- ### USER ########################################################### -->
+  <class name="UserImpl" table="JBPM_USER" discriminator-value="U">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator type="char" column="CLASS_"/>
+    <version name="dbversion" column="DBVERSION_"/>
+
+    <property name="id" column="ID_" unique="true" not-null="true" />
+    <property name="name" column="NAME_" />
+    <property name="email" column="EMAIL_" />
+    <property name="phone" column="PHONE_" />
+    <property name="address" column="ADDRESS_" />
+    <property name="notes" column="NOTES_" />
+    <property name="password" column="PASSWORD_" />
+    
+    <set name="memberships">
+      <key column="USER_" foreign-key="FK_MEMSHIP_USR" />
+      <one-to-many class="MembershipImpl" />
+    </set>
+    
+    <many-to-one name="properties"
+                 class="org.jbpm.pvm.impl.WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_USER_PROPS"
+                 lazy="false"
+                 cascade="all" />
+
+    <many-to-one name="permissions"
+                 column="PERMISSIONS_"
+                 class="Permissions" 
+                 lazy="false"
+                 cascade="all" />
+
+  </class>
+  
+  <!-- ### GROUP ########################################################## -->
+  <class name="GroupImpl" table="JBPM_GROUP" discriminator-value="G">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator type="char" column="CLASS_"/>
+    <version name="dbversion" column="DBVERSION_"/>
+    
+    <property name="id" column="ID_" unique="true" not-null="true" />
+    <property name="name" column="NAME_" />
+    <property name="type" column="TYPE_" />
+
+    <many-to-one name="parent"
+                 column="PARENT_"  
+                 foreign-key="FK_GROUP_PARENT"/>
+    
+    <set name="children">
+      <key column="PARENT_" />
+      <one-to-many class="GroupImpl" />
+    </set>
+    
+    <set name="memberships">
+      <key column="GROUP_" foreign-key="FK_MEMSHIP_GRP" />
+      <one-to-many class="MembershipImpl" />
+    </set>
+    
+    <many-to-one name="properties"
+                 class="org.jbpm.pvm.impl.WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_GROUP_PROPS"
+                 lazy="false"
+                 cascade="all" />
+
+    <many-to-one name="permissions"
+                 column="PERMISSIONS_" 
+                 class="Permissions" 
+                 lazy="false"
+                 cascade="all" />
+
+  </class>
+
+  <!-- ### MEMBERSHIP ##################################################### -->
+  <class name="MembershipImpl" table="JBPM_MEMBERSHIP" discriminator-value="M">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator type="char" column="CLASS_"/>
+    <version name="dbversion" column="DBVERSION_"/>
+    
+    <property name="role" column="ROLE__" />
+    
+    <many-to-one name="user"
+                 column="USER__"  
+                 class="UserImpl" />
+
+    <many-to-one name="group" 
+                 column="GROUP_"  
+                 class="GroupImpl" />
+
+    <many-to-one name="permissions"
+                 column="PERMISSIONS_"  
+                 class="Permissions" 
+                 lazy="false"
+                 cascade="all" />
+  </class>
+
+  <!-- ### PERMISSIONS #################################################### -->
+  <class name="Permissions">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_"/>
+    <set name="permissions" cascade="all" lazy="false" table="JBPM_PERMISSION">
+      <key column="USER_" foreign-key="none" not-null="false" />
+      <element type="org.jbpm.id.hibernate.PermissionUserType">
+        <column name="CLASS_"/>
+        <column name="NAME_"/>
+        <column name="ACTION_"/>
+      </element>
+    </set>
+  </class>
+  
+</hibernate-mapping>


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/hibernate.identity.queries.hbm.xml
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/hibernate.identity.queries.hbm.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/hibernate.identity.queries.hbm.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,82 @@
+<?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="findUserById">
+    <![CDATA[
+     select user
+     from org.jbpm.id.User as user
+     where user.id = :userId 
+    ]]>
+  </query>
+  
+  <query name="findUserByDbId">
+    <![CDATA[
+     select user
+     from org.jbpm.id.User as user
+     where user.dbid = :dbid 
+    ]]>
+  </query>
+  
+  <query name="findUsers">
+    <![CDATA[
+     select user
+     from org.jbpm.id.User as user 
+     order by user.id asc
+    ]]>
+  </query>
+  
+  <query name="findGroupById">
+    <![CDATA[
+     select group
+     from org.jbpm.id.Group as group
+     where group.id = :groupId
+    ]]>
+  </query>
+  
+  <query name="findGroupByDbId">
+    <![CDATA[
+     select group
+     from org.jbpm.id.Group as group
+     where group.dbid = :dbid
+    ]]>
+  </query>
+  
+  <query name="findGroups">
+    <![CDATA[
+     select group
+     from org.jbpm.id.Group as group 
+     order by group.id asc
+    ]]>
+  </query>
+  
+  <query name="findMembershipsByGroupAndRole">
+    <![CDATA[
+     select membership
+     from org.jbpm.id.Membership as membership
+     where membership.group.id = :groupId
+       and membership.role = :role 
+    ]]>
+  </query>
+  
+  <query name="findMembershipsForUser">
+    <![CDATA[
+     select membership
+     from org.jbpm.id.Membership as membership
+     where membership.user.id = :id
+    ]]>
+  </query>
+  
+  <query name="findMembershipsForGroup">
+    <![CDATA[
+     select membership
+     from org.jbpm.id.Membership as membership
+     where membership.group.id = :id
+    ]]>
+  </query>
+  
+</hibernate-mapping>


Property changes on: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/hibernate.identity.queries.hbm.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/Group.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/Group.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/Group.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,60 @@
+/*
+ * 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.id;
+
+/** any sort of group of users.
+ * 
+ * <h3 id="grouptypes">Group types<h3>
+ * 
+ * <p>Groups can be partitioned in group types.  For example
+ * one group type could represent all hierarchical company units like 
+ * departments and teams.  Another group type could be the j2ee 
+ * security roles.
+ * </p> 
+ * 
+ * <h3 id="grouphierarchy">Group hierarchy<h3>
+ * 
+ * <p>Groups can be organised hierarchically.
+ * </p>
+ * 
+ * @author Tom Baeyens
+ */
+public interface Group extends Identity {
+
+  /** unique identifier that cannot be null. */
+  String getId();
+
+  /** update the non-null, unique identifier. */
+  void setId(String userId);
+
+  /** the display name; can be null. */
+  String getName();
+
+  /** sets display name; null is allowed. */
+  void setName(String name);
+
+  /** <a href="#grouptypes">group type</a>; can be null. */
+  String getType();
+
+  /** sets <a href="#grouptypes">group type</a>; null is allowed. */
+  void setType(String type);
+}
\ No newline at end of file


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/Identity.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/Identity.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/Identity.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,61 @@
+/*
+ * 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.id;
+
+import java.security.Permission;
+import java.util.Set;
+
+/** base class for {@link User}, {@link Group} and {@link Membership}.
+ * 
+ * @author Tom Baeyens
+ */
+public interface Identity {
+
+  /** the database primary key. */
+  long getDbid();
+
+  /** the permissions. The returned value will never be null.
+   * If this identity has no permissions, an empty set will 
+   * be returned. */
+  Set<Permission> getPermissions();
+  
+  /** add a permission.
+   * @throws IdentityException if permission is null. */
+  void addPermission(Permission permission);
+  
+  /** remove a permission.
+   * @throws IdentityException if permission is null. */
+  void removePermission(Permission permission);
+
+  /** all the properties.
+   * Never returns null.  In case there are no properties,
+   * this will return an empty Set. */
+  Set<String> getPropertyKeys();
+  
+  /** the requested property value or null if that 
+   * property is not specified. */
+  String getProperty(String key);
+
+  /** sets the property value.
+   * @throws IdentityException if key or value is null. */
+  void setProperty(String key, String value);
+}
\ No newline at end of file


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/IdentityException.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/IdentityException.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/IdentityException.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,43 @@
+/*
+ * 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.id;
+
+/**
+ * @author Tom Baeyens
+ */
+public class IdentityException extends RuntimeException {
+
+  private static final long serialVersionUID = 1L;
+  
+  public IdentityException() {
+    super();
+  }
+  public IdentityException(String message, Throwable cause) {
+    super(message, cause);
+  }
+  public IdentityException(String message) {
+    super(message);
+  }
+  public IdentityException(Throwable cause) {
+    super(cause);
+  }
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/IdentityService.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/IdentityService.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/IdentityService.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,240 @@
+/*
+ * 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 ied 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.id;
+
+import java.util.List;
+
+/**
+ * session facade for identity operations.
+ * 
+ * @author Tom Baeyens
+ */
+public interface IdentityService {
+
+	/**
+	 * save a new user. This doesn't cascade to memberships.
+	 * 
+	 * @throws IdentityException
+	 *           when user is null
+	 */
+	void saveUser(User user);
+
+	/**
+	 * get user details.
+	 * 
+	 * @throws IdentityException
+	 *           when userId is null
+	 */
+	User getUser(String userId);
+
+	/**
+	 * get user details.
+	 * 
+	 * @throws IdentityException
+	 *           when db is null
+	 */
+	User getUser(long dbid);
+
+	/** a page of users, firstResult starts at 0. */
+	List<User> getUsers(int firstResult, int maxResults);
+
+	/**
+	 * update an existing user. This doesn't cascade to memberships.
+	 * 
+	 * @throws IdentityException
+	 *           when user is null
+	 */
+	void updateUser(User user);
+
+	/**
+	 * delete a user. This doesn't cascade to memberships.
+	 * 
+	 * @throws IdentityException
+	 *           when userId is null
+	 */
+	void deleteUser(String userId);
+
+	/**
+	 * update the password.
+	 * 
+	 * @throws IdentityException
+	 *           if userId is null, password is null or if the referenced user
+	 *           doesn't exist.
+	 */
+	void updatePassword(String userId, String password);
+
+	/**
+	 * throws an AuthenticationException if userId and password don't match,
+	 * otherwise returns normally.
+	 */
+	void verifyPassword(String userId, String password);
+
+	/**
+	 * save a new group. This doesn't cascade to memberships, parent groups nor
+	 * child groups.
+	 * 
+	 * @throws IdentityException
+	 *           when group is null
+	 */
+	void saveGroup(Group group);
+
+	/**
+	 * get group details.
+	 * 
+	 * @throws IdentityException
+	 *           when groupId is null
+	 */
+	Group getGroup(String groupId);
+
+	/**
+	 * get group details.
+	 * 
+	 * @throws IdentityException
+	 *           when dbid is null
+	 */
+	Group getGroup(long dbId);
+	
+	/** a page of all groups */
+	public List<Group> getGroups();
+	
+	/** a page of groups, firstResult starts at 0 */
+	List<Group> getGroups(int firstResult, int maxResults);
+
+	/**
+	 * update an existing group. This doesn't cascade to memberships, parent
+	 * groups nor child groups.
+	 * 
+	 * @throws IdentityException
+	 *           when group is null
+	 */
+	void updateGroup(Group group);
+
+	/**
+	 * delete a group. This doesn't cascade to memberships, parent groups nor
+	 * child groups.
+	 * 
+	 * @throws IdentityException
+	 *           if this group still has child groups.
+	 * @throws IdentityException
+	 *           when groupId is null
+	 */
+	void deleteGroup(String groupId);
+
+	/**
+	 * create a parent child relation between two groups. If the child already has
+	 * another parent, that hierarchical relation will be replaced with the new
+	 * one. Be carefull, you move the whole child tree this way. If a the parent
+	 * and child are already parent and child, there is no effect and no exception
+	 * is thrown.
+	 * 
+	 * @throws IdentityException
+	 *           when parentGroupId or childGroupId is null
+	 */
+	void setGroupHierarchy(String parentGroupId, String childGroupId);
+
+	/**
+	 * removes a parent-child relation between two groups.
+	 * 
+	 * @throws IdentityException
+	 *           when parentGroupId or childGroupId is null
+	 */
+	void removeGroupHierarchy(String parentGroupId, String childGroupId);
+
+	/**
+	 * create a membership.
+	 * 
+	 * @throws IdentityException
+	 *           when userId or groupId is null
+	 */
+	Membership createMembership(String userId, String groupId);
+
+	/**
+	 * create a membership with a specified role.
+	 * 
+	 * @throws IdentityException
+	 *           when userId, groupId or role is null
+	 */
+	Membership createMembership(String userId, String groupId, String role);
+
+	/**
+	 * update membership details.
+	 * 
+	 * @throws IdentityException
+	 *           when membership is null
+	 */
+	void updateMembership(Membership membership);
+
+	/** delete a membership */
+	void deleteMembership(long membershipDbid);
+
+	/**
+	 * a full list of all memberships (and groups) for a given user. The groups of
+	 * the memberships will be eager loaded.
+	 */
+	List<Membership> getMembershipsForUser(String userId);
+
+	/**
+	 * a page of memberships (and groups) for a given user. The groups of the
+	 * memberships will be eager loaded.
+	 */
+	List<Membership> getMembershipsForUser(String userId, int firstResult,
+			int maxResults);
+
+	/**
+	 * a page of memberships (and groups) for a user for which the groups is of
+	 * the given type. The groups of the memberships will be eager loaded.
+	 * 
+	 * @throws IdentityException
+	 *           when userId or groupType is null
+	 */
+	List<Membership> getMembershipsForGroupType(String userId, String groupType,
+			int firstResult, int maxResults);
+
+	/**
+	 * a page of memberships (and users) for a group. The memberships users will
+	 * be eager loaded.
+	 * 
+	 * @throws IdentityException
+	 *           when groupId is null
+	 */
+	List<Membership> getMembershipsForGroup(String groupId, int firstResult,
+			int maxResults);
+
+	/**
+	 * a full list of all memberships (and users) for a group. The memberships
+	 * users will be eager loaded.
+	 * 
+	 * @throws IdentityException
+	 *           when groupId is null
+	 */
+	List<Membership> getMembershipsForGroup(String groupId);
+
+	/**
+	 * the memberships (and users) for a given role in a group. The memberships
+	 * users will be eager loaded.
+	 * 
+	 * @throws IdentityException
+	 *           when groupId or role is null
+	 */
+	List<Membership> getMembershipsForRole(String groupId, String role,
+			int firstResult, int maxResults);
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/Membership.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/Membership.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/Membership.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,42 @@
+/*
+ * 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.id;
+
+
+/** a membership between a user and a group.
+ * 
+ * @author Tom Baeyens
+ */
+public interface Membership extends Identity {
+
+  /** the user */
+  User getUser();
+
+  /** the group */
+  Group getGroup();
+
+  /** the role that is fullfilled by the user for the group. */
+  String getRole();
+
+  /** update the role for this membership */
+  void setRole(String string);
+}
\ No newline at end of file


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/User.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/User.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/User.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id;
+
+
+/** a user.
+ * @author Tom Baeyens
+ */
+public interface User extends Identity {
+
+  /** unique identifier that cannot be null. */
+  String getId();
+
+  /** update the non-null, unique identifier. */
+  void setId(String userId);
+
+  /** the display name; can be null.
+   * If a separation between first name and last name is needed, 
+   * use the properties. */
+  String getName();
+
+  /** sets display name; null is allowed. */
+  void setName(String name);
+
+  /** the email address; can be null. */
+  String getEmail();
+  
+  /** sets the email address; null is allowed. */
+  void setEmail(String email);
+
+  /** the main phone number; can be null. */ 
+  String getPhone();
+  
+  /** sets the main phone number; null is allowed. */
+  void setPhone(String phone);
+
+  /** the postal address; can be null. */ 
+  String getAddress();
+  
+  /** sets the postal address; null is allowed. */
+  void setAddress(String address);
+
+  /** the free text notes; can be null. */ 
+  String getNotes();
+
+  /** sets the free text notes; null is allowed. */
+  void setNotes(String notes);
+}
\ No newline at end of file


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/auth/IdentityLoginModule.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/auth/IdentityLoginModule.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/auth/IdentityLoginModule.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.auth;
+
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Logger;
+
+import javax.security.auth.Destroyable;
+import javax.security.auth.Subject;
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.login.FailedLoginException;
+import javax.security.auth.login.LoginException;
+import javax.security.auth.spi.LoginModule;
+
+import org.jbpm.id.session.AuthenticationSession;
+import org.jbpm.pvm.env.EnvironmentFactory;
+import org.jbpm.pvm.env.Environment;
+
+/**
+ * @author "Pierre Vigneras"
+ * @date Dec 3, 2007
+ */
+public class IdentityLoginModule implements LoginModule {
+
+  private static final Logger log = Logger.getLogger(IdentityLoginModule.class.getName());
+
+  private static final String ENVIRONMENT_RESOURCE_OPTION_NAME = "environment.resource";
+  private static final String DEFAULT_ENVIRONMENT_RESOURCE = "identity.cfg.xml";
+  private static EnvironmentFactory environmentFactory = null;
+  private final Object environmentIntializationLock = new Object();
+
+  private static final String NAME_PROMPT = "Name: ";
+  private static final String PASSWORD_PROMPT = "Password: ";
+  private static final String JAVAX_SECURITY_AUTH_LOGIN_PASSWORD = "javax.security.auth.login.password";
+  private static final String JAVAX_SECURITY_AUTH_LOGIN_NAME = "javax.security.auth.login.name";
+
+  /**
+   * Property key used to define the authentication service to use. Defined to
+   * be "service.impl". Property Value should be the full name of a class that
+   * implements the {@link IdentityServiceOp} interface.
+   */
+  public static final String AUTH_SERVICE_URL = "service.impl";
+
+  /**
+   * Property key used to define service instanciation parameters. Defined to be
+   * "service.parameters". Property Value can be any String.
+   */
+  public static final String SERVICE_PARAMS_OPTION_NAME = "service.parameters";
+
+  /**
+   * Property key for the debug flag. Defined to be "debug".
+   * 
+   * Property Value. If set, should be either "true" or "false". Default is
+   * "false".
+   */
+  public static final String DEBUG_OPTION_NAME = "debug";
+
+  private Subject subject = null;
+  private CallbackHandler callbackHandler = null;
+  private Map<String, Object> sharedState;
+  private Map<String, Object> options = null;
+  private boolean debug = false;
+
+  private String id;
+
+  /**
+   * Initialize this LoginModule. This method is called by the LoginContext
+   * after this LoginModule has been instantiated. The purpose of this method is
+   * to initialize this LoginModule with the relevant information. If this
+   * LoginModule does not understand any of the data stored in sharedState or
+   * options parameters, they can be ignored.
+   * 
+   * @param subject
+   *          the Subject to be authenticated.
+   * @param callbackHandler
+   *          a CallbackHandler for communicating with the end user (prompting
+   *          for usernames and passwords, for example).
+   * @param sharedState
+   *          state shared with other configured LoginModules.
+   * @param options
+   *          options specified in the login Configuration for this particular
+   *          LoginModule.
+   */
+  public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ? > sharedState, Map<String, ? > options) {
+
+    this.subject = subject;
+    this.callbackHandler = callbackHandler;
+    this.sharedState = (Map<String, Object>) sharedState;
+    this.options = (Map<String, Object>) options;
+    final String debugFlag = (String) options.get(DEBUG_OPTION_NAME);
+    if (debugFlag != null) {
+      debug = Boolean.valueOf(debugFlag);
+    }
+  }
+
+  /**
+   * Method to authenticate a Subject (phase 1). The implementation of this
+   * method authenticates a Subject. For example, it may prompt for Subject
+   * information such as a username and password and then attempt to verify the
+   * password. This method saves the result of the authentication attempt as
+   * private state within the LoginModule.
+   * 
+   * @return true if the authentication succeeded, or false if this LoginModule
+   *         should be ignored.
+   * @throws LoginException
+   *           if the authentication fails
+   */
+  public boolean login() throws LoginException {
+    if (debug)
+      log.finest("login() - preparing - step 1");
+    
+    EnvironmentFactory environmentFactory = getEnvironmentFactory();
+    Environment environment = environmentFactory.openEnvironment();
+    try {
+      AuthenticationSession authenticationSession = environment.get(AuthenticationSession.class);
+      
+      String name = (String) sharedState.get(JAVAX_SECURITY_AUTH_LOGIN_NAME);
+      String password = (String) sharedState.get(JAVAX_SECURITY_AUTH_LOGIN_PASSWORD);
+      final List<Callback> callbacks = new ArrayList<Callback>();
+      final NameCallback nameCallback = new NameCallback(NAME_PROMPT);
+      final PasswordCallback passwordCallback = new PasswordCallback(PASSWORD_PROMPT, false);
+      if (name == null)
+        callbacks.add(nameCallback);
+      if (password == null)
+        callbacks.add(passwordCallback);
+      if (!callbacks.isEmpty()) {
+        if (debug)
+          log.finest("login() - callback - step 2");
+        callbackHandler.handle(callbacks.toArray(new Callback[0]));
+        if (name == null)
+          name = nameCallback.getName();
+        if (password == null) {
+          password = new String(passwordCallback.getPassword());
+          passwordCallback.clearPassword();
+        }
+      }
+
+      if (debug)
+        log.finest("login() - authenticating - step 3");
+
+      this.id = authenticationSession.authenticate(name, password);
+      // TODO: what is Step 4 then?!
+      if (debug)
+        log.finest("login() - storing data - step 5");
+      sharedState.put(JAVAX_SECURITY_AUTH_LOGIN_NAME, name);
+      sharedState.put(JAVAX_SECURITY_AUTH_LOGIN_PASSWORD, password);
+      if (debug)
+        log.finest("login() - returning - step 6");
+      if (id == null)
+        throw new FailedLoginException("User unknown or wrong password!");
+      return true;
+      
+    } catch (Exception e) {
+      final LoginException le = new LoginException();
+      le.initCause(e);
+      throw le;
+    } finally {
+      environment.close();
+    }
+  }
+
+  private EnvironmentFactory getEnvironmentFactory() {
+    synchronized (environmentIntializationLock) {
+      if (environmentFactory==null) {
+        String resource = (String) options.get(ENVIRONMENT_RESOURCE_OPTION_NAME);
+        if (resource==null) {
+          resource = DEFAULT_ENVIRONMENT_RESOURCE;
+        }
+
+         throw new RuntimeException("Fixme: getEnvironmentFactory()");
+        /*environmentFactory = (EnvironmentFactory) EnvironmentFactory
+                .getParser()
+                .createParse()
+                .setResource(resource)
+                .execute()
+                .checkProblems("environment configuration for identity login module")
+                .getDocumentObject();*/
+      }
+    }
+    return environmentFactory;
+  }
+
+  /**
+   * Method to commit the authentication process (phase 2). This method is
+   * called if the LoginContext's overall authentication succeeded (the relevant
+   * REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules succeeded). If
+   * this LoginModule's own authentication attempt succeeded (checked by
+   * retrieving the private state saved by the login method), then this method
+   * associates relevant Principals and Credentials with the Subject located in
+   * the LoginModule. If this LoginModule's own authentication attempted failed,
+   * then this method removes/destroys any state that was originally saved.
+   * 
+   * @return true if this method succeeded, or false if this LoginModule should
+   *         be ignored.
+   * @throws LoginException
+   *           if the commit fails
+   */
+  public boolean commit() throws LoginException {
+    final String name = (String) sharedState.get(JAVAX_SECURITY_AUTH_LOGIN_NAME);
+    if (id == null)
+      throw new FailedLoginException("User unknown or wrong password!");
+    final Set<Principal> principals = subject.getPrincipals();
+    principals.add(new IdentityPrincipal(id));
+    return true;
+  }
+
+  /**
+   * Method to abort the authentication process (phase 2). This method is called
+   * if the LoginContext's overall authentication failed. (the relevant
+   * REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules did not succeed).
+   * If this LoginModule's own authentication attempt succeeded (checked by
+   * retrieving the private state saved by the login method), then this method
+   * cleans up any state that was originally saved.
+   * 
+   * @return true if this method succeeded, or false if this LoginModule should
+   *         be ignored.
+   * @throws LoginException
+   *           if the abort fails
+   */
+  public boolean abort() throws LoginException {
+    if (debug)
+      log.finest("abort()");
+    if (id == null)
+      return false;
+    subject = null;
+    id = null;
+    return true;
+  }
+
+  /**
+   * Method which logs out a Subject. An implementation of this method might
+   * remove/destroy a Subject's Principals and Credentials.
+   * 
+   * @return true if this method succeeded, or false if this LoginModule should
+   *         be ignored.
+   * @throws LoginException
+   *           if the logout fails
+   */
+  public boolean logout() throws LoginException {
+    if (id != null) {
+      if (debug)
+        log.finest("logout() - removing principals");
+      // Remove only principals added by our commit method
+      final Set<Principal> principals = subject.getPrincipals();
+      for (Principal p : principals) {
+        if (p instanceof IdentityPrincipal) {
+          if (debug)
+            log.finest("logout() - removing principal: " + p);
+          principals.remove(p);
+        }
+      }
+      if (debug)
+        log.finest("logout() - destroying/removing credentials");
+      // Remove/destroy only credentials added by our commit method
+      final Set<Object> credentials = subject.getPublicCredentials();
+      for (Object o : credentials) {
+        if (o instanceof Destroyable) {
+          if (debug)
+            log.finest("logout() - destroying credential: " + o);
+          // Bug: only from this module !!
+          // ((Destroyable) o).destroy();
+        }
+        if (!subject.isReadOnly()) {
+          if (debug)
+            log.finest("logout() - removing credential: " + o);
+          credentials.remove(o);
+        }
+      }
+    }
+    return true;
+  }
+
+  /**
+   * @author "Pierre Vigneras"
+   * @date Dec 3, 2007
+   */
+  public class MissingOptionException extends LoginException {
+
+    /**
+     * @param msg
+     */
+    public MissingOptionException(String msg) {
+      super("Missing options: " + msg);
+    }
+  }
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/auth/IdentityPrincipal.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/auth/IdentityPrincipal.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/auth/IdentityPrincipal.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,45 @@
+/*
+ * 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.id.auth;
+
+import java.security.Principal;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class IdentityPrincipal implements Principal {
+  
+  String id;
+
+  public IdentityPrincipal(String id) {
+    this.id = id;
+  }
+
+  public String getId() {
+    return id;
+  }
+  
+  public String getName() {
+    return id;
+  }
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/auth/package.html
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/auth/package.html	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/auth/package.html	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,5 @@
+<body>
+a login module implementation based on the 
+{@link org.jbpm.session.AuthenticationSession} which is to be 
+configured in a pvm environment.  
+</body>

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/CreateMembership.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/CreateMembership.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/CreateMembership.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,68 @@
+/*
+ * 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.id.cmd;
+
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.id.impl.GroupImpl;
+import org.jbpm.id.impl.MembershipImpl;
+import org.jbpm.id.impl.UserImpl;
+import org.jbpm.id.session.IdentityDbSession;
+
+/**
+ * @author Fady Matar
+ */
+public class CreateMembership implements Command
+{
+
+	private static final long serialVersionUID = 1L;
+
+	String userId;
+	String groupId;
+	String role;
+
+	public CreateMembership(String userId, String groupId) {
+		this.userId = userId;
+		this.groupId = groupId;
+	}
+
+	public CreateMembership(String userId, String groupId, String role) {
+		this.userId = userId;
+		this.groupId = groupId;
+		this.role = role;
+	}
+
+	public Object execute(Environment environment) throws Exception {
+		IdentityDbSession identityDbSession = environment
+				.get(IdentityDbSession.class);
+		GroupImpl group = identityDbSession.findGroupById(groupId);
+		UserImpl user = identityDbSession.findUserById(userId);
+		MembershipImpl membershipImpl = MembershipImpl.createMembership(user, group);
+		if (role != null) {
+			membershipImpl.setRole(role);
+		}
+		identityDbSession.save(membershipImpl);
+		return membershipImpl;
+	}
+
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/DeleteGroup.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/DeleteGroup.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/DeleteGroup.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.cmd;
+
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.id.Group;
+import org.jbpm.id.session.IdentityDbSession;
+
+/**
+ * @author Fady Matar
+ */
+public class DeleteGroup implements Command {
+
+	private static final long serialVersionUID = 1L;
+
+	protected String groupId;
+
+	public DeleteGroup(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public Object execute(Environment environment) throws Exception {
+		IdentityDbSession identityDbSession = environment
+				.get(IdentityDbSession.class);
+		Group groupImpl = identityDbSession.findGroupById(groupId);
+		identityDbSession.getSession().delete(groupImpl);
+		return null;
+	}
+}
\ No newline at end of file


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/DeleteMembership.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/DeleteMembership.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/DeleteMembership.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.cmd;
+
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.id.impl.MembershipImpl;
+import org.jbpm.id.session.IdentityDbSession;
+
+/**
+ * @author Fady Matar
+ */
+public class DeleteMembership implements Command<Long> {
+
+	private static final long serialVersionUID = 1L;
+
+	protected long membershipDbid;
+
+	public DeleteMembership(long membershipDbid) {
+		this.membershipDbid = membershipDbid;
+	}
+
+	public Long execute(Environment environment) throws Exception {
+		IdentityDbSession identityDbSession = environment
+				.get(IdentityDbSession.class);
+		MembershipImpl membership = (MembershipImpl) identityDbSession.getSession()
+				.get(MembershipImpl.class, this.membershipDbid);
+		identityDbSession.getSession().delete(membership);
+		return membershipDbid;
+	}
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/DeleteUser.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/DeleteUser.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/DeleteUser.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.cmd;
+
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.id.User;
+import org.jbpm.id.session.IdentityDbSession;
+
+/**
+ * @author Fady Matar
+ */
+public class DeleteUser implements Command {
+
+	private static final long serialVersionUID = 1L;
+
+	protected String userId;
+
+	public DeleteUser(String userId) {
+		this.userId = userId;
+	}
+
+	public Object execute(Environment environment) throws Exception {
+		IdentityDbSession identityDbSession = environment
+				.get(IdentityDbSession.class);
+		User userImpl = identityDbSession.findUserById(userId);
+		identityDbSession.getSession().delete(userImpl);
+		return null;
+	}
+}
\ No newline at end of file


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetGroup.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetGroup.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetGroup.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,61 @@
+/*
+ * 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.id.cmd;
+
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.id.Group;
+import org.jbpm.id.impl.GroupImpl;
+import org.jbpm.id.session.IdentityDbSession;
+
+/**
+ * @author Fady Matar
+ */
+public class GetGroup implements Command<Group> {
+
+	private static final long serialVersionUID = 1L;
+
+	protected String groupId;
+	
+	protected Long dbid;
+
+	public GetGroup(String groupId) {
+		this.groupId = groupId;
+	}
+	
+	public GetGroup(Long dbid) {
+		this.dbid = dbid;
+	}
+
+	public Group execute(Environment environment) throws Exception {
+		IdentityDbSession identityDbSession = environment.get(IdentityDbSession.class);
+		GroupImpl group= null;
+    if(groupId != null) {
+    	group =  identityDbSession.findGroupById(groupId);
+    }
+    if(dbid != null) {
+    	long dbid = this.dbid.longValue();
+    	group =  identityDbSession.findGroupByDbId(dbid);
+    }
+    return group;
+	}
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetGroups.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetGroups.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetGroups.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,58 @@
+/*
+ * 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.id.cmd;
+
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.id.session.IdentityDbSession;
+
+/**
+ * @author Fady Matar
+ */
+public class GetGroups implements Command {
+
+	private static final long serialVersionUID = 1L;
+
+	protected int firstResult;
+	protected int maxResults;
+
+	public GetGroups(int firstResult, int maxResults) {
+		this.firstResult = firstResult;
+		this.maxResults = maxResults;
+	}
+
+	public GetGroups() {
+		this.firstResult = -1;
+		this.maxResults = -1;
+	}
+
+	public Object execute(Environment environment) throws Exception {
+		IdentityDbSession identityDbSession = environment
+				.get(IdentityDbSession.class);
+		if (this.firstResult != -1 && this.maxResults != -1) {
+			return identityDbSession.getSession().getNamedQuery("findGroups")
+					.setFirstResult(firstResult).setMaxResults(maxResults).list();
+		} else {
+			return identityDbSession.getSession().getNamedQuery("findGroups").list();
+		}
+	}
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMemberships.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMemberships.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMemberships.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,59 @@
+/*
+ * 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.id.cmd;
+
+import org.jbpm.id.session.IdentityDbSession;
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+
+/**
+ * @author Fady Matar
+ */
+public class GetMemberships implements Command
+{
+
+	private static final long serialVersionUID = 1L;
+
+	protected int firstResult;
+	protected int maxResults;
+
+	public GetMemberships(int firstResult, int maxResults) {
+		this.firstResult = firstResult;
+		this.maxResults = maxResults;
+	}
+
+	public GetMemberships() {
+		this.firstResult = -1;
+		this.maxResults = -1;
+	}
+
+	public Object execute(Environment environment) throws Exception {
+		IdentityDbSession identityDbSession = environment
+				.get(IdentityDbSession.class);
+		if (this.firstResult != -1 && this.maxResults != -1) {
+			return identityDbSession.getSession().getNamedQuery("findMemberships")
+					.setFirstResult(firstResult).setMaxResults(maxResults).list();
+		} else {
+			return identityDbSession.getSession().getNamedQuery("findMemberships").list();
+		}
+	}
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMembershipsForGroup.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMembershipsForGroup.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMembershipsForGroup.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,64 @@
+/*
+ * 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.id.cmd;
+
+import org.hibernate.Query;
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.id.session.IdentityDbSession;
+
+/**
+ * @author Fady Matar
+ */
+public class GetMembershipsForGroup implements Command {
+
+	private static final long serialVersionUID = 1L;
+
+	protected String groupId;
+
+	protected Integer firstResult;
+
+	protected Integer maxResults;
+
+	public GetMembershipsForGroup(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public GetMembershipsForGroup(String groupId, Integer firstResult,
+			Integer maxResults) {
+		this.groupId = groupId;
+		this.firstResult = firstResult;
+		this.maxResults = maxResults;
+	}
+
+	public Object execute(Environment environment) throws Exception {
+		IdentityDbSession identityDbSession = environment
+				.get(IdentityDbSession.class);
+		Query query = identityDbSession.getSession().getNamedQuery(
+				"findMembershipsForGroup").setParameter("id", groupId);
+		if((this.firstResult != null) && (this.maxResults != null)) {
+			query.setFirstResult(this.firstResult);
+			query.setMaxResults(this.maxResults);
+		}
+		return query.list();
+	}
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMembershipsForRole.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMembershipsForRole.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMembershipsForRole.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.cmd;
+
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.id.session.IdentityDbSession;
+
+/**
+ * @author Fady Matar
+ */
+public class GetMembershipsForRole implements Command {
+
+	private static final long serialVersionUID = 1L;
+
+	protected String role;
+
+	public GetMembershipsForRole(String role) {
+		this.role = role;
+	}
+
+	public Object execute(Environment environment) throws Exception {
+		IdentityDbSession identityDbSession = environment
+				.get(IdentityDbSession.class);
+		return identityDbSession.getSession().getNamedQuery(
+				"findMembershipsForRole").setParameter("role", role).list();
+	}
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMembershipsForUser.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMembershipsForUser.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetMembershipsForUser.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.cmd;
+
+import java.util.List;
+
+import org.hibernate.Query;
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.id.Membership;
+import org.jbpm.id.session.IdentityDbSession;
+
+/**
+ * @author Fady Matar
+ */
+public class GetMembershipsForUser implements Command<List<Membership>> {
+
+	private static final long serialVersionUID = 1L;
+
+	protected String userId;
+
+	protected Integer firstResult = null;
+
+	protected Integer maxResults = null;
+
+	public GetMembershipsForUser(String userId) {
+		this.userId = userId;
+	}
+
+	public GetMembershipsForUser(String userId, Integer firstResult,
+			Integer maxResults) {
+		this.userId = userId;
+		this.firstResult = firstResult;
+		this.maxResults = maxResults;
+	}
+
+	public List<Membership> execute(Environment environment) throws Exception {
+		IdentityDbSession identityDbSession = environment
+				.get(IdentityDbSession.class);
+		Query query = identityDbSession.getSession().getNamedQuery(
+				"findMembershipsForUser").setParameter("id", userId);
+		if ((this.firstResult != null) && (this.maxResults != null)) {
+			query.setFirstResult(this.firstResult);
+			query.setMaxResults(this.maxResults);
+		}
+		return query.list();
+	}
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetUser.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetUser.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetUser.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,61 @@
+/*
+ * 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.id.cmd;
+
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.id.User;
+import org.jbpm.id.impl.UserImpl;
+import org.jbpm.id.session.IdentityDbSession;
+
+/**
+ * @author Tom Baeyens
+ */
+public class GetUser implements Command<User> {
+
+	private static final long serialVersionUID = 1L;
+
+	protected String userId;
+
+	protected Long dbid;
+
+	public GetUser(String userId) {
+		this.userId = userId;
+	}
+
+	public GetUser(Long dbid) {
+		this.dbid = dbid;
+	}
+
+	public User execute(Environment environment) throws Exception {
+    IdentityDbSession identityDbSession = environment.get(IdentityDbSession.class);
+    UserImpl user = null;
+    if(userId != null) {
+    	user =  identityDbSession.findUserById(userId);
+    }
+    if(dbid != null) {
+    	long dbid = this.dbid.longValue();
+    	user =  identityDbSession.findUserByDbId(dbid);
+    }
+    return user;
+  }
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetUsers.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetUsers.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/GetUsers.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,54 @@
+/*
+ * 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.id.cmd;
+
+import org.jbpm.id.session.IdentityDbSession;
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+
+/**
+ * @author Fady Matar
+ */
+public class GetUsers implements Command
+{
+
+	private static final long serialVersionUID = 1L;
+
+	protected int firstResult;
+	protected int maxResults;
+
+	public GetUsers(int firstResult, int maxResults) {
+		this.firstResult = firstResult;
+		this.maxResults = maxResults;
+	}
+
+	public Object execute(Environment environment) throws Exception {
+		IdentityDbSession identityDbSession = environment
+				.get(IdentityDbSession.class);
+		if (this.firstResult != -1 && this.maxResults != -1) {
+			return identityDbSession.getSession().getNamedQuery("findUsers")
+					.setFirstResult(firstResult).setMaxResults(maxResults).list();
+		} else {
+			return identityDbSession.getSession().getNamedQuery("findUsers").list();
+		}
+	}
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/SaveGroup.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/SaveGroup.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/SaveGroup.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.cmd;
+
+import org.jbpm.id.Group;
+import org.jbpm.id.session.IdentityDbSession;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.pvm.internal.cmd.Command;
+
+/**
+ * @author Fady Matar
+ */
+public class SaveGroup implements Command
+{
+
+   private static final long serialVersionUID = 1L;
+
+   private Group groupImpl;
+
+   public SaveGroup(Group groupImpl) {
+      this.groupImpl = groupImpl;
+   }
+
+   public Object execute(Environment environment) throws Exception {
+      IdentityDbSession identityDbSession = environment.get(IdentityDbSession.class);
+      identityDbSession.save(groupImpl);
+      return groupImpl;
+   }
+
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/SaveUser.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/SaveUser.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/SaveUser.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,57 @@
+/*
+ * 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.id.cmd;
+
+import org.hibernate.PropertyValueException;
+import org.jbpm.id.IdentityException;
+import org.jbpm.id.User;
+import org.jbpm.id.session.IdentityDbSession;
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+
+/**
+ * @author Tom Baeyens
+ */
+public class SaveUser implements Command
+{
+
+  private static final long serialVersionUID = 1L;
+
+  User userImpl;
+  
+  public SaveUser(User userImpl) {
+    this.userImpl = userImpl;
+  }
+
+  public Object execute(Environment environment) throws Exception {
+    try {
+      IdentityDbSession identityDbSession = environment.get(IdentityDbSession.class);
+      identityDbSession.save(userImpl);
+      return userImpl;
+    } catch (PropertyValueException e) {
+      if ("not-null property references a null or transient value: org.jbpm.id.impl.UserImpl.id".equals(e.getMessage())) {
+        throw new IdentityException("user doesn't have an id");
+      } 
+      throw e;
+    }
+  }
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/UpdateGroup.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/UpdateGroup.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/UpdateGroup.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.cmd;
+
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.id.Group;
+import org.jbpm.id.session.IdentityDbSession;
+
+/**
+ * @author Fady Matar
+ */
+public class UpdateGroup implements Command {
+
+	private static final long serialVersionUID = 1L;
+
+	protected Group groupImpl;
+
+	public UpdateGroup(Group groupImpl) {
+		this.groupImpl = groupImpl;
+	}
+
+	public Object execute(Environment environment) throws Exception {
+		IdentityDbSession identityDbSession = environment
+				.get(IdentityDbSession.class);
+		identityDbSession.getSession().update(groupImpl);
+		return groupImpl;
+	}
+
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/UpdateMembership.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/UpdateMembership.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/UpdateMembership.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,48 @@
+/*
+ * 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.id.cmd;
+
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.id.Membership;
+import org.jbpm.id.session.IdentityDbSession;
+
+/**
+ * @author Fady Matar
+ */
+public class UpdateMembership implements Command {
+
+	private static final long serialVersionUID = 1L;
+
+	protected Membership membershipImpl;
+
+	public UpdateMembership(Membership membershipImpl) {
+		this.membershipImpl = membershipImpl;
+	}
+
+	public Object execute(Environment environment) throws Exception {
+		IdentityDbSession identityDbSession = environment
+				.get(IdentityDbSession.class);
+		identityDbSession.getSession().update(membershipImpl);
+		return membershipImpl;
+	}
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/UpdateUser.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/UpdateUser.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/UpdateUser.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.cmd;
+
+import org.jbpm.pvm.internal.cmd.Command;
+import org.jbpm.pvm.env.Environment;
+import org.jbpm.id.User;
+import org.jbpm.id.session.IdentityDbSession;
+
+
+/**
+ * @author Fady Matar
+ */
+public class UpdateUser implements Command {
+  
+  private static final long serialVersionUID = 1L;
+  
+  protected User userImpl;
+
+  public UpdateUser(User userImpl) {
+    this.userImpl = userImpl;
+  }
+
+  public Object execute(Environment environment) throws Exception {
+    IdentityDbSession identityDbSession = environment.get(IdentityDbSession.class);
+    identityDbSession.getSession().update(userImpl);
+    return userImpl;
+  }
+
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/package.html
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/package.html	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/cmd/package.html	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,3 @@
+<body>
+commands that implement the {@link org.jbpm.id.IdentityService session facade} methods.
+</body>

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/hibernate/PermissionUserType.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/hibernate/PermissionUserType.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/hibernate/PermissionUserType.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,124 @@
+/*
+ * 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.id.hibernate;
+
+import java.io.Serializable;
+import java.lang.reflect.Constructor;
+import java.security.Permission;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.type.Type;
+import org.hibernate.usertype.CompositeUserType;
+
+/** a custom hibernate type that can store any java.security.Permission. */
+public class PermissionUserType implements CompositeUserType {
+
+  private static final String[] PROPERTY_NAMES = new String[]{"class", "name", "actions"};
+  public String[] getPropertyNames() {
+    return PROPERTY_NAMES;
+  }
+
+  private static final Type[] PROPERTY_TYPES = new Type[]{Hibernate.STRING, Hibernate.STRING, Hibernate.STRING};
+  public Type[] getPropertyTypes() {
+    return PROPERTY_TYPES;
+  }
+
+  public Object getPropertyValue(Object component, int property) throws HibernateException {
+    Permission permission = (Permission) component;
+    if (property==0) {
+      return permission.getClass().getName();
+    } else if (property==1) { 
+      return permission.getName();
+    } else if (property==2) { 
+      return permission.getActions();
+    } else {
+      throw new IllegalArgumentException("illegal permission property '"+property+"'");
+    }
+  }
+
+  public void setPropertyValue(Object arg0, int arg1, Object arg2) throws HibernateException {
+    throw new UnsupportedOperationException("setting properties on a permission is not allowed");
+  }
+
+  public Class returnedClass() {
+    return Permission.class;
+  }
+
+  public boolean equals(Object left, Object right) throws HibernateException {
+    return left.equals(right);
+  }
+
+  public int hashCode(Object permission) throws HibernateException {
+    return permission.hashCode();
+  }
+  
+  private static final Class[] NAME_ACTIONS_CONSTRUCTOR_PARAMETER_TYPES = new Class[]{String.class, String.class};
+  public Object nullSafeGet(ResultSet resultSet, String[] names, SessionImplementor session, Object owner) throws HibernateException, SQLException {
+    Object permission = null;
+    String className = resultSet.getString(names[0]);
+    String name = resultSet.getString(names[1]);
+    String actions = resultSet.getString(names[2]);
+    
+    try {
+      // TODO optimize performance by caching the constructors
+      Class permissionClass = PermissionUserType.class.getClassLoader().loadClass(className);
+      Constructor constructor = permissionClass.getDeclaredConstructor(NAME_ACTIONS_CONSTRUCTOR_PARAMETER_TYPES);
+      permission = constructor.newInstance(new Object[]{name, actions});
+    } catch (Exception e) {
+      throw new HibernateException("couldn't create permission from database record ["+className+"|"+name+"|"+actions+"].  Does the permission class have a (String name,String actions) constructor ?", e);
+    }
+    
+    return permission;
+  }
+
+  public void nullSafeSet(PreparedStatement preparedStatement, Object value, int index, SessionImplementor session) throws HibernateException, SQLException {
+    Permission permission = (Permission) value;
+    preparedStatement.setString(index, permission.getClass().getName());
+    preparedStatement.setString(index+1, permission.getName());
+    preparedStatement.setString(index+2, permission.getActions());
+  }
+
+  public Object deepCopy(Object permission) throws HibernateException {
+    return permission;
+  }
+
+  public boolean isMutable() {
+    return false;
+  }
+
+  public Serializable disassemble(Object value, SessionImplementor session) throws HibernateException {
+    return (Serializable) value;
+  }
+
+  public Object assemble(Serializable cached, SessionImplementor session, Object owner) throws HibernateException {
+    return cached;
+  }
+
+  public Object replace(Object original, Object target, SessionImplementor session, Object owner) throws HibernateException {
+    return original;
+  }
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/hibernate/package.html
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/hibernate/package.html	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/hibernate/package.html	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,3 @@
+<body>
+hibernate {@link org.jbpm.id.hibernate.PermissionUserType .
+</body>

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/identity-db.png
===================================================================
(Binary files differ)


Property changes on: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/identity-db.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/identity-java.png
===================================================================
(Binary files differ)


Property changes on: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/identity-java.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/GroupImpl.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/GroupImpl.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/GroupImpl.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,108 @@
+/*
+ * 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.id.impl;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jbpm.id.Group;
+import org.jbpm.pvm.internal.util.EqualsUtil;
+
+/**
+ * Defines a group in the system. A group contains a set of common properties
+ * and some additional properties such as a parent group and children groups.
+ * 
+ * @author Tom Baeyens
+ */
+public class GroupImpl extends IdentityImpl implements Serializable, Group {
+
+	private static final long serialVersionUID = 1L;
+
+	protected String id;
+	protected String name;
+	protected String type;
+	protected GroupImpl parent;
+	protected Set<GroupImpl> children;
+	protected Set<MembershipImpl> memberships;
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public GroupImpl getParent() {
+		return parent;
+	}
+
+	public Set<GroupImpl> getChildren() {
+		return children;
+	}
+	
+  /** sets both ends of the relation */
+	public static void createParentChildRelation(GroupImpl parent, GroupImpl child) {
+	  if (child.parent!=null) {
+	    removeParentChildRelation(child.parent, child);
+	  }
+	  if (parent.children==null) {
+	    parent.children = new HashSet<GroupImpl>();
+	  }
+	  parent.children.add(child);
+	  child.parent = parent;
+	}
+	
+  /** sets both ends of the relation */
+  public static void removeParentChildRelation(GroupImpl parent, GroupImpl child) {
+	  if ( (parent.children!=null)
+	       && (parent.children.remove(child))
+	     ) {
+	    child.parent = null;
+	  }
+	}
+	
+	public Set<MembershipImpl> getMemberships() {
+		return memberships;
+	}
+
+  public boolean equals(Object o) {
+    return EqualsUtil.equals(this, o);
+  }
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/IdentityImpl.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/IdentityImpl.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/IdentityImpl.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,130 @@
+/*
+ * 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.
+ */
+
+/**
+ * @author Fady Matar
+ */
+package org.jbpm.id.impl;
+
+import java.io.Serializable;
+import java.security.Permission;
+import java.util.Collections;
+import java.util.Set;
+
+import org.jbpm.id.Identity;
+import org.jbpm.id.IdentityException;
+import org.jbpm.pvm.internal.model.WireProperties;
+import org.jbpm.pvm.internal.wire.descriptor.StringDescriptor;
+
+public class IdentityImpl implements Serializable, Identity {
+
+   private static final long serialVersionUID = 1L;
+
+   protected long dbid;
+   protected int dbversion;
+   protected String id;
+   protected String name;
+
+   protected WireProperties properties;
+   protected Permissions permissions;
+
+   public long getDbid() {
+      return dbid;
+   }
+
+   public String getId() {
+      return id;
+   }
+
+   public void setId(String id) {
+      if (id==null) {
+         throw new IdentityException("id is null");
+      }
+      this.id = id;
+   }
+
+   public String getName() {
+      return name;
+   }
+
+   public void setName(String name) {
+      this.name = name;
+   }
+
+   public void setProperty(String key, String value) {
+      if (key==null) {
+         throw new IdentityException("key is null");
+      }
+      if (value==null) {
+         throw new IdentityException("value is null");
+      }
+      if (properties == null) {
+         properties = new WireProperties();
+      }
+
+      StringDescriptor stringDescriptor = new StringDescriptor();
+      stringDescriptor.setName(key);
+      stringDescriptor.setValue(value);
+
+      properties.add(stringDescriptor);
+   }
+
+   public String getProperty(String key) {
+      if (key==null) {
+         throw new IdentityException("key is null");
+      }
+      if (properties == null) {
+         return null;
+      }
+      return (String) properties.get(key);
+   }
+
+   public Set<String> getPropertyKeys() {
+      if (properties==null) {
+         return Collections.EMPTY_SET;
+      }
+      return properties.keys();
+   }
+
+   public void addPermission(Permission permission) {
+      if (permissions==null) {
+         permissions = new Permissions();
+      }
+      permissions.addPermission(permission);
+   }
+
+   public void removePermission(Permission permission) {
+      if (permissions!=null) {
+         permissions.removePermission(permission);
+         if (permissions.isEmpty()) {
+            permissions = null;
+         }
+      }
+   }
+
+   public Set<Permission> getPermissions() {
+      if (permissions!=null) {
+         return permissions.getPermissions();
+      }
+      return Collections.EMPTY_SET;
+   }
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/IdentityServiceImpl.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/IdentityServiceImpl.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/IdentityServiceImpl.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,191 @@
+/*
+ * 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.id.impl;
+
+import java.util.List;
+
+import org.jbpm.id.Group;
+import org.jbpm.id.IdentityService;
+import org.jbpm.id.Membership;
+import org.jbpm.id.User;
+import org.jbpm.id.cmd.CreateMembership;
+import org.jbpm.id.cmd.DeleteGroup;
+import org.jbpm.id.cmd.DeleteUser;
+import org.jbpm.id.cmd.GetGroup;
+import org.jbpm.id.cmd.GetGroups;
+import org.jbpm.id.cmd.GetMemberships;
+import org.jbpm.id.cmd.GetMembershipsForGroup;
+import org.jbpm.id.cmd.GetMembershipsForRole;
+import org.jbpm.id.cmd.GetMembershipsForUser;
+import org.jbpm.id.cmd.GetUser;
+import org.jbpm.id.cmd.GetUsers;
+import org.jbpm.id.cmd.DeleteMembership;
+import org.jbpm.id.cmd.SaveGroup;
+import org.jbpm.id.cmd.SaveUser;
+import org.jbpm.id.cmd.UpdateGroup;
+import org.jbpm.id.cmd.UpdateMembership;
+import org.jbpm.id.cmd.UpdateUser;
+import org.jbpm.pvm.internal.cmd.CommandService;
+
+/**
+ * @author Tom Baeyens
+ */
+public class IdentityServiceImpl implements IdentityService {
+
+	protected CommandService commandService;
+
+	public IdentityServiceImpl(CommandService commandService) {
+		this.commandService = commandService;
+	}
+
+	public void saveUser(User userImpl) {
+		commandService.execute(new SaveUser(userImpl));
+	}
+
+	public User getUser(String userId) {
+		return (User) commandService.execute(new GetUser(userId));
+	}
+	
+	public User getUser(long dbid) {
+		return (User) commandService.execute(new GetUser(dbid));
+	}
+	
+	public void updateUser(User userImpl) {
+		commandService.execute(new UpdateUser(userImpl));
+	}
+
+	public MembershipImpl createMembership(String userId, String groupId) {
+		return (MembershipImpl) commandService.execute(new CreateMembership(userId,
+				groupId));
+	}
+
+	public Membership createMembership(String userId, String groupId, String role) {
+		return (Membership) commandService.execute(new CreateMembership(userId,
+				groupId, role));
+	}
+
+	public void deleteGroup(String groupId) {
+		commandService.execute(new DeleteGroup(groupId));
+	}
+
+	public void deleteUser(String userId) {
+		commandService.execute(new DeleteUser(userId));
+	}
+
+	public Group getGroup(String groupId) {
+		return (Group) commandService.execute(new GetGroup(groupId));
+	}
+	
+	public Group getGroup(long dbId) {
+		return (Group) commandService.execute(new GetGroup(dbId));
+	}
+
+	public List<Group> getGroups() {
+		return (List) commandService.execute(new GetGroups());
+	}
+
+	public List<Group> getGroups(int firstResult, int maxResults) {
+		return (List) commandService
+				.execute(new GetGroups(firstResult, maxResults));
+	}
+
+	public List<Membership> getMemberships(User userImpl, int firstResult,
+			int maxResults) {
+		return (List) commandService.execute(new GetMemberships(firstResult,
+				maxResults));
+	}
+
+	public List<Membership> getMemberships(Group groupImpl, int firstResult,
+			int maxResults) {
+		return (List) commandService.execute(new GetMemberships(firstResult,
+				maxResults));
+	}
+
+	public List<User> getUsers(int firstResult, int maxResults) {
+		return (List) commandService.execute(new GetUsers(firstResult, maxResults));
+	}
+
+	public void saveGroup(Group groupImpl) {
+		commandService.execute(new SaveGroup(groupImpl));
+	}
+
+	public void updateMembership(Membership membershipImpl) {
+		commandService.execute(new UpdateMembership(membershipImpl));
+	}
+
+	public void updateGroup(Group groupImpl) {
+		commandService.execute(new UpdateGroup(groupImpl));
+	}
+
+	public List<MembershipImpl> getMembershipsForRole(String role) {
+		return (List<MembershipImpl>) commandService
+				.execute(new GetMembershipsForRole(role));
+	}
+
+	public List<Membership> getMembershipsForUser(String userId) {
+		return (List<Membership>) commandService.execute(new GetMembershipsForUser(
+				userId));
+	}
+
+	public List<Membership> getMembershipsForGroup(String groupId) {
+		return (List<Membership>) commandService
+				.execute(new GetMembershipsForGroup(groupId));
+	}
+
+	public void deleteMembership(long membershipDbid) {
+		commandService.execute(new DeleteMembership(membershipDbid));
+	}
+
+	public List<Membership> getMembershipsForGroup(String groupId,
+			int firstResult, int maxResults) {
+		return ((List<Membership>) commandService
+				.execute(new GetMembershipsForGroup(groupId, firstResult, maxResults)));
+	}
+
+	public List<Membership> getMembershipsForGroupType(String userId,
+			String groupType, int firstResult, int maxResults) {
+		return null;
+	}
+
+	public List<Membership> getMembershipsForRole(String groupId, String role,
+			int firstResult, int maxResults) {
+		return null;
+	}
+
+	public List<Membership> getMembershipsForUser(String userId, int firstResult,
+			int maxResults) {
+		return null;
+	}
+
+	public void removeGroupHierarchy(String parentGroupId, String childGroupId) {
+	}
+
+	public void setGroupHierarchy(String parentGroupId, String childGroupId) {
+	}
+
+	public void updatePassword(String userId, String password) {
+	}
+
+	public void verifyPassword(String userId, String password) {
+	}
+
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/MembershipImpl.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/MembershipImpl.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/MembershipImpl.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,114 @@
+/*
+ * 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.id.impl;
+
+import java.io.Serializable;
+import java.util.HashSet;
+
+import org.jbpm.id.IdentityException;
+import org.jbpm.id.Membership;
+import org.jbpm.pvm.internal.util.EqualsUtil;
+
+/**
+ * @author Tom Baeyens
+ */
+public class MembershipImpl extends IdentityImpl implements Serializable, Membership {
+
+	private static final long serialVersionUID = 1L;
+
+	protected UserImpl user;
+	protected GroupImpl group;
+
+	protected String role;
+
+	protected MembershipImpl() {
+	}
+
+  /** sets both ends of the relationship */
+  public static MembershipImpl createMembership(UserImpl user, GroupImpl group) {
+    return createMembership(user, group, null);
+  }
+
+	/** sets both ends of the relationship */
+	public static MembershipImpl createMembership(UserImpl user, GroupImpl group, String role) {
+    if (user==null) {
+      throw new IdentityException("user is null");
+    }
+    if (group==null) {
+      throw new IdentityException("group is null");
+    }
+    MembershipImpl membership = new MembershipImpl();
+    if (user.getMemberships()==null) {
+      user.memberships = new HashSet<MembershipImpl>();
+    }
+    user.getMemberships().add(membership);
+    membership.user = user;
+    
+    if (group.getMemberships()==null) {
+      group.memberships = new HashSet<MembershipImpl>();
+    }
+    group.memberships.add(membership);
+    membership.group = group;
+    
+    membership.setRole(role);
+    
+    return membership;
+	}
+	
+	public static void removeMembership(MembershipImpl membership) {
+	  if (membership==null) {
+      throw new IdentityException("membership is null");
+    }
+    UserImpl user = membership.getUser();
+    if ( (user.memberships!=null)
+         && (user.memberships.remove(membership))
+       ) {
+      membership.user = null;
+    }
+    GroupImpl group = membership.getGroup();
+    if ( (group.memberships!=null)
+         && (group.memberships.remove(membership))
+       ) {
+      membership.group = null;
+    }
+	}
+
+	public UserImpl getUser() {
+		return user;
+	}
+
+	public GroupImpl getGroup() {
+		return group;
+	}
+
+	public String getRole() {
+		return role;
+	}
+
+	public void setRole(String role) {
+		this.role = role;
+	}
+	
+  public boolean equals(Object o) {
+	  return EqualsUtil.equals(this, o);
+	}
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/Permissions.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/Permissions.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/Permissions.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,73 @@
+/*
+ * 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.id.impl;
+
+import java.io.Serializable;
+import java.security.Permission;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jbpm.id.IdentityException;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class Permissions implements Serializable {
+
+  private static final long serialVersionUID = 1L;
+
+  protected long dbid;
+  protected int dbversion;
+  protected Set<Permission> permissions;
+
+  public void addPermission(Permission permission) {
+    if (permission==null) {
+      throw new IdentityException("permission is null");
+    }
+    if (permissions==null) {
+      permissions = new HashSet<Permission>();
+    }
+    permissions.add(permission);
+  }
+
+  public void removePermission(Permission permission) {
+    if (permission==null) {
+      throw new IdentityException("permission is null");
+    }
+    if (permissions!=null) {
+      permissions.remove(permission);
+    }
+  }
+
+  public Set<Permission> getPermissions() {
+    if (permissions==null) {
+      return Collections.EMPTY_SET;
+    }
+    return permissions;
+  }
+
+  public boolean isEmpty() {
+    return ( (permissions==null) || (permissions.isEmpty()));
+  }
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/UserImpl.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/UserImpl.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/UserImpl.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.impl;
+
+import java.io.Serializable;
+import java.util.Set;
+
+import org.jbpm.id.User;
+import org.jbpm.pvm.internal.util.EqualsUtil;
+
+/**
+ * @author Tom Baeyens
+ */
+public class UserImpl extends IdentityImpl implements Serializable, User {
+
+	private static final long serialVersionUID = 1L;
+
+	protected String email;
+	protected String phone;
+	protected String address;
+	protected String notes;
+  protected String password;
+
+	protected Set<MembershipImpl> memberships;
+
+	// getters and setters //////////////////////////////////////////////////////
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getPhone() {
+		return phone;
+	}
+
+	public void setPhone(String phone) {
+		this.phone = phone;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getNotes() {
+		return notes;
+	}
+
+	public void setNotes(String notes) {
+		this.notes = notes;
+	}
+
+	public Set<MembershipImpl> getMemberships() {
+		return memberships;
+	}
+
+	public boolean equals(Object o) {
+		return EqualsUtil.equals(this, o);
+	}
+
+	public String getPassword() {
+    return password;
+  }
+  
+	public void setPassword(String password) {
+    this.password = password;
+  }
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/package.html
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/package.html	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/impl/package.html	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,3 @@
+<body>
+hibernatable entity implementations.
+</body>

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/package.html
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/package.html	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/package.html	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,20 @@
+<body>
+the main model interface classes and IdentityService as the session facade.
+
+<h1>Java model</h1>
+<p><img src="identity-java.png"/></p>
+
+<h1>Database model</h1>
+<p><img src="identity-db.png"/></p>
+
+<h1>Exceptions</h1>
+
+<p>This component itself throws {@link IdentityException}s, 
+which is a runtime exception.  All the checked exceptions that 
+come out of methods used by this identity component are turned into 
+Identity exceptions and the cause is attached.  All runtime exceptions 
+that come out of methods used by identity component will be 
+passed on to the client as is.
+</p>
+
+</body>

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/AuthenticationSession.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/AuthenticationSession.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/AuthenticationSession.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.session;
+
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+
+/**
+ * @author Tom Baeyens
+ */
+public class AuthenticationSession {
+  
+  private static final String DEFAULT_QUERY_TEXT = "SELECT U.ID_ FROM ID_USER U WHERE U.ID_ = :username AND U.PWD_ = :password";
+
+  Session session;
+  String queryText = DEFAULT_QUERY_TEXT;
+  
+  public String authenticate(String username, String password) {
+    SQLQuery query = session.createSQLQuery(queryText);
+    query.setString("username", username);
+    query.setString("password", password);
+    return (String) query.uniqueResult();
+  }
+
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/IdentityDbSession.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/IdentityDbSession.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/IdentityDbSession.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,88 @@
+/*
+ * 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.id.session;
+
+import java.util.List;
+
+import org.hibernate.Query;
+import org.jbpm.id.impl.GroupImpl;
+import org.jbpm.id.impl.MembershipImpl;
+import org.jbpm.id.impl.UserImpl;
+import org.jbpm.pvm.session.DbSession;
+import org.jbpm.pvm.internal.hibernate.HibernateDbSession;
+
+/**
+ * @author Tom Baeyens
+ * @author Fady Matar
+ */
+public class IdentityDbSession extends HibernateDbSession implements DbSession
+{
+
+	public UserImpl findUserById(String userId) {
+		Query query = session.getNamedQuery("findUserById");
+		query.setString("userId", userId);
+		UserImpl user = (UserImpl) query.uniqueResult();
+		return user;
+	}
+	
+	public UserImpl findUserByDbId(long dbid) {
+		Query query = session.getNamedQuery("findUserByDbId");
+		query.setLong("dbid", dbid);
+		UserImpl user = (UserImpl) query.uniqueResult();
+		return user;
+	}
+
+  public List<UserImpl> findUsers(int firstResult, int maxResults) {
+    Query query = session.getNamedQuery("findUsers");
+    query.setFirstResult(firstResult);
+    query.setMaxResults(maxResults);
+    return query.list();
+  }
+
+	public GroupImpl findGroupById(String groupId) {
+		Query query = session.getNamedQuery("findGroupById");
+		query.setString("groupId", groupId);
+		GroupImpl group = (GroupImpl) query.uniqueResult();
+		return group;
+	}
+	
+	public GroupImpl findGroupByDbId(long dbid) {
+		Query query = session.getNamedQuery("findGroupByDbId");
+		query.setLong("dbid", dbid);
+		GroupImpl group = (GroupImpl) query.uniqueResult();
+		return group;
+	}
+	
+  public List<GroupImpl> findGroups(int firstResult, int maxResults) {
+    Query query = session.getNamedQuery("findGroups");
+    query.setFirstResult(firstResult);
+    query.setMaxResults(maxResults);
+    return query.list();
+  }
+
+  public List<MembershipImpl> findMembershipsByGroupAndRole(String groupId, String role) {
+    Query query = session.getNamedQuery("findMembershipsByGroupAndRole");
+    query.setString("groupId", groupId);
+    query.setString("role", role);
+    return query.list();
+  }
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/QueryOptions.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/QueryOptions.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/QueryOptions.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,56 @@
+/*
+ * 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.id.session;
+
+import org.hibernate.Query;
+
+/**
+ * @author Tom Baeyens
+ */
+public class QueryOptions {
+
+  Integer firstResult;
+  Integer maxResults;
+  Integer fetchSize;
+  
+  public void apply(Query query) {
+    if (firstResult!=null) {
+      query.setFirstResult(firstResult);
+    }
+    if (maxResults!=null) {
+      query.setMaxResults(maxResults);
+    }
+    if (fetchSize!=null) {
+      query.setFetchSize(fetchSize);
+    }
+  }
+  
+  public void setFirstResult(Integer firstResult) {
+    this.firstResult = firstResult;
+  }
+  public void setMaxResults(Integer maxResults) {
+    this.maxResults = maxResults;
+  }
+  public void setFetchSize(Integer fetchSize) {
+    this.fetchSize = fetchSize;
+  }
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/package.html
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/package.html	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/session/package.html	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,3 @@
+<body>
+wrappers around hibernate session that add query based methods.
+</body>

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityDbSessionBinding.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityDbSessionBinding.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityDbSessionBinding.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.xml;
+
+import org.jbpm.pvm.internal.xml.Parser;
+import org.jbpm.pvm.internal.xml.Parse;
+import org.jbpm.pvm.internal.xml.Binding;
+import org.w3c.dom.Element;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class IdentityDbSessionBinding 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 IdentityDbSessionDescriptor();
+  }
+
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityDbSessionDescriptor.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityDbSessionDescriptor.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityDbSessionDescriptor.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.xml;
+
+import org.hibernate.Session;
+import org.jbpm.id.session.IdentityDbSession;
+import org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor;
+import org.jbpm.pvm.internal.wire.WireContext;
+import org.jbpm.pvm.internal.wire.WireDefinition;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class IdentityDbSessionDescriptor extends AbstractDescriptor
+{
+  
+  private static final long serialVersionUID = 1L;
+  
+  public Object construct(WireContext wireContext) {
+    return new IdentityDbSession();
+  }
+
+  public void initialize(Object object, WireContext wireContext) {
+    IdentityDbSession identityDbSession = (IdentityDbSession) object;
+    Session session = wireContext.get(Session.class);
+    identityDbSession.setSession(session);
+  }
+
+  public Class< ? > getType(WireDefinition wireDefinition) {
+    return IdentityDbSession.class;
+  }
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityServiceBinding.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityServiceBinding.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityServiceBinding.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.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 IdentityServiceBinding implements Binding
+{
+
+   public String getCategory()
+   {
+      throw new RuntimeException("Not implemented");
+   }
+
+   public boolean matches(Element element)
+   {
+      throw new RuntimeException("Not implemented"); 
+   }
+
+   public Object parse(Element element, Parse parse, Parser parser) {
+    return new IdentityServiceDescriptor();
+  }
+
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityServiceDescriptor.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityServiceDescriptor.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/IdentityServiceDescriptor.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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.id.xml;
+
+import org.jbpm.id.IdentityService;
+import org.jbpm.id.impl.IdentityServiceImpl;
+import org.jbpm.pvm.internal.wire.WireContext;
+import org.jbpm.pvm.internal.wire.WireDefinition;
+import org.jbpm.pvm.internal.wire.WireException;
+import org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor;
+import org.jbpm.pvm.internal.cmd.CommandService;
+
+/**
+ * @author Tom Baeyens
+ */
+public class IdentityServiceDescriptor extends AbstractDescriptor
+{
+
+  private static final long serialVersionUID = 1L;
+
+  public Object construct(WireContext wireContext) {
+    CommandService commandService = wireContext.get(CommandService.class);
+    if (commandService==null) {
+      throw new WireException("no command-service available");
+    }
+    return new IdentityServiceImpl(commandService);
+  }
+
+  public Class< ? > getType(WireDefinition wireDefinition) {
+    return IdentityService.class;
+  }
+
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/package.html
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/package.html	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/id/xml/package.html	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,4 @@
+<body>
+bindings for <code>identity-db-session</code> and <code>identity-service</code>
+that are automatically added to wire parser.
+</body>

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/pvm.hibernate.mappings.xml
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/pvm.hibernate.mappings.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/pvm.hibernate.mappings.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,4 @@
+<mappings>
+  <mapping resource="org/jbpm/hibernate.identity.hbm.xml" />
+  <mapping resource="org/jbpm/hibernate.identity.queries.hbm.xml" />
+</mappings>


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

Added: jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/pvm.wire.bindings.xml
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/pvm.wire.bindings.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/java/org/jbpm/pvm.wire.bindings.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,6 @@
+<wire-bindings>
+
+  <binding tag="identity-db-session" class="org.jbpm.id.xml.IdentityDbSessionBinding" category="descriptor" />
+  <binding tag="identity-service" class="org.jbpm.id.xml.IdentityServiceBinding" category="descriptor" />
+
+</wire-bindings>


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

Added: jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/hibernate.identity.hbm.xml
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/hibernate.identity.hbm.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/hibernate.identity.hbm.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,125 @@
+<?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.id.impl" default-access="field">
+
+  <!-- ### USER ########################################################### -->
+  <class name="UserImpl" table="JBPM_USER" discriminator-value="U">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator type="char" column="CLASS_"/>
+    <version name="dbversion" column="DBVERSION_"/>
+
+    <property name="id" column="ID_" unique="true" not-null="true" />
+    <property name="name" column="NAME_" />
+    <property name="email" column="EMAIL_" />
+    <property name="phone" column="PHONE_" />
+    <property name="address" column="ADDRESS_" />
+    <property name="notes" column="NOTES_" />
+    <property name="password" column="PASSWORD_" />
+    
+    <set name="memberships">
+      <key column="USER_" foreign-key="FK_MEMSHIP_USR" />
+      <one-to-many class="MembershipImpl" />
+    </set>
+    
+    <many-to-one name="properties"
+                 class="org.jbpm.pvm.impl.WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_USER_PROPS"
+                 lazy="false"
+                 cascade="all" />
+
+    <many-to-one name="permissions"
+                 column="PERMISSIONS_"
+                 class="Permissions" 
+                 lazy="false"
+                 cascade="all" />
+
+  </class>
+  
+  <!-- ### GROUP ########################################################## -->
+  <class name="GroupImpl" table="JBPM_GROUP" discriminator-value="G">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator type="char" column="CLASS_"/>
+    <version name="dbversion" column="DBVERSION_"/>
+    
+    <property name="id" column="ID_" unique="true" not-null="true" />
+    <property name="name" column="NAME_" />
+    <property name="type" column="TYPE_" />
+
+    <many-to-one name="parent"
+                 column="PARENT_"  
+                 foreign-key="FK_GROUP_PARENT"/>
+    
+    <set name="children">
+      <key column="PARENT_" />
+      <one-to-many class="GroupImpl" />
+    </set>
+    
+    <set name="memberships">
+      <key column="GROUP_" foreign-key="FK_MEMSHIP_GRP" />
+      <one-to-many class="MembershipImpl" />
+    </set>
+    
+    <many-to-one name="properties"
+                 class="org.jbpm.pvm.impl.WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_GROUP_PROPS"
+                 lazy="false"
+                 cascade="all" />
+
+    <many-to-one name="permissions"
+                 column="PERMISSIONS_" 
+                 class="Permissions" 
+                 lazy="false"
+                 cascade="all" />
+
+  </class>
+
+  <!-- ### MEMBERSHIP ##################################################### -->
+  <class name="MembershipImpl" table="JBPM_MEMBERSHIP" discriminator-value="M">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator type="char" column="CLASS_"/>
+    <version name="dbversion" column="DBVERSION_"/>
+    
+    <property name="role" column="ROLE__" />
+    
+    <many-to-one name="user"
+                 column="USER__"  
+                 class="UserImpl" />
+
+    <many-to-one name="group" 
+                 column="GROUP_"  
+                 class="GroupImpl" />
+
+    <many-to-one name="permissions"
+                 column="PERMISSIONS_"  
+                 class="Permissions" 
+                 lazy="false"
+                 cascade="all" />
+  </class>
+
+  <!-- ### PERMISSIONS #################################################### -->
+  <class name="Permissions">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_"/>
+    <set name="permissions" cascade="all" lazy="false" table="JBPM_PERMISSION">
+      <key column="USER_" foreign-key="none" not-null="false" />
+      <element type="org.jbpm.id.hibernate.PermissionUserType">
+        <column name="CLASS_"/>
+        <column name="NAME_"/>
+        <column name="ACTION_"/>
+      </element>
+    </set>
+  </class>
+  
+</hibernate-mapping>


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

Added: jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/hibernate.identity.queries.hbm.xml
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/hibernate.identity.queries.hbm.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/hibernate.identity.queries.hbm.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,82 @@
+<?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="findUserById">
+    <![CDATA[
+     select user
+     from org.jbpm.id.User as user
+     where user.id = :userId 
+    ]]>
+  </query>
+  
+  <query name="findUserByDbId">
+    <![CDATA[
+     select user
+     from org.jbpm.id.User as user
+     where user.dbid = :dbid 
+    ]]>
+  </query>
+  
+  <query name="findUsers">
+    <![CDATA[
+     select user
+     from org.jbpm.id.User as user 
+     order by user.id asc
+    ]]>
+  </query>
+  
+  <query name="findGroupById">
+    <![CDATA[
+     select group
+     from org.jbpm.id.Group as group
+     where group.id = :groupId
+    ]]>
+  </query>
+  
+  <query name="findGroupByDbId">
+    <![CDATA[
+     select group
+     from org.jbpm.id.Group as group
+     where group.dbid = :dbid
+    ]]>
+  </query>
+  
+  <query name="findGroups">
+    <![CDATA[
+     select group
+     from org.jbpm.id.Group as group 
+     order by group.id asc
+    ]]>
+  </query>
+  
+  <query name="findMembershipsByGroupAndRole">
+    <![CDATA[
+     select membership
+     from org.jbpm.id.Membership as membership
+     where membership.group.id = :groupId
+       and membership.role = :role 
+    ]]>
+  </query>
+  
+  <query name="findMembershipsForUser">
+    <![CDATA[
+     select membership
+     from org.jbpm.id.Membership as membership
+     where membership.user.id = :id
+    ]]>
+  </query>
+  
+  <query name="findMembershipsForGroup">
+    <![CDATA[
+     select membership
+     from org.jbpm.id.Membership as membership
+     where membership.group.id = :id
+    ]]>
+  </query>
+  
+</hibernate-mapping>


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

Added: jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/id/environment.cfg.xml
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/id/environment.cfg.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/id/environment.cfg.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,24 @@
+<contexts>
+
+   <environment-factory>
+
+      <hibernate-configuration>
+         <properties resource="hibernate.properties" />
+         <mappings resource="org/jbpm/pvm/pvm.hibernate.mappings.xml" />
+         <cache-configuration resource="org/jbpm/pvm/pvm.cache.xml" usage="nonstrict-read-write" />
+      </hibernate-configuration>
+
+      <hibernate-session-factory />
+      <variable-types resource="org/jbpm/pvm/pvm.types.xml" />
+
+   </environment-factory>
+
+   <environment>
+
+      <transaction />
+      <hibernate-session />
+      <pvm-db-session />
+
+   </environment>
+
+</contexts>


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

Added: jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/pvm.hibernate.mappings.xml
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/pvm.hibernate.mappings.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/pvm.hibernate.mappings.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,4 @@
+<mappings>
+  <mapping resource="org/jbpm/hibernate.identity.hbm.xml" />
+  <mapping resource="org/jbpm/hibernate.identity.queries.hbm.xml" />
+</mappings>


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

Added: jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/pvm.wire.bindings.xml
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/pvm.wire.bindings.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/resources/org/jbpm/pvm.wire.bindings.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,6 @@
+<wire-bindings>
+
+  <binding tag="identity-db-session" class="org.jbpm.id.xml.IdentityDbSessionBinding" category="descriptor" />
+  <binding tag="identity-service" class="org.jbpm.id.xml.IdentityServiceBinding" category="descriptor" />
+
+</wire-bindings>


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

Added: jbpm4/indentity/trunk/modules/core/src/main/resources/release.notes.html
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/main/resources/release.notes.html	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/main/resources/release.notes.html	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,31 @@
+<html>
+  <head>
+    <title>Process Virtual Machine: Release Notes</title>
+  </head>
+<body>
+
+<h1>The Process Virtual Machine</h1>
+
+<p>This software is released under the <a href="lgpl.txt">LGPL</a> license.</p>
+
+<h3>First alpha version</h3>
+
+<p><b>Warning:</b> Nothing in this release can be considered as stable.</p>
+
+<p>The main purpose of this release is to publish the structure of the process 
+definitions, the execution and the way that activities implement the 
+runtime behaviour of the nodes and event listeners.
+</p>
+
+<p>There is also an initial iteration of a session facade: org.jbpm.PvmService
+</p>
+
+<p>To get started, see the <a href="javadoc/index.html">javadocs</a> and the 
+<a href="manual/html_single/index.html">manual</a></p>
+
+<p>Feedback is appreciated on <a href="http://www.jboss.org/index.html?module=bb&op=viewforum&f=253">the 
+PVM Forum</a>.
+</p> 
+
+</body>
+</html>
\ No newline at end of file

Added: jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/AllTests.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/AllTests.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/AllTests.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,37 @@
+/*
+ * 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.id;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+  public static Test suite() {
+    TestSuite suite = new TestSuite("org.jbpm.id");
+    //$JUnit-BEGIN$
+    suite.addTestSuite(IdentityServiceTest.class);
+    //$JUnit-END$
+    return suite;
+  }
+
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/IdentityServiceTest.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/IdentityServiceTest.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/IdentityServiceTest.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,573 @@
+/*
+ * 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.id;
+
+import java.io.FilePermission;
+import java.net.SocketPermission;
+import java.security.Permission;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.jbpm.id.impl.GroupImpl;
+import org.jbpm.id.impl.MembershipImpl;
+import org.jbpm.id.impl.UserImpl;
+import org.jbpm.pvm.test.base.ServiceTestCase;
+
+/**
+ * @author Tom Baeyens
+ */
+public class IdentityServiceTest extends ServiceTestCase
+{
+
+	public void testUserNew() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+		assertNotNull(
+				"identity service probably not correctly configured. for an example, see how it's done in the pvm service test",
+				identityService);
+
+		User user = new UserImpl();
+		user.setId("tombaeyens");
+		user.setName("Tom Baeyens");
+		user.setEmail("tom.baeyens at jboss.com");
+		identityService.saveUser(user);
+
+		user = identityService.getUser("tombaeyens");
+		assertNotNull(user);
+		assertEquals("Tom Baeyens", user.getName());
+		assertEquals("tom.baeyens at jboss.com", user.getEmail());
+	}
+
+	public void testUserUpdate() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		User user = new UserImpl();
+		user.setId("fmatar");
+		user.setName("Fady Matar");
+		user.setEmail("fady.matar at jboss.com");
+		identityService.saveUser(user);
+
+		user = identityService.getUser("fmatar");
+
+		user.setName("Fady Matar");
+		user.setEmail("fmatar at redhat.com");
+		user.setAddress("the world");
+		user.setPhone("93845739485");
+		user.setNotes("a great guy");
+
+		identityService.updateUser(user);
+		user = identityService.getUser("fmatar");
+
+		assertEquals("fmatar", user.getId());
+		assertEquals("Fady Matar", user.getName());
+		assertEquals("fmatar at redhat.com", user.getEmail());
+		assertEquals("the world", user.getAddress());
+		assertEquals("93845739485", user.getPhone());
+		assertEquals("a great guy", user.getNotes());
+	}
+
+	public void testUserDelete() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		User user = new UserImpl();
+		user.setId("fmatar");
+		user.setName("Fady Matar");
+		user.setEmail("fady.matar at jboss.com");
+
+		identityService.saveUser(user);
+
+		identityService.deleteUser("fmatar");
+
+		assertNull(identityService.getUser("fmatar"));
+	}
+
+	public void testUserProperties() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		User user = new UserImpl();
+		user.setId("fmatar");
+		user.setProperty("first.name", "Fady");
+		user.setProperty("last.name", "Matar");
+		identityService.saveUser(user);
+
+		user = identityService.getUser("fmatar");
+
+		assertEquals("Fady", user.getProperty("first.name"));
+		assertEquals("Matar", user.getProperty("last.name"));
+	}
+
+	public void testUserPermissions() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		User user = new UserImpl();
+		user.setId("fmatar");
+		user.addPermission(new FilePermission("c:", "read"));
+		user.addPermission(new SocketPermission("localhost:1024-",
+				"accept,connect,listen"));
+
+		identityService.saveUser(user);
+
+		user = identityService.getUser("fmatar");
+
+		Set<Permission> permissions = user.getPermissions();
+		assertTrue(permissions.contains(new FilePermission("c:", "read")));
+		assertTrue(permissions.contains(new SocketPermission("localhost:1024-",
+				"accept,connect,listen")));
+	}
+
+	public void testUserWithoutId() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		try {
+			identityService.saveUser(new UserImpl());
+			fail("expected exception");
+		} catch (IdentityException e) {
+			// OK
+			assertTextPresent("user doesn't have an id", e.getMessage());
+		}
+	}
+
+	public void testNewGroup() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		Group group = new GroupImpl();
+		group.setId("admin");
+		group.setName("Administrators");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		Group retrievedGroup = identityService.getGroup("admin");
+		assertNotNull(group);
+		assertEquals("Administrators", retrievedGroup.getName());
+		assertEquals("organization", retrievedGroup.getType());
+	}
+
+	public void testUpdateGroup() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		Group group = new GroupImpl();
+		group.setId("admin");
+		group.setName("Administrators");
+		group.setType("organization");
+		identityService.saveGroup(group);
+		assertNotNull(group);
+
+		User user = new UserImpl();
+		user.setId("fmatar");
+		user.setName("Fady Matar");
+		user.setEmail("fady.matar at jboss.com");
+		identityService.saveUser(user);
+		assertNotNull(user);
+
+		identityService.createMembership(user.getId(), group.getId());
+	}
+
+	public void testDeleteGroup() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		Group group = new GroupImpl();
+		group.setId("admin");
+		group.setName("Administrators");
+		group.setType("organization");
+		identityService.saveGroup(group);
+
+		Group retrievedGroup = identityService.getGroup("admin");
+		assertNotNull(retrievedGroup);
+
+		identityService.deleteGroup("admin");
+		retrievedGroup = identityService.getGroup("admin");
+		assertNull(retrievedGroup);
+	}
+
+	public void testNewMembership() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		Group group = new GroupImpl();
+		group.setId("admin");
+		group.setName("Administrators");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		User user = new UserImpl();
+		user.setId("fmatar");
+		user.setName("Fady Matar");
+		user.setEmail("fmatar at redhat.com");
+
+		identityService.saveUser(user);
+
+		Membership membership = identityService.createMembership("fmatar", "admin");
+		assertEquals(user.getName(), membership.getUser().getName());
+		assertEquals(group.getName(), membership.getGroup().getName());
+
+		Membership membership2 = identityService.createMembership("fmatar",
+				"admin", "accountant");
+		assertEquals(user.getName(), membership2.getUser().getName());
+		assertEquals(group.getName(), membership2.getGroup().getName());
+		assertEquals("accountant", membership2.getRole());
+	}
+
+	public void testUpdateMembership() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		Group group = new GroupImpl();
+		group.setId("admin");
+		group.setName("Administrators");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		User user = new UserImpl();
+		user.setId("fmatar");
+		user.setName("Fady Matar");
+		user.setEmail("fmatar at redhat.com");
+
+		identityService.saveUser(user);
+
+		Membership membership = identityService.createMembership("fmatar", "admin");
+		assertEquals(user.getName(), membership.getUser().getName());
+		assertEquals(group.getName(), membership.getGroup().getName());
+
+		Group usersGroup = new GroupImpl();
+		usersGroup.setName("users");
+		usersGroup.setType("security-role");
+		membership.setRole("operator");
+
+		identityService.updateMembership(membership);
+		assertEquals("operator", membership.getRole());
+	}
+
+	public void testRemoveMembership() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		Group group = new GroupImpl();
+		group.setId("admin");
+		group.setName("Administrators");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		User user = new UserImpl();
+		user.setId("fmatar");
+		user.setName("Fady Matar");
+		user.setEmail("fmatar at redhat.com");
+
+		identityService.saveUser(user);
+
+		Membership membershipImpl = identityService.createMembership("fmatar",
+				"admin");
+		assertEquals(user.getName(), membershipImpl.getUser().getName());
+		assertEquals(group.getName(), membershipImpl.getGroup().getName());
+	}
+
+	public void testGetUsers() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		User user = new UserImpl();
+		user.setId("fmatar");
+		user.setName("Fady Matar");
+		user.setEmail("fmatar at redhat.com");
+		identityService.saveUser(user);
+
+		user = new UserImpl();
+		user.setId("tbaeyens");
+		user.setName("Tom Baeyens");
+		user.setEmail("tbaeyens at redhat.com");
+		identityService.saveUser(user);
+
+		user = new UserImpl();
+		user.setId("kaers");
+		user.setName("Koen Aers");
+		user.setEmail("kaers at redhat.com");
+		identityService.saveUser(user);
+
+		List<User> usersList = identityService.getUsers(1, 2);
+		assertEquals(2, usersList.size());
+
+		usersList = identityService.getUsers(2, 1);
+		assertEquals(1, usersList.size());
+
+		usersList = identityService.getUsers(0, 10);
+		assertEquals(3, usersList.size());
+		assertEquals("fmatar", usersList.get(0).getId());
+		assertEquals("kaers", usersList.get(1).getId());
+		assertEquals("tbaeyens", usersList.get(2).getId());
+	}
+
+	public void testGetGroups() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		Group group = new GroupImpl();
+		group.setId("admin");
+		group.setName("Administrators");
+		group.setType("organization");
+		identityService.saveGroup(group);
+
+		group = new GroupImpl();
+		group.setId("user");
+		group.setName("Users");
+		group.setType("organization");
+		identityService.saveGroup(group);
+
+		group = new GroupImpl();
+		group.setId("contributor");
+		group.setName("Contributors");
+		group.setType("security-role");
+		identityService.saveGroup(group);
+
+		List<Group> groupsList = identityService.getGroups(1, 2);
+		assertEquals(2, groupsList.size());
+
+		groupsList = identityService.getGroups(2, 1);
+		assertEquals(1, groupsList.size());
+	}
+
+	public void testGetMemberships() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		Group group = new GroupImpl();
+		group.setId("admin");
+		group.setName("Administrators");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		group = new GroupImpl();
+		group.setId("users");
+		group.setName("Users");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		group = new GroupImpl();
+		group.setId("reviewers");
+		group.setName("Reviewers");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		group = new GroupImpl();
+		group.setId("moderators");
+		group.setName("Moderators ");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		group = new GroupImpl();
+		group.setId("contrib");
+		group.setName("Contributors ");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		User user = new UserImpl();
+		user.setId("fmatar");
+		user.setName("Fady Matar");
+		user.setEmail("fmatar at redhat.com");
+		identityService.saveUser(user);
+
+		user = new UserImpl();
+		user.setId("tbaeyens");
+		user.setName("Tom Baeyens");
+		user.setEmail("tbaeyens at redhat.com");
+		identityService.saveUser(user);
+
+		user = new UserImpl();
+		user.setId("kaers");
+		user.setName("Koen Aers");
+		user.setEmail("kaers at redhat.com");
+		identityService.saveUser(user);
+
+		identityService.createMembership("fmatar", "admin");
+		identityService.createMembership("kaers", "admin", "administrator");
+		identityService.createMembership("tbaeyens", "admin", "administrator");
+		identityService.createMembership("fmatar", "admin", "administrator");
+		identityService.createMembership("fmatar", "admin", "moderator");
+
+		assertEquals(3, identityService.getMembershipsForUser("fmatar").size());
+		assertEquals(1, identityService.getMembershipsForUser("kaers").size());
+		assertEquals(1, identityService.getMembershipsForUser("tbaeyens").size());
+	}
+
+	public void testDeleteMembership() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+		Group group = new GroupImpl();
+		group.setId("admin");
+		group.setName("Administrators");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		User user = new UserImpl();
+		user.setId("fmatar");
+		user.setName("Fady Matar");
+		user.setEmail("fmatar at redhat.com");
+
+		identityService.saveUser(user);
+
+		identityService.createMembership("fmatar", "admin");
+
+		ArrayList<Membership> membershipsList = new ArrayList<Membership>(
+				identityService.getMembershipsForUser("fmatar"));
+		assertNotNull(membershipsList);
+		assertEquals(1, membershipsList.size());
+
+		MembershipImpl membership = (MembershipImpl) membershipsList.get(0);
+		identityService.deleteMembership(membership.getDbid());
+
+		membershipsList = new ArrayList<Membership>(identityService
+				.getMembershipsForUser("fmatar"));
+		assertNotNull(membershipsList);
+		assertEquals(0, membershipsList.size());
+	}
+
+	public void testGetMembershipsForGroup() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		Group group = new GroupImpl();
+		group.setId("admin");
+		group.setName("Administrators");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		group = new GroupImpl();
+		group.setId("users");
+		group.setName("Users");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		group = new GroupImpl();
+		group.setId("reviewers");
+		group.setName("Reviewers");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		group = new GroupImpl();
+		group.setId("moderators");
+		group.setName("Moderators ");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		group = new GroupImpl();
+		group.setId("contrib");
+		group.setName("Contributors ");
+		group.setType("organization");
+
+		identityService.saveGroup(group);
+
+		User user = new UserImpl();
+		user.setId("fmatar");
+		user.setName("Fady Matar");
+		user.setEmail("fmatar at redhat.com");
+		identityService.saveUser(user);
+
+		user = new UserImpl();
+		user.setId("tbaeyens");
+		user.setName("Tom Baeyens");
+		user.setEmail("tbaeyens at redhat.com");
+		identityService.saveUser(user);
+
+		user = new UserImpl();
+		user.setId("kaers");
+		user.setName("Koen Aers");
+		user.setEmail("kaers at redhat.com");
+		identityService.saveUser(user);
+
+		identityService.createMembership("fmatar", "admin");
+		identityService.createMembership("kaers", "admin", "administrator");
+		identityService.createMembership("tbaeyens", "admin", "administrator");
+		identityService.createMembership("fmatar", "admin", "administrator");
+		identityService.createMembership("fmatar", "admin", "moderator");
+
+		assertEquals(5, identityService.getMembershipsForGroup("admin").size());
+		assertEquals(1, identityService.getMembershipsForGroup("admin", 4, 2)
+				.size());
+	}
+
+	public void testGroupCascadingDelete() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		GroupImpl rootGroup = new GroupImpl();
+		rootGroup.setId("root");
+		rootGroup.setName("Root Group");
+		identityService.saveGroup(rootGroup);
+
+		GroupImpl subGroup1 = new GroupImpl();
+		subGroup1.setId("subgroup1");
+		identityService.saveGroup(subGroup1);
+
+		GroupImpl subGroup2 = new GroupImpl();
+		subGroup2.setId("subgroup2");
+		identityService.saveGroup(subGroup2);
+
+		GroupImpl.createParentChildRelation(rootGroup, subGroup1);
+		assertEquals(3, identityService.getGroups().size());
+		identityService.deleteGroup(rootGroup.getId()); //child group is not deleted
+		assertEquals(2, identityService.getGroups().size());
+	}
+	
+	public void testDuplicateMembership() {
+		IdentityService identityService = getEnvironmentFactory().get(
+				IdentityService.class);
+
+		Group rootGroup = new GroupImpl();
+		rootGroup.setId("root");
+		rootGroup.setName("Root Group");
+		identityService.saveGroup(rootGroup);
+		
+		User user = new UserImpl();
+		user.setId("fmatar");
+		identityService.saveUser(user);
+		
+		identityService.createMembership("fmatar", "root");
+		identityService.createMembership("fmatar", "root");
+		identityService.createMembership("fmatar", "root");
+		assertEquals(3, identityService.getMembershipsForUser("fmatar").size());
+		
+		identityService.createMembership("fmatar", "root" , "admin");
+		identityService.createMembership("fmatar", "root" , "admin");
+		assertEquals(5, identityService.getMembershipsForUser("fmatar").size());
+	}
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/ObjectEqualityDbTest.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/ObjectEqualityDbTest.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/ObjectEqualityDbTest.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,64 @@
+/*
+ * 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.id;
+
+import java.util.List;
+
+import org.hibernate.Hibernate;
+import org.hibernate.proxy.HibernateProxy;
+import org.jbpm.id.impl.GroupImpl;
+import org.jbpm.id.impl.MembershipImpl;
+import org.jbpm.id.impl.UserImpl;
+import org.jbpm.id.session.IdentityDbSession;
+import org.jbpm.pvm.test.base.DbTestCase;
+
+/**
+ * @author Fady Matar
+ */
+public class ObjectEqualityDbTest extends DbTestCase
+{
+
+	public void testEqualUser() {
+		UserImpl tom = new UserImpl();
+		tom.setId("tom");
+		getDbSession().save(tom);
+
+    GroupImpl theGoodGuys = new GroupImpl();
+    theGoodGuys.setId("theGoodGuys");
+    getDbSession().save(theGoodGuys);
+    
+    MembershipImpl membership = MembershipImpl.createMembership(tom, theGoodGuys, "conscience");
+    getDbSession().save(membership);
+    
+    newTransaction();
+    
+    List<MembershipImpl> memberships = environment.get(IdentityDbSession.class).findMembershipsByGroupAndRole("theGoodGuys", "conscience");
+    membership = memberships.get(0);
+    
+    UserImpl proxyUser = membership.getUser();
+    Hibernate.initialize(proxyUser);
+    UserImpl realUser = (UserImpl) ((HibernateProxy)proxyUser).getHibernateLazyInitializer().getImplementation();
+    
+    assertNotSame(proxyUser, realUser);
+    assertEquals(proxyUser, realUser);
+	}
+}


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

Added: jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/UserTest.java
===================================================================
--- jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/UserTest.java	                        (rev 0)
+++ jbpm4/indentity/trunk/modules/core/src/test/java/org/jbpm/id/UserTest.java	2008-07-14 13:57:16 UTC (rev 1619)
@@ -0,0 +1,106 @@
+/*
+ * 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.id;
+
+import java.io.FilePermission;
+
+import org.jbpm.id.impl.GroupImpl;
+import org.jbpm.id.impl.MembershipImpl;
+import org.jbpm.id.impl.UserImpl;
+import org.jbpm.pvm.test.base.JbpmTestCase;
+
+/**
+ * @author Tom Baeyens
+ */
+public class UserTest extends JbpmTestCase
+{
+
+	public void testUser() {
+		User tom = new UserImpl();
+		tom.setId("tom");
+		tom.setName("Tom");
+		tom.setAddress("around the corner");
+		tom.setEmail("tom at world.com");
+		tom.setNotes("great guy");
+		tom.setPhone("+32xxxxxxxx");
+
+		assertEquals("tom", tom.getId());
+		assertEquals("Tom", tom.getName());
+		assertEquals("around the corner", tom.getAddress());
+		assertEquals("tom at world.com", tom.getEmail());
+		assertEquals("great guy", tom.getNotes());
+		assertEquals("+32xxxxxxxx", tom.getPhone());
+	}
+
+	public void testProperties() {
+		UserImpl user = new UserImpl();
+		user.setProperty("status", "divorced");
+		user.setProperty("employment-status", "unemployed");
+
+		assertEquals("divorced", user.getProperty("status"));
+		assertEquals("unemployed", user.getProperty("employment-status"));
+	}
+
+	public void testPermissions() {
+		UserImpl user = new UserImpl();
+		FilePermission fp1 = new FilePermission("/home/file/test",
+				"read, write, execute");
+		FilePermission fp2 = new FilePermission("/home/file/test2", "read, write");
+		user.addPermission(fp1);
+		user.addPermission(fp2);
+		assertFalse(user.getPermissions().isEmpty());
+		assertEquals(2, user.getPermissions().size());
+		assertTrue(user.getPermissions().contains(fp1));
+		assertTrue(user.getPermissions().contains(fp2));
+	}
+
+	public void testMemberships() {
+		UserImpl user = new UserImpl();
+		user.setId("fmatar");
+
+		GroupImpl group = new GroupImpl();
+		group.setId("users");
+
+		MembershipImpl membership = MembershipImpl.createMembership(user, group);
+		membership.setRole("contributor");
+
+		group = new GroupImpl();
+		group.setId("jbpm");
+
+		membership = MembershipImpl.createMembership(user, group);
+
+		group = new GroupImpl();
+		group.setId("jboss");
+
+		membership = MembershipImpl.createMembership(user, group);
+		membership.setRole("speaker");
+
+		group = new GroupImpl();
+		group.setId("redhat");
+
+		membership = MembershipImpl.createMembership(user, group);
+		membership.setRole("staff");
+
+		assertFalse(user.getMemberships().isEmpty());
+		assertEquals(4, user.getMemberships().size());
+	}
+}


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

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


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

Added: jbpm4/indentity/trunk/pom.xml
===================================================================
--- jbpm4/indentity/trunk/pom.xml	                        (rev 0)
+++ jbpm4/indentity/trunk/pom.xml	2008-07-14 13:57:16 UTC (rev 1619)
@@ -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 - Identity</name>
+   <groupId>org.jboss.jbpm</groupId>
+   <artifactId>identity</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/indentity/trunk/pom.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF




More information about the jbpm-commits mailing list