package org.ovirt.engine.core.bll.network.host;
import javax.inject.Inject;
import org.apache.commons.lang.StringUtils;
import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
import org.ovirt.engine.core.bll.VdsCommand;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.action.PersistentHostSetupNetworksParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VdcReturnValueBase;
import org.ovirt.engine.core.common.action.VdsActionParameters;
import org.ovirt.engine.core.common.businessentities.VdsDynamic;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.dao.VdsDynamicDao;
@NonTransactiveCommandAttribute
public class PersistentHostSetupNetworksCommand<T extends PersistentHostSetupNetworksParameters> extends VdsCommand<T> {
@Inject
private VdsDynamicDao vdsDynamicDao;
public PersistentHostSetupNetworksCommand(T parameters, CommandContext commandContext) {
super(parameters, commandContext);
setVdsId(parameters.getVdsId());
}
public int getSequence() {
return getParameters().getSequence();
}
public int getTotal() {
return getParameters().getTotal();
}
public String getNetworkNames() {
return getParameters().getNetworkNames();
}
@Override
protected void setActionMessageParameters() {
addValidationMessage(EngineMessage.VAR__ACTION__SETUP);
addValidationMessage(EngineMessage.VAR__TYPE__NETWORKS);
}
@Override
protected void executeCommand() {
if (getParameters().getShouldBeLogged()) {
auditLogDirector.log(this, AuditLogType.PERSIST_HOST_SETUP_NETWORK_ON_HOST);
}
VdcReturnValueBase returnValue =
runInternalAction(VdcActionType.HostSetupNetworks, getParameters(), cloneContextAndDetachFromParent());
if (returnValue.getSucceeded()) {
boolean changesDetected = checkForChanges();
if (changesDetected) {
VdsActionParameters parameters = new VdsActionParameters(getParameters().getVdsId());
parameters.setShouldBeLogged(false);
parameters.setCorrelationId(getCorrelationId());
returnValue = runInternalAction(VdcActionType.CommitNetworkChanges,
parameters, cloneContextAndDetachFromParent());
}
}
if (!returnValue.getSucceeded()) {
propagateFailure(returnValue);
}
setSucceeded(returnValue.getSucceeded());
}
private boolean checkForChanges() {
final VdsDynamic host = vdsDynamicDao.get(getVdsId());
final Boolean netConfigDirty = host.getNetConfigDirty();
return Boolean.TRUE.equals(netConfigDirty);
}
@Override
public AuditLogType getAuditLogTypeValue() {
if (StringUtils.isEmpty(getParameters().getNetworkNames())) {
return getSucceeded() ? AuditLogType.PERSIST_SETUP_NETWORK_ON_HOST_FINISHED
: AuditLogType.PERSIST_SETUP_NETWORK_ON_HOST_FAILED;
} else {
return getSucceeded() ? AuditLogType.PERSIST_NETWORK_ON_HOST_FINISHED
: AuditLogType.PERSIST_NETWORK_ON_HOST_FAILED;
}
}
}