package org.ovirt.engine.core.bll.network.host;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.ovirt.engine.core.bll.ValidationResult;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VDSStatus;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.utils.ReplacementUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HostValidator {
private static final Logger logger = LoggerFactory.getLogger(HostValidator.class);
private static final List<VDSStatus> LEGAL_STATUSES =
Arrays.asList(VDSStatus.Maintenance, VDSStatus.Up, VDSStatus.NonOperational);
private static final String LEGAL_STATUSES_STR =
LEGAL_STATUSES.stream().map(VDSStatus::name).collect(Collectors.joining(", "));
public static final String VAR_HOST_STATUS = "hostStatus";
private final VDS host;
private final boolean internalExecution;
public HostValidator(VDS host, boolean internalExecution) {
this.host = host;
this.internalExecution = internalExecution;
}
private ValidationResult hostExist() {
if (host == null) {
return new ValidationResult(EngineMessage.ACTION_TYPE_FAILED_HOST_NOT_EXIST);
}
return ValidationResult.VALID;
}
private ValidationResult hostStatusLegalForSetupNetworks() {
VDSStatus hostStatus = host.getStatus();
boolean hostStatusLegalForSetupNetworks = LEGAL_STATUSES.contains(hostStatus)
|| hostStatus == VDSStatus.Installing && internalExecution;
if (!hostStatusLegalForSetupNetworks) {
logger.error(
"Unable to setup network: operation can only be done when Host status is one of: {};" +
" current status is {}",
LEGAL_STATUSES_STR,
hostStatus);
return new ValidationResult(EngineMessage.ACTION_TYPE_FAILED_VDS_STATUS_ILLEGAL,
ReplacementUtils.replaceWith(VAR_HOST_STATUS, LEGAL_STATUSES, ",", LEGAL_STATUSES.size()));
}
return ValidationResult.VALID;
}
public ValidationResult validate() {
ValidationResult vr = ValidationResult.VALID;
vr = skipValidation(vr) ? vr : hostExist();
vr = skipValidation(vr) ? vr : hostStatusLegalForSetupNetworks();
return vr;
}
private boolean skipValidation(ValidationResult validationResult) {
return !validationResult.isValid();
}
}