Search in sources :

Example 6 with DetailedLink

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);
}
Also used : DetailedLink(org.ovirt.engine.api.model.DetailedLink)

Example 7 with DetailedLink

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;
}
Also used : DetailedLink(org.ovirt.engine.api.model.DetailedLink) DetailedLinks(org.ovirt.engine.api.model.DetailedLinks) Rsdl(org.ovirt.engine.api.model.Rsdl)

Example 8 with DetailedLink

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);
    }
}
Also used : DetailedLink(org.ovirt.engine.api.model.DetailedLink) HashMap(java.util.HashMap) LinkedList(java.util.LinkedList)

Example 9 with DetailedLink

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);
}
Also used : DetailedLink(org.ovirt.engine.api.model.DetailedLink)

Aggregations

DetailedLink (org.ovirt.engine.api.model.DetailedLink)9 Date (java.util.Date)2 Api (org.ovirt.engine.api.model.Api)2 SpecialObjects (org.ovirt.engine.api.model.SpecialObjects)2 HashMap (java.util.HashMap)1 LinkedList (java.util.LinkedList)1 BaseResources (org.ovirt.engine.api.model.BaseResources)1 DetailedLinks (org.ovirt.engine.api.model.DetailedLinks)1 LinkCapabilities (org.ovirt.engine.api.model.LinkCapabilities)1 Request (org.ovirt.engine.api.model.Request)1 Rsdl (org.ovirt.engine.api.model.Rsdl)1 Statistics (org.ovirt.engine.api.model.Statistics)1 Url (org.ovirt.engine.api.model.Url)1