001    /*
002     *    GeoAPI - Java interfaces for OGC/ISO standards
003     *    http://www.geoapi.org
004     *
005     *    Copyright (C) 2004-2013 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 org.opengis.metadata.citation.Citation;
036    import org.opengis.metadata.citation.ResponsibleParty;
037    import org.opengis.metadata.maintenance.MaintenanceInformation;
038    import org.opengis.metadata.constraint.Constraints;
039    import org.opengis.metadata.distribution.Format;
040    import org.opengis.util.InternationalString;
041    import org.opengis.annotation.UML;
042    import org.opengis.annotation.Profile;
043    import org.opengis.annotation.Classifier;
044    import org.opengis.annotation.Stereotype;
045    
046    import static org.opengis.annotation.Obligation.*;
047    import static org.opengis.annotation.Specification.*;
048    import static org.opengis.annotation.ComplianceLevel.*;
049    
050    
051    /**
052     * Basic information required to uniquely identify a resource or resources.
053     *
054     * @author  Martin Desruisseaux (IRD)
055     * @author  Cory Horner (Refractions Research)
056     * @version 3.1
057     * @since   2.0
058     *
059     * @navassoc 1 - - Citation
060     * @navassoc - - - Progress
061     * @navassoc - - - ResponsibleParty
062     * @navassoc - - - MaintenanceInformation
063     * @navassoc - - - BrowseGraphic
064     * @navassoc - - - Format
065     * @navassoc - - - Keywords
066     * @navassoc - - - Usage
067     * @navassoc - - - Constraints
068     * @navassoc - - - AggregateInformation
069     */
070    @Classifier(Stereotype.ABSTRACT)
071    @UML(identifier="MD_Identification", specification=ISO_19115)
072    public interface Identification {
073        /**
074         * Citation data for the resource(s).
075         *
076         * @return Citation data for the resource(s).
077         */
078        @Profile(level=CORE)
079        @UML(identifier="citation", obligation=MANDATORY, specification=ISO_19115)
080        Citation getCitation();
081    
082        /**
083         * Brief narrative summary of the content of the resource(s).
084         *
085         * @return Brief narrative summary of the content.
086         */
087        @Profile(level=CORE)
088        @UML(identifier="abstract", obligation=MANDATORY, specification=ISO_19115)
089        InternationalString getAbstract();
090    
091        /**
092         * Summary of the intentions with which the resource(s) was developed.
093         *
094         * @return The intentions with which the resource(s) was developed, or {@code null}.
095         */
096        @UML(identifier="purpose", obligation=OPTIONAL, specification=ISO_19115)
097        InternationalString getPurpose();
098    
099        /**
100         * Recognition of those who contributed to the resource(s).
101         *
102         * @return Recognition of those who contributed to the resource(s).
103         */
104        @UML(identifier="credit", obligation=OPTIONAL, specification=ISO_19115)
105        Collection<String> getCredits();
106    
107        /**
108         * Status of the resource(s).
109         *
110         * @return Status of the resource(s), or {@code null}.
111         */
112        @UML(identifier="status", obligation=OPTIONAL, specification=ISO_19115)
113        Collection<Progress> getStatus();
114    
115        /**
116         * Identification of, and means of communication with, person(s) and organizations(s)
117         * associated with the resource(s).
118         *
119         * @return Means of communication with person(s) and organizations(s) associated with the
120         *         resource(s).
121         *
122         * @see org.opengis.metadata.Metadata#getContacts()
123         */
124        @Profile(level=CORE)
125        @UML(identifier="pointOfContact", obligation=OPTIONAL, specification=ISO_19115)
126        Collection<? extends ResponsibleParty> getPointOfContacts();
127    
128        /**
129         * Provides information about the frequency of resource updates, and the scope of those updates.
130         *
131         * @return Frequency and scope of resource updates.
132         */
133        @UML(identifier="resourceMaintenance", obligation=OPTIONAL, specification=ISO_19115)
134        Collection<? extends MaintenanceInformation> getResourceMaintenances();
135    
136        /**
137         * Provides a graphic that illustrates the resource(s) (should include a legend for the graphic).
138         *
139         * @return A graphic that illustrates the resource(s).
140         */
141        @UML(identifier="graphicOverview", obligation=OPTIONAL, specification=ISO_19115)
142        Collection<? extends BrowseGraphic> getGraphicOverviews();
143    
144        /**
145         * Provides a description of the format of the resource(s).
146         *
147         * @return Description of the format.
148         */
149        @UML(identifier="resourceFormat", obligation=OPTIONAL, specification=ISO_19115)
150        Collection<? extends Format> getResourceFormats();
151    
152        /**
153         * Provides category keywords, their type, and reference source.
154         *
155         * @return Category keywords, their type, and reference source.
156         */
157        @UML(identifier="descriptiveKeywords", obligation=OPTIONAL, specification=ISO_19115)
158        Collection<? extends Keywords> getDescriptiveKeywords();
159    
160        /**
161         * Provides basic information about specific application(s) for which the resource(s)
162         * has/have been or is being used by different users.
163         *
164         * @return Information about specific application(s) for which the resource(s)
165         *         has/have been or is being used.
166         */
167        @UML(identifier="resourceSpecificUsage", obligation=OPTIONAL, specification=ISO_19115)
168        Collection<? extends Usage> getResourceSpecificUsages();
169    
170        /**
171         * Provides information about constraints which apply to the resource(s).
172         *
173         * @return Constraints which apply to the resource(s).
174         */
175        @UML(identifier="resourceConstraints", obligation=OPTIONAL, specification=ISO_19115)
176        Collection<? extends Constraints> getResourceConstraints();
177    
178        /**
179         * Provides aggregate dataset information.
180         *
181         * @return Aggregate dataset information.
182         *
183         * @since 2.1
184         */
185        @UML(identifier="aggregationInfo", obligation=OPTIONAL, specification=ISO_19115)
186        Collection<? extends AggregateInformation> getAggregationInfo();
187    }