Arik Hadas has uploaded a new change for review.

Change subject: core: introduce CommandSwapper
......................................................................

core: introduce CommandSwapper

Change-Id: Ia667a98d5c924876c879a8c55ab4eb1b9405fcb3
Signed-off-by: Arik Hadas <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmSwapper.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandSwapper.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
3 files changed, 51 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/73/32573/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmSwapper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmSwapper.java
new file mode 100644
index 0000000..5b50c95
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmSwapper.java
@@ -0,0 +1,24 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.action.VmManagementParametersBase;
+
+public class AddVmSwapper implements CommandSwapper {
+
+    @Override
+    public VdcActionType swap(VdcActionParametersBase parameters) {
+        if (parameters instanceof VmManagementParametersBase) {
+            VmManagementParametersBase managementParams = 
(VmManagementParametersBase) parameters;
+
+            if 
(VmTemplateHandler.BLANK_VM_TEMPLATE_ID.equals(managementParams.getVmStaticData().getVmtGuid()))
 {
+                return VdcActionType.AddVmFromScratch;
+            }
+
+            // if thin provision -> VdcActionType.AddVmFromTemplate
+            // otherwise -> VdcActionType.AddVm
+        }
+
+        return VdcActionType.AddVm;
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandSwapper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandSwapper.java
new file mode 100644
index 0000000..33b7fd9
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandSwapper.java
@@ -0,0 +1,9 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
+import org.ovirt.engine.core.common.action.VdcActionType;
+
+public interface CommandSwapper {
+
+    VdcActionType swap(VdcActionParametersBase parameters);
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
index 4bbbf1e..fba86fa 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
@@ -4,6 +4,8 @@
 import java.lang.reflect.InvocationTargetException;
 import java.text.MessageFormat;
 import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
@@ -51,6 +53,12 @@
         "org.ovirt.engine.core.bll.profiles"
         };
 
+    private static final Map<VdcActionType, CommandSwapper> commandSwappers = 
new HashMap<>();
+
+    static {
+        commandSwappers.put(VdcActionType.AddVm, new AddVmSwapper());
+    }
+
     private static ConcurrentMap<String, Class<CommandBase<? extends 
VdcActionParametersBase>>> commandsCache =
             new ConcurrentHashMap<String, Class<CommandBase<? extends 
VdcActionParametersBase>>>(VdcActionType.values().length);
 
@@ -61,6 +69,7 @@
 
     public static <P extends VdcActionParametersBase> CommandBase<P> 
createCommand(VdcActionType action, P parameters, CommandContext 
commandContext) {
         try {
+            action = tryToSwap(action, parameters);
             CommandBase<P> result = instantiateCommand(action, parameters, 
commandContext);
 
             Injector.injectMembers(result);
@@ -76,6 +85,15 @@
         }
     }
 
+    private static VdcActionType tryToSwap(VdcActionType action, 
VdcActionParametersBase parameters) {
+        CommandSwapper delegator = commandSwappers.get(action);
+        if (delegator != null) {
+            action = delegator.swap(parameters);
+        }
+
+        return action;
+    }
+
     @SuppressWarnings("unchecked")
     private static <P extends VdcActionParametersBase> CommandBase<P> 
instantiateCommand(VdcActionType action, P parameters, CommandContext 
commandContext)
             throws InstantiationException, IllegalAccessException, 
IllegalArgumentException, InvocationTargetException {


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

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

Reply via email to