package org.ovirt.engine.core.bll.network.template;
import java.util.List;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.ValidationResult;
import org.ovirt.engine.core.bll.VmHandler;
import org.ovirt.engine.core.bll.VmTemplateCommand;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.network.vm.BackwardCompatibilityVnicHelper;
import org.ovirt.engine.core.common.action.AddVmTemplateInterfaceParameters;
import org.ovirt.engine.core.common.businessentities.VmEntityType;
import org.ovirt.engine.core.common.businessentities.network.VmInterfaceType;
import org.ovirt.engine.core.common.businessentities.network.VmNic;
import org.ovirt.engine.core.common.businessentities.storage.DiskVmElement;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.DiskVmElementDao;
public abstract class VmTemplateInterfaceCommandBase<T extends AddVmTemplateInterfaceParameters>
extends VmTemplateCommand<T> {
@Inject
private BackwardCompatibilityVnicHelper backwardCompatibilityVnicHelper;
@Inject
private DiskVmElementDao diskVmElementDao;
public VmTemplateInterfaceCommandBase(Guid commandId) {
super(commandId);
}
public VmTemplateInterfaceCommandBase(T parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
@Override
protected void setActionMessageParameters() {
addValidationMessage(EngineMessage.VAR__TYPE__INTERFACE);
}
public String getInterfaceName() {
return getParameters().getInterface().getName();
}
public String getInterfaceType() {
return VmInterfaceType.forValue(getParameters().getInterface().getType()).getDescription();
}
protected boolean interfaceNameUnique(List<VmNic> interfaces) {
return VmHandler.isNotDuplicateInterfaceName(interfaces,
getInterfaceName(),
getReturnValue().getValidationMessages());
}
protected ValidationResult linkedToTemplate() {
return getParameters().getInterface().getVmId() == null ? ValidationResult.VALID
: new ValidationResult(EngineMessage.NETWORK_INTERFACE_VM_CANNOT_BE_SET);
}
protected boolean updateVnicForBackwardCompatibility(VmNic oldNic) {
if (!validate(
backwardCompatibilityVnicHelper.updateNicForBackwardCompatibility(
getParameters().getInterface(),
oldNic,
getParameters().getNetworkName(),
getParameters().isPortMirroring(),
getVmTemplate(),
getCurrentUser()))) {
return false;
}
return true;
}
protected boolean updateVnicForBackwardCompatibility() {
return updateVnicForBackwardCompatibility(null);
}
@Override
protected boolean validate() {
if (!super.validate()) {
return false;
}
if (getCluster() == null && getVmTemplate().getTemplateType() != VmEntityType.INSTANCE_TYPE) {
addValidationMessage(EngineMessage.ACTION_TYPE_FAILED_CLUSTER_CAN_NOT_BE_EMPTY);
return false;
}
return true;
}
protected List<DiskVmElement> getTemplateDiskVmElements() {
return diskVmElementDao.getAllForVm(getVmTemplateId());
}
}