Kanagaraj M has uploaded a new change for review.

Change subject: engine: RunMultipleAction - supporting Run Only If All CanDo 
Pass
......................................................................

engine: RunMultipleAction - supporting Run Only If All CanDo Pass

A new boolean parameter is added to MultipleActionsRunner to
support run the actions only if CanDo of all commands are passed.

The new field isRunOnlyIfAllCanDoPass will be false by default
so the RunMultipleAction behaves as it was previously.

Change-Id: If8f249484a451be44d3286c865806c5f8364f74a
Signed-off-by: Kanagaraj M <kmayi...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunner.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainsMultipleActionRunner.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/BackendLocal.java
M 
frontend/api/genericapi/src/main/java/org/ovirt/engine/ui/genericapi/GenericApiService.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java
8 files changed, 57 insertions(+), 19 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/87/7287/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
index a167cc2..9d618f9 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
@@ -410,20 +410,21 @@
 
     @Override
     public ArrayList<VdcReturnValueBase> RunMultipleActions(VdcActionType 
actionType,
-            ArrayList<VdcActionParametersBase> parameters) {
-        return runMultipleActionsImpl(actionType, parameters, false);
+            ArrayList<VdcActionParametersBase> parameters, boolean 
isRunOnlyIfAllCanDoPass) {
+        return runMultipleActionsImpl(actionType, parameters, false, 
isRunOnlyIfAllCanDoPass);
     }
 
     @Override
     @ExcludeClassInterceptors
     public ArrayList<VdcReturnValueBase> 
runInternalMultipleActions(VdcActionType actionType,
             ArrayList<VdcActionParametersBase> parameters) {
-        return runMultipleActionsImpl(actionType, parameters, true);
+        return runMultipleActionsImpl(actionType, parameters, true, false);
     }
 
     public ArrayList<VdcReturnValueBase> runMultipleActionsImpl(VdcActionType 
actionType,
             ArrayList<VdcActionParametersBase> parameters,
             boolean isInternal,
+            boolean isRunOnlyIfAllCanDoPass,
             ExecutionContext executionContext) {
         String sessionId = ThreadLocalParamsContainer.getHttpSessionId();
         if (!StringUtils.isEmpty(sessionId)) {
@@ -436,6 +437,7 @@
         MultipleActionsRunner runner = 
MultipleActionsRunnersFactory.CreateMultipleActionsRunner(actionType,
                 parameters, isInternal);
         runner.setExecutionContext(executionContext);
+        runner.setIsRunOnlyIfAllCanDoPass(isRunOnlyIfAllCanDoPass);
         return runner.Execute();
     }
 
@@ -444,13 +446,14 @@
     public ArrayList<VdcReturnValueBase> 
runInternalMultipleActions(VdcActionType actionType,
             ArrayList<VdcActionParametersBase> parameters,
             ExecutionContext executionContext) {
-        return runMultipleActionsImpl(actionType, parameters, true, 
executionContext);
+        return runMultipleActionsImpl(actionType, parameters, true, false, 
executionContext);
     }
 
     private ArrayList<VdcReturnValueBase> runMultipleActionsImpl(VdcActionType 
actionType,
             ArrayList<VdcActionParametersBase> parameters,
-            boolean isInternal) {
-        return runMultipleActionsImpl(actionType, parameters, isInternal, 
null);
+            boolean isInternal,
+            boolean isRunOnlyIfAllCanDoPass) {
+        return runMultipleActionsImpl(actionType, parameters, isInternal, 
isRunOnlyIfAllCanDoPass, null);
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunner.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunner.java
index 840a70a..7c9eb02 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunner.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunner.java
@@ -31,6 +31,11 @@
     protected boolean isInternal;
 
     /**
+     * Execute the actions only if CanDo of all the requests returns true
+     */
+    protected boolean isRunOnlyIfAllCanDoPass = false;
+
+    /**
      * The context by which each command should be executed (monitored or 
non-monitored).
      */
     private ExecutionContext executionContext;
@@ -78,12 +83,27 @@
             } else {
                 CheckCanDoActionsAsyncroniousely(returnValues);
             }
-            ThreadPoolUtil.execute(new Runnable() {
-                @Override
-                public void run() {
-                    RunCommands();
+
+            boolean canRunActions = true;
+            if (isRunOnlyIfAllCanDoPass)
+            {
+                for (VdcReturnValueBase value : returnValues) {
+                    if (!value.getCanDoAction()) {
+                        canRunActions = false;
+                        break;
+                    }
                 }
-            });
+            }
+
+            if (canRunActions)
+            {
+                ThreadPoolUtil.execute(new Runnable() {
+                    @Override
+                    public void run() {
+                        RunCommands();
+                    }
+                });
+            }
         } catch (RuntimeException e) {
             log.error("Failed to execute multiple actions of type: " + 
_actionType, e);
         }
@@ -187,4 +207,8 @@
         this.executionContext = executionContext;
     }
 
+    public void setIsRunOnlyIfAllCanDoPass(boolean isRunOnlyIfAllCanDoPass) {
+        this.isRunOnlyIfAllCanDoPass = isRunOnlyIfAllCanDoPass;
+    }
+
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainsMultipleActionRunner.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainsMultipleActionRunner.java
index c9a4733..843a39c 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainsMultipleActionRunner.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainsMultipleActionRunner.java
@@ -41,7 +41,7 @@
                             parameters);
                 } else {
                     return 
Backend.getInstance().RunMultipleActions(VdcActionType.AddStoragePoolWithStorages,
-                            parameters);
+                            parameters, false);
                 }
             } else {
                 return super.Execute();
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/BackendLocal.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/BackendLocal.java
index 8c32983..4a69b0f 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/BackendLocal.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/BackendLocal.java
@@ -23,7 +23,8 @@
     ErrorTranslator getVdsErrorsTranslator();
 
     java.util.ArrayList<VdcReturnValueBase> RunMultipleActions(VdcActionType 
actionType,
-            java.util.ArrayList<VdcActionParametersBase> parameters);
+            java.util.ArrayList<VdcActionParametersBase> parameters,
+            boolean isRunOnlyIfAllCanDoPass);
 
     void Initialize();
 
diff --git 
a/frontend/api/genericapi/src/main/java/org/ovirt/engine/ui/genericapi/GenericApiService.java
 
b/frontend/api/genericapi/src/main/java/org/ovirt/engine/ui/genericapi/GenericApiService.java
index 573cbee..ebbab22 100644
--- 
a/frontend/api/genericapi/src/main/java/org/ovirt/engine/ui/genericapi/GenericApiService.java
+++ 
b/frontend/api/genericapi/src/main/java/org/ovirt/engine/ui/genericapi/GenericApiService.java
@@ -33,9 +33,9 @@
     }
 
     public ArrayList<VdcReturnValueBase> RunMultipleActions(VdcActionType 
actionType,
-            ArrayList<VdcActionParametersBase> parameters) {
+            ArrayList<VdcActionParametersBase> parameters, boolean 
isRunOnlyIfAllCanDoPass) {
         java.util.ArrayList<VdcReturnValueBase> returnValue = 
backend.RunMultipleActions(
-                actionType, parameters);
+                actionType, parameters, isRunOnlyIfAllCanDoPass);
         return returnValue;
     }
 
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 67aa2e2..5724388 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
@@ -493,9 +493,17 @@
             final ArrayList<VdcActionParametersBase> parameters,
             final IFrontendMultipleActionAsyncCallback callback,
             final Object state) {
+        RunMultipleAction(actionType, parameters, false, callback, state);
+    }
+
+    public static void RunMultipleAction(final VdcActionType actionType,
+            final ArrayList<VdcActionParametersBase> parameters,
+            boolean isRunOnlyIfAllCanDoPass,
+            final IFrontendMultipleActionAsyncCallback callback,
+            final Object state) {
         GenericApiGWTServiceAsync service = 
GenericApiGWTServiceAsync.Util.getInstance();
 
-        service.RunMultipleActions(actionType, parameters, new 
AsyncCallback<ArrayList<VdcReturnValueBase>>() {
+        service.RunMultipleActions(actionType, parameters, 
isRunOnlyIfAllCanDoPass, new AsyncCallback<ArrayList<VdcReturnValueBase>>() {
             @Override
             public void onFailure(Throwable caught) {
                 logger.log(Level.SEVERE, "Failed to execute RunAction: " + 
caught, caught); //$NON-NLS-1$
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java
index 8b988b8..8c84cbc 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java
@@ -29,7 +29,8 @@
 
     public ArrayList<VdcReturnValueBase> RunMultipleActions(
             VdcActionType actionType,
-            ArrayList<VdcActionParametersBase> multipleParams);
+            ArrayList<VdcActionParametersBase> multipleParams,
+            boolean isRunOnlyIfAllCanDoPass);
 
     public VdcUser getLoggedInUser();
 
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java
index 6beec91..50ce6eb 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java
@@ -92,14 +92,15 @@
 
     @Override
     public ArrayList<VdcReturnValueBase> RunMultipleActions(VdcActionType 
actionType,
-            ArrayList<VdcActionParametersBase> multipleParams) {
+            ArrayList<VdcActionParametersBase> multipleParams, boolean 
isRunOnlyIfAllCanDoPass) {
         log.debug("Server: RunMultipleAction invoked! [amount of actions: " + 
multipleParams.size() + "]"); //$NON-NLS-1$ //$NON-NLS-2$
 
         for (VdcActionParametersBase params : multipleParams) {
             params.setSessionId(getSessionId());
         }
 
-        ArrayList<VdcReturnValueBase> returnValues = 
getBackend().RunMultipleActions(actionType, multipleParams);
+        ArrayList<VdcReturnValueBase> returnValues =
+                getBackend().RunMultipleActions(actionType, multipleParams, 
isRunOnlyIfAllCanDoPass);
 
         return returnValues;
     }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If8f249484a451be44d3286c865806c5f8364f74a
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Kanagaraj M <kmayi...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to