JavaLink.java

package au.com.mountainpass.hyperstate.core;

import java.net.URI;

import org.springframework.core.ParameterizedTypeReference;
import org.springframework.hateoas.mvc.BasicLinkBuilder;
import org.springframework.http.MediaType;

import com.fasterxml.jackson.annotation.JsonProperty;

import au.com.mountainpass.hyperstate.core.entities.EntityWrapper;

public class JavaLink extends Link {

    private EntityWrapper<?> entity;

    protected JavaLink() {
    }

    public JavaLink(EntityWrapper<?> entity) {
        this.entity = entity;
    }

    @SuppressWarnings("unchecked")
    @Override
    public <T> T resolve(Class<T> type) {
        return (T) entity;
    }

    @Override
    public MediaType getRepresentationFormat() {
        return MediaTypes.SIREN_JSON;
    }

    @Override
    @JsonProperty("href")
    public URI getAddress() {
        return BasicLinkBuilder.linkToCurrentMapping().slash(entity).toUri();
    }

    @SuppressWarnings("unchecked")
    @Override
    public <T> T resolve(ParameterizedTypeReference<T> type) {
        return (T) entity;
    }

    @Override
    public String getPath() {
        return entity.getId();
    }
}