Link.java

package au.com.mountainpass.hyperstate.core;

import java.net.URI;
import java.util.Set;

import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.MediaType;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonInclude(JsonInclude.Include.NON_DEFAULT)
abstract public class Link extends Labelled {

    public Link() {
    }

    public Link(String label, Set<String> natures) {
        super(label, natures);
    }

    public Link(String label) {
        super(label);
    }

    public abstract <T> T resolve(Class<T> type);

    public abstract <T> T resolve(ParameterizedTypeReference<T> type);

    @JsonProperty("type")
    public abstract MediaType getRepresentationFormat();

    @JsonProperty("href")
    public abstract URI getAddress();

    @JsonIgnore
    public abstract String getPath();
}