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.lineage;
033    
034    import java.util.Collection;
035    import org.opengis.metadata.extent.Extent;
036    import org.opengis.metadata.identification.RepresentativeFraction;
037    import org.opengis.metadata.citation.Citation;
038    import org.opengis.referencing.ReferenceSystem;
039    import org.opengis.util.InternationalString;
040    import org.opengis.annotation.UML;
041    import org.opengis.metadata.Identifier;
042    
043    import static org.opengis.annotation.Obligation.*;
044    import static org.opengis.annotation.Specification.*;
045    
046    
047    /**
048     * Information about the source data used in creating the data specified by the scope.
049     *
050     * @author  Martin Desruisseaux (IRD)
051     * @author  Cory Horner (Refractions Research)
052     * @author  Cédric Briançon (Geomatys)
053     * @version 3.0
054     * @since   2.0
055     *
056     * @navassoc & - - RepresentativeFraction
057     * @navassoc 1 - - ReferenceSystem
058     * @navassoc 1 - - Citation
059     * @navassoc - - - Extent
060     * @navassoc - - - ProcessStep
061     * @navassoc 1 - - Identifier
062     * @navassoc 1 - - NominalResolution
063     */
064    @UML(identifier="LI_Source", specification=ISO_19115)
065    public interface Source {
066        /**
067         * Detailed description of the level of the source data.
068         *
069         * @return Description of the level of the source data, or {@code null}.
070         *
071         * @condition {@linkplain #getSourceExtents() Source extent} not provided.
072         */
073        @UML(identifier="description", obligation=CONDITIONAL, specification=ISO_19115)
074        InternationalString getDescription();
075    
076        /**
077         * Denominator of the representative fraction on a source map.
078         *
079         * @return Representative fraction on a source map, or {@code null}.
080         */
081        @UML(identifier="scaleDenominator", obligation=OPTIONAL, specification=ISO_19115)
082        RepresentativeFraction getScaleDenominator();
083    
084        /**
085         * Spatial reference system used by the source data.
086         *
087         * @return Spatial reference system used by the source data, or {@code null}.
088         */
089        @UML(identifier="sourceReferenceSystem", obligation=OPTIONAL, specification=ISO_19115)
090        ReferenceSystem getSourceReferenceSystem();
091    
092        /**
093         * Recommended reference to be used for the source data.
094         *
095         * @return Recommended reference to be used for the source data, or {@code null}.
096         */
097        @UML(identifier="sourceCitation", obligation=OPTIONAL, specification=ISO_19115)
098        Citation getSourceCitation();
099    
100        /**
101         * Information about the spatial, vertical and temporal extent of the source data.
102         *
103         * @return Information about the extent of the source data.
104         *
105         * @condition {@linkplain #getDescription() Description} not provided.
106         */
107        @UML(identifier="sourceExtent", obligation=CONDITIONAL, specification=ISO_19115)
108        Collection<? extends Extent> getSourceExtents();
109    
110        /**
111         * Information about an event in the creation process for the source data.
112         *
113         * @return Information about an event in the creation process.
114         */
115        @UML(identifier="sourceStep", obligation=OPTIONAL, specification=ISO_19115)
116        Collection<? extends ProcessStep> getSourceSteps();
117    
118        /**
119         * Processing level of the source data.
120         *
121         * @return Processing level of the source data.
122         *
123         * @since 2.3
124         */
125        @UML(identifier="processedLevel", obligation=OPTIONAL, specification=ISO_19115_2)
126        Identifier getProcessedLevel();
127    
128        /**
129         * Distance between consistent parts (centre, left side, right side) of two adjacent
130         * pixels.
131         *
132         * @return Distance between consistent parts of two adjacent pixels.
133         *
134         * @since 2.3
135         */
136        @UML(identifier="resolution", obligation=OPTIONAL, specification=ISO_19115_2)
137        NominalResolution getResolution();
138    }