package org.ovirt.engine.core.bll; import java.util.List; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.RemoveVmInterfaceParameters; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmDynamic; import org.ovirt.engine.core.common.businessentities.VmInterfaceType; import org.ovirt.engine.core.common.businessentities.VmNetworkInterface; import org.ovirt.engine.core.dal.VdcBllMessages; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.CustomLogField; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.CustomLogFields; import org.ovirt.engine.core.utils.linq.LinqUtils; import org.ovirt.engine.core.utils.linq.Predicate; @CustomLogFields({ @CustomLogField("InterfaceName") }) public class RemoveVmInterfaceCommand<T extends RemoveVmInterfaceParameters> extends VmCommand<T> { private String _interfaceName = ""; public RemoveVmInterfaceCommand(T parameters) { super(parameters); } public String getInterfaceName() { return _interfaceName; } @Override protected void ExecuteVmCommand() { this.setVmName(DbFacade.getInstance().getVmStaticDAO().get(getParameters().getVmId()).getvm_name()); // return mac to pool List<VmNetworkInterface> interfaces = DbFacade.getInstance().getVmNetworkInterfaceDAO() .getAllForVm(getParameters().getVmId()); // LINQ 29456 // Interface iface = interfaces.FirstOrDefault(i => i.id == // RemoveVmInterfaceParameters.InterfaceId); VmNetworkInterface iface = LinqUtils.firstOrNull(interfaces, new Predicate<VmNetworkInterface>() { @Override public boolean eval(VmNetworkInterface i) { return i.getId().equals(getParameters().getInterfaceId()); } }); // LINQ 29456 if (iface != null) { MacPoolManager.getInstance().freeMac(iface.getMacAddress()); _interfaceName = iface.getName(); // Get Interface type. String interType = VmInterfaceType.forValue(iface.getType()).getInterfaceTranslation().toString(); if (interType != null) { AddCustomValue("InterfaceType", interType); } } // remove from db DbFacade.getInstance().getVmNetworkInterfaceDAO().remove(getParameters().getInterfaceId()); DbFacade.getInstance().getVmNetworkStatisticsDAO().remove(getParameters().getInterfaceId()); setSucceeded(true); } @Override protected boolean canDoAction() { VmDynamic vm = DbFacade.getInstance().getVmDynamicDAO().get(getParameters().getVmId()); if (vm.getstatus() != VMStatus.Down) { addCanDoActionMessage(VdcBllMessages.NETWORK_CANNOT_CHANGE_STATUS_WHEN_NOT_DOWN); return false; } return true; } @Override public AuditLogType getAuditLogTypeValue() { return getSucceeded() ? AuditLogType.NETWORK_REMOVE_VM_INTERFACE : AuditLogType.NETWORK_REMOVE_VM_INTERFACE_FAILED; } }