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
