001/*
002 *    GeoAPI - Java interfaces for OGC/ISO standards
003 *    Copyright © 2005-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 * ISO/OGC specifications from which an interface, method, enumeration or code list was derived.
023 * Some specifications are available both at <abbr>OGC</abbr> and <abbr>ISO</abbr>.
024 *
025 * <h2>Specification versions</h2>
026 * Each specification has a {@linkplain #defaultVersion() default version} number, which identifies
027 * more accurately the specification used by most non-deprecated GeoAPI elements:
028 * <ul>
029 *   <li>For <abbr>OGC</abbr> specifications, the version number is the <abbr>OGC</abbr> revision number.</li>
030 *   <li>For <abbr>ISO</abbr> specifications, the version number is the publication year (ignoring corrigendum,
031 *       which are implicit). For example if the specification is {@link #ISO_19115}, then version
032 *       2003 stands for <cite>ISO 19115:2003/Cor.1:2006</cite>.</li>
033 * </ul>
034 * The version numbers are documented in {@code Specification} enumeration constants.
035 * Versions other than the {@linkplain #defaultVersion() default version} may be declared
036 * in the {@link UML#version()} annotation of some GeoAPI elements, usually (but not only)
037 * for deprecated elements.
038 *
039 * @author  Martin Desruisseaux (IRD, Geomatys)
040 * @author  Cédric Briançon (Geomatys)
041 * @author  Johann Sorel (Geomatys)
042 * @version 3.1
043 * @since   2.0
044 *
045 * @see UML#specification()
046 */
047public enum Specification {
048    /**
049     * ISO 19103, Conceptual schema language.
050     * This is the specification for some interfaces in package {@link org.opengis.util}.
051     * This specification provides basic classes such as names, records and units of measurement.
052     *
053     * <p><b>Version numbers used in GeoAPI:</b></p>
054     * <ul>
055     *   <li><b>2005:</b> ISO 19103:2005</li>
056     *   <li><b>2015:</b> ISO 19103:2015   ({@linkplain #defaultVersion() default version})</li>
057     * </ul>
058     *
059     * @see <a href="https://www.iso.org/standard/56734.html">ISO 19103:2015 on standards catalogue</a>
060     */
061    ISO_19103((short) 2015),
062
063    /**
064     * ISO 19107, Feature Geometry (OGC Topic 1).
065     * This is the specification for package {@link org.opengis.geometry} and sub-packages.
066     * It specifies the classes for describing the spatial characteristics of geometries,
067     * and a set of spatial operations.
068     * It treats vector geometry and topology up to three dimensions.
069     *
070     * <p><b>Version numbers used in GeoAPI:</b></p>
071     * <ul>
072     *   <li><b>2003:</b> ISO 19107:2003   ({@linkplain #defaultVersion() default version})</li>
073     * </ul>
074     *
075     * @see <a href="https://www.iso.org/standard/26012.html">ISO 19107:2003 on standards catalogue</a>
076     */
077    ISO_19107((short) 2003),
078
079    /**
080     * ISO 19108, Temporal Schema.
081     * This is the specification for package {@link org.opengis.temporal} and sub-packages.
082     * it defines classes for describing temporal characteristics of geographic information.
083     *
084     * <p><b>Version numbers used in GeoAPI:</b></p>
085     * <ul>
086     *   <li><b>2002:</b> ISO 19108:2002/Cor.1:2006   ({@linkplain #defaultVersion() default version})</li>
087     * </ul>
088     *
089     * @see <a href="https://www.iso.org/standard/26013.html">ISO 19108:2002 on standards catalogue</a>
090     * @see <a href="https://www.iso.org/standard/44883.html">Corrigendum</a>
091     */
092    ISO_19108((short) 2002),
093
094    /**
095     * ISO 19109, Rules for application schema.
096     * This is the specification for package {@link org.opengis.feature}.
097     * It defines principles for the definition of features.
098     *
099     * <p><b>Version numbers used in GeoAPI:</b></p>
100     * <ul>
101     *   <li><b>2013:</b> ISO 19109:2013 draft   ({@linkplain #defaultVersion() default version})</li>
102     * </ul>
103     *
104     * @see <a href="https://www.iso.org/standard/59193.html">ISO 19109:2015 on standards catalogue</a>
105     *
106     * @since 3.1
107     */
108    ISO_19109((short) 2013),
109
110    /**
111     * ISO 19111, Referencing by coordinates (OGC Topic 2).
112     * This is the specification for package {@link org.opengis.referencing} and sub-packages.
113     * It defines the minimum data required to define coordinate reference systems,
114     * and the classes for describe operations that change coordinate values.
115     *
116     * <p><b>Version numbers used in GeoAPI:</b></p>
117     * <ul>
118     *   <li><b>2003:</b> OGC 03-073r1</li>
119     *   <li><b>2007:</b> ISO 19111:2007</li>
120     *   <li><b>2019:</b> ISO 19111:2019   ({@linkplain #defaultVersion() default version})</li>
121     * </ul>
122     *
123     * @see #OGC_01009
124     * @see <a href="https://www.iso.org/standard/74039.html">ISO 19111:2019 on standards catalogue</a>
125     * @see <a href="https://portal.ogc.org/files/18-005r5">Download from OGC</a>
126     */
127    ISO_19111((short) 2019),
128
129    /**
130     * ISO 19112, Spatial referencing by geographic identifiers.
131     * This is the specification for package {@link org.opengis.referencing.gazetteer}.
132     * It defines the essential components of a gazetteer.
133     *
134     * <p><b>Version numbers used in GeoAPI:</b></p>
135     * <ul>
136     *   <li><b>2003:</b> ISO 19112:2003   ({@linkplain #defaultVersion() default version})</li>
137     * </ul>
138     *
139     * @see <a href="https://www.iso.org/standard/26017.html">ISO 19112:2003 on standards catalogue</a>
140     * @see <a href="https://portal.opengeospatial.org/files/?artifact_id=46964">OGC 11-122r1 Gazetteer Service — Profile of the Web Feature Service</a>
141     *
142     * @since 3.1
143     */
144    ISO_19112((short) 2003),
145
146    /**
147     * ISO 19115-1, Metadata part 1: fundamentals (OGC Topic 11).
148     * This is the specification for package {@link org.opengis.metadata} and most sub-packages.
149     * It defines the classes for describing geographic information and services by means of metadata.
150     * It provides information about the identification, the extent, the quality, the spatial and temporal aspects,
151     * the content, the spatial reference, the portrayal, distribution, and other properties of digital geographic
152     * data and services.
153     *
154     * <p><b>Version numbers used in GeoAPI:</b></p>
155     * <ul>
156     *   <li><b>2003:</b> ISO 19115:2003/Cor.1:2006</li>
157     *   <li><b>2014:</b> ISO 19115-1:2014   ({@linkplain #defaultVersion() default version})</li>
158     *   <li><b>2018:</b> ISO 19115-1:2014/Amd 1:2018</li>
159     *   <li><b>2020:</b> ISO 19115-1:2014/Amd 2:2020</li>
160     * </ul>
161     *
162     * @see <a href="https://www.iso.org/standard/53798.html">ISO 19115-1:2014 on standards catalogue</a>
163     */
164    ISO_19115((short) 2014),
165
166    /**
167     * ISO 19115-2, Metadata part 2: Extensions for acquisition and processing.
168     * This is the specification for some sub-packages of {@link org.opengis.metadata}.
169     * It extends the existing geographic metadata standard by defining the classes for
170     * describing imagery and gridded data. It provides information about the properties
171     * of the measuring equipment used to acquire the data, the geometry of the measuring process
172     * employed by the equipment, and the production process used to digitize the raw data.
173     *
174     * <p><b>Version numbers used in GeoAPI:</b></p>
175     * <ul>
176     *   <li><b>2009:</b> ISO 19115-2:2009</li>
177     *   <li><b>2019:</b> ISO 19115-2:2019   ({@linkplain #defaultVersion() default version})</li>
178     * </ul>
179     *
180     * @see <a href="https://www.iso.org/standard/67039.html">ISO 19115-2:2019 on standards catalogue</a>
181     */
182    ISO_19115_2((short) 2019),
183
184    /**
185     * ISO 19115-3, Metadata part 3: XML schema implementation for fundamental concepts.
186     * This is the specification for package {@link org.opengis.metadata} and sub-packages.
187     * It defines an integrated <abbr>XML</abbr> implementation of ISO 19115‑1, ISO 19115‑2,
188     * and concepts from ISO 19139.
189     *
190     * <p><b>Version numbers used in GeoAPI:</b></p>
191     * <ul>
192     *   <li><b>2016:</b> ISO 19115-3:2016   ({@linkplain #defaultVersion() default version})</li>
193     * </ul>
194     *
195     * @see <a href="https://www.iso.org/standard/32579.html">ISO/TS 19115-3:2016 on standards catalogue</a>
196     *
197     * @since 3.1
198     */
199    ISO_19115_3((short) 2016),
200
201    /**
202     * ISO 19117, Portrayal.
203     * This is an abstract specification for portraying features.
204     * It defines a schema describing the portrayal of geographic information in a form understandable by humans.
205     * It does not include standardization of cartographic symbols, and their geometric and functional description.
206     *
207     * <p><b>Version numbers used in GeoAPI:</b></p>
208     * <ul>
209     *   <li><b>2005:</b> ISO 19117:2005   ({@linkplain #defaultVersion() default version})</li>
210     * </ul>
211     *
212     * @see <a href="https://www.iso.org/standard/40395.html">ISO 19117:2005 on standards catalogue</a>
213     */
214    ISO_19117((short) 2005),
215
216    /**
217     * ISO 19123, Schema for coverage geometry and functions (OGC Topic 6).
218     * This is the specification for package {@link org.opengis.coverage} and sub-packages.
219     * Coverages support mapping from a spatial, temporal or spatiotemporal domain to feature attribute values
220     * where feature attribute types are common to all geographic positions within the domain.
221     * ISO 19123 defines the relationship between the domain of a coverage and an associated attribute range.
222     *
223     * <p><b>Version numbers used in GeoAPI:</b></p>
224     * <ul>
225     *   <li><b>2005:</b> ISO 19123:2005   ({@linkplain #defaultVersion() default version})</li>
226     * </ul>
227     *
228     * @see #OGC_01004
229     * @see <a href="https://www.iso.org/standard/40121.html">ISO 19123:2005 on standards catalogue</a>
230     * @see <a href="http://portal.opengeospatial.org/files/?artifact_id=19820">Download from OGC</a>
231     */
232    ISO_19123((short) 2005),
233
234    /**
235     * ISO 19128, Web map server interface.
236     * It specifies the behaviour of a service that produces spatially referenced maps
237     * dynamically from geographic information.
238     *
239     * <p><b>Version numbers used in GeoAPI:</b></p>
240     * <ul>
241     *   <li><b>2005:</b> ISO 19128:2005   ({@linkplain #defaultVersion() default version})</li>
242     * </ul>
243     *
244     * @see <a href="https://www.iso.org/standard/32546.html">ISO 19128:2005 on standards catalogue</a>
245     * @see <a href="http://portal.opengeospatial.org/files/?artifact_id=5316">Download from OGC</a>
246     */
247    ISO_19128((short) 2005),
248
249    /**
250     * ISO 19139, Metadata XML schema implementation.
251     * This is the specification for package {@link org.opengis.metadata} and sub-packages.
252     * It defines Geographic MetaData XML ({@code gmd}) encoding,
253     * an XML Schema implementation derived from ISO 19115.
254     *
255     * <p><b>Version numbers used in GeoAPI:</b></p>
256     * <ul>
257     *   <li><b>2007:</b> ISO 19139:2007   ({@linkplain #defaultVersion() default version})</li>
258     * </ul>
259     *
260     * @see <a href="https://www.iso.org/standard/32557.html">ISO/TS 19139:2007 on standards catalogue</a>
261     *
262     * @deprecated since {@link #ISO_19115_3} publication, this standard does not define new elements used by GeoAPI.
263     */
264    @Deprecated(since="3.1")
265    ISO_19139((short) 2007),
266
267    /**
268     * ISO 19143, Filter encoding.
269     * This is the specification for package {@link org.opengis.filter} and sub-packages.
270     * It defines querying in order to obtain a subset of data which contains certain desired information.
271     *
272     * <p><b>Version numbers used in GeoAPI:</b></p>
273     * <ul>
274     *   <li><b>2010:</b> ISO 19143:2010   ({@linkplain #defaultVersion() default version})</li>
275     * </ul>
276     *
277     * @see <a href="https://www.iso.org/standard/42137.html">ISO 19143:2010 on standards catalogue</a>
278     * @see <a href="http://docs.opengeospatial.org/is/09-026r2/09-026r2.html">OGC 09-026 on OGC Public Document Repository</a>
279     *
280     * @since 3.1
281     */
282    ISO_19143((short) 2010),
283
284    /**
285     * ISO 19157, Data quality.
286     * This is the specification for package {@link org.opengis.metadata.quality} and sub-packages.
287     * It establishes the classes for describing the quality of geographic data.
288     *
289     * <p><b>Version numbers used in GeoAPI:</b></p>
290     * <ul>
291     *   <li><b>2013:</b> ISO 19157:2013   ({@linkplain #defaultVersion() default version})</li>
292     * </ul>
293     *
294     * @see <a href="https://www.iso.org/standard/32575.html">ISO/TS 19157:2013 on standards catalogue</a>
295     *
296     * @since 3.1
297     */
298    ISO_19157((short) 2013),
299
300    /**
301     * ISO 19162, Well known text representation of coordinate reference systems.
302     * This is the specification of input and output format of
303     * {@link org.opengis.referencing.crs.CRSFactory#createFromWKT(String)} and
304     * {@link org.opengis.referencing.crs.CoordinateReferenceSystem#toWKT()}.
305     * It defines the structure and content of a text string implementation of the abstract model described in ISO 19111.
306     * The string defines frequently needed types of coordinate reference systems and coordinate operations
307     * in a self-contained form that is readable by machines and by humans.
308     *
309     * <p><b>Version numbers used in GeoAPI:</b></p>
310     * <ul>
311     *   <li><b>2015:</b> ISO 19162:2015   ({@linkplain #defaultVersion() default version})</li>
312     * </ul>
313     *
314     * @see <a href="https://www.iso.org/standard/63094.html">ISO 19162:2015 on standards catalogue</a>
315     *
316     * @since 3.1
317     */
318    ISO_19162((short) 2015),
319
320    /**
321     * GO-1 Application Objects.
322     *
323     * <p><b>Version numbers used in GeoAPI:</b></p>
324     * <ul>
325     *   <li><b>10:</b> OGC 03-064r10   ({@linkplain #defaultVersion() default version})</li>
326     * </ul>
327     *
328     * @see <a href="http://www.opengeospatial.org/standards/go">Download from OGC</a>
329     *
330     * @deprecated This specification has been retired.
331     */
332    @Deprecated(since="3.1")
333    OGC_03064((short) 10),
334
335    /**
336     * Coordinate Transformation Services.
337     * This is the specification used as a complement of {@linkplain #ISO_19111 ISO 19111}
338     * when an aspect was not defined in the ISO specification.
339     *
340     * <p><b>Version numbers used in GeoAPI:</b></p>
341     * <ul>
342     *   <li><b>1:</b> OGC 01-009   ({@linkplain #defaultVersion() default version})</li>
343     * </ul>
344     *
345     * @see #ISO_19111
346     * @see <a href="http://www.opengeospatial.org/standards/ct">Download from OGC</a>
347     */
348    OGC_01009((short) 1),
349
350    /**
351     * Grid Coverages.
352     * This is the specification used as a complement of {@linkplain #ISO_19123 ISO 19123}
353     * when an aspect was not defined in the ISO specification.
354     *
355     * <p><b>Version numbers used in GeoAPI:</b></p>
356     * <ul>
357     *   <li><b>1:</b> OGC 01-004   ({@linkplain #defaultVersion() default version})</li>
358     * </ul>
359     *
360     * @see #ISO_19123
361     * @see <a href="http://www.opengeospatial.org/standards/gc">Download from OGC</a>
362     */
363    OGC_01004((short) 1),
364
365    /**
366     * Moving Features specification.
367     * This is the specification used as a complement of {@linkplain #ISO_19109 ISO 10109}
368     * for defining dynamic attributes.
369     *
370     * <p><b>Version numbers used in GeoAPI:</b></p>
371     * <ul>
372     *   <li><b>1:</b> OGC 18-075   ({@linkplain #defaultVersion() default version})</li>
373     * </ul>
374     *
375     * @see #ISO_19109
376     * @see <a href="http://docs.opengeospatial.org/is/18-075/18-075.html">OGC 18-075 on OGC Public Document Repository</a>
377     *
378     * @since 3.1
379     */
380    OGC_MOVING_FEATURE((short) 1),
381
382    /**
383     * Observations and Measurements, part 1.
384     * This is the specification for package {@link org.opengis.observation}.
385     *
386     * @deprecated To be replaced by Topic 20: Observations and Measurements
387     * @todo Remove before release, since it was not part of GeoAPI 3.0.2.
388     *
389     * @since 3.1
390     */
391    @Deprecated(forRemoval=true)
392    OGC_07022((short) 1),
393
394    /**
395     * Specification not yet determined. This is a temporary enumeration
396     * for the processing of API submitted by some contributors.
397     *
398     * @deprecated To be removed.
399     */
400    @Deprecated(since="3.1", forRemoval=true)
401    UNSPECIFIED((short) 1);
402
403    /**
404     * The default version of OGC/ISO standard for this enumeration constant.
405     */
406    private final short defaultVersion;
407
408    /**
409     * Creates a new enum constant with the given default version.
410     *
411     * @param defaultVersion  the default version of OGC/ISO standard for this enumeration constant.
412     */
413    private Specification(final short defaultVersion) {
414        this.defaultVersion = defaultVersion;
415    }
416
417    /**
418     * The default version of OGC/ISO standard for this enumeration constant.
419     * This is the version used when no value was explicitly given to the {@link UML#version()} annotation.
420     * The meaning of this numerical code is documented in the Javadoc of this {@code Specification} constant.
421     * This is usually the OGC revision number or ISO publication year.
422     *
423     * <div class="note"><b>Examples:</b>
424     * <ul>
425     *   <li>For {@link #ISO_19115}, version 2003 stands for <cite>ISO 19115:2003/Cor.1:2006</cite>
426     *       and version 2014 stands for <cite>ISO 19115:2014</cite>.</li>
427     * </ul></div>
428     *
429     * @return the default version of OGC/ISO standard for this enumeration constant.
430     *
431     * @see UML#version()
432     *
433     * @since 3.1
434     */
435    public short defaultVersion() {
436        return defaultVersion;
437    }
438}