Author: ilgrosso
Date: Fri Feb  8 17:01:18 2013
New Revision: 1444147

URL: http://svn.apache.org/r1444147
Log:
[SYNCOPE-311] Merge from 1_0_X

Added:
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/ViewUserModalPage.java
      - copied, changed from r1444083, 
syncope/branches/1_0_X/console/src/main/java/org/apache/syncope/console/pages/ViewUserModalPage.java
Modified:
    syncope/trunk/   (props changed)
    
syncope/trunk/common/src/main/java/org/apache/syncope/common/to/WorkflowFormTO.java
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/ApprovalModalPage.java
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/EditUserModalPage.java
    
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Todo.java
    
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage.html
    
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage.properties
    
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage_it.properties
    
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.html
    syncope/trunk/console/src/main/webapp/css/style.css
    
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserDAOImpl.java
    
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java
    
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/task/Update.java
    
syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserTestITCase.java

Propchange: syncope/trunk/
------------------------------------------------------------------------------
  Merged /syncope/branches/1_0_X:r1443946-1444141

Modified: 
syncope/trunk/common/src/main/java/org/apache/syncope/common/to/WorkflowFormTO.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/to/WorkflowFormTO.java?rev=1444147&r1=1444146&r2=1444147&view=diff
==============================================================================
--- 
syncope/trunk/common/src/main/java/org/apache/syncope/common/to/WorkflowFormTO.java
 (original)
+++ 
syncope/trunk/common/src/main/java/org/apache/syncope/common/to/WorkflowFormTO.java
 Fri Feb  8 17:01:18 2013
@@ -25,14 +25,12 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
-
-import org.codehaus.jackson.annotate.JsonIgnore;
 import org.apache.syncope.common.AbstractBaseBean;
+import org.codehaus.jackson.annotate.JsonIgnore;
 
 @XmlRootElement(name = "workflowForm")
 @XmlType
@@ -40,6 +38,8 @@ public class WorkflowFormTO extends Abst
 
     private static final long serialVersionUID = -7044543391316529128L;
 
+    private long userId;
+
     private String taskId;
 
     private String key;
@@ -58,6 +58,14 @@ public class WorkflowFormTO extends Abst
         properties = new ArrayList<WorkflowFormPropertyTO>();
     }
 
+    public long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(long userId) {
+        this.userId = userId;
+    }
+
     public String getTaskId() {
         return taskId;
     }

Modified: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/ApprovalModalPage.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/ApprovalModalPage.java?rev=1444147&r1=1444146&r2=1444147&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/ApprovalModalPage.java
 (original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/ApprovalModalPage.java
 Fri Feb  8 17:01:18 2013
@@ -31,12 +31,15 @@ import org.apache.syncope.common.to.Work
 import org.apache.syncope.common.to.WorkflowFormTO;
 import 
org.apache.syncope.common.validation.SyncopeClientCompositeErrorException;
 import org.apache.syncope.console.commons.MapChoiceRenderer;
+import org.apache.syncope.console.markup.html.list.AltListView;
 import org.apache.syncope.console.rest.ApprovalRestClient;
+import org.apache.syncope.console.rest.UserRestClient;
 import 
org.apache.syncope.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.console.wicket.markup.html.form.AjaxNumberFieldPanel;
 import org.apache.syncope.console.wicket.markup.html.form.AjaxTextFieldPanel;
 import org.apache.syncope.console.wicket.markup.html.form.DateTimeFieldPanel;
 import org.apache.syncope.console.wicket.markup.html.form.FieldPanel;
+import org.apache.wicket.Page;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@@ -57,13 +60,23 @@ public class ApprovalModalPage extends B
 
     private static final long serialVersionUID = -8847854414429745216L;
 
+    private final static int USER_WIN_HEIGHT = 550;
+
+    private final static int USER_WIN_WIDTH = 800;
+
     @SpringBean
     private ApprovalRestClient restClient;
 
+    @SpringBean
+    private UserRestClient userRestClient;
+
+    private final ModalWindow editUserWin;
+
     public ApprovalModalPage(final PageReference callerPageRef, final 
ModalWindow window, final WorkflowFormTO formTO) {
         super();
-                
+
         IModel<List<WorkflowFormPropertyTO>> formProps = new 
LoadableDetachableModel<List<WorkflowFormPropertyTO>>() {
+
             private static final long serialVersionUID = 3169142472626817508L;
 
             @Override
@@ -72,79 +85,112 @@ public class ApprovalModalPage extends B
             }
         };
 
-        final ListView<WorkflowFormPropertyTO> propView = new 
ListView<WorkflowFormPropertyTO>("propView", formProps) {
-            private static final long serialVersionUID = 9101744072914090143L;
+        final ListView<WorkflowFormPropertyTO> propView =
+                new AltListView<WorkflowFormPropertyTO>("propView", formProps) 
{
 
-            @Override
-            protected void populateItem(final ListItem<WorkflowFormPropertyTO> 
item) {
-                final WorkflowFormPropertyTO prop = item.getModelObject();
+                    private static final long serialVersionUID = 
9101744072914090143L;
 
-                Label label = new Label("key", prop.getName() == null
-                        ? prop.getId()
-                        : prop.getName());
-                item.add(label);
-
-                FieldPanel field;
-                switch (prop.getType()) {
-                    case Boolean:
-                        field = new AjaxDropDownChoicePanel("value", 
label.getDefaultModelObjectAsString(),
-                                new 
Model(Boolean.valueOf(prop.getValue()))).setChoices(Arrays.asList(
-                                new String[]{"Yes", "No"}));
-                        break;
-
-                    case Date:
-                        SimpleDateFormat df = 
StringUtils.isNotBlank(prop.getDatePattern())
-                                ? new SimpleDateFormat(prop.getDatePattern())
-                                : new SimpleDateFormat();
-                        Date parsedDate = null;
-                        if (StringUtils.isNotBlank(prop.getValue())) {
-                            try {
-                                parsedDate = df.parse(prop.getValue());
-                            } catch (ParseException e) {
-                                LOG.error("Unparsable date: {}", 
prop.getValue(), e);
-                            }
+                    @Override
+                    protected void populateItem(final 
ListItem<WorkflowFormPropertyTO> item) {
+                        final WorkflowFormPropertyTO prop = 
item.getModelObject();
+
+                        Label label = new Label("key", prop.getName() == null
+                                ? prop.getId()
+                                : prop.getName());
+                        item.add(label);
+
+                        FieldPanel field;
+                        switch (prop.getType()) {
+                            case Boolean:
+                                field = new AjaxDropDownChoicePanel("value", 
label.getDefaultModelObjectAsString(),
+                                        new 
Model(Boolean.valueOf(prop.getValue()))).setChoices(Arrays.asList(
+                                        new String[]{"Yes", "No"}));
+                                break;
+
+                            case Date:
+                                SimpleDateFormat df = 
StringUtils.isNotBlank(prop.getDatePattern())
+                                        ? new 
SimpleDateFormat(prop.getDatePattern())
+                                        : new SimpleDateFormat();
+                                Date parsedDate = null;
+                                if (StringUtils.isNotBlank(prop.getValue())) {
+                                    try {
+                                        parsedDate = df.parse(prop.getValue());
+                                    } catch (ParseException e) {
+                                        LOG.error("Unparsable date: {}", 
prop.getValue(), e);
+                                    }
+                                }
+
+                                field = new DateTimeFieldPanel("value", 
label.getDefaultModelObjectAsString(),
+                                        new Model(parsedDate), 
df.toLocalizedPattern());
+                                break;
+
+                            case Enum:
+                                MapChoiceRenderer<String, String> enumCR =
+                                        new MapChoiceRenderer<String, 
String>(prop.getEnumValues());
+
+                                field = new AjaxDropDownChoicePanel("value", 
label.getDefaultModelObjectAsString(),
+                                        new 
Model(prop.getValue())).setChoiceRenderer(enumCR).setChoices(new Model() {
+
+                                    private static final long serialVersionUID 
= -858521070366432018L;
+
+                                    @Override
+                                    public Serializable getObject() {
+                                        return new 
ArrayList(prop.getEnumValues().keySet());
+                                    }
+                                });
+                                break;
+
+                            case Long:
+                                field = new AjaxNumberFieldPanel("value", 
label.getDefaultModelObjectAsString(),
+                                        new 
Model(Long.valueOf(prop.getValue())), Long.class);
+                                break;
+
+                            case String:
+                            default:
+                                field = new AjaxTextFieldPanel("value", 
PARENT_PATH, new Model(prop.getValue()));
+                                break;
+                        }
+
+                        field.setReadOnly(!prop.isWritable());
+                        if (prop.isRequired()) {
+                            field.addRequiredLabel();
                         }
 
-                        field = new DateTimeFieldPanel("value", 
label.getDefaultModelObjectAsString(), new Model(
-                                parsedDate), df.toLocalizedPattern());
-                        break;
-
-                    case Enum:
-                        MapChoiceRenderer<String, String> enumCR =
-                                new MapChoiceRenderer<String, 
String>(prop.getEnumValues());
-
-                        field = new AjaxDropDownChoicePanel("value", 
label.getDefaultModelObjectAsString(),
-                                new 
Model(prop.getValue())).setChoiceRenderer(enumCR).setChoices(new Model() {
-                            private static final long serialVersionUID = 
-858521070366432018L;
+                        item.add(field);
+                    }
+                };
 
-                            @Override
-                            public Serializable getObject() {
-                                return new 
ArrayList(prop.getEnumValues().keySet());
-                            }
-                        });
-                        break;
+        final AjaxButton userDetails = new IndicatingAjaxButton("userDetails", 
new Model(getString("userDetails"))) {
 
-                    case Long:
-                        field = new AjaxNumberFieldPanel("value", 
label.getDefaultModelObjectAsString(),
-                                new Model(Long.valueOf(prop.getValue())), 
Long.class);
-                        break;
-
-                    case String:
-                    default:
-                        field = new AjaxTextFieldPanel("value", PARENT_PATH, 
new Model(prop.getValue()));
-                        break;
-                }
+            private static final long serialVersionUID = -4804368561204623354L;
 
-                field.setReadOnly(!prop.isWritable());
-                if (prop.isRequired()) {
-                    field.addRequiredLabel();
-                }
+            @Override
+            protected void onSubmit(final AjaxRequestTarget target, final 
Form<?> form) {
+                editUserWin.setPageCreator(new ModalWindow.PageCreator() {
+
+                    private static final long serialVersionUID = 
-7834632442532690940L;
+
+                    @Override
+                    public Page createPage() {
+                        return new 
ViewUserModalPage(ApprovalModalPage.this.getPageReference(), editUserWin,
+                                userRestClient.read(formTO.getUserId())) {
+
+                            @Override
+                            protected void closeAction(final AjaxRequestTarget 
target, final Form form) {
+                                setResponsePage(ApprovalModalPage.this);
+                            }
+                        };
+                    }
+                });
 
-                item.add(field);
+                editUserWin.show(target);
             }
         };
+        MetaDataRoleAuthorizationStrategy.authorize(userDetails, ENABLE,
+                xmlRolesReader.getAllAllowedRoles("Users", "read"));
 
         final AjaxButton submit = new IndicatingAjaxButton("apply", new 
Model(getString("submit"))) {
+
             private static final long serialVersionUID = -958724007591692537L;
 
             @Override
@@ -197,6 +243,7 @@ public class ApprovalModalPage extends B
         };
 
         final AjaxButton cancel = new IndicatingAjaxButton("cancel", new 
ResourceModel("cancel")) {
+
             private static final long serialVersionUID = -958724007591692537L;
 
             @Override
@@ -208,17 +255,25 @@ public class ApprovalModalPage extends B
             protected void onError(final AjaxRequestTarget target, final Form 
form) {
             }
         };
-        
+
         cancel.setDefaultFormProcessing(false);
 
         Form form = new Form("form");
         form.add(propView);
+        form.add(userDetails);
         form.add(submit);
         form.add(cancel);
 
         MetaDataRoleAuthorizationStrategy.authorize(form, ENABLE, 
xmlRolesReader.getAllAllowedRoles("Approval",
                 "submit"));
 
+        editUserWin = new ModalWindow("editUserWin");
+        editUserWin.setCssClassName(ModalWindow.CSS_CLASS_GRAY);
+        editUserWin.setInitialHeight(USER_WIN_HEIGHT);
+        editUserWin.setInitialWidth(USER_WIN_WIDTH);
+        editUserWin.setCookieName("edit-user-modal");
+        add(editUserWin);
+
         add(form);
     }
 }

Modified: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/EditUserModalPage.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/EditUserModalPage.java?rev=1444147&r1=1444146&r2=1444147&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/EditUserModalPage.java
 (original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/EditUserModalPage.java
 Fri Feb  8 17:01:18 2013
@@ -46,6 +46,8 @@ public class EditUserModalPage extends U
     @SpringBean
     private UserRestClient userRestClient;
 
+    protected Form form;
+
     private UserTO initialUserTO = null;
 
     private StatusPanel statusPanel;
@@ -55,7 +57,7 @@ public class EditUserModalPage extends U
 
         this.initialUserTO = AttributableOperations.clone(userTO);
 
-        Form form = setupEditPanel();
+        form = setupEditPanel();
 
         // add resource assignment details in case of update
         if (userTO.getId() != 0) {
@@ -91,7 +93,6 @@ public class EditUserModalPage extends U
                 userTO = userRestClient.update(userMod);
             }
         }
-
     }
 
     @Override

Modified: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Todo.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Todo.java?rev=1444147&r1=1444146&r2=1444147&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Todo.java 
(original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Todo.java 
Fri Feb  8 17:01:18 2013
@@ -173,8 +173,8 @@ public class Todo extends BasePage {
 
                         editApprovalWin.show(target);
                     }
-                }, ActionLink.ActionType.EDIT, "Approval", "read", 
SyncopeSession.get().getUserId().equals(
-                        formTO.getOwner()));
+                }, ActionLink.ActionType.EDIT, "Approval", "read",
+                        
SyncopeSession.get().getUserId().equals(formTO.getOwner()));
 
                 cellItem.add(panel);
             }

Copied: 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/ViewUserModalPage.java
 (from r1444083, 
syncope/branches/1_0_X/console/src/main/java/org/apache/syncope/console/pages/ViewUserModalPage.java)
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/ViewUserModalPage.java?p2=syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/ViewUserModalPage.java&p1=syncope/branches/1_0_X/console/src/main/java/org/apache/syncope/console/pages/ViewUserModalPage.java&r1=1444083&r2=1444147&rev=1444147&view=diff
==============================================================================
--- 
syncope/branches/1_0_X/console/src/main/java/org/apache/syncope/console/pages/ViewUserModalPage.java
 (original)
+++ 
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/ViewUserModalPage.java
 Fri Feb  8 17:01:18 2013
@@ -18,7 +18,7 @@
  */
 package org.apache.syncope.console.pages;
 
-import org.apache.syncope.client.to.UserTO;
+import org.apache.syncope.common.to.UserTO;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@@ -32,6 +32,7 @@ public class ViewUserModalPage extends E
     public ViewUserModalPage(final PageReference callerPageRef, final 
ModalWindow window, final UserTO userTO) {
         super(callerPageRef, window, userTO);
         form.setEnabled(false);
+        form.get("cancel").setVisible(false);
     }
 
     @Override

Modified: 
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage.html
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage.html?rev=1444147&r1=1444146&r2=1444147&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage.html
 (original)
+++ 
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage.html
 Fri Feb  8 17:01:18 2013
@@ -20,42 +20,31 @@ under the License.
   <p class="ui-widget ui-corner-all ui-widget-header"><wicket:message 
key="title"/></p>
 <div style="margin:10px">
   <form wicket:id="form">
-    <div id="tabs">
-      <ul>
-        <li class="tabs-selected">
-          <a href="#tabs-1"><span><wicket:message key="tab1"/></span></a>
-        </li>
-      </ul>
-      <div id="tabs-1">
-        <div id="formtable">
-          <div class="tablerow" wicket:id="propView">
-            <div class="tablecolumn_label medium_dynamicsize">
-              <span wicket:id="key">[key]</span>
-            </div>
-            <div class="tablecolumn_field medium_dynamicsize">
-              <span wicket:id="value">[value]</span>
-
-            </div>
-          </div>
-
-          <!-- inside the container in order to re-process javascript -->
-          <script type="text/javascript">
-            $(function() {
-              $('#formtable div.tablerow:even').addClass("alt");
-            });
-          </script>
+    <div id="formtable">
+      <div class="tablerow" wicket:id="propView">
+        <div class="tablecolumn_label medium_dynamicsize">
+          <span wicket:id="key">[key]</span>
         </div>
+        <div class="tablecolumn_field medium_dynamicsize">
+          <span wicket:id="value">[value]</span>
 
-        <div style="margin: 20px 10px 0">
-          <input type="submit"
-                 class="ui-button ui-widget ui-state-default ui-corner-all 
ui-button-text-only"
-                 wicket:id="apply"/>
-          <input type="button"
-                 accept=""class="ui-button ui-widget ui-state-default 
ui-corner-all ui-button-text-only"
-                 wicket:id="cancel"/>
         </div>
       </div>
     </div>
+
+    <div style="margin: 20px 0">
+      <input type="button"
+             class="ui-button ui-widget ui-state-default ui-corner-all 
ui-button-text-only"
+             wicket:id="userDetails"/>
+      <input type="submit"
+             class="ui-button ui-widget ui-state-default ui-corner-all 
ui-button-text-only"
+             wicket:id="apply"/>
+      <input type="button"
+             accept=""class="ui-button ui-widget ui-state-default 
ui-corner-all ui-button-text-only"
+             wicket:id="cancel"/>
+    </div>
+
   </form>
+  <div wicket:id="editUserWin">[Show modal window for editing user under 
approval]</div>
 </div>
 </wicket:extend>

Modified: 
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage.properties
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage.properties?rev=1444147&r1=1444146&r2=1444147&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage.properties
 (original)
+++ 
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage.properties
 Fri Feb  8 17:01:18 2013
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-tab1=Approval form
-title=Workflow
+title=Approval form
+userDetails=User details

Modified: 
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage_it.properties
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage_it.properties?rev=1444147&r1=1444146&r2=1444147&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage_it.properties
 (original)
+++ 
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/ApprovalModalPage_it.properties
 Fri Feb  8 17:01:18 2013
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-tab1=Form di approvazione
-title=Workflow
+title=Form di approvazione
+userDetails=Dettagli utente

Modified: 
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.html
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.html?rev=1444147&r1=1444146&r2=1444147&view=diff
==============================================================================
--- 
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.html
 (original)
+++ 
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.html
 Fri Feb  8 17:01:18 2013
@@ -17,49 +17,47 @@ specific language governing permissions 
 under the License.
 -->
 <wicket:extend>
+  <div id="tabs">
+    <ul>
+      <li class="tabs-selected"><a href="#tabs-1"><span><wicket:message 
key="approvals"/></span></a></li>
+      <li><a href="#tabs-2"><span><wicket:message 
key="userRequests"/></span></a></li>
+    </ul>
+    <div id="tabs-1">
+
+      <div id="users-contain" class="ui-widget" style="width:inherit;">
+        <span wicket:id="approvalContainer">
+          <table class="ui-widget ui-widget-content table-hover"
+                 wicket:id="approvalTable"/>
+        </span>
+        <span style="float:right">
+          <form wicket:id="approvalPaginatorForm" style="display:inline">
+            <label><wicket:message key="displayRows"/></label>
+            <select class="text ui-widget-content ui-corner-all"
+                    wicket:id="rowsChooser"/>
+          </form>
+        </span>
+      </div>
 
+      <div wicket:id="editApprovalWin">[Show modal window for editing 
approval]</div>
+    </div>
 
-    <div id="tabs">
-        <ul>
-            <li class="tabs-selected"><a href="#tabs-1"><span><wicket:message 
key="approvals"/></span></a></li>
-            <li><a href="#tabs-2"><span><wicket:message 
key="userRequests"/></span></a></li>
-        </ul>
-        <div id="tabs-1">
-
-            <div id="users-contain" class="ui-widget" style="width:inherit;">
-                <span wicket:id="approvalContainer">
-                    <table class="ui-widget ui-widget-content table-hover"
-                           wicket:id="approvalTable"/>
-                </span>
-                <span style="float:right">
-                    <form wicket:id="approvalPaginatorForm" 
style="display:inline">
-                        <label><wicket:message key="displayRows"/></label>
-                        <select class="text ui-widget-content ui-corner-all"
-                                wicket:id="rowsChooser"/>
-                    </form>
-                </span>
-            </div>
-
-            <div wicket:id="editApprovalWin">[Show modal window for editing 
approval]</div>
-        </div>
-
-        <div id="tabs-2">
+    <div id="tabs-2">
 
-            <div id="users-contain" class="ui-widget">
-                <span wicket:id="userRequestContainer">
-                    <table class="ui-widget ui-widget-content table-hover"
-                           wicket:id="userRequestTable"/>
-                </span>
-                <span style="float:right">
-                    <form wicket:id="userRequestPaginatorForm" 
style="display:inline">
-                        <label><wicket:message key="displayRows"/></label>
-                        <select class="text ui-widget-content ui-corner-all"
-                                wicket:id="rowsChooser"/>
-                    </form>
-                </span>
-            </div>
+      <div id="users-contain" class="ui-widget">
+        <span wicket:id="userRequestContainer">
+          <table class="ui-widget ui-widget-content table-hover"
+                 wicket:id="userRequestTable"/>
+        </span>
+        <span style="float:right">
+          <form wicket:id="userRequestPaginatorForm" style="display:inline">
+            <label><wicket:message key="displayRows"/></label>
+            <select class="text ui-widget-content ui-corner-all"
+                    wicket:id="rowsChooser"/>
+          </form>
+        </span>
+      </div>
 
-            <div wicket:id="editUserRequestWin">[Show modal window for editing 
user request]</div>
-        </div>
+      <div wicket:id="editUserRequestWin">[Show modal window for editing user 
request]</div>
     </div>
+  </div>
 </wicket:extend>

Modified: syncope/trunk/console/src/main/webapp/css/style.css
URL: 
http://svn.apache.org/viewvc/syncope/trunk/console/src/main/webapp/css/style.css?rev=1444147&r1=1444146&r2=1444147&view=diff
==============================================================================
--- syncope/trunk/console/src/main/webapp/css/style.css (original)
+++ syncope/trunk/console/src/main/webapp/css/style.css Fri Feb  8 17:01:18 2013
@@ -448,4 +448,8 @@ td.action{
 .help a:hover {
   color: blue;
   text-decoration: none;
+}
+
+.tree-junction-expanded {
+  display: none;
 }
\ No newline at end of file

Modified: 
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserDAOImpl.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserDAOImpl.java?rev=1444147&r1=1444146&r2=1444147&view=diff
==============================================================================
--- 
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserDAOImpl.java
 (original)
+++ 
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserDAOImpl.java
 Fri Feb  8 17:01:18 2013
@@ -89,7 +89,14 @@ public class UserDAOImpl extends Abstrac
                 + " e " + "WHERE e.workflowId = :workflowId", 
SyncopeUser.class);
         query.setParameter("workflowId", workflowId);
 
-        return query.getSingleResult();
+        SyncopeUser result = null;
+        try {
+            result = query.getSingleResult();
+        } catch (NoResultException e) {
+            LOG.error("No user found with workflow id {}", workflowId, e);
+        }
+
+        return result;
     }
 
     @Override

Modified: 
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java?rev=1444147&r1=1444146&r2=1444147&view=diff
==============================================================================
--- 
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java
 (original)
+++ 
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/ActivitiUserWorkflowAdapter.java
 Fri Feb  8 17:01:18 2013
@@ -234,8 +234,7 @@ public class ActivitiUserWorkflowAdapter
             propagateEnable = enabled;
         }
 
-        // save resources to be propagated and password for later -
-        // after form submission - propagation
+        // save resources to be propagated and password for later - after form 
submission - propagation
         PropagationByResource propByRes = new PropagationByResource();
         propByRes.set(ResourceOperation.CREATE, user.getResourceNames());
 
@@ -505,14 +504,20 @@ public class ActivitiUserWorkflowAdapter
     @SuppressWarnings("unchecked")
     private WorkflowFormTO getFormTO(final Task task, final TaskFormData 
formData) {
         WorkflowFormTO formTO = new WorkflowFormTO();
+
+        SyncopeUser user = 
userDAO.findByWorkflowId(task.getProcessInstanceId());
+        if (user == null) {
+            throw new NotFoundException("User with workflow id " + 
task.getProcessInstanceId());
+        }
+        formTO.setUserId(user.getId());
+
         formTO.setTaskId(task.getId());
         formTO.setKey(formData.getFormKey());
 
         BeanUtils.copyProperties(task, formTO);
 
-        WorkflowFormPropertyTO propertyTO;
         for (FormProperty fProp : formData.getFormProperties()) {
-            propertyTO = new WorkflowFormPropertyTO();
+            WorkflowFormPropertyTO propertyTO = new WorkflowFormPropertyTO();
             BeanUtils.copyProperties(fProp, propertyTO, PROPERTY_IGNORE_PROPS);
             propertyTO.setType(fromActivitiFormType(fProp.getType()));
 
@@ -533,17 +538,14 @@ public class ActivitiUserWorkflowAdapter
     public List<WorkflowFormTO> getForms() {
         List<WorkflowFormTO> forms = new ArrayList<WorkflowFormTO>();
 
-        TaskFormData formData;
         for (Task task : 
taskService.createTaskQuery().taskVariableValueEquals(TASK_IS_FORM, 
Boolean.TRUE).list()) {
             try {
-                formData = formService.getTaskFormData(task.getId());
+                TaskFormData formData = 
formService.getTaskFormData(task.getId());
+                if (formData != null && 
!formData.getFormProperties().isEmpty()) {
+                    forms.add(getFormTO(task, formData));
+                }
             } catch (ActivitiException e) {
                 LOG.debug("No form found for task {}", task.getId(), e);
-                formData = null;
-            }
-
-            if (formData != null && !formData.getFormProperties().isEmpty()) {
-                forms.add(getFormTO(task, formData));
             }
         }
 

Modified: 
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/task/Update.java
URL: 
http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/task/Update.java?rev=1444147&r1=1444146&r2=1444147&view=diff
==============================================================================
--- 
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/task/Update.java
 (original)
+++ 
syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/task/Update.java
 Fri Feb  8 17:01:18 2013
@@ -28,7 +28,6 @@ public class Update extends AbstractActi
 
     @Override
     protected void doExecute(final DelegateExecution execution) throws 
Exception {
-
         SyncopeUser user = (SyncopeUser) 
execution.getVariable(ActivitiUserWorkflowAdapter.SYNCOPE_USER);
         UserMod userMod = (UserMod) 
execution.getVariable(ActivitiUserWorkflowAdapter.USER_MOD);
 

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=1444147&r1=1444146&r2=1444147&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 Feb  8 17:01:18 2013
@@ -558,6 +558,8 @@ public class UserTestITCase extends Abst
         WorkflowFormTO form = userService.getFormForUser(userTO.getId());
 
         assertNotNull(form);
+        assertNotNull(form.getUserId());
+        assertEquals(userTO.getId(), form.getUserId());
         assertNotNull(form.getTaskId());
         assertNull(form.getOwner());
 


Reply via email to