001    /*
002     *    GeoAPI - Java interfaces for OGC/ISO standards
003     *    http://www.geoapi.org
004     *
005     *    Copyright (C) 2007-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.metadata.identification;
033    
034    import java.util.ArrayList;
035    import java.util.List;
036    
037    import org.opengis.util.CodeList;
038    import org.opengis.annotation.UML;
039    
040    import static org.opengis.annotation.Obligation.CONDITIONAL;
041    import static org.opengis.annotation.Specification.ISO_19115;
042    
043    
044    /**
045     * Type of aggregation activity in which datasets are related
046     *
047     * @author  Ely Conn (Leica Geosystems Geospatial Imaging, LLC)
048     * @version 3.0
049     * @since   2.1
050     */
051    @UML(identifier="DS_InitiativeTypeCode", specification=ISO_19115)
052    public final class InitiativeType extends CodeList<InitiativeType>{
053        /**
054         * Serial number for compatibility with different versions.
055         */
056        private static final long serialVersionUID = -6875282680499638030L;
057    
058        /**
059         * List of all enumerations of this type.
060         * Must be declared before any enum declaration.
061         */
062        private static final List<InitiativeType> VALUES = new ArrayList<InitiativeType>(15);
063    
064        /**
065         * Series of organized planned actions.
066         */
067        @UML(identifier="campaign", obligation=CONDITIONAL, specification=ISO_19115)
068        public static final InitiativeType CAMPAIGN = new InitiativeType("CAMPAIGN");
069    
070        /**
071         * Accumulation of datasets assembled for a specific purpose.
072         */
073        @UML(identifier="collection", obligation=CONDITIONAL, specification=ISO_19115)
074        public static final InitiativeType COLLECTION = new InitiativeType("COLLECTION");
075    
076        /**
077         * Specific performance of a function or group of functions.
078         */
079        @UML(identifier="exercise", obligation=CONDITIONAL, specification=ISO_19115)
080        public static final InitiativeType EXERCISE = new InitiativeType("EXERCISE");
081    
082        /**
083         * Process designed to find if something is effective or valid.
084         */
085        @UML(identifier="experiment", obligation=CONDITIONAL, specification=ISO_19115)
086        public static final InitiativeType EXPERIMENT = new InitiativeType("EXPERIMENT");
087    
088        /**
089         * Search or systematic inquiry.
090         */
091        @UML(identifier="investigation", obligation=CONDITIONAL, specification=ISO_19115)
092        public static final InitiativeType INVESTIGATION = new InitiativeType("INVESTIGATION");
093    
094        /**
095         * Specific operation of a data collection system.
096         */
097        @UML(identifier="mission", obligation=CONDITIONAL, specification=ISO_19115)
098        public static final InitiativeType MISSION = new InitiativeType("MISSION");
099    
100        /**
101         * Device or piece of equipment which detects or records.
102         */
103        @UML(identifier="sensor", obligation=CONDITIONAL, specification=ISO_19115)
104        public static final InitiativeType SENSOR = new InitiativeType("SENSOR");
105    
106        /**
107         * Action that is part of a series of actions.
108         */
109        @UML(identifier="operation", obligation=CONDITIONAL, specification=ISO_19115)
110        public static final InitiativeType OPERATION = new InitiativeType("OPERATION");
111    
112        /**
113         * Vehicle or other support base that holds a sensor.
114         */
115        @UML(identifier="platform", obligation=CONDITIONAL, specification=ISO_19115)
116        public static final InitiativeType PLATFORM = new InitiativeType("PLATFORM");
117    
118        /**
119         * Method of doing something involving a number of steps.
120         */
121        @UML(identifier="process", obligation=CONDITIONAL, specification=ISO_19115)
122        public static final InitiativeType PROCESS = new InitiativeType("PROCESS");
123    
124        /**
125         * Specific planned activity.
126         */
127        @UML(identifier="program", obligation=CONDITIONAL, specification=ISO_19115)
128        public static final InitiativeType PROGRAM = new InitiativeType("PROGRAM");
129    
130        /**
131         * Organized undertaking, research, or development.
132         */
133        @UML(identifier="project", obligation=CONDITIONAL, specification=ISO_19115)
134        public static final InitiativeType PROJECT = new InitiativeType("PROJECT");
135    
136        /**
137         * Examination or investigation.
138         */
139        @UML(identifier="study", obligation=CONDITIONAL, specification=ISO_19115)
140        public static final InitiativeType STUDY = new InitiativeType("STUDY");
141    
142        /**
143         * Piece of work.
144         */
145        @UML(identifier="task", obligation=CONDITIONAL, specification=ISO_19115)
146        public static final InitiativeType TASK = new InitiativeType("TASK");
147    
148        /**
149         * Process of testing to discover or demonstrate something.
150         */
151        @UML(identifier="trial", obligation=CONDITIONAL, specification=ISO_19115)
152        public static final InitiativeType TRIAL = new InitiativeType("TRIAL");
153    
154        /**
155         * Constructs an enum with the given name. The new enum is
156         * automatically added to the list returned by {@link #values}.
157         *
158         * @param name The enum name. This name must not be in use by an other enum of this type.
159         */
160        private InitiativeType(final String name) {
161            super(name, VALUES);
162        }
163    
164        /**
165         * Returns the list of {@code InitiativeType}s.
166         *
167         * @return The list of codes declared in the current JVM.
168         */
169        public static InitiativeType[] values() {
170            synchronized (VALUES) {
171                return VALUES.toArray(new InitiativeType[VALUES.size()]);
172            }
173        }
174    
175        /**
176         * Returns the list of enumerations of the same kind than this enum.
177         */
178        @Override
179        public InitiativeType[] family() {
180            return values();
181        }
182    
183        /**
184         * Returns the initiative type that matches the given string, or returns a
185         * new one if none match it. More specifically, this methods returns the first instance for
186         * which <code>{@linkplain #name() name()}.{@linkplain String#equals equals}(code)</code>
187         * returns {@code true}. If no existing instance is found, then a new one is created for
188         * the given name.
189         *
190         * @param code The name of the code to fetch or to create.
191         * @return A code matching the given name.
192         */
193        public static InitiativeType valueOf(String code) {
194            return valueOf(InitiativeType.class, code);
195        }
196    }