use of org.ovirt.engine.api.model.DetailedLink in project ovirt-engine by oVirt.
the class RsdlBuilder method handleDelete.
private void handleDelete(String prefix, Collection<DetailedLink> results, Method m) {
DetailedLink link = new RsdlBuilder.LinkBuilder().url(prefix).rel(DELETE).httpMethod(HttpMethod.DELETE).build();
Class<?>[] parameterTypes = m.getParameterTypes();
if (parameterTypes.length > 0) {
link.getRequest().getBody().setType(parameterTypes[0].getSimpleName());
}
addCommonActionParameters(link);
addAsyncMatrixParameter(link);
results.add(link);
}
use of org.ovirt.engine.api.model.DetailedLink in project ovirt-engine by oVirt.
the class RsdlBuilder method construct.
private Rsdl construct() throws ClassNotFoundException, IOException {
Rsdl rsdl = new Rsdl();
rsdl.setLinks(new DetailedLinks());
for (DetailedLink link : getLinks()) {
rsdl.getLinks().getLinks().add(link);
}
uniteDuplicateLinks(rsdl);
Collections.sort(rsdl.getLinks().getLinks(), Comparator.comparing(DetailedLink::getHref).thenComparing(DetailedLink::getRel));
return rsdl;
}
use of org.ovirt.engine.api.model.DetailedLink in project ovirt-engine by oVirt.
the class RsdlBuilder method uniteDuplicateLinks.
/**
* There is a special kind of url: a url that may receive a body (with parameters in it),
* or may not. For example, when deleting a datacenter, the user may pass nothing in the body,
* or may pass <action><force>true</force></action>.
*
* RSDL builder will encounter both signatures during construction, and when it encounters the
* first is has no knowledge of the second yet, so it must create both linke.
*
* This method will be called at the end of construction, and search for such duplicate links.
* It will unite these pairs into a single link with required=false in the <body>.
*/
private void uniteDuplicateLinks(Rsdl rsdl) {
Map<String, DetailedLink> linksMap = new HashMap<>();
Collection<DetailedLink> linksToDelete = new LinkedList<>();
for (DetailedLink link : rsdl.getLinks().getLinks()) {
String linkId = link.getHref() + link.getRel();
if (linksMap.containsKey(linkId)) {
// duplicate found, determine which of the two should be deleted
DetailedLink linkToDelete = decideWhichToDelete(linksMap.get(linkId), link);
if (linkToDelete != null) {
linksToDelete.add(linkToDelete);
}
} else {
linksMap.put(linkId, link);
}
}
for (DetailedLink link : linksToDelete) {
rsdl.getLinks().getLinks().remove(link);
}
}
use of org.ovirt.engine.api.model.DetailedLink in project ovirt-engine by oVirt.
the class RsdlBuilder method handleAction.
private void handleAction(String prefix, Collection<DetailedLink> results, String path, Method m) {
Class<?>[] parameterTypes = m.getParameterTypes();
assert parameterTypes.length == 1;
String returnValueStr = parameterTypes[0].getSimpleName();
DetailedLink link = new RsdlBuilder.LinkBuilder().url(prefix + "/" + path).rel(path).requestParameter(ACTION).responseType(returnValueStr).httpMethod(HttpMethod.POST).build();
addCommonActionParameters(link);
addAsyncMatrixParameter(link);
results.add(link);
}
Aggregations