package org.ovirt.engine.api.restapi.resource;
import java.util.List;
import java.util.Objects;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.BaseResource;
import org.ovirt.engine.api.model.Host;
import org.ovirt.engine.api.model.HostNic;
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.compat.Guid;
public abstract class AbstractBaseHostNicLabelsResource
extends AbstractBackendCollectionResource<NetworkLabel, org.ovirt.engine.core.common.businessentities.network.pseudo.NetworkLabel>
implements NetworkLabelsResource {
private Guid nicId;
private String hostId;
protected AbstractBaseHostNicLabelsResource(Guid nicId, String hostId) {
super(NetworkLabel.class, org.ovirt.engine.core.common.businessentities.network.pseudo.NetworkLabel.class);
this.nicId = nicId;
this.hostId = hostId;
}
@Override
public NetworkLabels list() {
return mapCollection(getHostNicLabels(nicId));
}
protected abstract List<org.ovirt.engine.core.common.businessentities.network.pseudo.NetworkLabel> getHostNicLabels(Guid hostNicId);
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, HostNic.class);
}
return labels;
}
@Override
public Response add(NetworkLabel label) {
validateParameters(label, "id");
final String labelId = label.getId();
return performCreate(labelId);
}
protected abstract Response performCreate(String labelId);
@Override
public NetworkLabelResource getLabelResource(String id) {
return inject(createSingularResource(id));
}
protected abstract AbstractBaseHostNicLabelResource createSingularResource(String labelId);
@Override
protected NetworkLabel addParents(NetworkLabel model) {
model.setHostNic(new HostNic());
model.getHostNic().setId(nicId.toString());
model.getHostNic().setHost(new Host());
model.getHostNic().getHost().setId(hostId);
return model;
}
@Override
protected NetworkLabel addLinks(NetworkLabel label,
Class<? extends BaseResource> suggestedParent,
String... excludeSubCollectionMembers) {
NetworkLabel resultLabel = super.addLinks(label, HostNic.class);
final AbstractBaseHostNicLabelResource labelResource = createSingularResource(resultLabel.getId());
labelResource.overrideHref(resultLabel);
return resultLabel;
}
public Guid getHostNicId() {
return nicId;
}
protected class NetworkLabelIdResolver extends EntityIdResolver<String> {
private final Guid nicId;
NetworkLabelIdResolver(Guid nicId) {
this.nicId = nicId;
}
@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 = getHostNicLabels(nicId);
for (org.ovirt.engine.core.common.businessentities.network.pseudo.NetworkLabel label : labels) {
if (Objects.equals(label.getId(), id)) {
return label;
}
}
return null;
}
}
}