package org.ovirt.engine.core.common.validation;
import java.util.HashSet;
import java.util.Set;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.VM;
public class VmActionByVmOriginTypeValidator {
private static Set<VdcActionType> COMMANDS_ALLOWED_ON_EXTERNAL_VMS = new HashSet<>();
private static Set<VdcActionType> COMMANDS_ALLOWED_ON_HOSTED_ENGINE = new HashSet<>();
static {
COMMANDS_ALLOWED_ON_EXTERNAL_VMS.add(VdcActionType.MigrateVm);
COMMANDS_ALLOWED_ON_EXTERNAL_VMS.add(VdcActionType.MigrateVmToServer);
COMMANDS_ALLOWED_ON_EXTERNAL_VMS.add(VdcActionType.CancelMigrateVm);
COMMANDS_ALLOWED_ON_EXTERNAL_VMS.add(VdcActionType.SetVmTicket);
COMMANDS_ALLOWED_ON_EXTERNAL_VMS.add(VdcActionType.VmLogon);
COMMANDS_ALLOWED_ON_EXTERNAL_VMS.add(VdcActionType.StopVm);
COMMANDS_ALLOWED_ON_EXTERNAL_VMS.add(VdcActionType.ShutdownVm);
COMMANDS_ALLOWED_ON_EXTERNAL_VMS.add(VdcActionType.RemoveVm);
COMMANDS_ALLOWED_ON_EXTERNAL_VMS.add(VdcActionType.RebootVm);
COMMANDS_ALLOWED_ON_HOSTED_ENGINE.add(VdcActionType.MigrateVm);
COMMANDS_ALLOWED_ON_HOSTED_ENGINE.add(VdcActionType.MigrateVmToServer);
COMMANDS_ALLOWED_ON_HOSTED_ENGINE.add(VdcActionType.CancelMigrateVm);
COMMANDS_ALLOWED_ON_HOSTED_ENGINE.add(VdcActionType.SetVmTicket);
COMMANDS_ALLOWED_ON_HOSTED_ENGINE.add(VdcActionType.VmLogon);
COMMANDS_ALLOWED_ON_HOSTED_ENGINE.add(VdcActionType.UpdateVm);
COMMANDS_ALLOWED_ON_HOSTED_ENGINE.add(VdcActionType.RemoveVm);
/**
* Needed specifically to move the HE VM out of a cluster in order to increase its cluster
* compatibility version.
*/
COMMANDS_ALLOWED_ON_HOSTED_ENGINE.add(VdcActionType.ChangeVMCluster);
COMMANDS_ALLOWED_ON_HOSTED_ENGINE.add(VdcActionType.AddVmInterface);
COMMANDS_ALLOWED_ON_HOSTED_ENGINE.add(VdcActionType.RemoveVmInterface);
COMMANDS_ALLOWED_ON_HOSTED_ENGINE.add(VdcActionType.UpdateVmInterface);
COMMANDS_ALLOWED_ON_HOSTED_ENGINE.add(VdcActionType.ActivateDeactivateVmNic);
}
public static boolean isCommandAllowed(VM vm, VdcActionType actionType) {
return !( (vm.isHostedEngine() && !COMMANDS_ALLOWED_ON_HOSTED_ENGINE.contains(actionType)) ||
(vm.isExternalVm() && !COMMANDS_ALLOWED_ON_EXTERNAL_VMS.contains(actionType)) );
}
}