/** * Copyright 2005-2014 Restlet * * The contents of this file are subject to the terms of one of the following * open source licenses: Apache 2.0 or or EPL 1.0 (the "Licenses"). You can * select the license that you prefer but you may not use this file except in * compliance with one of these Licenses. * * You can obtain a copy of the Apache 2.0 license at * http://www.opensource.org/licenses/apache-2.0 * * You can obtain a copy of the EPL 1.0 license at * http://www.opensource.org/licenses/eclipse-1.0 * * See the Licenses for the specific language governing permissions and * limitations under the Licenses. * * Alternatively, you can obtain a royalty free commercial license with less * limitations, transferable or non-transferable, directly at * http://restlet.com/products/restlet-framework * * Restlet is a registered trademark of Restlet S.A.S. */ package org.restlet.ext.atom; import org.restlet.engine.util.SystemUtils; /** * Enumeration of relation types. * * @author Jerome Louvel * @see <a * href="http://www.iana.org/assignments/link-relations/link-relations.xhtml">IANA * Atom relations</a> */ public class Relation { /** * Signifies that the IRI in the value of the href attribute identifies an * alternate version of the resource described by the containing element. */ public static final Relation ALTERNATE = new Relation("alternate"); /** * Signifies that the IRI returns a feed document containing the most recent * entries in the feed. */ public static final Relation CURRENT = new Relation("current"); /** * Relationship that asserts that resource B provides a description of * resource A. There are no constraints on the format or representation of * either A or B, neither are there any further constraints on either * resource. */ public static final Relation DESCRIBED_BY = new Relation("describedby"); /** * Signifies that the IRI in the value of the href attribute identifies a * resource that is able to edit the current resource. */ public static final Relation EDIT = new Relation("edit"); /** * An IRI of an editable Media Resource. When appearing within an * atom:entry, the href IRI can be used to retrieve, update and delete the * Media Resource associated with that Entry. */ public static final Relation EDIT_MEDIA = new Relation("edit-media"); /** * Signifies that the IRI in the value of the href attribute identifies a * related resource that is potentially large in size and might require * special handling. For atom:link elements with rel="enclosure", the length * attribute SHOULD be provided. */ public static final Relation ENCLOSURE = new Relation("enclosure"); /** * Signifies that the IRI in the value of the href attribute identifies the * first resource in a series including the current resource. */ public static final Relation FIRST = new Relation("first"); /** * A URI for a hub that enables registration for real-time updates to the * resource. */ public static final Relation HUB = new Relation("hub"); /** * Signifies that the IRI in the value of the href attribute identifies the * last resource in a series including the current resource. */ public static final Relation LAST = new Relation("last"); /** * When included on a versioned resource, this link points to a resource * containing the latest (e.g., current) version. The latest version is * defined by the system. For linear versioning systems, this is probably * the latest version by timestamp. For systems that support branching, * there will be multiple latest versions, one for each branch in the * version history. Some systems may allow multiple of these link relations. */ public static final Relation LAST_VERSION = new Relation("latest-version"); /** * Signifies that the IRI in the value of the href attribute identifies the * resource describing the license. */ public static final Relation LICENSE = new Relation("license"); /** * Signifies that the IRI in the value of the href attribute identifies the * next resource in a series including the current resource. */ public static final Relation NEXT = new Relation("next"); /** * Signifies that the IRI in the value of the href attribute identifies the * immediately following archive document. */ public static final Relation NEXT_ARCHIVE = new Relation("next-archive"); /** * Signifies that the IRI in the value of the href attribute identifies * where payment is accepted. */ public static final Relation PAYMENT = new Relation("payment"); /** * When included on a versioned resource, this link points to a resource * containing the predecessor version in the version history. Some systems * may allow multiple of these link relations in the case of a multiple * branches merging. */ public static final Relation PREDECESSOR_VERSION = new Relation( "predecessor-version"); /** * Signifies that the IRI in the value of the href attribute identifies the * previous resource in a series including the current resource. */ public static final Relation PREVIOUS = new Relation("previous"); /** * A URI that refers to the immediately preceding archive document. */ public static final Relation PREVIOUS_ARCHIVE = new Relation("prev-archive"); /** * Signifies that the IRI in the value of the href attribute identifies a * resource related to the resource described by the containing element. */ public static final Relation RELATED = new Relation("related"); /** * Signifies that the IRI in the value of the href attribute identifies a * resource where responses to an entry may be found. */ public static final Relation REPLIES = new Relation("replies"); /** * Signifies that the IRI in the value of the href attribute identifies a * resource equivalent to the containing element. */ public static final Relation SELF = new Relation("self"); /** * Signifies that the IRI in the value of the href attribute identifies a * resource that can be used to retrieve an Atom Publishing Protocol Service * Document as defined by RFC 5023. */ public static final Relation SERVICE = new Relation("service"); /** * When included on a versioned resource, this link points to a resource * containing the successor version in the version history. Some systems may * allow multiple of these link relations in order to support branching. */ public static final Relation SUCCESSOR_VERSION = new Relation( "successor-version"); /** * A URI that refers to a parent document in a hierarchy of documents. */ public static final Relation UP = new Relation("up"); /** * When included on a versioned resource, this link points to a resource * containing the version history for this resource. */ public static final Relation VERSION_HISTORY = new Relation( "version-history"); /** * Signifies that the IRI in the value of the href attribute identifies a * resource that is the source of the information provided in the containing * element. */ public static final Relation VIA = new Relation("via"); /** * When included on a versioned resource, this link points to a working copy * for this resource. Some systems may allow multiple of these link * relations. */ public static final Relation WORKING_COPY = new Relation("working-copy"); /** * When included on a working copy, this link points to the versioned * resource from which this working copy was obtained. */ public static final Relation WORKING_COPY_OF = new Relation( "working-copy-of"); /** * Return a String object representing the specified Relation. * * @param rel * The relation to be converted. * @return The String representation of the argument. */ public static String toString(Relation rel) { return rel.name; } /** * Parses a relation name into the equivalent item. * * @param rel * The relation name to parse. * @return The equivalent item. */ public static Relation valueOf(String rel) { Relation result = ALTERNATE; if (rel != null) { if (rel.equalsIgnoreCase("alternate")) { result = ALTERNATE; } else if (rel.equalsIgnoreCase("current")) { result = CURRENT; } else if (rel.equalsIgnoreCase("describedby")) { result = DESCRIBED_BY; } else if (rel.equalsIgnoreCase("edit")) { result = EDIT; } else if (rel.equalsIgnoreCase("edit-media")) { result = EDIT_MEDIA; } else if (rel.equalsIgnoreCase("enclosure")) { result = ENCLOSURE; } else if (rel.equalsIgnoreCase("first")) { result = FIRST; } else if (rel.equalsIgnoreCase("hub")) { result = HUB; } else if (rel.equalsIgnoreCase("last")) { result = LAST; } else if (rel.equalsIgnoreCase("latest-version")) { result = LAST_VERSION; } else if (rel.equalsIgnoreCase("license")) { result = LICENSE; } else if (rel.equalsIgnoreCase("next")) { result = NEXT; } else if (rel.equalsIgnoreCase("next-archive")) { result = NEXT_ARCHIVE; } else if (rel.equalsIgnoreCase("payment")) { result = PAYMENT; } else if (rel.equalsIgnoreCase("predecessor-version")) { result = PREDECESSOR_VERSION; } else if (rel.equalsIgnoreCase("previous")) { result = PREVIOUS; } else if (rel.equalsIgnoreCase("prev-archive")) { result = PREVIOUS_ARCHIVE; } else if (rel.equalsIgnoreCase("related")) { result = RELATED; } else if (rel.equalsIgnoreCase("replies")) { result = REPLIES; } else if (rel.equalsIgnoreCase("self")) { result = SELF; } else if (rel.equalsIgnoreCase("service")) { result = SERVICE; } else if (rel.equalsIgnoreCase("successor-version")) { result = SUCCESSOR_VERSION; } else if (rel.equalsIgnoreCase("up")) { result = UP; } else if (rel.equalsIgnoreCase("version-history")) { result = VERSION_HISTORY; } else if (rel.equalsIgnoreCase("via")) { result = VIA; } else if (rel.equalsIgnoreCase("working-copy")) { result = WORKING_COPY; } else if (rel.equalsIgnoreCase("working-copy-of")) { result = WORKING_COPY_OF; } else { result = new Relation(rel); } } return result; } /** The name of the relation. */ private String name; /** * Constructor. * * @param name * The name of the relation. */ public Relation(String name) { super(); this.name = name; } /** {@inheritDoc} */ @Override public boolean equals(Object object) { return (object instanceof Relation) && name.equalsIgnoreCase(((Relation) object).getName()); } /** * Returns the name of the relation. * * @return The name of the relation. */ public String getName() { return name; } /** {@inheritDoc} */ @Override public int hashCode() { return SystemUtils.hashCode(getName()); } @Override public String toString() { return name; } }