package org.ovirt.engine.api.restapi.resource;
import java.util.List;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.Network;
import org.ovirt.engine.api.model.Networks;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.network;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public abstract class AbstractBackendNetworksResource extends AbstractBackendCollectionResource<Network, network>
{
protected VdcQueryType queryType;
protected VdcActionType addAction;
protected VdcActionType removeAction;
public AbstractBackendNetworksResource(VdcQueryType queryType, VdcActionType addAction, VdcActionType removeAction) {
super(Network.class, network.class);
this.queryType = queryType;
this.addAction = addAction;
this.removeAction = removeAction;
}
protected abstract VdcQueryParametersBase getQueryParameters();
protected abstract VdcActionParametersBase getActionParameters(Network network, network entity);
public Networks list() {
return mapCollection(getBackendCollection(queryType, getQueryParameters()));
}
public Response performRemove(String id) {
network entity = lookupNetwork(asGuidOr404(id));
if (entity == null) {
notFound();
return null;
}
return performAction(removeAction, getActionParameters(null, entity));
}
protected Networks mapCollection(List<network> entities) {
Networks collection = new Networks();
for (network entity : entities) {
collection.getNetworks().add(addLinks(map(entity)));
}
return collection;
}
public network lookupNetwork(Guid id) {
return lookupNetwork(id, null);
}
public network lookupNetwork(Guid id, String name) {
for (network entity : getBackendCollection(queryType, getQueryParameters())) {
if ((id != null && id.equals(entity.getId())) ||
(name != null && name.equals(entity.getname()))) {
return entity;
}
}
return null;
}
public network lookupNetwork(Guid id, String name, String dataCenterId) {
for (network entity : getBackendCollection(queryType, getQueryParameters())) {
if ((id != null && id.equals(entity.getId())) ||
(name != null && name.equals(entity.getname()))
&& (entity.getstorage_pool_id()!=null) && (entity.getstorage_pool_id().toString().equals(dataCenterId))) {
return entity;
}
}
return null;
}
public EntityIdResolver getNetworkIdResolver() {
return new NetworkIdResolver();
}
protected class NetworkIdResolver extends EntityIdResolver {
protected String name;
NetworkIdResolver() {}
NetworkIdResolver(String name) {
this.name = name;
}
@Override
public network lookupEntity(Guid id) throws BackendFailureException {
return lookupNetwork(id, name);
}
}
protected class DataCenterNetworkIdResolver extends NetworkIdResolver {
private String dataCenterId;
DataCenterNetworkIdResolver(String name, String dataCenterId) {
super(name);
this.dataCenterId = dataCenterId;
}
@Override
public network lookupEntity(Guid id) throws BackendFailureException {
return lookupNetwork(id, name, dataCenterId);
}
}
}