001 /*
002 * GeoAPI - Java interfaces for OGC/ISO standards
003 * http://www.geoapi.org
004 *
005 * Copyright (C) 2005-2012 Open Geospatial Consortium, Inc.
006 * All Rights Reserved. http://www.opengeospatial.org/ogc/legal
007 *
008 * Permission to use, copy, and modify this software and its documentation, with
009 * or without modification, for any purpose and without fee or royalty is hereby
010 * granted, provided that you include the following on ALL copies of the software
011 * and documentation or portions thereof, including modifications, that you make:
012 *
013 * 1. The full text of this NOTICE in a location viewable to users of the
014 * redistributed or derivative work.
015 * 2. Notice of any changes or modifications to the OGC files, including the
016 * date changes were made.
017 *
018 * THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
019 * NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
020 * TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
021 * THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
022 * PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
023 *
024 * COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
025 * CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
026 *
027 * The name and trademarks of copyright holders may NOT be used in advertising or
028 * publicity pertaining to the software without specific, written prior permission.
029 * Title to copyright in this software and any associated documentation will at all
030 * times remain with copyright holders.
031 */
032 package org.opengis.annotation;
033
034 import static org.opengis.annotation.Specification.*;
035
036
037 /**
038 * Obligation of the element or entity. The enum values declared here duplicate the code list
039 * elements declared in the {@link org.opengis.metadata.Obligation} code list from the metadata
040 * package.
041 *
042 * @author Martin Desruisseaux (IRD)
043 * @version 3.0
044 * @since 2.0
045 */
046 @UML(identifier="MD_ObligationCode", specification=ISO_19115)
047 public enum Obligation {
048 /*
049 * Implementation note: Enum or CodeList elements are usually declared with
050 * Obligation.CONDITIONAL. However such declaration in the Obligation enum
051 * causes a recursive dependency. Some compilers (like Oracle javac) accept
052 * this recursive dependency while some other (Eclipse, Scala...) reject it.
053 * For better portability, we have to omit the Obligation declarations here.
054 */
055
056 /**
057 * Element is required when a specific condition is met.
058 */
059 @UML(identifier="conditional", specification=ISO_19115)
060 CONDITIONAL,
061
062 /**
063 * Element is not required.
064 */
065 @UML(identifier="optional", specification=ISO_19115)
066 OPTIONAL,
067
068 /**
069 * Element is always required.
070 */
071 @UML(identifier="mandatory", specification=ISO_19115)
072 MANDATORY,
073
074 /**
075 * The element should always be {@code null}. This obligation code is used only when
076 * a sub-interface overrides an association and force it to a {@code null} value.
077 * An example is {@link org.opengis.referencing.datum.TemporalDatum#getAnchorPoint()}.
078 *
079 * @departure constraint
080 * ISO specifications sometime override a parent method with a comment saying that the method
081 * is not allowed for a particular class. Since there is no construct in Java for expressing this
082 * constraint in the method signature, GeoAPI defines a <code>FORBIDDEN</code> obligation
083 * (not in original ISO specifications) to be used with the <code>@UML</code> annotation and
084 * which adds a flag in the Java documentation.
085 */
086 FORBIDDEN
087 }