package org.ovirt.engine.api.restapi.resource; import java.util.List; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.BaseResource; import org.ovirt.engine.api.model.Network; import org.ovirt.engine.api.model.NetworkLabel; import org.ovirt.engine.api.model.NetworkLabels; import org.ovirt.engine.api.resource.NetworkLabelResource; import org.ovirt.engine.api.resource.NetworkLabelsResource; import org.ovirt.engine.core.common.action.LabelNetworkParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; public class BackendNetworkLabelsResource extends AbstractBackendCollectionResource<NetworkLabel, org.ovirt.engine.core.common.businessentities.network.pseudo.NetworkLabel> implements NetworkLabelsResource { private Guid networkId; protected BackendNetworkLabelsResource(Guid networkId) { super(NetworkLabel.class, org.ovirt.engine.core.common.businessentities.network.pseudo.NetworkLabel.class); this.networkId = networkId; } @Override public NetworkLabels list() { return mapCollection(getNetworkLabels(networkId)); } private List<org.ovirt.engine.core.common.businessentities.network.pseudo.NetworkLabel> getNetworkLabels(Guid networkId) { return getBackendCollection(VdcQueryType.GetNetworkLabelsByNetworkId, new IdQueryParameters(networkId)); } private NetworkLabels mapCollection(List<org.ovirt.engine.core.common.businessentities.network.pseudo.NetworkLabel> networkLabels) { NetworkLabels labels = new NetworkLabels(); for (org.ovirt.engine.core.common.businessentities.network.pseudo.NetworkLabel networkLabel : networkLabels) { NetworkLabel label = new NetworkLabel(); label.setId(networkLabel.getId()); labels.getNetworkLabels().add(label); addLinks(label, Network.class); } return labels; } @Override public Response add(NetworkLabel label) { validateParameters(label, "id"); return performCreate(VdcActionType.LabelNetwork, new LabelNetworkParameters(networkId, label.getId()), new NetworkLabelIdResolver(networkId)); } @Override public NetworkLabelResource getLabelResource(String id) { return inject(new BackendNetworkLabelResource(id, this)); } @Override protected NetworkLabel addParents(NetworkLabel model) { model.setNetwork(new Network()); model.getNetwork().setId(networkId.toString()); return model; }; @Override protected NetworkLabel addLinks(NetworkLabel model, Class<? extends BaseResource> suggestedParent, String... excludeSubCollectionMembers) { return super.addLinks(model, Network.class); } public Guid getNetworkId() { return networkId; } protected class NetworkLabelIdResolver extends EntityIdResolver<String> { private Guid networkId; NetworkLabelIdResolver() { } NetworkLabelIdResolver(Guid networkId) { this.networkId = networkId; } @Override public org.ovirt.engine.core.common.businessentities.network.pseudo.NetworkLabel lookupEntity(String id) throws BackendFailureException { List<org.ovirt.engine.core.common.businessentities.network.pseudo.NetworkLabel> labels = getNetworkLabels(networkId); if (!labels.isEmpty()) { return labels.get(0); } return null; } } }