package au.com.mountainpass.hyperstate.core;
import java.util.Arrays;
import com.fasterxml.jackson.annotation.JsonProperty;
public abstract class Relationship {
// sourced from
// http://www.iana.org/assignments/link-relations/link-relations.xhtml on
// 2015/09/14
public static final String ABOUT = "about"; // Refers to a resource that is
// the subject of the link's
// context. [RFC6903], section 2
public static final String ALTERNATE = "alternate"; // Refers to a
// substitute for this
// context
// [http://www.w3.org/TR/html5/links.html#link-type-alternate]
public static final String APPENDIX = "appendix"; // Refers to an appendix.
// [http://www.w3.org/TR/1999/REC-html401-19991224]
public static final String ARCHIVES = "archives"; // Refers to a collection
// of records, documents,
// or other materials of
// historical interest.
// [http://www.w3.org/TR/2011/WD-html5-20110113/links.html#rel-archives]
public static final String AUTHOR = "author"; // Refers to the context's
// author.
// [http://www.w3.org/TR/html5/links.html#link-type-author]
public static final String BOOKMARK = "bookmark"; // Gives a permanent link
// to use for bookmarking
// purposes.
// [http://www.w3.org/TR/html5/links.html#link-type-bookmark]
public static final String CANONICAL = "canonical"; // Designates the
// preferred version of
// a resource (the IRI
// and its contents).
// [RFC6596]
public static final String CHAPTER = "chapter"; // Refers to a chapter in a
// collection of resources.
// [http://www.w3.org/TR/1999/REC-html401-19991224]
public static final String COLLECTION = "collection"; // The target IRI
// points to a
// resource which
// represents the
// collection resource
// for the context
// IRI. [RFC6573]
public static final String CONTENTS = "contents"; // Refers to a table of
// contents.
// [http://www.w3.org/TR/1999/REC-html401-19991224]
public static final String COPYRIGHT = "copyright"; // Refers to a copyright
// statement that
// applies to the link's
// context.
// [http://www.w3.org/TR/1999/REC-html401-19991224]
public static final String CREATE_FORM = "create-form"; // The target IRI
// points to a
// resource where a
// submission form
// can
// be obtained.
// [RFC6861]
public static final String CURRENT = "current"; // Refers to a resource
// containing the most
// recent item(s) in a
// collection of resources.
// [RFC5005]
public static final String DERIVEDFROM = "derivedfrom"; // The target IRI
// points to a
// resource from
// which this
// material was
// derived.
// [draft-hoffman-xml2rfc]
public static final String DESCRIBEDBY = "describedby"; // Refers to a
// resource
// providing
// information about
// the link's
// context.
// [http://www.w3.org/TR/powder-dr/#assoc-linking]
public static final String DESCRIBES = "describes"; // The relationship A
// 'describes' B asserts
// that resource A
// provides a
// description of
// resource B. There are
// no constraints on the
// format or
// representation of
// either A or B,
// neither are there any
// further constraints
// on either resource.
// [RFC6892] This link
// relation type is the
// inverse of the
// 'describedby'
// relation type. While
// 'describedby'
// establishes a
// relation from the
// described resource
// back to the resource
// that describes it,
// 'describes'
// established a
// relation from the
// describing resource
// to the resource it
// describes. If B is
// 'describedby' A, then
// A 'describes' B.
public static final String DISCLOSURE = "disclosure"; // Refers to a list of
// patent disclosures
// made with respect
// to material for
// which 'disclosure'
// relation is
// specified.
// [RFC6579]
public static final String DUPLICATE = "duplicate"; // Refers to a resource
// whose available
// representations are
// byte-for-byte
// identical with the
// corresponding
// representations of
// the context IRI.
// [RFC6249] This
// relation is for
// static resources.
// That is, an HTTP GET
// request on any
// duplicate will return
// the same
// representation. It
// does not make sense
// for dynamic or
// POSTable resources
// and should not be
// used for them.
public static final String EDIT = "edit"; // Refers to a resource that can
// be used to edit the link's
// context. [RFC5023]
public static final String EDIT_FORM = "edit-form"; // The target IRI points
// to a resource where a
// submission form for
// editing associated
// resource can be
// obtained. [RFC6861]
public static final String EDIT_MEDIA = "edit-media"; // Refers to a
// resource
// that can be used to
// edit media
// associated
// with the link's
// context. [RFC5023]
public static final String ENCLOSURE = "enclosure"; // Identifies a related
// resource that is
// potentially large and
// might require special
// handling. [RFC4287]
public static final String FIRST = "first"; // An IRI that refers to the
// furthest preceding resource
// in a series of resources.
// [RFC5988] This relation type
// registration did not indicate
// a reference. Originally
// requested by Mark Nottingham
// in December 2004.
public static final String GLOSSARY = "glossary"; // Refers to a glossary of
// terms.
// [http://www.w3.org/TR/1999/REC-html401-19991224]
public static final String HELP = "help"; // Refers to context-sensitive
// help.
// [http://www.w3.org/TR/html5/links.html#link-type-help]
public static final String HOSTS = "hosts"; // Refers to a resource hosted
// by the server indicated by
// the link context. [RFC6690]
// This relation is used in CoRE
// where links are retrieved as
// a "/.well-known/core"
// resource representation, and
// is the default relation type
// in the CoRE Link Format.
public static final String HUB = "hub"; // Refers to a hub that enables
// registration for notification of
// updates to the context.
// [http://pubsubhubbub.googlecode.com]
// This relation type was requested
// by Brett Slatkin.
public static final String ICON = "icon"; // Refers to an icon representing
// the link's context.
// [http://www.w3.org/TR/html5/links.html#link-type-icon]
public static final String INDEX = "index"; // Refers to an index.
// [http://www.w3.org/TR/1999/REC-html401-19991224]
public static final String ITEM = "item"; // The target IRI points to a
// resource that is a member of
// the collection represented by
// the context IRI. [RFC6573]
public static final String LAST = "last"; // An IRI that refers to the
// furthest following resource in
// a series of resources.
// [RFC5988] This relation type
// registration did not indicate a
// reference. Originally requested
// by Mark Nottingham in December
// 2004.
public static final String LATEST_VERSION = "latest-version"; // Points to a
// resource
// containing
// the latest
// (e.g.,
// current)
// version of
// the
// context.
// [RFC5829]
public static final String LICENSE = "license"; // Refers to a license
// associated with this
// context. [RFC4946] For
// implications of use in
// HTML, see:
// http://www.w3.org/TR/html5/links.html#link-type-license
public static final String LRDD = "lrdd"; // Refers to further information
// about the link's context,
// expressed as a LRDD
// ("Link-based Resource
// Descriptor Document") resource.
// See [RFC6415] for information
// about processing this relation
// type in host-meta documents.
// When used elsewhere, it refers
// to additional links and other
// metadata. Multiple instances
// indicate additional LRDD
// resources. LRDD resources MUST
// have an "application/xrd+xml"
// representation, and MAY have
// others. [RFC6415]
public static final String MEMENTO = "memento"; // The Target IRI points to
// a Memento, a fixed
// resource that will not
// change state anymore.
// [RFC7089] A Memento for
// an Original Resource is a
// resource that
// encapsulates a prior
// state of the Original
// Resource.
public static final String MONITOR = "monitor"; // Refers to a resource that
// can be used to monitor
// changes in an HTTP
// resource. [RFC5989]
public static final String MONITOR_GROUP = "monitor-group"; // Refers to a
// resource that
// can be used
// to
// monitor
// changes
// in a
// specified
// group of HTTP
// resources.
// [RFC5989]
public static final String NEXT = "next"; // Indicates that the link's
// context is a part of a series,
// and that the next in the series
// is the link target.
// [http://www.w3.org/TR/html5/links.html#link-type-next]
public static final String NEXT_ARCHIVE = "next-archive"; // Refers to the
// immediately
// following
// archive
// resource.
// [RFC5005]
public static final String NOFOLLOW = "nofollow"; // Indicates that the
// context’s original
// author or publisher
// does not endorse the
// link target.
// [http://www.w3.org/TR/html5/links.html#link-type-nofollow]
public static final String NOREFERRER = "noreferrer"; // Indicates that no
// referrer
// information is to
// be leaked when
// following the link.
// [http://www.w3.org/TR/html5/links.html#link-type-noreferrer]
public static final String ORIGINAL = "original"; // The Target IRI points
// to an Original
// Resource. [RFC7089] An
// Original Resource is a
// resource that exists or
// used to exist, and for
// which access to one of
// its prior states may be
// required.
public static final String PAYMENT = "payment"; // Indicates a resource
// where payment is
// accepted. [RFC5988] This
// relation type
// registration did not
// indicate a reference.
// Requested by Joshua
// Kinberg and Robert Sayre.
// It is meant as a general
// way to facilitate acts of
// payment, and thus this
// specification makes no
// assumptions on the type
// of payment or transaction
// protocol. Examples may
// include a web page where
// donations are accepted or
// where goods and services
// are available for
// purchase. rel="payment"
// is not intended to
// initiate an automated
// transaction. In Atom
// documents, a link element
// with a rel="payment"
// attribute may exist at
// the feed/channel level
// and/or the entry/item
// level. For example, a
// rel="payment" link at the
// feed/channel level may
// point to a "tip jar" URI,
// whereas an entry/ item
// containing a book review
// may include a
// rel="payment" link that
// points to the location
// where the book may be
// purchased through an
// online retailer.
public static final String PREDECESSOR_VERSION = "predecessor-version"; // Points
// to
// a
// resource
// containing
// the
// predecessor
// version
// in
// the
// version
// history.
// [RFC5829]
public static final String PREFETCH = "prefetch"; // Indicates that the link
// target should be
// preemptively cached.
// [http://www.w3.org/TR/html5/links.html#link-type-prefetch]
public static final String PREV = "prev"; // Indicates that the link's
// resource in an ordered
// series of resources.
// Synonym for "prev".
// [http://www.w3.org/TR/1999/REC-html401-19991224]
public static final String PREV_ARCHIVE = "prev-archive"; // Refers to the
// context is a part of a series,
// and that the previous in the
// series is the link target.
// [http://www.w3.org/TR/html5/links.html#link-type-prev]
public static final String PREVIEW = "preview"; // Refers to a resource that
// provides a preview of the
// link's context.
// [RFC6903], section 3
public static final String PREVIOUS = "previous"; // Refers to the previous
// immediately
// preceding
// archive
// resource.
// [RFC5005]
public static final String PRIVACY_POLICY = "privacy-policy"; // Refers to a
// privacy
// policy
// associated
// with the
// link's
// context.
// [RFC6903],
// section 4
public static final String PROFILE = "profile"; // Identifying that a
// resource representation
// conforms to a certain
// profile, without
// affecting the non-profile
// semantics of the resource
// representation. [RFC6906]
// Profile URIs are
// primarily intended to be
// used as identifiers, and
// thus clients SHOULD NOT
// indiscriminately access
// profile URIs.
public static final String RELATED = "related"; // Identifies a related
// resource. [RFC4287]
public static final String REPLIES = "replies"; // Identifies a resource
// that is a reply to the
// context of the link.
// [RFC4685]
public static final String SEARCH = "search"; // Refers to a resource that
// can be used to search
// through the link's context
// and related resources.
// [http://www.opensearch.org/Specifications/OpenSearch/1.1]
public static final String SECTION = "section"; // Refers to a section in a
// collection of resources.
// [http://www.w3.org/TR/1999/REC-html401-19991224]
public static final String SELF = "self"; // Conveys an identifier for the
// link's context. [RFC4287]
public static final String SERVICE = "service"; // Indicates a URI that can
// be used to retrieve a
// service document.
// [RFC5023] When used in an
// Atom document, this
// relation type specifies
// Atom Publishing Protocol
// service documents by
// default. Requested by
// James Snell.
public static final String START = "start"; // Refers to the first resource
// in a collection of resources.
// [http://www.w3.org/TR/1999/REC-html401-19991224]
public static final String STYLESHEET = "stylesheet"; // Refers to a
// stylesheet.
// [http://www.w3.org/TR/html5/links.html#link-type-stylesheet]
public static final String SUBSECTION = "subsection"; // Refers to a
// resource serving as
// a subsection in a
// collection of
// resources.
// [http://www.w3.org/TR/1999/REC-html401-19991224]
public static final String SUCCESSOR_VERSION = "successor-version"; // Points
// to a
// resource
// containing
// the
// successor
// version
// in
// the
// version
// history.
// [RFC5829]
public static final String TAG = "tag"; // Gives a tag (identified by the
// given address) that applies to
// the current document.
// [http://www.w3.org/TR/html5/links.html#link-type-tag]
public static final String TERMS_OF_SERVICE = "terms-of-service"; // Refers
// to
// the
// terms
// of
// service
// associated
// with
// the
// link's
// context.
// [RFC6903],
// section
// 5
public static final String TIMEGATE = "timegate"; // The Target IRI points
// to a TimeGate for an
// Original Resource.
// [RFC7089] A TimeGate
// for an Original
// Resource is a resource
// that is capable of
// datetime negotiation to
// support access to prior
// states of the Original
// Resource.
public static final String TIMEMAP = "timemap"; // The Target IRI points to
// a TimeMap for an Original
// Resource. [RFC7089] A
// TimeMap for an Original
// Resource is a resource
// from which a list of URIs
// of Mementos of the
// Original Resource is
// available.
public static final String TYPE = "type"; // Refers to a resource
// identifying the abstract
// semantic type of which the
// link's context is considered to
// be an instance. [RFC6903],
// section 6
public static final String UP = "up"; // Refers to a parent document in a
// hierarchy of documents. [RFC5988]
// This relation type registration did
// not indicate a reference. Requested
// by Noah Slater.
public static final String VERSION_HISTORY = "version-history"; // Points to
// a
// resource
// containing
// the
// version
// history
// for
// the
// context.
// [RFC5829]
public static final String VIA = "via"; // Identifies a resource that is the
// source of the information in the
// link's context. [RFC4287]
public static final String WORKING_COPY = "working-copy"; // Points to a
// working copy
// for
// this resource.
// [RFC5829]
public static final String WORKING_COPY_OF = "working-copy-of"; // Points to
// the
// versioned
// resource
// from
// which
// this
// working
// copy was
// obtained.
// [RFC5829]
// at least one. How to enforce this?
private final String[] natures;
public Relationship(final String... natures) {
this.natures = natures;
}
/**
* @return the nature
*/
@JsonProperty("rel")
public String[] getNature() {
return natures;
}
public boolean hasNature(final String nature) {
return Arrays.asList(natures).contains(nature);
}
}