syncope-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ilgro...@apache.org
Subject svn commit: r1626150 [2/2] - in /syncope/trunk: ./ common/src/main/java/org/apache/syncope/common/mod/ common/src/main/java/org/apache/syncope/common/services/ common/src/main/java/org/apache/syncope/common/to/ common/src/main/java/org/apache/syncope/c...
Date Fri, 19 Sep 2014 08:58:37 GMT
Modified: syncope/trunk/core/src/main/resources/userWorkflow.bpmn20.xml
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/resources/userWorkflow.bpmn20.xml?rev=1626150&r1=1626149&r2=1626150&view=diff
==============================================================================
--- syncope/trunk/core/src/main/resources/userWorkflow.bpmn20.xml (original)
+++ syncope/trunk/core/src/main/resources/userWorkflow.bpmn20.xml Fri Sep 19 08:58:36 2014
@@ -31,6 +31,7 @@ under the License.
     <startEvent id="theStart"/>
     <sequenceFlow id="flow1" sourceRef="theStart" targetRef="create"/>
     <serviceTask id="create" name="Create" activiti:expression="#{create.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="sid-EA94A12A-727F-414B-9D7E-AC576B0D6FA8" sourceRef="create" targetRef="active"/>
     <userTask id="active" name="Active"/>
     <sequenceFlow id="flow8" sourceRef="active" targetRef="activeGw"/>
     <exclusiveGateway id="activeGw"/>
@@ -42,8 +43,15 @@ under the License.
     </sequenceFlow>
     <sequenceFlow id="active2Delete" sourceRef="activeGw" targetRef="delete">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${task == 'delete'}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="active2RequestPasswordReset" sourceRef="activeGw" targetRef="generateToken4PasswordReset">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${task == 'requestPasswordReset'}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="active2ConfirmPasswordReset" sourceRef="activeGw" targetRef="checkToken4ConfirmPasswordReset">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${task == 'confirmPasswordReset'}]]></conditionExpression>
     </sequenceFlow>    
     <serviceTask id="update" name="Update" activiti:expression="#{update.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="sid-EA22026A-25F0-4ED0-AB6E-9CE9CE74623C" sourceRef="update" targetRef="active"/>
     <serviceTask id="suspend" name="Suspend" activiti:expression="#{suspend.execute(execution.processInstanceId)}"/>
     <sequenceFlow id="flow10" sourceRef="suspend" targetRef="suspended"/>
     <userTask id="suspended" name="Suspended"/>
@@ -57,11 +65,20 @@ under the License.
     </sequenceFlow>
     <serviceTask id="reactivate" name="Reactivate" activiti:expression="#{reactivate.execute(execution.processInstanceId)}"/>
     <sequenceFlow id="flow12" sourceRef="reactivate" targetRef="active"/>
+    
+    <serviceTask id="generateToken4PasswordReset" name="Generate Token" activiti:expression="#{generateToken.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="sid-7F78CE07-A7A1-467F-BB4B-40FB234AEFF7" sourceRef="generateToken4PasswordReset" targetRef="notify4RequestPasswordReset"/>
+    <serviceTask id="notify4RequestPasswordReset" name="Notification" activiti:expression="#{notify.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="sid-CF9ACA40-7750-47C3-A508-7250D24D4F1F" sourceRef="notify4RequestPasswordReset" targetRef="active"/>
+
+    <serviceTask id="checkToken4ConfirmPasswordReset" name="Check token, remove and update password" activiti:expression="#{passwordReset.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="sid-3E9FE01D-CC60-4A95-B356-CA0DC000FAD6" sourceRef="checkToken4ConfirmPasswordReset" targetRef="notify4ConfirmPasswordReset"/>
+    <serviceTask id="notify4ConfirmPasswordReset" name="Notification" activiti:expression="#{notify.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="sid-A37806A7-6B7B-48A2-BB37-DAE640231144" sourceRef="notify4ConfirmPasswordReset" targetRef="active"/>    
+    
     <serviceTask id="delete" name="Delete" activiti:expression="#{delete.execute(execution.processInstanceId)}"/>
     <sequenceFlow id="flow99" sourceRef="delete" targetRef="theEnd"/>
-    <endEvent id="theEnd"/>
-    <sequenceFlow id="sid-EA94A12A-727F-414B-9D7E-AC576B0D6FA8" sourceRef="create" targetRef="active"/>
-    <sequenceFlow id="sid-EA22026A-25F0-4ED0-AB6E-9CE9CE74623C" sourceRef="update" targetRef="active"/>
+    <endEvent id="theEnd"/>    
   </process>
   
   <bpmndi:BPMNDiagram id="BPMNDiagram_userWorkflow">
@@ -79,16 +96,16 @@ under the License.
         <omgdc:Bounds height="40.0" width="40.0" x="1400.0" y="520.0"/>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape bpmnElement="update" id="BPMNShape_update">
-        <omgdc:Bounds height="60.0" width="100.0" x="1370.0" y="740.7407688427132"/>
+        <omgdc:Bounds height="60.0" width="100.0" x="1370.0" y="615.0"/>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape bpmnElement="suspend" id="BPMNShape_suspend">
-        <omgdc:Bounds height="60.0" width="100.0" x="1490.0" y="280.0"/>
+        <omgdc:Bounds height="60.0" width="100.0" x="1490.0" y="370.0"/>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape bpmnElement="suspended" id="BPMNShape_suspended">
-        <omgdc:Bounds height="60.0" width="100.0" x="1640.0" y="300.0"/>
+        <omgdc:Bounds height="60.0" width="100.0" x="1640.0" y="370.0"/>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape bpmnElement="suspendedGw" id="BPMNShape_suspendedGw">
-        <omgdc:Bounds height="40.0" width="40.0" x="1820.0" y="360.0"/>
+        <omgdc:Bounds height="40.0" width="40.0" x="1820.0" y="380.0"/>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape bpmnElement="reactivate" id="BPMNShape_reactivate">
         <omgdc:Bounds height="60.0" width="100.0" x="1940.0" y="290.0"/>
@@ -99,71 +116,106 @@ under the License.
       <bpmndi:BPMNShape bpmnElement="theEnd" id="BPMNShape_theEnd">
         <omgdc:Bounds height="28.0" width="28.0" x="2080.0" y="451.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge bpmnElement="sid-EA94A12A-727F-414B-9D7E-AC576B0D6FA8" id="BPMNEdge_sid-EA94A12A-727F-414B-9D7E-AC576B0D6FA8">
-        <omgdi:waypoint x="920.0" y="540.2380952380952"/>
-        <omgdi:waypoint x="1030.0" y="540.7619047619048"/>
-      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape bpmnElement="generateToken4PasswordReset" id="BPMNShape_generateToken4PasswordReset">
+        <omgdc:Bounds height="81.0" width="121.0" x="1515.0" y="604.5"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="notify4RequestPasswordReset" id="BPMNShape_notify4RequestPasswordReset">
+        <omgdc:Bounds height="81.0" width="121.0" x="1515.0" y="750.0"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="checkToken4ConfirmPasswordReset" id="BPMNShape_checkToken4ConfirmPasswordReset">
+        <omgdc:Bounds height="81.0" width="121.0" x="1725.0" y="664.5"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="notify4ConfirmPasswordReset" id="BPMNShape_notify4ConfirmPasswordReset">
+        <omgdc:Bounds height="81.0" width="121.0" x="1725.0" y="810.0"/>
+      </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge bpmnElement="flow12" id="BPMNEdge_flow12">
-        <omgdi:waypoint x="1940.0" y="312.6007228007171"/>
-        <omgdi:waypoint x="1470.3246893147616" y="243.09556645232908"/>
-        <omgdi:waypoint x="1198.7197373159865" y="359.6936452281102"/>
-        <omgdi:waypoint x="1099.6440556314785" y="511.0"/>
+        <omgdi:waypoint x="1990.0" y="290.0"/>
+        <omgdi:waypoint x="1990.0" y="261.0"/>
+        <omgdi:waypoint x="1080.0" y="261.0"/>
+        <omgdi:waypoint x="1080.0" y="511.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow11" id="BPMNEdge_flow11">
-        <omgdi:waypoint x="1740.0" y="330.0"/>
-        <omgdi:waypoint x="1752.0" y="330.0"/>
-        <omgdi:waypoint x="1752.0" y="380.0"/>
-        <omgdi:waypoint x="1820.0" y="380.0"/>
+        <omgdi:waypoint x="1740.0" y="400.0"/>
+        <omgdi:waypoint x="1820.0" y="400.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow10" id="BPMNEdge_flow10">
-        <omgdi:waypoint x="1590.0" y="310.0"/>
-        <omgdi:waypoint x="1602.0" y="310.0"/>
-        <omgdi:waypoint x="1602.0" y="330.0"/>
-        <omgdi:waypoint x="1640.0" y="330.0"/>
+        <omgdi:waypoint x="1590.0" y="400.0"/>
+        <omgdi:waypoint x="1640.0" y="400.0"/>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="active2Update" id="BPMNEdge_active2Update">
-        <omgdi:waypoint x="1420.4586490458448" y="559.5413509541552"/>
-        <omgdi:waypoint x="1420.0651491917588" y="740.7407688427132"/>
+      <bpmndi:BPMNEdge bpmnElement="active2RequestPasswordReset" id="BPMNEdge_active2RequestPasswordReset">
+        <omgdi:waypoint x="1439.5" y="540.5"/>
+        <omgdi:waypoint x="1575.5" y="540.5"/>
+        <omgdi:waypoint x="1575.5" y="604.5"/>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="sid-EA22026A-25F0-4ED0-AB6E-9CE9CE74623C" id="BPMNEdge_sid-EA22026A-25F0-4ED0-AB6E-9CE9CE74623C">
-        <omgdi:waypoint x="1370.0" y="770.7407688427132"/>
-        <omgdi:waypoint x="1080.0" y="770.7407688427132"/>
+      <bpmndi:BPMNEdge bpmnElement="active2Suspend" id="BPMNEdge_active2Suspend">
+        <omgdi:waypoint x="1440.0" y="540.0"/>
+        <omgdi:waypoint x="1540.0" y="540.0"/>
+        <omgdi:waypoint x="1540.0" y="430.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="suspended2Delete" id="BPMNEdge_suspended2Delete">
+        <omgdi:waypoint x="1860.0" y="400.0"/>
+        <omgdi:waypoint x="1990.0" y="400.0"/>
+        <omgdi:waypoint x="1990.0" y="438.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-A37806A7-6B7B-48A2-BB37-DAE640231144" id="BPMNEdge_sid-A37806A7-6B7B-48A2-BB37-DAE640231144">
+        <omgdi:waypoint x="1725.0" y="850.5"/>
+        <omgdi:waypoint x="1080.0" y="850.5"/>
         <omgdi:waypoint x="1080.0" y="571.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="active2Delete" id="BPMNEdge_active2Delete">
-        <omgdi:waypoint x="1439.5" y="540.5"/>
-        <omgdi:waypoint x="1990.0" y="540.5"/>
+        <omgdi:waypoint x="1440.0" y="540.0"/>
+        <omgdi:waypoint x="1990.0" y="540.0"/>
         <omgdi:waypoint x="1990.0" y="498.0"/>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-3E9FE01D-CC60-4A95-B356-CA0DC000FAD6" id="BPMNEdge_sid-3E9FE01D-CC60-4A95-B356-CA0DC000FAD6">
+        <omgdi:waypoint x="1785.5" y="745.5"/>
+        <omgdi:waypoint x="1785.5" y="810.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-7F78CE07-A7A1-467F-BB4B-40FB234AEFF7" id="BPMNEdge_sid-7F78CE07-A7A1-467F-BB4B-40FB234AEFF7">
+        <omgdi:waypoint x="1575.5" y="685.5"/>
+        <omgdi:waypoint x="1575.5" y="750.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-EA94A12A-727F-414B-9D7E-AC576B0D6FA8" id="BPMNEdge_sid-EA94A12A-727F-414B-9D7E-AC576B0D6FA8">
+        <omgdi:waypoint x="920.0" y="540.2380952380952"/>
+        <omgdi:waypoint x="1030.0" y="540.7619047619048"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-EA22026A-25F0-4ED0-AB6E-9CE9CE74623C" id="BPMNEdge_sid-EA22026A-25F0-4ED0-AB6E-9CE9CE74623C">
+        <omgdi:waypoint x="1370.0" y="645.0"/>
+        <omgdi:waypoint x="1080.0" y="645.0"/>
+        <omgdi:waypoint x="1080.0" y="571.0"/>
+      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
         <omgdi:waypoint x="770.0" y="540.0"/>
         <omgdi:waypoint x="820.0" y="540.0"/>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="suspended2Delete" id="BPMNEdge_suspended2Delete">
-        <omgdi:waypoint x="1860.0" y="380.0"/>
-        <omgdi:waypoint x="1902.0" y="380.0"/>
-        <omgdi:waypoint x="1980.0" y="388.0"/>
-        <omgdi:waypoint x="1986.25" y="438.0"/>
+      <bpmndi:BPMNEdge bpmnElement="sid-CF9ACA40-7750-47C3-A508-7250D24D4F1F" id="BPMNEdge_sid-CF9ACA40-7750-47C3-A508-7250D24D4F1F">
+        <omgdi:waypoint x="1515.0" y="790.5"/>
+        <omgdi:waypoint x="1080.0" y="790.5"/>
+        <omgdi:waypoint x="1080.0" y="571.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="suspended2Reactivate" id="BPMNEdge_suspended2Reactivate">
-        <omgdi:waypoint x="1860.0" y="380.0"/>
-        <omgdi:waypoint x="1902.0" y="380.0"/>
+        <omgdi:waypoint x="1860.0" y="400.0"/>
+        <omgdi:waypoint x="1902.0" y="400.0"/>
         <omgdi:waypoint x="1902.0" y="320.0"/>
         <omgdi:waypoint x="1940.0" y="320.0"/>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="active2Suspend" id="BPMNEdge_active2Suspend">
+      <bpmndi:BPMNEdge bpmnElement="active2ConfirmPasswordReset" id="BPMNEdge_active2ConfirmPasswordReset">
         <omgdi:waypoint x="1439.5" y="540.5"/>
-        <omgdi:waypoint x="1540.0" y="540.5"/>
-        <omgdi:waypoint x="1540.0" y="340.0"/>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="flow99" id="BPMNEdge_flow99">
-        <omgdi:waypoint x="2040.0" y="466.5576923076923"/>
-        <omgdi:waypoint x="2080.005821071606" y="465.40367823831906"/>
+        <omgdi:waypoint x="1785.5" y="540.5"/>
+        <omgdi:waypoint x="1785.5" y="664.5"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8">
         <omgdi:waypoint x="1130.0" y="540.8529411764706"/>
         <omgdi:waypoint x="1400.058651026393" y="540.0586510263929"/>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="active2Update" id="BPMNEdge_active2Update">
+        <omgdi:waypoint x="1420.0" y="560.0"/>
+        <omgdi:waypoint x="1420.0" y="615.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow99" id="BPMNEdge_flow99">
+        <omgdi:waypoint x="2040.0" y="466.5576923076923"/>
+        <omgdi:waypoint x="2080.005821071606" y="465.40367823831906"/>
+      </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </definitions>
\ No newline at end of file

Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/connid/PasswordGeneratorTest.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/connid/PasswordGeneratorTest.java?rev=1626150&r1=1626149&r2=1626150&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/connid/PasswordGeneratorTest.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/connid/PasswordGeneratorTest.java Fri Sep 19 08:58:36 2014
@@ -55,7 +55,7 @@ public class PasswordGeneratorTest exten
         }
         assertNotNull(password);
 
-        user.setPassword(password, CipherAlgorithm.AES, 0);
+        user.setPassword(password, CipherAlgorithm.AES);
 
         SyncopeUser actual = userDAO.save(user);
         assertNotNull(actual);
@@ -73,7 +73,7 @@ public class PasswordGeneratorTest exten
             fail(ex.getMessage());
         }
         assertNotNull(password);
-        user.setPassword(password, CipherAlgorithm.SHA, 0);
+        user.setPassword(password, CipherAlgorithm.SHA);
         userDAO.save(user);
     }
 

Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/EntitlementTest.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/EntitlementTest.java?rev=1626150&r1=1626149&r2=1626150&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/EntitlementTest.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/EntitlementTest.java Fri Sep 19 08:58:36 2014
@@ -41,7 +41,7 @@ public class EntitlementTest extends Abs
     @Test
     public void findAll() {
         List<Entitlement> list = entitlementDAO.findAll();
-        assertEquals("did not get expected number of entitlements ", 84, list.size());
+        assertEquals("did not get expected number of entitlements ", 89, list.size());
     }
 
     @Test

Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/NotificationTest.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/NotificationTest.java?rev=1626150&r1=1626149&r2=1626150&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/NotificationTest.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/NotificationTest.java Fri Sep 19 08:58:36 2014
@@ -37,7 +37,7 @@ public class NotificationTest extends Ab
 
     @Test
     public void find() {
-        Notification notification = notificationDAO.find(1L);
+        Notification notification = notificationDAO.find(10L);
         assertNotNull(notification);
         assertNotNull(notification.getEvents());
         assertFalse(notification.getEvents().isEmpty());
@@ -77,8 +77,8 @@ public class NotificationTest extends Ab
 
     @Test
     public void delete() {
-        notificationDAO.delete(1L);
-        assertNull(notificationDAO.find(1L));
+        notificationDAO.delete(10L);
+        assertNull(notificationDAO.find(10L));
     }
 
     @Test

Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/UserTest.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/UserTest.java?rev=1626150&r1=1626149&r2=1626150&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/UserTest.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/UserTest.java Fri Sep 19 08:58:36 2014
@@ -138,7 +138,7 @@ public class UserTest extends AbstractDA
         user.setUsername("username");
         user.setCreationDate(new Date());
 
-        user.setPassword("pass", CipherAlgorithm.SHA256, 0);
+        user.setPassword("pass", CipherAlgorithm.SHA256);
 
         Throwable t = null;
         try {
@@ -148,7 +148,7 @@ public class UserTest extends AbstractDA
         }
         assertNotNull(t);
 
-        user.setPassword("password", CipherAlgorithm.SHA256, 1);
+        user.setPassword("password", CipherAlgorithm.SHA256);
 
         user.setUsername("username!");
 
@@ -183,7 +183,7 @@ public class UserTest extends AbstractDA
         user.setUsername("username");
         user.setCreationDate(new Date());
 
-        user.setPassword("password", CipherAlgorithm.AES, 0);
+        user.setPassword("password", CipherAlgorithm.AES);
 
         SyncopeUser actual = userDAO.save(user);
         assertNotNull(actual);
@@ -193,7 +193,7 @@ public class UserTest extends AbstractDA
     public void issueSYNCOPE391() {
         SyncopeUser user = new SyncopeUser();
         user.setUsername("username");
-        user.setPassword(null, CipherAlgorithm.AES, 0);
+        user.setPassword(null, CipherAlgorithm.AES);
 
         SyncopeUser actual = null;
         Throwable t = null;

Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/AbstractTest.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/AbstractTest.java?rev=1626150&r1=1626149&r2=1626150&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/AbstractTest.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/AbstractTest.java Fri Sep 19 08:58:36 2014
@@ -33,7 +33,6 @@ import javax.ws.rs.core.Response;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.cxf.jaxrs.client.WebClient;
-
 import org.apache.syncope.client.SyncopeClient;
 import org.apache.syncope.client.SyncopeClientFactoryBean;
 import org.apache.syncope.common.mod.AttributeMod;
@@ -49,6 +48,7 @@ import org.apache.syncope.common.service
 import org.apache.syncope.common.services.ResourceService;
 import org.apache.syncope.common.services.RoleService;
 import org.apache.syncope.common.services.SchemaService;
+import org.apache.syncope.common.services.SecurityQuestionService;
 import org.apache.syncope.common.services.TaskService;
 import org.apache.syncope.common.services.UserSelfService;
 import org.apache.syncope.common.services.UserService;
@@ -172,9 +172,11 @@ public abstract class AbstractTest {
 
     protected static PolicyService policyService;
 
+    protected static SecurityQuestionService securityQuestionService;
+
     @Autowired
     protected DataSource testDataSource;
-    
+
     @BeforeClass
     public static void securitySetup() {
         InputStream propStream = null;
@@ -220,6 +222,7 @@ public abstract class AbstractTest {
         workflowService = adminClient.getService(WorkflowService.class);
         notificationService = adminClient.getService(NotificationService.class);
         schemaService = adminClient.getService(SchemaService.class);
+        securityQuestionService = adminClient.getService(SecurityQuestionService.class);
     }
 
     protected static String getUUIDString() {
@@ -243,7 +246,7 @@ public abstract class AbstractTest {
     protected UserTO createUser(final UserTO userTO) {
         return createUser(userTO, true);
     }
-    
+
     protected UserTO createUser(final UserTO userTO, final boolean storePassword) {
         Response response = userService.create(userTO, storePassword);
         if (response.getStatusInfo().getStatusCode() != Response.Status.CREATED.getStatusCode()) {

Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/NotificationTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/NotificationTestITCase.java?rev=1626150&r1=1626149&r2=1626150&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/NotificationTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/NotificationTestITCase.java Fri Sep 19 08:58:36 2014
@@ -59,7 +59,7 @@ public class NotificationTestITCase exte
 
     @Test
     public void read() {
-        NotificationTO notificationTO = notificationService.read(1L);
+        NotificationTO notificationTO = notificationService.read(10L);
         assertNotNull(notificationTO);
     }
 
@@ -90,7 +90,7 @@ public class NotificationTestITCase exte
 
     @Test
     public void update() {
-        NotificationTO notificationTO = notificationService.read(1L);
+        NotificationTO notificationTO = notificationService.read(10L);
         notificationTO.setRecipients(SyncopeClient.getUserSearchConditionBuilder().hasRoles(7L).query());
 
         notificationService.update(notificationTO.getId(), notificationTO);

Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserSelfTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserSelfTestITCase.java?rev=1626150&r1=1626149&r2=1626150&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserSelfTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserSelfTestITCase.java Fri Sep 19 08:58:36 2014
@@ -21,6 +21,7 @@ package org.apache.syncope.core.rest;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -248,4 +249,48 @@ public class UserSelfTestITCase extends 
         assertEquals(Preference.RETURN_NO_CONTENT.toString(), response.getHeaderString(RESTHeaders.PREFERENCE_APPLIED));
         assertEquals(StringUtils.EMPTY, IOUtils.toString((InputStream) response.getEntity()));
     }
+
+    @Test
+    public void passwordReset() {
+        // 1. create an user with security question and answer
+        UserTO user = UserTestITCase.getUniqueSampleTO("pwdReset@syncope.apache.org");
+        user.setSecurityQuestion(1L);
+        user.setSecurityAnswer("Rossi");
+        createUser(user);
+
+        // 2. verify that new user is able to authenticate
+        SyncopeClient authClient = clientFactory.create(user.getUsername(), "password123");
+        UserTO read = authClient.getService(UserSelfService.class).read();
+        assertNotNull(read);
+
+        // 3. request password reset (as anonymous) providing the expected security answer
+        SyncopeClient anonClient = clientFactory.createAnonymous();
+        try {
+            anonClient.getService(UserSelfService.class).requestPasswordReset(user.getUsername(), "WRONG");
+            fail();
+        } catch (SyncopeClientException e) {
+            assertEquals(ClientExceptionType.InvalidSecurityAnswer, e.getType());
+        }
+        anonClient.getService(UserSelfService.class).requestPasswordReset(user.getUsername(), "Rossi");
+
+        // 4. get token (normally sent via e-mail, now reading as admin)
+        String token = userService.read(read.getId()).getToken();
+        assertNotNull(token);
+
+        // 5. confirm password reset
+        try {
+            anonClient.getService(UserSelfService.class).confirmPasswordReset("WRONG TOKEN", "newPassword");
+            fail();
+        } catch (SyncopeClientException e) {
+            assertEquals(ClientExceptionType.NotFound, e.getType());
+            assertTrue(e.getMessage().contains("WRONG TOKEN"));
+        }
+        anonClient.getService(UserSelfService.class).confirmPasswordReset(token, "newPassword");
+
+        // 6. verify that password was reset and token removed
+        authClient = clientFactory.create(user.getUsername(), "newPassword");
+        read = authClient.getService(UserSelfService.class).read();
+        assertNotNull(read);
+        assertNull(read.getToken());
+    }
 }

Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java?rev=1626150&r1=1626149&r2=1626150&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java Fri Sep 19 08:58:36 2014
@@ -705,7 +705,7 @@ public class UserTestITCase extends Abst
         assertTrue(userTO.getCreationDate().before(userTO.getLastChangeDate()));
 
         SyncopeUser passwordTestUser = new SyncopeUser();
-        passwordTestUser.setPassword("new2Password", CipherAlgorithm.SHA, 0);
+        passwordTestUser.setPassword("new2Password", CipherAlgorithm.SHA);
         assertEquals(passwordTestUser.getPassword(), userTO.getPassword());
 
         assertEquals(1, userTO.getMemberships().size());

Modified: syncope/trunk/core/src/test/resources/content.xml
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/resources/content.xml?rev=1626150&r1=1626149&r2=1626150&view=diff
==============================================================================
--- syncope/trunk/core/src/test/resources/content.xml (original)
+++ syncope/trunk/core/src/test/resources/content.xml Fri Sep 19 08:58:36 2014
@@ -54,11 +54,16 @@ under the License.
   <CAttr id="6" owner_id="1" schema_name="selfRegistration.allowed"/>
   <CAttrValue id="6" attribute_id="6" booleanValue="1"/>
 
+  <CSchema name="passwordReset.allowed" type="Boolean"
+           mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
+  <CAttr id="7" owner_id="1" schema_name="passwordReset.allowed"/>
+  <CAttrValue id="7" attribute_id="7" booleanValue="1"/>
+
   <CSchema name="authentication.statuses" type="String"
            mandatoryCondition="true" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <CAttr id="7" owner_id="1" schema_name="authentication.statuses"/>
-  <CAttrValue id="7" attribute_id="7" stringValue="created"/>
-  <CAttrValue id="8" attribute_id="7" stringValue="active"/>
+  <CAttr id="8" owner_id="1" schema_name="authentication.statuses"/>
+  <CAttrValue id="8" attribute_id="8" stringValue="created"/>
+  <CAttrValue id="9" attribute_id="8" stringValue="active"/>
 
   <!-- Save user login date upon successful authentication -->
   <CSchema name="log.lastlogindate" type="Boolean"
@@ -68,7 +73,7 @@ under the License.
 
   <!-- sample policies -->
   <Policy DTYPE="SyncPolicy" id="1" description="global sync policy" type="GLOBAL_SYNC" 
-          specification='{"userJavaRule":null,"roleJavaRule":null,"conflictResolutionAction":"IGNORE","userAltSearchSchemas":[],":q!AltSearchSchemas":[]}'/>
+          specification='{"userJavaRule":null,"roleJavaRule":null,"conflictResolutionAction":"IGNORE","userAltSearchSchemas":[],"AltSearchSchemas":[]}'/>
   <Policy DTYPE="PasswordPolicy" id="2" description="global password policy" type="GLOBAL_PASSWORD" 
           specification='{"historyLength":1,"maxLength":0,"minLength":8,"nonAlphanumericRequired":false,"alphanumericRequired":false,"digitRequired":false,"lowercaseRequired":false,"uppercaseRequired":false,"mustStartWithDigit":false,"mustntStartWithDigit":false,"mustEndWithDigit":false,"mustntEndWithDigit":false,"mustStartWithNonAlpha":false,"mustStartWithAlpha":false,"mustntStartWithNonAlpha":false,"mustntStartWithAlpha":false,"mustEndWithNonAlpha":false,"mustEndWithAlpha":false,"mustntEndWithNonAlpha":false,"mustntEndWithAlpha":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[],"allowNullPassword":true}'/>
   <Policy DTYPE="SyncPolicy" id="3" description="sync policy 2" type="SYNC" 
@@ -965,15 +970,26 @@ under the License.
         performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" fullReconciliation="0"
         jobClassName="org.apache.syncope.core.sync.impl.SyncJob" unmatchingRule="ASSIGN" matchingRule="IGNORE"/>
 
-  <Notification id="1" sender="test@syncope.apache.org" subject="Test subject" template="test" selfAsRecipient="0" traceLevel="ALL"
+  <Notification id="1" active="1" recipientAttrName="email" recipientAttrType="UserSchema" selfAsRecipient="1" 
+                sender="admin@syncope.apache.org" subject="Password Reset request" template="requestPasswordReset" 
+                traceLevel="FAILURES" userAbout="token!=$null"/> 
+  <Notification_events Notification_id="1" events="[CUSTOM]:[]:[]:[requestPasswordReset]:[SUCCESS]"/>
+  
+  <Notification id="2" active="1" recipientAttrName="email" recipientAttrType="UserSchema" selfAsRecipient="1" 
+                sender="admin@syncope.apache.org" subject="Password Reset successful" template="confirmPasswordReset" 
+                traceLevel="FAILURES" userAbout="token!=$null"/> 
+  <Notification_events Notification_id="2" events="[CUSTOM]:[]:[]:[confirmPasswordReset]:[SUCCESS]"/>
+
+  <Notification id="10" sender="test@syncope.apache.org" subject="Test subject" template="test" selfAsRecipient="0" 
+                traceLevel="FAILURES"
                 userAbout="fullname==*o*;fullname==*i*"
                 recipients="$roles==7"
                 recipientAttrType="UserSchema" recipientAttrName="email" active="1"/>
-  <Notification_events Notification_id="1" events="[CUSTOM]:[]:[]:[unexisting1]:[FAILURE]"/>
-  <Notification_events Notification_id="1" events="[CUSTOM]:[]:[]:[unexisting2]:[SUCCESS]"/>
+  <Notification_events Notification_id="10" events="[CUSTOM]:[]:[]:[unexisting1]:[FAILURE]"/>
+  <Notification_events Notification_id="10" events="[CUSTOM]:[]:[]:[unexisting2]:[SUCCESS]"/>
     
-  <NotificationTask_recipients notificationtask_id="8" address="recipient@prova.org"/>
-
+  <NotificationTask_recipients notificationtask_id="8" address="recipient@prova.org"/>  
+  
   <Report id="1" name="test"/>
   <ReportletConfInstance id="1" Report_id="1" 
                          serializedInstance='{"@class":"org.apache.syncope.common.report.UserReportletConf","name":"testUserReportlet","matchingCond":null,"attributes":["fullname","gender"],"derivedAttributes":["cn"],"virtualAttributes":["virtualdata"],"features":["id","username","workflowId","status","creationDate","lastLoginDate","changePwdDate","passwordHistorySize","failedLoginCount","memberships","resources"]}'/>
@@ -1067,6 +1083,11 @@ under the License.
   <Entitlement name="AUDIT_LIST"/>
   <Entitlement name="AUDIT_ENABLE"/>
   <Entitlement name="AUDIT_DISABLE"/>
+  <Entitlement name="SECURITY_QUESTION_LIST"/>
+  <Entitlement name="SECURITY_QUESTION_READ"/>
+  <Entitlement name="SECURITY_QUESTION_CREATE"/>
+  <Entitlement name="SECURITY_QUESTION_UPDATE"/>
+  <Entitlement name="SECURITY_QUESTION_DELETE"/>
   <Entitlement name="ROLE_1"/>
   <Entitlement name="ROLE_2"/>
   <Entitlement name="ROLE_3"/>
@@ -1098,4 +1119,6 @@ under the License.
   <SyncopeRole_Entitlement entitlement_name="SCHEMA_READ" role_id="8"/>
   <SyncopeRole_Entitlement entitlement_name="ROLE_READ" role_id="8"/>
   <SyncopeRole_Entitlement entitlement_name="WORKFLOW_FORM_CLAIM" role_id="8"/>
+  
+  <SecurityQuestion id="1" content="What's your mother's maiden name?"/>
 </dataset>

Modified: syncope/trunk/core/src/test/resources/mail.properties
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/resources/mail.properties?rev=1626150&r1=1626149&r2=1626150&view=diff
==============================================================================
--- syncope/trunk/core/src/test/resources/mail.properties (original)
+++ syncope/trunk/core/src/test/resources/mail.properties Fri Sep 19 08:58:36 2014
@@ -21,4 +21,4 @@ smtpPassword=
 smtpProtocol=smtp
 smtpEncoding=UTF-8
 smtpConnectionTimeout=3000
-mailDebug=true
+mailDebug=true
\ No newline at end of file

Modified: syncope/trunk/core/src/test/resources/userWorkflow.bpmn20.xml
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/resources/userWorkflow.bpmn20.xml?rev=1626150&r1=1626149&r2=1626150&view=diff
==============================================================================
--- syncope/trunk/core/src/test/resources/userWorkflow.bpmn20.xml (original)
+++ syncope/trunk/core/src/test/resources/userWorkflow.bpmn20.xml Fri Sep 19 08:58:36 2014
@@ -28,11 +28,11 @@ under the License.
              targetNamespace="http://activiti.org/bpmn20">
   
   <process id="userWorkflow" name="User Workflow" isExecutable="true">
-    <startEvent id="theStart"></startEvent>
-    <sequenceFlow id="flow1" sourceRef="theStart" targetRef="create"></sequenceFlow>
-    <serviceTask id="create" name="Create" activiti:expression="#{create.execute(execution.processInstanceId)}"></serviceTask>
-    <sequenceFlow id="flow2" sourceRef="create" targetRef="createGW"></sequenceFlow>
-    <exclusiveGateway id="createGW"></exclusiveGateway>
+    <startEvent id="theStart"/>
+    <sequenceFlow id="flow1" sourceRef="theStart" targetRef="create"/>
+    <serviceTask id="create" name="Create" activiti:expression="#{create.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="flow2" sourceRef="create" targetRef="createGW"/>
+    <exclusiveGateway id="createGW"/>
     <sequenceFlow id="createAsAnonymous2Approval" sourceRef="createGW" targetRef="createApproval">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${wfExecutor == 'anonymous' || syncopeUser.getRoleIds().contains(9)}]]></conditionExpression>
     </sequenceFlow>
@@ -41,20 +41,20 @@ under the License.
     </sequenceFlow>
     <userTask id="createApproval" name="Create approval" activiti:candidateGroups="7" activiti:formKey="createApproval">
       <extensionElements>
-        <activiti:formProperty id="username" name="Username" type="string" expression="${syncopeUser.username}" writable="false"></activiti:formProperty>
-        <activiti:formProperty id="approve" name="Approve?" type="boolean" variable="approve" required="true"></activiti:formProperty>
-        <activiti:formProperty id="rejectReason" name="Reason for rejecting" type="string" variable="rejectReason"></activiti:formProperty>
+        <activiti:formProperty id="username" name="Username" type="string" expression="${syncopeUser.username}" writable="false"/>
+        <activiti:formProperty id="approve" name="Approve?" type="boolean" variable="approve" required="true"/>
+        <activiti:formProperty id="rejectReason" name="Reason for rejecting" type="string" variable="rejectReason"/>
       </extensionElements>
     </userTask>
-    <sequenceFlow id="flow3" sourceRef="createApproval" targetRef="createApprovalGW"></sequenceFlow>
-    <exclusiveGateway id="createApprovalGW"></exclusiveGateway>
+    <sequenceFlow id="flow3" sourceRef="createApproval" targetRef="createApprovalGW"/>
+    <exclusiveGateway id="createApprovalGW"/>
     <sequenceFlow id="createApprovalGW2EnableGW" sourceRef="createApprovalGW" targetRef="enableGW">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve}]]></conditionExpression>
     </sequenceFlow>
     <sequenceFlow id="createApproval2Reject" sourceRef="createApprovalGW" targetRef="reject">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!approve}]]></conditionExpression>
     </sequenceFlow>
-    <exclusiveGateway id="enableGW"></exclusiveGateway>
+    <exclusiveGateway id="enableGW"/>
     <sequenceFlow id="createApprovalGW2OptIn" sourceRef="enableGW" targetRef="generateToken">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${syncopeUser.getRoleIds().contains(11)}]]></conditionExpression>
     </sequenceFlow>
@@ -63,32 +63,32 @@ under the License.
     </sequenceFlow>
     <sequenceFlow id="createApprovalGW2Active" sourceRef="enableGW" targetRef="active">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${enabled}]]></conditionExpression>
-    </sequenceFlow>
+    </sequenceFlow>    
     <sequenceFlow id="createApprovalGW2Suspended" sourceRef="enableGW" targetRef="suspend">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!enabled}]]></conditionExpression>
     </sequenceFlow>
-    <serviceTask id="activate" name="Activate" activiti:expression="#{autoActivate.execute(execution.processInstanceId)}"></serviceTask>
-    <sequenceFlow id="flow4" sourceRef="activate" targetRef="active"></sequenceFlow>
-    <serviceTask id="generateToken" name="Generate token" activiti:expression="#{generateToken.execute(execution.processInstanceId)}"></serviceTask>
-    <sequenceFlow id="flow5" sourceRef="generateToken" targetRef="created"></sequenceFlow>
-    <userTask id="created" name="Created"></userTask>
-    <sequenceFlow id="flow6" sourceRef="created" targetRef="optinGW"></sequenceFlow>
-    <exclusiveGateway id="optinGW"></exclusiveGateway>
+    <serviceTask id="activate" name="Activate" activiti:expression="#{autoActivate.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="flow4" sourceRef="activate" targetRef="active"/>
+    <serviceTask id="generateToken" name="Generate token" activiti:expression="#{generateToken.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="flow5" sourceRef="generateToken" targetRef="created"/>
+    <userTask id="created" name="Created"/>
+    <sequenceFlow id="flow6" sourceRef="created" targetRef="optinGW"/>
+    <exclusiveGateway id="optinGW"/>
     <sequenceFlow id="created2Activate" sourceRef="optinGW" targetRef="removeToken">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${syncopeUser.checkToken(token)}]]></conditionExpression>
     </sequenceFlow>
     <sequenceFlow id="created2Created" sourceRef="optinGW" targetRef="created">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!syncopeUser.checkToken(token)}]]></conditionExpression>
     </sequenceFlow>
-    <scriptTask id="removeToken" name="Remove Token and Activate" scriptFormat="groovy" activiti:autoStoreVariables="true">
+    <scriptTask id="removeToken" name="Remove Token and Activate" scriptFormat="groovy" activiti:autoStoreVariables="false">
       <script>
         syncopeUser.removeToken()    
       </script>
     </scriptTask>
-    <sequenceFlow id="flow7" sourceRef="removeToken" targetRef="active"></sequenceFlow>
-    <userTask id="active" name="Active"></userTask>
-    <sequenceFlow id="flow8" sourceRef="active" targetRef="activeGw"></sequenceFlow>
-    <exclusiveGateway id="activeGw"></exclusiveGateway>
+    <sequenceFlow id="flow7" sourceRef="removeToken" targetRef="active"/>
+    <userTask id="active" name="Active"/>
+    <sequenceFlow id="flow8" sourceRef="active" targetRef="activeGw"/>
+    <exclusiveGateway id="activeGw"/>
     <sequenceFlow id="active2UpdateApproval" sourceRef="activeGw" targetRef="updateApproval">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${wfExecutor == syncopeUser.getUsername() and task == 'update' 
         and (!userMod.getMembershipsToAdd().isEmpty() or !userMod.getMembershipsToRemove().isEmpty())}]]></conditionExpression>
@@ -101,421 +101,476 @@ under the License.
     </sequenceFlow>
     <sequenceFlow id="active2Suspend" sourceRef="activeGw" targetRef="suspend">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${task == 'suspend'}]]></conditionExpression>
-    </sequenceFlow>
+    </sequenceFlow>    
     <sequenceFlow id="active2Delete" sourceRef="activeGw" targetRef="delete">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${task == 'delete'}]]></conditionExpression>
-    </sequenceFlow>
+    </sequenceFlow>    
+    <sequenceFlow id="active2RequestPasswordReset" sourceRef="activeGw" targetRef="generateToken4PasswordReset">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${task == 'requestPasswordReset'}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="active2ConfirmPasswordReset" sourceRef="activeGw" targetRef="checkToken4ConfirmPasswordReset">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${task == 'confirmPasswordReset'}]]></conditionExpression>
+    </sequenceFlow>    
     <userTask id="updateApproval" name="Update approval" activiti:candidateGroups="7" activiti:formKey="updateApproval">
       <extensionElements>
-        <activiti:formProperty id="username" name="Username" type="string" expression="${syncopeUser.username}" writable="false"></activiti:formProperty>
-        <activiti:formProperty id="approve" name="Approve?" type="boolean" variable="approve" required="true"></activiti:formProperty>
-        <activiti:formProperty id="rejectReason" name="Reason for rejecting" type="string" variable="rejectReason"></activiti:formProperty>
+        <activiti:formProperty id="username" name="Username" type="string" expression="${syncopeUser.username}" writable="false"/>
+        <activiti:formProperty id="approve" name="Approve?" type="boolean" variable="approve" required="true"/>
+        <activiti:formProperty id="rejectReason" name="Reason for rejecting" type="string" variable="rejectReason"/>
       </extensionElements>
     </userTask>
-    <sequenceFlow id="flow8bis" sourceRef="updateApproval" targetRef="updateApprovalGW"></sequenceFlow>
-    <exclusiveGateway id="updateApprovalGW"></exclusiveGateway>
+    <sequenceFlow id="flow8bis" sourceRef="updateApproval" targetRef="updateApprovalGW"/>
+    <exclusiveGateway id="updateApprovalGW"/>
     <sequenceFlow id="updateApprovalGW2Update" sourceRef="updateApprovalGW" targetRef="update">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve}]]></conditionExpression>
     </sequenceFlow>
     <sequenceFlow id="updateApprovalGW2Reject" sourceRef="updateApprovalGW" targetRef="rejectUpdate">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!approve}]]></conditionExpression>
     </sequenceFlow>
-    <scriptTask id="rejectUpdate" name="Reject update" scriptFormat="groovy" activiti:autoStoreVariables="true">
+    <scriptTask id="rejectUpdate" name="Reject update" scriptFormat="groovy" activiti:autoStoreVariables="false">
       <script>
         execution.setVariable("propByResource", null);
       </script>
     </scriptTask>
-    <sequenceFlow id="flow8ter" sourceRef="rejectUpdate" targetRef="active"></sequenceFlow>
-    <serviceTask id="update" name="Update" activiti:expression="#{update.execute(execution.processInstanceId)}"></serviceTask>
-    <sequenceFlow id="flow9" sourceRef="update" targetRef="active"></sequenceFlow>
-    <serviceTask id="suspend" name="Suspend" activiti:expression="#{suspend.execute(execution.processInstanceId)}"></serviceTask>
-    <sequenceFlow id="flow10" sourceRef="suspend" targetRef="suspended"></sequenceFlow>
-    <userTask id="suspended" name="Suspended"></userTask>
-    <sequenceFlow id="flow11" sourceRef="suspended" targetRef="suspendedGw"></sequenceFlow>
-    <exclusiveGateway id="suspendedGw"></exclusiveGateway>
+    <sequenceFlow id="flow8ter" sourceRef="rejectUpdate" targetRef="active"/>
+    <serviceTask id="update" name="Update" activiti:expression="#{update.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="flow9" sourceRef="update" targetRef="active"/>    
+    <serviceTask id="suspend" name="Suspend" activiti:expression="#{suspend.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="flow10" sourceRef="suspend" targetRef="suspended"/>
+    <userTask id="suspended" name="Suspended"/>
+    <sequenceFlow id="flow11" sourceRef="suspended" targetRef="suspendedGw"/>
+    <exclusiveGateway id="suspendedGw"/>
     <sequenceFlow id="suspended2Reactivate" sourceRef="suspendedGw" targetRef="reactivate">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${task == 'reactivate'}]]></conditionExpression>
     </sequenceFlow>
     <sequenceFlow id="suspended2Delete" sourceRef="suspendedGw" targetRef="delete">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${task == 'delete'}]]></conditionExpression>
     </sequenceFlow>
-    <serviceTask id="reactivate" name="Reactivate" activiti:expression="#{reactivate.execute(execution.processInstanceId)}"></serviceTask>
-    <sequenceFlow id="flow12" sourceRef="reactivate" targetRef="active"></sequenceFlow>
-    <scriptTask id="reject" name="Reject" scriptFormat="groovy" activiti:autoStoreVariables="true">
+    <serviceTask id="reactivate" name="Reactivate" activiti:expression="#{reactivate.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="flow12" sourceRef="reactivate" targetRef="active"/>
+    <scriptTask id="reject" name="Reject" scriptFormat="groovy" activiti:autoStoreVariables="false">
       <script>
         def scriptVar = rejectReason
         execution.setVariable("propByResource", null);
       </script>
     </scriptTask>
-    <sequenceFlow id="flow13" sourceRef="reject" targetRef="rejected"></sequenceFlow>
-    <userTask id="rejected" name="Rejected"></userTask>
-    <sequenceFlow id="flow14" sourceRef="rejected" targetRef="rejectedGw"></sequenceFlow>
-    <exclusiveGateway id="rejectedGw"></exclusiveGateway>
+    <sequenceFlow id="flow13" sourceRef="reject" targetRef="rejected"/>
+    <userTask id="rejected" name="Rejected"/>
+    <sequenceFlow id="flow14" sourceRef="rejected" targetRef="rejectedGw"/>
+    <exclusiveGateway id="rejectedGw"/>
     <sequenceFlow id="rejected2Delete" sourceRef="rejectedGw" targetRef="delete">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${task == 'delete'}]]></conditionExpression>
     </sequenceFlow>
     <sequenceFlow id="rejected2Rejected" sourceRef="rejectedGw" targetRef="rejected">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${empty task}]]></conditionExpression>
-    </sequenceFlow>
+    </sequenceFlow>    
     <userTask id="deleteApproval" name="Delete approval" activiti:candidateGroups="7" activiti:formKey="deleteApproval">
       <extensionElements>
-        <activiti:formProperty id="username" name="Username" type="string" expression="${syncopeUser.username}" writable="false"></activiti:formProperty>
-        <activiti:formProperty id="approve" name="Approve?" type="boolean" variable="approve" required="true"></activiti:formProperty>
-        <activiti:formProperty id="rejectReason" name="Reason for rejecting" type="string" variable="rejectReason"></activiti:formProperty>
+        <activiti:formProperty id="username" name="Username" type="string" expression="${syncopeUser.username}" writable="false"/>
+        <activiti:formProperty id="approve" name="Approve?" type="boolean" variable="approve" required="true"/>
+        <activiti:formProperty id="rejectReason" name="Reason for rejecting" type="string" variable="rejectReason"/>
       </extensionElements>
     </userTask>
-    <sequenceFlow id="flow14bis" sourceRef="deleteApproval" targetRef="deleteApprovalGW"></sequenceFlow>
-    <exclusiveGateway id="deleteApprovalGW"></exclusiveGateway>
+    <sequenceFlow id="flow14bis" sourceRef="deleteApproval" targetRef="deleteApprovalGW"/>
+    <exclusiveGateway id="deleteApprovalGW"/>
     <sequenceFlow id="deleteApprovalGW2Delete" sourceRef="deleteApprovalGW" targetRef="delete">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve}]]></conditionExpression>
     </sequenceFlow>
     <sequenceFlow id="deleteApprovalGW2Reject" sourceRef="deleteApprovalGW" targetRef="rejectDelete">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!approve}]]></conditionExpression>
     </sequenceFlow>
-    <scriptTask id="rejectDelete" name="Reject delete" scriptFormat="groovy" activiti:autoStoreVariables="true">
+    <scriptTask id="rejectDelete" name="Reject delete" scriptFormat="groovy" activiti:autoStoreVariables="false">
       <script>
         execution.setVariable("propByResource", null);
       </script>
     </scriptTask>
-    <sequenceFlow id="flow14ter" sourceRef="rejectDelete" targetRef="active"></sequenceFlow>
-    <serviceTask id="delete" name="Delete" activiti:expression="#{delete.execute(execution.processInstanceId)}"></serviceTask>
-    <sequenceFlow id="flow99" sourceRef="delete" targetRef="theEnd"></sequenceFlow>
-    <endEvent id="theEnd"></endEvent>
+    <sequenceFlow id="flow14ter" sourceRef="rejectDelete" targetRef="active"/>            
+
+    <serviceTask id="generateToken4PasswordReset" name="Generate token" activiti:expression="#{generateToken.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="flow15" sourceRef="generateToken4PasswordReset" targetRef="notify4RequestPasswordReset"/>
+    <serviceTask id="notify4RequestPasswordReset" name="Notification" activiti:expression="#{notify.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="flow16" sourceRef="notify4RequestPasswordReset" targetRef="active"/>
+    
+    <serviceTask id="checkToken4ConfirmPasswordReset" name="Check token, remove and update password" activiti:expression="#{passwordReset.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="flow17" sourceRef="checkToken4ConfirmPasswordReset" targetRef="notify4ConfirmPasswordReset"/>
+    <serviceTask id="notify4ConfirmPasswordReset" name="Notification" activiti:expression="#{notify.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="flow18" sourceRef="notify4ConfirmPasswordReset" targetRef="active"/>    
+    
+    <serviceTask id="delete" name="Delete" activiti:expression="#{delete.execute(execution.processInstanceId)}"/>
+    <sequenceFlow id="flow99" sourceRef="delete" targetRef="theEnd"/>
+    <endEvent id="theEnd"/>
   </process>
+  
   <bpmndi:BPMNDiagram id="BPMNDiagram_userWorkflow">
     <bpmndi:BPMNPlane bpmnElement="userWorkflow" id="BPMNPlane_userWorkflow">
-      <bpmndi:BPMNShape bpmnElement="update" id="BPMNShape_update">
-        <omgdc:Bounds height="60.0" width="100.0" x="1790.0" y="580.0"></omgdc:Bounds>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="suspend" id="BPMNShape_suspend">
-        <omgdc:Bounds height="60.0" width="100.0" x="1490.0" y="100.0"></omgdc:Bounds>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="reject" id="BPMNShape_reject">
-        <omgdc:Bounds height="60.0" width="100.0" x="560.0" y="659.0"></omgdc:Bounds>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="rejectedGw" id="BPMNShape_rejectedGw">
-        <omgdc:Bounds height="40.0" width="40.0" x="890.0" y="775.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="theStart" id="BPMNShape_theStart">
+        <omgdc:Bounds height="30.0" width="30.0" x="0.0" y="512.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="activeGw" id="BPMNShape_activeGw">
-        <omgdc:Bounds height="40.0" width="40.0" x="1400.0" y="520.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="create" id="BPMNShape_create">
+        <omgdc:Bounds height="60.0" width="100.0" x="80.0" y="497.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="updateApprovalGW" id="BPMNShape_updateApprovalGW">
-        <omgdc:Bounds height="40.0" width="40.0" x="1670.0" y="620.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="createGW" id="BPMNShape_createGW">
+        <omgdc:Bounds height="40.0" width="40.0" x="230.0" y="506.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="theStart" id="BPMNShape_theStart">
-        <omgdc:Bounds height="35.0" width="35.0" x="0.0" y="512.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="createApproval" id="BPMNShape_createApproval">
+        <omgdc:Bounds height="60.0" width="100.0" x="320.0" y="560.0"/>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape bpmnElement="createApprovalGW" id="BPMNShape_createApprovalGW">
-        <omgdc:Bounds height="40.0" width="40.0" x="470.0" y="556.0"></omgdc:Bounds>
+        <omgdc:Bounds height="40.0" width="40.0" x="470.0" y="556.0"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="enableGW" id="BPMNShape_enableGW">
+        <omgdc:Bounds height="40.0" width="40.0" x="590.0" y="429.0"/>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape bpmnElement="activate" id="BPMNShape_activate">
-        <omgdc:Bounds height="60.0" width="100.0" x="710.0" y="610.0"></omgdc:Bounds>
+        <omgdc:Bounds height="60.0" width="100.0" x="710.0" y="610.0"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="generateToken" id="BPMNShape_generateToken">
+        <omgdc:Bounds height="60.0" width="100.0" x="702.0" y="188.0"/>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape bpmnElement="created" id="BPMNShape_created">
-        <omgdc:Bounds height="60.0" width="100.0" x="852.0" y="213.0"></omgdc:Bounds>
+        <omgdc:Bounds height="60.0" width="100.0" x="852.0" y="213.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="rejected" id="BPMNShape_rejected">
-        <omgdc:Bounds height="60.0" width="100.0" x="710.0" y="770.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="optinGW" id="BPMNShape_optinGW">
+        <omgdc:Bounds height="40.0" width="40.0" x="1002.0" y="240.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="delete" id="BPMNShape_delete">
-        <omgdc:Bounds height="60.0" width="100.0" x="1940.0" y="438.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="removeToken" id="BPMNShape_removeToken">
+        <omgdc:Bounds height="60.0" width="100.0" x="1092.0" y="248.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="rejectDelete" id="BPMNShape_rejectDelete">
-        <omgdc:Bounds height="60.0" width="100.0" x="1790.0" y="320.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="active" id="BPMNShape_active">
+        <omgdc:Bounds height="60.0" width="100.0" x="1030.0" y="511.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="createGW" id="BPMNShape_createGW">
-        <omgdc:Bounds height="40.0" width="40.0" x="230.0" y="506.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="activeGw" id="BPMNShape_activeGw">
+        <omgdc:Bounds height="40.0" width="40.0" x="1400.0" y="520.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="deleteApproval" id="BPMNShape_deleteApproval">
-        <omgdc:Bounds height="60.0" width="100.0" x="1490.0" y="360.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="updateApproval" id="BPMNShape_updateApproval">
+        <omgdc:Bounds height="60.0" width="100.0" x="1490.0" y="740.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="createApproval" id="BPMNShape_createApproval">
-        <omgdc:Bounds height="60.0" width="100.0" x="320.0" y="560.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="updateApprovalGW" id="BPMNShape_updateApprovalGW">
+        <omgdc:Bounds height="40.0" width="40.0" x="1670.0" y="740.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="deleteApprovalGW" id="BPMNShape_deleteApprovalGW">
-        <omgdc:Bounds height="40.0" width="40.0" x="1670.0" y="380.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="rejectUpdate" id="BPMNShape_rejectUpdate">
+        <omgdc:Bounds height="60.0" width="100.0" x="1790.0" y="840.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="removeToken" id="BPMNShape_removeToken">
-        <omgdc:Bounds height="60.0" width="100.0" x="1092.0" y="248.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="update" id="BPMNShape_update">
+        <omgdc:Bounds height="60.0" width="100.0" x="1790.0" y="700.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="updateApproval" id="BPMNShape_updateApproval">
-        <omgdc:Bounds height="60.0" width="100.0" x="1490.0" y="620.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="suspend" id="BPMNShape_suspend">
+        <omgdc:Bounds height="60.0" width="100.0" x="1490.0" y="100.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="enableGW" id="BPMNShape_enableGW">
-        <omgdc:Bounds height="40.0" width="40.0" x="590.0" y="429.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="suspended" id="BPMNShape_suspended">
+        <omgdc:Bounds height="60.0" width="100.0" x="1640.0" y="120.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="generateToken" id="BPMNShape_generateToken">
-        <omgdc:Bounds height="60.0" width="100.0" x="702.0" y="188.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="suspendedGw" id="BPMNShape_suspendedGw">
+        <omgdc:Bounds height="40.0" width="40.0" x="1820.0" y="180.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="rejectUpdate" id="BPMNShape_rejectUpdate">
-        <omgdc:Bounds height="60.0" width="100.0" x="1790.0" y="840.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="reactivate" id="BPMNShape_reactivate">
+        <omgdc:Bounds height="60.0" width="100.0" x="1940.0" y="110.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="create" id="BPMNShape_create">
-        <omgdc:Bounds height="60.0" width="100.0" x="80.0" y="497.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="reject" id="BPMNShape_reject">
+        <omgdc:Bounds height="60.0" width="100.0" x="560.0" y="659.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="reactivate" id="BPMNShape_reactivate">
-        <omgdc:Bounds height="60.0" width="100.0" x="1940.0" y="110.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="rejected" id="BPMNShape_rejected">
+        <omgdc:Bounds height="60.0" width="100.0" x="710.0" y="770.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="suspended" id="BPMNShape_suspended">
-        <omgdc:Bounds height="60.0" width="100.0" x="1640.0" y="120.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="rejectedGw" id="BPMNShape_rejectedGw">
+        <omgdc:Bounds height="40.0" width="40.0" x="890.0" y="775.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="suspendedGw" id="BPMNShape_suspendedGw">
-        <omgdc:Bounds height="40.0" width="40.0" x="1820.0" y="180.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="deleteApproval" id="BPMNShape_deleteApproval">
+        <omgdc:Bounds height="60.0" width="100.0" x="1490.0" y="280.0"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="deleteApprovalGW" id="BPMNShape_deleteApprovalGW">
+        <omgdc:Bounds height="40.0" width="40.0" x="1670.0" y="300.0"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="rejectDelete" id="BPMNShape_rejectDelete">
+        <omgdc:Bounds height="60.0" width="100.0" x="1790.0" y="240.0"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="delete" id="BPMNShape_delete">
+        <omgdc:Bounds height="60.0" width="100.0" x="1940.0" y="358.0"/>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape bpmnElement="theEnd" id="BPMNShape_theEnd">
-        <omgdc:Bounds height="35.0" width="35.0" x="2080.0" y="451.0"></omgdc:Bounds>
+        <omgdc:Bounds height="28.0" width="28.0" x="2078.1893792531678" y="374.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="active" id="BPMNShape_active">
-        <omgdc:Bounds height="60.0" width="100.0" x="1030.0" y="511.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="generateToken4PasswordReset" id="BPMNShape_generateToken4PasswordReset">
+        <omgdc:Bounds height="59.99999999999994" width="100.0" x="1543.209935088986" y="452.6749142927693"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="optinGW" id="BPMNShape_optinGW">
-        <omgdc:Bounds height="40.0" width="40.0" x="1002.0" y="240.0"></omgdc:Bounds>
+      <bpmndi:BPMNShape bpmnElement="notify4RequestPasswordReset" id="BPMNShape_notify4RequestPasswordReset">
+        <omgdc:Bounds height="60.00000000000006" width="100.0" x="1748.9712597675173" y="452.6749142927692"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge bpmnElement="flow12" id="BPMNEdge_flow12">
-        <omgdi:waypoint x="1940.0" y="140.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1928.0" y="127.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1378.0" y="40.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1080.0" y="511.0"></omgdi:waypoint>
+      <bpmndi:BPMNShape bpmnElement="checkToken4ConfirmPasswordReset" id="BPMNShape_checkToken4ConfirmPasswordReset">
+        <omgdc:Bounds height="60.0" width="100.0" x="1558.797798366986" y="561.167207412115"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="notify4ConfirmPasswordReset" id="BPMNShape_notify4ConfirmPasswordReset">
+        <omgdc:Bounds height="60.0" width="100.0" x="1748.971259767517" y="561.167207412115"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge bpmnElement="flow17" id="BPMNEdge_flow17">
+        <omgdi:waypoint x="1658.797798366986" y="591.167207412115"/>
+        <omgdi:waypoint x="1748.971259767517" y="591.167207412115"/>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="active2DeleteApproval" id="BPMNEdge_active2DeleteApproval">
-        <omgdi:waypoint x="1440.0" y="540.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1454.0" y="540.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1454.0" y="390.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1490.0" y="390.0"></omgdi:waypoint>
+      <bpmndi:BPMNEdge bpmnElement="flow12" id="BPMNEdge_flow12">
+        <omgdi:waypoint x="1940.0" y="129.51612903225805"/>
+        <omgdi:waypoint x="1928.0" y="127.0"/>
+        <omgdi:waypoint x="1378.0" y="40.0"/>
+        <omgdi:waypoint x="1097.8443113772455" y="511.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow11" id="BPMNEdge_flow11">
-        <omgdi:waypoint x="1740.0" y="150.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1752.0" y="150.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1752.0" y="200.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1820.0" y="200.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1740.0" y="150.0"/>
+        <omgdi:waypoint x="1752.0" y="150.0"/>
+        <omgdi:waypoint x="1752.0" y="200.0"/>
+        <omgdi:waypoint x="1820.0" y="200.0"/>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="flow10" id="BPMNEdge_flow10">
-        <omgdi:waypoint x="1590.0" y="130.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1602.0" y="130.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1602.0" y="150.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1640.0" y="150.0"></omgdi:waypoint>
+      <bpmndi:BPMNEdge bpmnElement="active2DeleteApproval" id="BPMNEdge_active2DeleteApproval">
+        <omgdi:waypoint x="1440.0" y="540.0"/>
+        <omgdi:waypoint x="1454.0" y="540.0"/>
+        <omgdi:waypoint x="1454.0" y="310.0"/>
+        <omgdi:waypoint x="1490.0" y="310.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow14bis" id="BPMNEdge_flow14bis">
-        <omgdi:waypoint x="1590.0" y="390.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1602.0" y="390.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1602.0" y="400.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1670.0" y="400.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1590.0" y="310.0"/>
+        <omgdi:waypoint x="1602.0" y="310.0"/>
+        <omgdi:waypoint x="1602.0" y="320.0"/>
+        <omgdi:waypoint x="1670.0" y="320.0"/>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="createApproval2Reject" id="BPMNEdge_createApproval2Reject">
-        <omgdi:waypoint x="510.0" y="576.0"></omgdi:waypoint>
-        <omgdi:waypoint x="522.0" y="576.0"></omgdi:waypoint>
-        <omgdi:waypoint x="522.0" y="689.0"></omgdi:waypoint>
-        <omgdi:waypoint x="560.0" y="689.0"></omgdi:waypoint>
+      <bpmndi:BPMNEdge bpmnElement="flow10" id="BPMNEdge_flow10">
+        <omgdi:waypoint x="1590.0" y="130.0"/>
+        <omgdi:waypoint x="1602.0" y="130.0"/>
+        <omgdi:waypoint x="1602.0" y="150.0"/>
+        <omgdi:waypoint x="1640.0" y="150.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="active2RequestPasswordReset" id="BPMNEdge_active2RequestPasswordReset">
+        <omgdi:waypoint x="1439.5" y="540.5"/>
+        <omgdi:waypoint x="1593.209935088986" y="540.5"/>
+        <omgdi:waypoint x="1593.209935088986" y="512.6749142927692"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="active2ConfirmPasswordReset" id="BPMNEdge_active2ConfirmPasswordReset">
+        <omgdi:waypoint x="1439.5" y="540.5"/>
+        <omgdi:waypoint x="1608.797798366986" y="540.5"/>
+        <omgdi:waypoint x="1608.797798366986" y="561.167207412115"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="deleteApprovalGW2Delete" id="BPMNEdge_deleteApprovalGW2Delete">
-        <omgdi:waypoint x="1710.0" y="400.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1752.0" y="400.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1752.0" y="468.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1940.0" y="468.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1710.0" y="320.0"/>
+        <omgdi:waypoint x="1752.0" y="320.0"/>
+        <omgdi:waypoint x="1752.0" y="388.0"/>
+        <omgdi:waypoint x="1940.0" y="388.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="createApproval2Reject" id="BPMNEdge_createApproval2Reject">
+        <omgdi:waypoint x="510.0" y="576.0"/>
+        <omgdi:waypoint x="522.0" y="576.0"/>
+        <omgdi:waypoint x="522.0" y="689.0"/>
+        <omgdi:waypoint x="560.0" y="689.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="active2Delete" id="BPMNEdge_active2Delete">
-        <omgdi:waypoint x="1440.0" y="540.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1452.0" y="540.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1452.0" y="610.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1990.0" y="498.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1440.0" y="540.0"/>
+        <omgdi:waypoint x="1452.0" y="540.0"/>
+        <omgdi:waypoint x="1452.0" y="680.6812757582483"/>
+        <omgdi:waypoint x="1955.9214707261015" y="680.6812757582483"/>
+        <omgdi:waypoint x="1986.506931044467" y="418.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="updateApprovalGW2Update" id="BPMNEdge_updateApprovalGW2Update">
-        <omgdi:waypoint x="1710.0" y="640.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1752.0" y="640.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1752.0" y="610.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1790.0" y="610.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1710.0" y="760.0"/>
+        <omgdi:waypoint x="1752.0" y="760.0"/>
+        <omgdi:waypoint x="1752.0" y="730.0"/>
+        <omgdi:waypoint x="1790.0" y="730.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="active2UpdateApproval" id="BPMNEdge_active2UpdateApproval">
-        <omgdi:waypoint x="1440.0" y="540.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1454.0" y="540.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1454.0" y="650.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1490.0" y="650.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1440.0" y="540.0"/>
+        <omgdi:waypoint x="1454.0" y="540.0"/>
+        <omgdi:waypoint x="1454.0" y="770.0"/>
+        <omgdi:waypoint x="1490.0" y="770.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="rejected2Delete" id="BPMNEdge_rejected2Delete">
-        <omgdi:waypoint x="930.0" y="795.0"></omgdi:waypoint>
-        <omgdi:waypoint x="972.0" y="795.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1470.0" y="911.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1989.0" y="911.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1990.0" y="498.0"></omgdi:waypoint>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="updateApprovalGW2Reject" id="BPMNEdge_updateApprovalGW2Reject">
-        <omgdi:waypoint x="1710.0" y="640.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1752.0" y="640.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1752.0" y="870.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1790.0" y="870.0"></omgdi:waypoint>
+        <omgdi:waypoint x="930.0" y="795.0"/>
+        <omgdi:waypoint x="972.0" y="795.0"/>
+        <omgdi:waypoint x="1470.0" y="911.0"/>
+        <omgdi:waypoint x="1990.0" y="911.0"/>
+        <omgdi:waypoint x="1990.0" y="418.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="createApprovalGW2Active" id="BPMNEdge_createApprovalGW2Active">
-        <omgdi:waypoint x="630.0" y="449.0"></omgdi:waypoint>
-        <omgdi:waypoint x="674.0" y="449.0"></omgdi:waypoint>
-        <omgdi:waypoint x="674.0" y="540.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1030.0" y="541.0"></omgdi:waypoint>
+        <omgdi:waypoint x="630.0" y="449.0"/>
+        <omgdi:waypoint x="674.0" y="449.0"/>
+        <omgdi:waypoint x="674.0" y="540.0"/>
+        <omgdi:waypoint x="1030.0" y="540.8768472906404"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="updateApprovalGW2Reject" id="BPMNEdge_updateApprovalGW2Reject">
+        <omgdi:waypoint x="1710.0" y="760.0"/>
+        <omgdi:waypoint x="1752.0" y="760.0"/>
+        <omgdi:waypoint x="1752.0" y="870.0"/>
+        <omgdi:waypoint x="1790.0" y="870.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow8ter" id="BPMNEdge_flow8ter">
-        <omgdi:waypoint x="1790.0" y="870.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1778.0" y="882.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1225.0" y="787.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1080.0" y="726.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1080.0" y="571.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1790.0" y="879.6774193548387"/>
+        <omgdi:waypoint x="1778.0" y="882.0"/>
+        <omgdi:waypoint x="1225.0" y="787.0"/>
+        <omgdi:waypoint x="1080.0" y="726.0"/>
+        <omgdi:waypoint x="1080.0" y="571.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow15" id="BPMNEdge_flow15">
+        <omgdi:waypoint x="1643.209935088986" y="482.6749142927693"/>
+        <omgdi:waypoint x="1748.9712597675173" y="482.67491429276924"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="suspended2Reactivate" id="BPMNEdge_suspended2Reactivate">
-        <omgdi:waypoint x="1860.0" y="200.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1902.0" y="200.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1902.0" y="140.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1940.0" y="140.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1860.0" y="200.0"/>
+        <omgdi:waypoint x="1902.0" y="200.0"/>
+        <omgdi:waypoint x="1902.0" y="140.0"/>
+        <omgdi:waypoint x="1940.0" y="140.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow13" id="BPMNEdge_flow13">
-        <omgdi:waypoint x="660.0" y="689.0"></omgdi:waypoint>
-        <omgdi:waypoint x="672.0" y="689.0"></omgdi:waypoint>
-        <omgdi:waypoint x="672.0" y="800.0"></omgdi:waypoint>
-        <omgdi:waypoint x="710.0" y="800.0"></omgdi:waypoint>
+        <omgdi:waypoint x="660.0" y="689.0"/>
+        <omgdi:waypoint x="672.0" y="689.0"/>
+        <omgdi:waypoint x="672.0" y="800.0"/>
+        <omgdi:waypoint x="710.0" y="800.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow14" id="BPMNEdge_flow14">
-        <omgdi:waypoint x="810.0" y="800.0"></omgdi:waypoint>
-        <omgdi:waypoint x="822.0" y="787.0"></omgdi:waypoint>
-        <omgdi:waypoint x="822.0" y="795.0"></omgdi:waypoint>
-        <omgdi:waypoint x="890.0" y="795.0"></omgdi:waypoint>
+        <omgdi:waypoint x="760.0" y="770.0"/>
+        <omgdi:waypoint x="760.0" y="732.8074937730017"/>
+        <omgdi:waypoint x="910.0" y="732.8074937730017"/>
+        <omgdi:waypoint x="910.0" y="775.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="createApprovalGW2EnableGW" id="BPMNEdge_createApprovalGW2EnableGW">
-        <omgdi:waypoint x="510.0" y="576.0"></omgdi:waypoint>
-        <omgdi:waypoint x="522.0" y="576.0"></omgdi:waypoint>
-        <omgdi:waypoint x="522.0" y="449.0"></omgdi:waypoint>
-        <omgdi:waypoint x="590.0" y="449.0"></omgdi:waypoint>
+        <omgdi:waypoint x="510.0" y="576.0"/>
+        <omgdi:waypoint x="522.0" y="576.0"/>
+        <omgdi:waypoint x="522.0" y="449.0"/>
+        <omgdi:waypoint x="590.0" y="449.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="active2Update" id="BPMNEdge_active2Update">
-        <omgdi:waypoint x="1440.0" y="540.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1456.0" y="540.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1456.0" y="610.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1790.0" y="610.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1440.0" y="540.0"/>
+        <omgdi:waypoint x="1456.0" y="540.0"/>
+        <omgdi:waypoint x="1456.0" y="730.0"/>
+        <omgdi:waypoint x="1790.0" y="730.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="create2Activate" id="BPMNEdge_create2Activate">
-        <omgdi:waypoint x="270.0" y="526.0"></omgdi:waypoint>
-        <omgdi:waypoint x="282.0" y="526.0"></omgdi:waypoint>
-        <omgdi:waypoint x="282.0" y="449.0"></omgdi:waypoint>
-        <omgdi:waypoint x="590.0" y="449.0"></omgdi:waypoint>
+        <omgdi:waypoint x="270.0" y="526.0"/>
+        <omgdi:waypoint x="282.0" y="526.0"/>
+        <omgdi:waypoint x="282.0" y="449.0"/>
+        <omgdi:waypoint x="590.0" y="449.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="active2Suspend" id="BPMNEdge_active2Suspend">
-        <omgdi:waypoint x="1440.0" y="540.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1452.0" y="540.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1452.0" y="130.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1490.0" y="130.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1440.0" y="540.0"/>
+        <omgdi:waypoint x="1452.0" y="540.0"/>
+        <omgdi:waypoint x="1452.0" y="130.0"/>
+        <omgdi:waypoint x="1490.0" y="130.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="suspended2Delete" id="BPMNEdge_suspended2Delete">
-        <omgdi:waypoint x="1860.0" y="200.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1902.0" y="200.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1980.0" y="388.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1990.0" y="438.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1860.0" y="200.0"/>
+        <omgdi:waypoint x="1990.0" y="200.0"/>
+        <omgdi:waypoint x="1990.0" y="358.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="created2Activate" id="BPMNEdge_created2Activate">
-        <omgdi:waypoint x="1042.0" y="260.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1054.0" y="260.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1054.0" y="278.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1092.0" y="278.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1042.0" y="260.0"/>
+        <omgdi:waypoint x="1054.0" y="260.0"/>
+        <omgdi:waypoint x="1054.0" y="278.0"/>
+        <omgdi:waypoint x="1092.0" y="278.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="createAsAnonymous2Approval" id="BPMNEdge_createAsAnonymous2Approval">
-        <omgdi:waypoint x="270.0" y="526.0"></omgdi:waypoint>
-        <omgdi:waypoint x="282.0" y="526.0"></omgdi:waypoint>
-        <omgdi:waypoint x="282.0" y="590.0"></omgdi:waypoint>
-        <omgdi:waypoint x="320.0" y="590.0"></omgdi:waypoint>
+        <omgdi:waypoint x="270.0" y="526.0"/>
+        <omgdi:waypoint x="282.0" y="526.0"/>
+        <omgdi:waypoint x="282.0" y="590.0"/>
+        <omgdi:waypoint x="320.0" y="590.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
-        <omgdi:waypoint x="420.0" y="590.0"></omgdi:waypoint>
-        <omgdi:waypoint x="432.0" y="590.0"></omgdi:waypoint>
-        <omgdi:waypoint x="432.0" y="576.0"></omgdi:waypoint>
-        <omgdi:waypoint x="470.0" y="576.0"></omgdi:waypoint>
+        <omgdi:waypoint x="420.0" y="590.0"/>
+        <omgdi:waypoint x="432.0" y="590.0"/>
+        <omgdi:waypoint x="432.0" y="576.0"/>
+        <omgdi:waypoint x="470.0" y="576.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
-        <omgdi:waypoint x="180.0" y="527.0"></omgdi:waypoint>
-        <omgdi:waypoint x="192.0" y="527.0"></omgdi:waypoint>
-        <omgdi:waypoint x="192.0" y="526.0"></omgdi:waypoint>
-        <omgdi:waypoint x="230.0" y="526.0"></omgdi:waypoint>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5">
-        <omgdi:waypoint x="802.0" y="218.0"></omgdi:waypoint>
-        <omgdi:waypoint x="814.0" y="218.0"></omgdi:waypoint>
-        <omgdi:waypoint x="814.0" y="243.0"></omgdi:waypoint>
-        <omgdi:waypoint x="852.0" y="243.0"></omgdi:waypoint>
+        <omgdi:waypoint x="180.0" y="527.0"/>
+        <omgdi:waypoint x="192.0" y="527.0"/>
+        <omgdi:waypoint x="192.0" y="526.0"/>
+        <omgdi:waypoint x="230.0" y="526.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="rejected2Rejected" id="BPMNEdge_rejected2Rejected">
-        <omgdi:waypoint x="890.0" y="795.0"></omgdi:waypoint>
-        <omgdi:waypoint x="848.0" y="795.0"></omgdi:waypoint>
-        <omgdi:waypoint x="848.0" y="800.0"></omgdi:waypoint>
-        <omgdi:waypoint x="810.0" y="800.0"></omgdi:waypoint>
+        <omgdi:waypoint x="890.6451612903226" y="795.6451612903226"/>
+        <omgdi:waypoint x="810.0" y="798.3333333333334"/>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="createApprovalGW2Suspended" id="BPMNEdge_createApprovalGW2Suspended">
-        <omgdi:waypoint x="630.0" y="449.0"></omgdi:waypoint>
-        <omgdi:waypoint x="672.0" y="449.0"></omgdi:waypoint>
-        <omgdi:waypoint x="672.0" y="130.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1490.0" y="130.0"></omgdi:waypoint>
+      <bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5">
+        <omgdi:waypoint x="802.0" y="218.0"/>
+        <omgdi:waypoint x="814.0" y="218.0"/>
+        <omgdi:waypoint x="814.0" y="243.0"/>
+        <omgdi:waypoint x="852.0" y="243.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
-        <omgdi:waypoint x="810.0" y="640.0"></omgdi:waypoint>
-        <omgdi:waypoint x="822.0" y="640.0"></omgdi:waypoint>
-        <omgdi:waypoint x="959.0" y="640.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1080.0" y="571.0"></omgdi:waypoint>
+        <omgdi:waypoint x="810.0" y="640.0"/>
+        <omgdi:waypoint x="822.0" y="640.0"/>
+        <omgdi:waypoint x="959.0" y="640.0"/>
+        <omgdi:waypoint x="1043.3333333333333" y="571.0"/>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="createApprovalGW2OptIn" id="BPMNEdge_createApprovalGW2OptIn">
-        <omgdi:waypoint x="630.0" y="449.0"></omgdi:waypoint>
-        <omgdi:waypoint x="674.0" y="449.0"></omgdi:waypoint>
-        <omgdi:waypoint x="700.0" y="449.0"></omgdi:waypoint>
-        <omgdi:waypoint x="752.0" y="248.0"></omgdi:waypoint>
+      <bpmndi:BPMNEdge bpmnElement="createApprovalGW2Suspended" id="BPMNEdge_createApprovalGW2Suspended">
+        <omgdi:waypoint x="630.0" y="449.0"/>
+        <omgdi:waypoint x="672.0" y="449.0"/>
+        <omgdi:waypoint x="672.0" y="130.0"/>
+        <omgdi:waypoint x="1490.0" y="130.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow14ter" id="BPMNEdge_flow14ter">
-        <omgdi:waypoint x="1790.0" y="350.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1778.0" y="337.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1362.0" y="306.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1080.0" y="511.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1790.0" y="260.7608891486752"/>
+        <omgdi:waypoint x="1424.117736926915" y="193.1523534073587"/>
+        <omgdi:waypoint x="1109.678315230625" y="511.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="createApprovalGW2OptIn" id="BPMNEdge_createApprovalGW2OptIn">
+        <omgdi:waypoint x="630.0" y="449.0"/>
+        <omgdi:waypoint x="674.0" y="449.0"/>
+        <omgdi:waypoint x="700.0" y="449.0"/>
+        <omgdi:waypoint x="745.2467532467532" y="248.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
-        <omgdi:waypoint x="35.0" y="529.0"></omgdi:waypoint>
-        <omgdi:waypoint x="80.0" y="527.0"></omgdi:waypoint>
+        <omgdi:waypoint x="30.0" y="527.0"/>
+        <omgdi:waypoint x="80.0" y="527.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow16" id="BPMNEdge_flow16">
+        <omgdi:waypoint x="1748.9712597675173" y="459.5470829510475"/>
+        <omgdi:waypoint x="1592.4096593525787" y="387.128477171313"/>
+        <omgdi:waypoint x="1130.0" y="525.9854974413342"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="created2Created" id="BPMNEdge_created2Created">
-        <omgdi:waypoint x="1002.0" y="260.0"></omgdi:waypoint>
-        <omgdi:waypoint x="990.0" y="260.0"></omgdi:waypoint>
-        <omgdi:waypoint x="990.0" y="243.0"></omgdi:waypoint>
-        <omgdi:waypoint x="952.0" y="243.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1002.0" y="260.0"/>
+        <omgdi:waypoint x="990.0" y="260.0"/>
+        <omgdi:waypoint x="990.0" y="243.0"/>
+        <omgdi:waypoint x="952.0" y="243.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow18" id="BPMNEdge_flow18">
+        <omgdi:waypoint x="1748.971259767517" y="619.7464352880323"/>
+        <omgdi:waypoint x="1673.525420205687" y="662.8701121105813"/>
+        <omgdi:waypoint x="1130.0" y="551.266629529393"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="createApprovalGW2Activate" id="BPMNEdge_createApprovalGW2Activate">
-        <omgdi:waypoint x="630.0" y="449.0"></omgdi:waypoint>
-        <omgdi:waypoint x="672.0" y="449.0"></omgdi:waypoint>
-        <omgdi:waypoint x="672.0" y="640.0"></omgdi:waypoint>
-        <omgdi:waypoint x="710.0" y="640.0"></omgdi:waypoint>
+        <omgdi:waypoint x="630.0" y="449.0"/>
+        <omgdi:waypoint x="672.0" y="449.0"/>
+        <omgdi:waypoint x="672.0" y="640.0"/>
+        <omgdi:waypoint x="710.0" y="640.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow7" id="BPMNEdge_flow7">
-        <omgdi:waypoint x="1142.0" y="308.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1080.0" y="511.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1134.9277566539924" y="308.0"/>
+        <omgdi:waypoint x="1087.0722433460076" y="511.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6">
-        <omgdi:waypoint x="952.0" y="243.0"></omgdi:waypoint>
-        <omgdi:waypoint x="964.0" y="255.0"></omgdi:waypoint>
-        <omgdi:waypoint x="964.0" y="260.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1002.0" y="260.0"></omgdi:waypoint>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="flow8bis" id="BPMNEdge_flow8bis">
-        <omgdi:waypoint x="1590.0" y="650.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1602.0" y="650.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1602.0" y="640.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1670.0" y="640.0"></omgdi:waypoint>
+        <omgdi:waypoint x="952.0" y="252.67741935483872"/>
+        <omgdi:waypoint x="964.0" y="255.0"/>
+        <omgdi:waypoint x="964.0" y="260.0"/>
+        <omgdi:waypoint x="1002.0" y="260.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow9" id="BPMNEdge_flow9">
-        <omgdi:waypoint x="1840.0" y="640.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1797.0" y="775.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1465.0" y="775.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1080.0" y="571.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1828.6246202240113" y="760.0"/>
+        <omgdi:waypoint x="1811.88836468294" y="804.1381014189917"/>
+        <omgdi:waypoint x="1474.4398193359375" y="804.1381014189917"/>
+        <omgdi:waypoint x="1124.969521769241" y="571.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="deleteApprovalGW2Reject" id="BPMNEdge_deleteApprovalGW2Reject">
-        <omgdi:waypoint x="1710.0" y="400.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1752.0" y="400.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1752.0" y="350.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1790.0" y="350.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1710.0" y="320.0"/>
+        <omgdi:waypoint x="1752.0" y="320.0"/>
+        <omgdi:waypoint x="1752.0" y="270.0"/>
+        <omgdi:waypoint x="1790.0" y="270.0"/>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8">
-        <omgdi:waypoint x="1130.0" y="541.0"></omgdi:waypoint>
-        <omgdi:waypoint x="1400.0" y="540.0"></omgdi:waypoint>
+      <bpmndi:BPMNEdge bpmnElement="flow8bis" id="BPMNEdge_flow8bis">
+        <omgdi:waypoint x="1590.0" y="770.0"/>
+        <omgdi:waypoint x="1602.0" y="770.0"/>
+        <omgdi:waypoint x="1602.0" y="760.0"/>
+        <omgdi:waypoint x="1670.0" y="760.0"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow99" id="BPMNEdge_flow99">
-        <omgdi:waypoint x="2040.0" y="468.0"></omgdi:waypoint>
-        <omgdi:waypoint x="2080.0" y="468.0"></omgdi:waypoint>
+        <omgdi:waypoint x="2040.0" y="388.0"/>
+        <omgdi:waypoint x="2078.1893792531678" y="388.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8">
+        <omgdi:waypoint x="1130.0" y="540.8529411764706"/>
+        <omgdi:waypoint x="1400.058651026393" y="540.0586510263929"/>
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>

Modified: syncope/trunk/pom.xml
URL: http://svn.apache.org/viewvc/syncope/trunk/pom.xml?rev=1626150&r1=1626149&r2=1626150&view=diff
==============================================================================
--- syncope/trunk/pom.xml (original)
+++ syncope/trunk/pom.xml Fri Sep 19 08:58:36 2014
@@ -726,6 +726,11 @@ under the License.
         <artifactId>jackson-jaxrs-json-provider</artifactId>
         <version>${jackson.version}</version>
       </dependency>
+      <dependency>
+        <groupId>com.fasterxml.jackson.module</groupId>
+        <artifactId>jackson-module-afterburner</artifactId>
+        <version>${jackson.version}</version>
+      </dependency>
             
       <dependency>
         <groupId>org.quartz-scheduler</groupId>



Mime
View raw message