001/*
002 *    GeoAPI - Java interfaces for OGC/ISO standards
003 *    Copyright © 2013-2024 Open Geospatial Consortium, Inc.
004 *    http://www.geoapi.org
005 *
006 *    Licensed under the Apache License, Version 2.0 (the "License");
007 *    you may not use this file except in compliance with the License.
008 *    You may obtain a copy of the License at
009 *
010 *        http://www.apache.org/licenses/LICENSE-2.0
011 *
012 *    Unless required by applicable law or agreed to in writing, software
013 *    distributed under the License is distributed on an "AS IS" BASIS,
014 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 *    See the License for the specific language governing permissions and
016 *    limitations under the License.
017 */
018package org.opengis.annotation;
019
020
021/**
022 * Type of modeling element as declared in the OGC/ISO UML diagram.
023 * Values of this enumeration are associated to GeoAPI interfaces by the {@link Classifier}
024 * annotation.
025 *
026 * <p>This enumeration is closely related to the ISO 19115 {@link org.opengis.metadata.Datatype} code list,
027 * but not identical since ISO 19115 specifies <i>datatype</i> and <i>stereotype</i> as two distinct information.
028 * Furthermore, {@code Stereotype} needs to be defined as an {@code Enum} for allowing usages in Java annotations</p>
029 *
030 * <p>This enumeration does not include the <i>code list</i> and <i>enumeration</i> stereotypes,
031 * because instances of those types are identified by the {@link org.opengis.util.CodeList} and
032 * {@link Enum} base classes respectively.</p>
033 *
034 * @author  Martin Desruisseaux (Geomatys)
035 * @version 3.1
036 * @since   3.1
037 *
038 * @see org.opengis.metadata.Datatype
039 * @see <a href="http://en.wikipedia.org/wiki/Stereotype_%28UML%29">Stereotype on Wikipedia</a>
040 */
041public enum Stereotype {
042    /**
043     * Class that specifies a domain of objects together with the operations applicable to the
044     * objects, without defining the physical implementation of those objects.
045     *
046     * <p>This is the default value for interfaces without {@link Classifier} annotation.</p>
047     *
048     * @see org.opengis.metadata.Datatype#TYPE_CLASS
049     */
050    TYPE,
051
052    /**
053     * Encapsulation of data, as opposed to taxonomic or behavioural descriptions.
054     * Data types may not have an identity of their own and are usually aggregated
055     * into some sort of container such as being an attribute in another class.
056     *
057     * @see org.opengis.metadata.Datatype#DATATYPE_CLASS
058     */
059    DATATYPE,
060
061    /**
062     * Root class for a structural polymorphism. Abstract types are not directly instantiable.
063     *
064     * @see org.opengis.metadata.Datatype#ABSTRACT_CLASS
065     */
066    ABSTRACT,
067
068    /**
069     * Type consisting of one and only one of several alternatives (listed as member attributes).
070     *
071     * @see org.opengis.metadata.Datatype#UNION_CLASS
072     */
073    UNION,
074
075    /**
076     * Class whose instances are classes.
077     *
078     * @see org.opengis.metadata.Datatype#META_CLASS
079     */
080    METACLASS
081}