Lior Vernia has uploaded a new change for review.

Change subject: webadmin: Aggregate error messages in 
Frontend.runMultipleActions()
......................................................................

webadmin: Aggregate error messages in Frontend.runMultipleActions()

Added the ability to aggregate error messages when invoking
Frontend.runMultipleActions(). This is useful for cases where batch
operations need to be run serially, and even though one failure
shouldn't prevent the subsequent operations from executing, errors
still need to be aggregated to be shown in one error dialog.

Change-Id: I0236b7d9316dff3d9bd22f2127318eefc37bbda1
Bug-Url: https://bugzilla.redhat.com/1039096
Bug-Url: https://bugzilla.redhat.com/1048752
Signed-off-by: Lior Vernia <[email protected]>
---
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java
1 file changed, 48 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/37/25837/1

diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java
index dceea50..e0ae692 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java
@@ -699,6 +699,19 @@
     }
 
     /**
+     * Overloaded method for
+     * {@link #runMultipleActions(List, List, List, 
IFrontendActionAsyncCallback, Object, boolean, List)} without error
+     * message aggregation.
+     */
+    public void runMultipleActions(final List<VdcActionType> actionTypes,
+            final List<VdcActionParametersBase> parameters,
+            final List<IFrontendActionAsyncCallback> callbacks,
+            final IFrontendActionAsyncCallback failureCallback,
+            final Object state) {
+        runMultipleActions(actionTypes, parameters, callbacks, 
failureCallback, state, false, null);
+    }
+
+    /**
      * This method allows us to run a transaction like set of actions. If one
      * fails the rest do not get executed.
      * @param actionTypes The list of actions to execute.
@@ -706,13 +719,34 @@
      * @param callbacks The list of callbacks, the number must match the 
number of actions.
      * @param failureCallback The callback to call in case of failure.
      * @param state The state.
+     * @param aggregateErrors Whether error messages should be aggregated.
      */
     public void runMultipleActions(final List<VdcActionType> actionTypes,
             final List<VdcActionParametersBase> parameters,
             final List<IFrontendActionAsyncCallback> callbacks,
             final IFrontendActionAsyncCallback failureCallback,
-            final Object state) {
+            final Object state,
+            boolean aggregateErrors) {
+        runMultipleActions(actionTypes,
+                parameters,
+                callbacks,
+                failureCallback,
+                state,
+                aggregateErrors,
+                aggregateErrors ? new ArrayList<String>() : null);
+    }
+
+    private void runMultipleActions(final List<VdcActionType> actionTypes,
+            final List<VdcActionParametersBase> parameters,
+            final List<IFrontendActionAsyncCallback> callbacks,
+            final IFrontendActionAsyncCallback failureCallback,
+            final Object state,
+            final boolean aggregateErrors,
+            final List<String> errorMessages) {
         if (actionTypes.isEmpty() || parameters.isEmpty() || 
callbacks.isEmpty()) {
+            if (aggregateErrors && errorMessages != null && 
!errorMessages.isEmpty()) {
+                failureEventHandler(null, errorMessages);
+            }
             return;
         }
 
@@ -730,12 +764,21 @@
                         actionTypes.remove(0);
                         parameters.remove(0);
                         callbacks.remove(0);
-                        runMultipleActions(actionTypes, parameters, callbacks, 
failureCallback, state);
+                        if (aggregateErrors && returnValue != null && 
!returnValue.getSucceeded()) {
+                            
errorMessages.addAll(returnValue.getCanDoActionMessages());
+                        }
+                        runMultipleActions(actionTypes,
+                                parameters,
+                                callbacks,
+                                failureCallback,
+                                state,
+                                aggregateErrors,
+                                errorMessages);
                     } else {
                         failureCallback.executed(result);
                     }
                 }
-            }, state, true);
+            }, state, !aggregateErrors);
     }
 
     /**
@@ -924,7 +967,7 @@
             callback.executed(f);
         }
 
-        if ((!success) && (getEventsHandler() != null)
+        if (showErrorDialog && (!success) && (getEventsHandler() != null)
                 && (getEventsHandler().isRaiseErrorModalPanel(actionType, 
result.getFault()))) {
             if (result.getCanDoActionMessages().size() <= 1) {
                 String errorMessage = !result.getCanDoAction() || 
!result.getCanDoActionMessages().isEmpty()
@@ -1228,7 +1271,7 @@
      * @param description A description of the failure (nullable)
      * @param errorMessages A list of error messages.
      */
-    private void failureEventHandler(final String description, final 
ArrayList<String> errorMessages) {
+    private void failureEventHandler(final String description, final 
List<String> errorMessages) {
         ArrayList<Message> messages = new ArrayList<Message>();
         for (String errorMessage : errorMessages) {
             messages.add(new Message(description, errorMessage));


-- 
To view, visit http://gerrit.ovirt.org/25837
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0236b7d9316dff3d9bd22f2127318eefc37bbda1
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Lior Vernia <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to