package org.ovirt.engine.api.restapi.resource; import java.util.Collections; import java.util.Set; 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.VirtualFunctionAllowedNetworkResource; import org.ovirt.engine.api.resource.VirtualFunctionAllowedNetworksResource; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VfsConfigNetworkParameters; import org.ovirt.engine.core.common.businessentities.network.HostNicVfsConfig; import org.ovirt.engine.core.compat.Guid; public class BackendVirtualFunctionAllowedNetworksResource extends AbstractBackendCollectionResource<Network, org.ovirt.engine.core.common.businessentities.network.Network> implements VirtualFunctionAllowedNetworksResource { private Guid nicId; private String hostId; protected BackendVirtualFunctionAllowedNetworksResource(Guid nicId, String hostId) { super(Network.class, org.ovirt.engine.core.common.businessentities.network.Network.class); this.nicId = nicId; this.hostId = hostId; } @Override public Networks list() { final Set<Guid> networkIds = loadVfAllowedNetworks(); final Networks networks = new Networks(); for (Guid networkId : networkIds) { final Network network = new Network(); network.setId(networkId.toString()); networks.getNetworks().add(network); addLinks(network); } return networks; } private Set<Guid> loadVfAllowedNetworks() { final BackendHostNicsResource hostNicsResource = getParent(); final HostNicVfsConfig vfsConfig = hostNicsResource.findVfsConfig(nicId); if (vfsConfig == null) { return Collections.emptySet(); } final Set<Guid> networkIds = vfsConfig.getNetworks(); return networkIds; } @Override public Response add(Network networkModel) { validateParameters(networkModel, "id|name"); final org.ovirt.engine.core.common.businessentities.network.Network network = findNetwork(networkModel); return performAction(VdcActionType.AddVfsConfigNetwork, new VfsConfigNetworkParameters(nicId, network.getId())); } @Override public VirtualFunctionAllowedNetworkResource getNetworkResource(String id) { return inject(new BackendVirtualFunctionAllowedNetworkResource(id, this)); } private org.ovirt.engine.core.common.businessentities.network.Network findNetwork(Network network) { return getParent().lookupNetwork(network); } private BackendHostNicsResource getParent() { return inject(new BackendHostNicsResource(hostId)); } Guid getNicId() { return nicId; } }