All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.tiogasolutions.pub.PubLinks Maven / Gradle / Ivy

There is a newer version: 1.0.2.DEPRECATED
Show newest version
package org.tiogasolutions.pub;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;

import java.util.*;

public class PubLinks extends LinkedHashMap {

    @JsonCreator
    private PubLinks(Map links) {
        for (PubLink link : links.values()) {
            put(link.getRel(), link);
        }
    }

    @JsonIgnore
    public List getItems() {
        return new ArrayList<>(values());
    }

    public PubLink getLink(String rel) {
        return get(rel);
    }

    public boolean hasLink(String rel) {
        return getLink(rel) != null;
    }

    public PubLink add(String rel, String href) {
        return add(PubLink.create(rel, href));
    }

    public PubLink add(PubLink link) {
        if (link != null) {
            // This is really just a convenience to allow
            // us to add null and have no effect.
            return put(link.getRel(), link);
        }
        return null;
    }

    public void addAll(Collection links) {
        links.forEach(this::add);
    }

    public void addFPNL(PubLink firstLink, PubLink prevLink, PubLink nextLink, PubLink lastLink) {
        add(firstLink.clone("first"));
        add(prevLink.clone("prev"));
        add(nextLink.clone("next"));
        add(lastLink.clone("last"));
    }

    public static PubLinks empty() {
        return new PubLinks(Collections.emptyMap());
    }

    public static PubLinks self(PubLink... items) {
        return self(Arrays.asList(items));
    }

    public static PubLinks self(List items) {
        PubLinks links = new PubLinks(Collections.emptyMap());
        for (PubLink link : items) {
            if (link.getRel().endsWith("-links")) {
                links.add(link.clone("self-links"));

            } else if (link.getRel().endsWith("-items")) {
                links.add(link.clone("self-items"));

            } else {
                links.add(link.clone("self"));
            }
        }
        return links;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy