package org.ovirt.engine.api.restapi.resource; import java.util.List; import javax.ws.rs.core.Response; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.api.model.Network; import org.ovirt.engine.api.resource.ClusterNetworkResource; import org.ovirt.engine.api.resource.ClusterNetworksResource; import org.ovirt.engine.core.common.action.AttachNetworkToClusterParameter; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.queries.IdQueryParameters; 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 BackendClusterNetworksResource extends AbstractBackendNetworksResource implements ClusterNetworksResource { private String clusterId; public BackendClusterNetworksResource(String clusterId) { super(VdcQueryType.GetAllNetworksByClusterId, VdcActionType.AttachNetworkToCluster); this.clusterId = clusterId; } @Override public Response add(Network network) { validateParameters(network, "id|name"); String networkName = null; List<org.ovirt.engine.core.common.businessentities.network.Network> networks = getNetworks(); if (network.isSetId()) { org.ovirt.engine.core.common.businessentities.network.Network net = getNetworkById(network.getId(), networks); if (net == null) { notFound(Network.class); } else { networkName = net.getName(); } } String networkId = null; if (network.isSetName()) { org.ovirt.engine.core.common.businessentities.network.Network net = getNetworkByName(network.getName(), networks); if (net == null) { notFound(Network.class); } else { networkId = net.getId().toString(); } } if (!network.isSetId()) { network.setId(networkId); } else if (network.isSetName() && !network.getId().equals(networkId)) { badRequest("Network ID provided does not match the ID for network with name: " + network.getName()); } org.ovirt.engine.core.common.businessentities.network.Network entity = map(network); return performCreate(addAction, getAddParameters(network, entity), new NetworkIdResolver(StringUtils.defaultIfEmpty(network.getName(), networkName))); } private org.ovirt.engine.core.common.businessentities.network.Network getNetworkById(String networkId, List<org.ovirt.engine.core.common.businessentities.network.Network> networks) { for (org.ovirt.engine.core.common.businessentities.network.Network network : networks) { if (network.getId().toString().equals(networkId)) { return network; } } return null; } private org.ovirt.engine.core.common.businessentities.network.Network getNetworkByName(String networkName, List<org.ovirt.engine.core.common.businessentities.network.Network> networks) { for (org.ovirt.engine.core.common.businessentities.network.Network network : networks) { if (network.getName().equals(networkName)) { return network; } } return null; } @Override protected VdcQueryParametersBase getQueryParameters() { return new IdQueryParameters(asGuid(clusterId)); } @Override protected VdcActionParametersBase getAddParameters(Network network, org.ovirt.engine.core.common.businessentities.network.Network entity) { return new AttachNetworkToClusterParameter(getCluster(), entity); } @Override public Network addParents(Network network) { network.setCluster(new org.ovirt.engine.api.model.Cluster()); network.getCluster().setId(clusterId); return network; } protected Cluster getCluster() { return getEntity(Cluster.class, VdcQueryType.GetClusterById, new IdQueryParameters(asGuid(clusterId)), clusterId); } @Override public ClusterNetworkResource getNetworkResource(String id) { return inject(new BackendClusterNetworkResource(id, this)); } private List<org.ovirt.engine.core.common.businessentities.network.Network> getNetworks() { Guid dataCenterId = getCluster().getStoragePoolId(); IdQueryParameters params = new IdQueryParameters(dataCenterId); return getBackendCollection(VdcQueryType.GetAllNetworks, params); } }