package org.ovirt.engine.api.restapi.resource; import javax.ws.rs.core.Response; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.api.model.NetworkLabel; import org.ovirt.engine.api.model.NetworkLabels; import org.ovirt.engine.api.resource.NetworkLabelResource; public abstract class AbstractBaseHostNicLabelResource extends AbstractBackendSubResource<NetworkLabel, org.ovirt.engine.core.common.businessentities.network.pseudo.NetworkLabel> implements NetworkLabelResource { private String id; private AbstractBaseHostNicLabelsResource parent; protected AbstractBaseHostNicLabelResource(String id, AbstractBaseHostNicLabelsResource parent) { super("", NetworkLabel.class, org.ovirt.engine.core.common.businessentities.network.pseudo.NetworkLabel.class); this.id = id; this.parent = parent; } public AbstractBaseHostNicLabelsResource getParent() { return parent; } @Override public NetworkLabel get() { NetworkLabels labels = parent.list(); if (labels != null) { for (NetworkLabel label : labels.getNetworkLabels()) { if (label.getId().equals(id)) { parent.addParents(label); return addLinks(label); } } } return notFound(); } @Override protected NetworkLabel addLinks(NetworkLabel label, String... subCollectionMembersToExclude) { super.addLinks(label, subCollectionMembersToExclude); overrideHref(label); return label; } void overrideHref(NetworkLabel label) { final String href = label.getHref(); if (href != null) { final String[] hRefSegments = href.split("/"); if (hRefSegments.length>=2) { hRefSegments[hRefSegments.length - 2] = getUriPath(); final String fixedHref = StringUtils.join(hRefSegments, '/'); label.setHref(fixedHref); } } } protected abstract String getUriPath(); @Override public Response remove() { get(); return performRemove(); } protected abstract Response performRemove(); }