001    /*
002     *    GeoAPI - Java interfaces for OGC/ISO standards
003     *    http://www.geoapi.org
004     *
005     *    Copyright (C) 2004-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.Collection;
035    import java.util.Locale;
036    import org.opengis.metadata.Metadata;
037    import org.opengis.metadata.extent.Extent;
038    import org.opengis.metadata.maintenance.ScopeCode;
039    import org.opengis.metadata.spatial.SpatialRepresentationType;
040    import org.opengis.util.InternationalString;
041    import org.opengis.annotation.UML;
042    import org.opengis.annotation.Profile;
043    
044    import static org.opengis.annotation.Obligation.*;
045    import static org.opengis.annotation.Specification.*;
046    import static org.opengis.annotation.ComplianceLevel.*;
047    
048    
049    /**
050     * Information required to identify a dataset.
051     *
052     * @author  Martin Desruisseaux (IRD)
053     * @version 3.0
054     * @since   2.0
055     *
056     * @navassoc - - - SpatialRepresentationType
057     * @navassoc - - - Resolution
058     * @navassoc - - - CharacterSet
059     * @navassoc - - - TopicCategory
060     * @navassoc - - - Extent
061     */
062    @UML(identifier="MD_DataIdentification", specification=ISO_19115)
063    public interface DataIdentification extends Identification {
064        /**
065         * Method used to spatially represent geographic information.
066         *
067         * @return Method(s) used to spatially represent geographic information.
068         */
069        @Profile(level=CORE)
070        @UML(identifier="spatialRepresentationType", obligation=OPTIONAL, specification=ISO_19115)
071        Collection<SpatialRepresentationType> getSpatialRepresentationTypes();
072    
073        /**
074         * Factor which provides a general understanding of the density of spatial data
075         * in the dataset.
076         *
077         * @return Factor which provides a general understanding of the density of spatial data.
078         */
079        @Profile(level=CORE)
080        @UML(identifier="spatialResolution", obligation=OPTIONAL, specification=ISO_19115)
081        Collection<? extends Resolution> getSpatialResolutions();
082    
083        /**
084         * Language(s) used within the dataset.
085         *
086         * @return Language(s) used.
087         */
088        @Profile(level=CORE)
089        @UML(identifier="language", obligation=MANDATORY, specification=ISO_19115)
090        Collection<Locale> getLanguages();
091    
092        /**
093         * Full name of the character coding standard(s) used for the dataset.
094         *
095         * @return Name(s) of the character coding standard(s) used.
096         *
097         * @condition ISO/IEC 10646-1 not used.
098         */
099        @Profile(level=CORE)
100        @UML(identifier="characterSet", obligation=CONDITIONAL, specification=ISO_19115)
101        Collection<CharacterSet> getCharacterSets();
102    
103        /**
104         * Main theme(s) of the dataset.
105         *
106         * @return Main theme(s).
107         *
108         * @condition If {@linkplain Metadata#getHierarchyLevels() hierarchy level} equals
109         *            {@link ScopeCode#DATASET}.
110         */
111        @Profile(level=CORE)
112        @UML(identifier="topicCategory", obligation=CONDITIONAL, specification=ISO_19115)
113        Collection<TopicCategory> getTopicCategories();
114    
115        /**
116         * Description of the dataset in the producer's processing environment, including items
117         * such as the software, the computer operating system, file name, and the dataset size.
118         *
119         * @return Description of the dataset in the producer's processing environment, or {@code null}.
120         */
121        @UML(identifier="environmentDescription", obligation=OPTIONAL, specification=ISO_19115)
122        InternationalString getEnvironmentDescription();
123    
124        /**
125         * Additional extent information including the bounding polygon, vertical, and temporal
126         * extent of the dataset.
127         *
128         * @return Additional extent information.
129         *
130         * @condition If hierarchyLevel equals dataset? either extent.geographicElement.EX_GeographicBoundingBox
131         *            or extent.geographicElement.EX_GeographicDescription is required.
132         */
133        @Profile(level=CORE)
134        @UML(identifier="extent", obligation=CONDITIONAL, specification=ISO_19115)
135        Collection<? extends Extent> getExtents();
136    
137        /**
138         * Any other descriptive information about the dataset.
139         *
140         * @return Other descriptive information, or {@code null}.
141         */
142        @UML(identifier="supplementalInformation", obligation=OPTIONAL, specification=ISO_19115)
143        InternationalString getSupplementalInformation();
144    }