package org.ovirt.engine.core.bll.scheduling.commands;
import java.util.Collections;
import java.util.List;
import javax.inject.Inject;
import org.apache.commons.lang.StringUtils;
import org.ovirt.engine.core.bll.CommandBase;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.scheduling.SchedulingManager;
import org.ovirt.engine.core.bll.utils.PermissionSubject;
import org.ovirt.engine.core.common.VdcObjectType;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.common.scheduling.parameters.RemoveExternalPolicyUnitParameters;
import org.ovirt.engine.core.compat.Guid;
public class RemoveExternalPolicyUnitCommand extends CommandBase<RemoveExternalPolicyUnitParameters> {
public RemoveExternalPolicyUnitCommand(RemoveExternalPolicyUnitParameters parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
@Inject
private SchedulingManager schedulingManager;
@Override
protected boolean validate() {
if(!schedulingManager.getPolicyUnitsMap().containsKey(getPolicyUnitId())){
return failValidation(EngineMessage.ACTION_TYPE_FAILED_CLUSTER_POLICY_UNKNOWN_POLICY_UNIT);
}
List<String> clusterPoliciesNames =
schedulingManager.getClusterPoliciesNamesByPolicyUnitId(getPolicyUnitId());
if (clusterPoliciesNames != null && clusterPoliciesNames.size() > 0) {
return failValidation(EngineMessage.ACTION_TYPE_FAILED_CANNOT_REMOVE_POLICY_UNIT_ATTACHED_TO_CLUSTER_POLICY,
String.format("$cpNames %1$s", StringUtils.join(clusterPoliciesNames, ',')));
}
return true;
}
@Override
protected void executeCommand() {
schedulingManager.removeExternalPolicyUnit(getPolicyUnitId());
setSucceeded(true);
}
@Override
protected void setActionMessageParameters() {
addValidationMessage(EngineMessage.VAR__ACTION__REMOVE);
addValidationMessage(EngineMessage.VAR__TYPE__POLICY_UNIT);
}
@Override
public List<PermissionSubject> getPermissionCheckSubjects() {
return Collections.singletonList(new PermissionSubject(Guid.SYSTEM,
VdcObjectType.System,
getActionType().getActionGroup()));
}
private Guid getPolicyUnitId() {
return getParameters().getPolicyUnitId();
}
}