package org.ovirt.engine.api.restapi.resource; import java.util.List; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.DataCenter; import org.ovirt.engine.api.model.Network; import org.ovirt.engine.api.model.Networks; import org.ovirt.engine.api.resource.DataCenterNetworkResource; import org.ovirt.engine.api.resource.DataCenterNetworksResource; import org.ovirt.engine.core.common.action.AddNetworkStoragePoolParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.NameQueryParameters; 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 BackendDataCenterNetworksResource extends AbstractBackendNetworksResource implements DataCenterNetworksResource { protected Guid dataCenterId; public BackendDataCenterNetworksResource(String dataCenterId) { super(VdcQueryType.GetNetworksByDataCenterId, VdcActionType.AddNetwork); this.dataCenterId = asGuid(dataCenterId); } @Override public Response add(Network network) { validateParameters(network, getRequiredAddFields()); DataCenter dataCenter = new DataCenter(); dataCenter.setId(dataCenterId.toString()); network.setDataCenter(dataCenter); org.ovirt.engine.core.common.businessentities.network.Network entity = map(network); AddNetworkStoragePoolParameters params = getAddParameters(network, entity); return performCreate(addAction, params, new DataCenterNetworkIdResolver(network.getName(), params.getStoragePoolId().toString())); } @Override public Networks list() { Networks networks = mapCollection(getNetworks()); for (Network network : networks.getNetworks()) { network.setDisplay(null); } return networks; } protected List<org.ovirt.engine.core.common.businessentities.network.Network> getNetworks() { return getBackendCollection(VdcQueryType.GetNetworksByDataCenterId, getQueryParameters()); } @Override protected VdcQueryParametersBase getQueryParameters() { return new IdQueryParameters(dataCenterId); } @Override protected AddNetworkStoragePoolParameters getAddParameters( Network network, org.ovirt.engine.core.common.businessentities.network.Network entity) { if (namedDataCenter(network)) { entity.setDataCenterId(getDataCenterId(network)); } AddNetworkStoragePoolParameters parameters = new AddNetworkStoragePoolParameters(entity.getDataCenterId(), entity); if (network != null && network.isSetProfileRequired()) { parameters.setVnicProfileRequired(network.isProfileRequired()); } return parameters; } protected String[] getRequiredAddFields() { return new String[] { "name"}; } @Override public DataCenterNetworkResource getNetworkResource(String id) { return inject(new BackendDataCenterNetworkResource(id, this)); } protected boolean namedDataCenter(Network network) { return network != null && network.isSetDataCenter() && network.getDataCenter().isSetName() && !network.getDataCenter().isSetId(); } protected Guid getDataCenterId(Network network) { String networkName = network.getDataCenter().getName(); return getEntity( StoragePool.class, VdcQueryType.GetStoragePoolByDatacenterName, new NameQueryParameters(networkName), "Datacenter: name=" + networkName ).getId(); } }