package org.ovirt.engine.core.bll.storage; import java.util.List; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.AddNetworkStoragePoolParameters; import org.ovirt.engine.core.common.businessentities.network; import org.ovirt.engine.core.common.validation.group.CreateEntity; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.VdcBllMessages; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.utils.linq.LinqUtils; import org.ovirt.engine.core.utils.linq.Predicate; public class AddNetworkCommand<T extends AddNetworkStoragePoolParameters> extends NetworkCommon<T> { public AddNetworkCommand(T parameters) { super(parameters); } @Override protected void executeCommand() { getParameters().getNetwork().setId(Guid.NewGuid()); DbFacade.getInstance().getNetworkDAO().save(getParameters().getNetwork()); getReturnValue().setActionReturnValue(getParameters().getNetwork().getId()); setSucceeded(true); } @Override protected boolean canDoAction() { addCanDoActionMessage(VdcBllMessages.VAR__ACTION__ADD); addCanDoActionMessage(VdcBllMessages.VAR__TYPE__NETWORK); // check that network name not start with 'bond' if (getParameters().getNetwork().getname().toLowerCase().startsWith("bond")) { addCanDoActionMessage(VdcBllMessages.NETWORK_CANNOT_CONTAIN_BOND_NAME); return false; } // we return ok only if the network not exists List<network> all; if (getParameters().getNetwork().getstorage_pool_id() != null && !getParameters().getNetwork().getstorage_pool_id().getValue().equals(Guid.Empty)) { all = DbFacade.getInstance().getNetworkDAO().getAllForDataCenter( getParameters().getNetwork().getstorage_pool_id().getValue()); } else { all = DbFacade.getInstance().getNetworkDAO().getAll(); } // boolean exists = false; //LINQ (all.FirstOrDefault(net => net.name == // AddNetworkParameters.Network.name) != null); boolean exists = null != LinqUtils.firstOrNull(all, new Predicate<network>() { @Override public boolean eval(network net) { return net.getname().equals(getParameters().getNetwork().getname()); } }); if (exists) { getReturnValue().getCanDoActionMessages() .add(VdcBllMessages.NETWORK_NETWORK_NAME_ALREADY_EXISTS.toString()); return false; } if (getParameters().getNetwork().getvlan_id() != null) { if (!IsVlanInRange(getParameters().getNetwork().getvlan_id())) { addCanDoActionMessage(VdcBllMessages.NETWORK_NETWORK_VLAN_OUT_OF_RANGE); return false; } // else if (false) //LINQ all.FirstOrDefault(n => n.vlan_id == // AddNetworkParameters.Network.vlan_id.Value && n.storage_pool_id // == AddNetworkParameters.Network.storage_pool_id) != null) else if (null != LinqUtils.firstOrNull(all, new Predicate<network>() { @Override public boolean eval(network n) { if (n.getvlan_id() != null) { return n.getvlan_id().equals(getParameters().getNetwork().getvlan_id()) && n.getstorage_pool_id().equals(getParameters().getNetwork().getstorage_pool_id()); } return false; } })) { addCanDoActionMessage(VdcBllMessages.NETWORK_NETWORK_VLAN_IN_USE); return false; } } return true; } public static boolean IsVlanInRange(int vlanId) { return (vlanId >= 0 && vlanId <= 4095); } @Override public AuditLogType getAuditLogTypeValue() { return getSucceeded() ? AuditLogType.NETWORK_ADD_NETWORK : AuditLogType.NETWORK_ADD_NETWORK_FAILED; } @Override protected List<Class<?>> getValidationGroups() { addValidationGroup(CreateEntity.class); return super.getValidationGroups(); } }