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.VDSGroup;
import org.ovirt.engine.core.common.businessentities.network;
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 RemoveNetworkCommand<T extends AddNetworkStoragePoolParameters> extends NetworkCommon<T> {
public RemoveNetworkCommand(T parameters) {
super(parameters);
}
@Override
protected void executeCommand() {
DbFacade.getInstance().getNetworkDAO().remove(getParameters().getNetwork().getId());
setSucceeded(true);
}
@Override
protected boolean canDoAction() {
addCanDoActionMessage(VdcBllMessages.VAR__ACTION__REMOVE);
addCanDoActionMessage(VdcBllMessages.VAR__TYPE__NETWORK);
boolean retVal = true;
if (retVal) {
retVal = CommonNetworkValidation(getParameters().getNetwork(), getReturnValue().getCanDoActionMessages());
}
return retVal;
}
public static boolean CommonNetworkValidation(final network network, java.util.ArrayList<String> canDoActionMessages) {
// check that network is not in use by cluster
if (network.getstorage_pool_id() != null) {
List<VDSGroup> groups = DbFacade.getInstance().getVdsGroupDAO().getAllForStoragePool(
network.getstorage_pool_id().getValue());
for (VDSGroup cluster : groups) {
List<network> networks = DbFacade.getInstance().getNetworkDAO()
.getAllForCluster(cluster.getID());
// if (false) //LINQ networks.FirstOrDefault(n => n.name ==
// network.name) != null)
if (null != LinqUtils.firstOrNull(networks, new Predicate<network>() {
@Override
public boolean eval(network n) {
return n.getname().equals(network.getname());
}
})) {
canDoActionMessages.add(VdcBllMessages.NETWORK_CLUSTER_NETWORK_IN_USE.toString());
return false;
}
}
}
return true;
}
@Override
public AuditLogType getAuditLogTypeValue() {
return getSucceeded() ? AuditLogType.NETWORK_REMOVE_NETWORK : AuditLogType.NETWORK_REMOVE_NETWORK_FAILED;
}
}