package org.ovirt.engine.api.restapi.resource;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.Network;
import org.ovirt.engine.api.model.Networks;
import org.ovirt.engine.api.resource.NetworkResource;
import org.ovirt.engine.api.resource.NetworksResource;
import org.ovirt.engine.core.common.action.AddNetworkStoragePoolParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.network;
import org.ovirt.engine.core.common.businessentities.storage_pool;
import org.ovirt.engine.core.common.interfaces.SearchType;
import org.ovirt.engine.core.common.queries.GetAllNetworkQueryParamenters;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public class BackendNetworksResource
extends AbstractBackendNetworksResource
implements NetworksResource {
public BackendNetworksResource() {
super(VdcQueryType.GetAllNetworks,
VdcActionType.AddNetwork,
VdcActionType.RemoveNetwork);
}
@Override
public Response add(Network network) {
validateParameters(network, getRequiredAddFields());
network entity = map(network);
AddNetworkStoragePoolParameters params = getActionParameters(network, entity);
return performCreation(addAction,
params,
new DataCenterNetworkIdResolver(network.getName(), params.getStoragePoolId().toString()));
}
@Override
public Networks list() {
Networks networks = mapCollection(getBackendCollection(queryType, getQueryParameters()));
for (Network network : networks.getNetworks()) {
network.setDisplay(null);
}
return networks;
}
@Override
protected VdcQueryParametersBase getQueryParameters() {
return new GetAllNetworkQueryParamenters(Guid.Empty);
}
@Override
protected AddNetworkStoragePoolParameters getActionParameters(Network network, network entity) {
if (namedDataCenter(network)) {
entity.setstorage_pool_id(getDataCenterId(network));
}
return new AddNetworkStoragePoolParameters(entity.getstorage_pool_id().getValue(), entity);
}
protected String[] getRequiredAddFields() {
return new String[] { "name", "dataCenter.name|id" };
}
@Override
@SingleEntityResource
public NetworkResource getNetworkSubResource(String id) {
return inject(new BackendNetworkResource(id, this));
}
protected boolean namedDataCenter(Network network) {
return network != null && network.isSetDataCenter() && network.getDataCenter().isSetName() && !network.getDataCenter().isSetId();
}
protected Guid getDataCenterId(Network network) {
return getEntity(storage_pool.class,
SearchType.StoragePool,
"Datacenter: name=" + network.getDataCenter().getName()).getId();
}
}