001    /*
002     *    GeoAPI - Java interfaces for OGC/ISO standards
003     *    http://www.geoapi.org
004     *
005     *    Copyright (C) 2009-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.acquisition;
033    
034    import java.util.Date;
035    import java.util.Collection;
036    
037    import org.opengis.annotation.UML;
038    import org.opengis.metadata.Identifier;
039    import org.opengis.metadata.citation.Citation;
040    import org.opengis.metadata.citation.ResponsibleParty;
041    
042    import static org.opengis.annotation.Obligation.*;
043    import static org.opengis.annotation.Specification.*;
044    
045    
046    /**
047     * Requirement to be satisfied by the planned data acquisition.
048     *
049     * @author  Cédric Briançon (Geomatys)
050     * @version 3.0
051     * @since   2.3
052     *
053     * @navassoc 1 - - Citation
054     * @navassoc 1 - - Identifier
055     * @navassoc - - - ResponsibleParty
056     * @navassoc 1 - - Priority
057     * @navassoc 1 - - RequestDate
058     * @navassoc - - - Plan
059     */
060    @UML(identifier="MI_Requirement", specification=ISO_19115_2)
061    public interface Requirement {
062        /**
063         * Identification of reference or guidance material for the requirement.
064         *
065         * @return Identification of reference or guidance material.
066         */
067        @UML(identifier="citation", obligation=OPTIONAL, specification=ISO_19115_2)
068        Citation getCitation();
069    
070        /**
071         * Unique name, or code, for the requirement.
072         *
073         * @return Unique name or code.
074         */
075        @UML(identifier="identifier", obligation=MANDATORY, specification=ISO_19115_2)
076        Identifier getIdentifier();
077    
078        /**
079         * Origin of requirement.
080         *
081         * @return Origin of requirement.
082         */
083        @UML(identifier="requestor", obligation=MANDATORY, specification=ISO_19115_2)
084        Collection<? extends ResponsibleParty> getRequestors();
085    
086        /**
087         * Person(s), or body(ies), to receive results of requirement.
088         *
089         * @return Person(s), or body(ies), to receive results.
090         */
091        @UML(identifier="recipient", obligation=MANDATORY, specification=ISO_19115_2)
092        Collection<? extends ResponsibleParty> getRecipients();
093    
094        /**
095         * Relative ordered importance, or urgency, of the requirement.
096         *
097         * @return Relative ordered importance, or urgency.
098         */
099        @UML(identifier="priority", obligation=MANDATORY, specification=ISO_19115_2)
100        Priority getPriority();
101    
102        /**
103         * Required or preferred acquisition date and time.
104         *
105         * @return Required or preferred acquisition date and time.
106         */
107        @UML(identifier="requestedDate", obligation=MANDATORY, specification=ISO_19115_2)
108        RequestedDate getRequestedDate();
109    
110        /**
111         * Date and time after which collection is no longer valid.
112         * <p>
113         * <TABLE WIDTH="80%" ALIGN="center" CELLPADDING="18" BORDER="4" BGCOLOR="#FFE0B0">
114         *   <TR><TD>
115         *     <P align="justify"><B>Warning:</B> The return type of this method may change
116         *     in GeoAPI 3.1 release. It may be replaced by a type matching more closely
117         *     either ISO 19108 (<cite>Temporal Schema</cite>) or ISO 19103.</P>
118         *   </TD></TR>
119         * </TABLE>
120         *
121         * @return Date and time after which collection is no longer valid.
122         */
123        @UML(identifier="expiryDate", obligation=MANDATORY, specification=ISO_19115_2)
124        Date getExpiryDate();
125    
126        /**
127         * Plan that identifies solution to satisfy the requirement.
128         *
129         * @return Plan that identifies solution to satisfy the requirement.
130         */
131        @UML(identifier="satisfiedPlan", obligation=OPTIONAL, specification=ISO_19115_2)
132        Collection<? extends Plan> getSatisfiedPlans();
133    }