package org.ovirt.engine.core.bll.storage.connection.iscsibond;
import java.util.List;
import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.validator.IscsiBondValidator;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.action.AddIscsiBondParameters;
import org.ovirt.engine.core.common.businessentities.IscsiBond;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.common.validation.group.CreateEntity;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.utils.transaction.TransactionSupport;
@NonTransactiveCommandAttribute
public class AddIscsiBondCommand<T extends AddIscsiBondParameters> extends BaseIscsiBondCommand<T> {
public AddIscsiBondCommand(T parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
public AddIscsiBondCommand(Guid commandId) {
super(commandId);
}
@Override
protected boolean validate() {
IscsiBondValidator validator = new IscsiBondValidator();
return validate(validator.iscsiBondWithTheSameNameExistInDataCenter(getIscsiBond())) &&
validate(validator.validateAddedLogicalNetworks(getIscsiBond())) &&
validate(validator.validateAddedStorageConnections(getIscsiBond()));
}
@Override
protected void executeCommand() {
final IscsiBond iscsiBond = getIscsiBond();
iscsiBond.setId(Guid.newGuid());
TransactionSupport.executeInNewTransaction(() -> {
iscsiBondDao.save(iscsiBond);
for (Guid networkId : iscsiBond.getNetworkIds()) {
iscsiBondDao.addNetworkToIscsiBond(iscsiBond.getId(), networkId);
}
for (String connectionId : iscsiBond.getStorageConnectionIds()) {
iscsiBondDao.addStorageConnectionToIscsiBond(iscsiBond.getId(), connectionId);
}
getReturnValue().setActionReturnValue(iscsiBond.getId());
return null;
});
connectAllHostsToStorage(iscsiBond.getStorageConnectionIds());
setSucceeded(true);
}
@Override
protected List<Class<?>> getValidationGroups() {
addValidationGroup(CreateEntity.class);
return super.getValidationGroups();
}
@Override
public AuditLogType getAuditLogTypeValue() {
if (getSucceeded()) {
if (encounterConnectionProblems) {
return AuditLogType.ISCSI_BOND_ADD_SUCCESS_WITH_WARNING;
}
return AuditLogType.ISCSI_BOND_ADD_SUCCESS;
}
return AuditLogType.ISCSI_BOND_ADD_FAILED;
}
@Override
protected void setActionMessageParameters() {
addValidationMessage(EngineMessage.VAR__ACTION__ADD);
addValidationMessage(EngineMessage.VAR__TYPE__ISCSI_BOND);
}
@Override
protected IscsiBond getIscsiBond() {
return getParameters().getIscsiBond();
}
@Override
public Guid getStoragePoolId() {
return getIscsiBond().getStoragePoolId();
}
}