001/*
002 *    GeoAPI - Java interfaces for OGC/ISO standards
003 *    Copyright © 2003-2023 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.metadata.acquisition;
019
020import java.util.Collection;
021import java.util.Collections;
022
023import org.opengis.annotation.UML;
024import org.opengis.metadata.Identifier;
025import org.opengis.metadata.citation.Citation;
026import org.opengis.metadata.identification.Progress;
027import org.opengis.util.InternationalString;
028
029import static org.opengis.annotation.Obligation.*;
030import static org.opengis.annotation.Specification.*;
031
032
033/**
034 * Designations for the operation used to acquire the dataset.
035 *
036 * @author  Cédric Briançon (Geomatys)
037 * @version 3.1
038 * @since   2.3
039 */
040@UML(identifier="MI_Operation", specification=ISO_19115_2)
041public interface Operation {
042    /**
043     * Description of the mission on which the platform observations are made and the
044     * objectives of that mission.
045     *
046     * @return description of the mission, or {@code null}.
047     */
048    @UML(identifier="description", obligation=OPTIONAL, specification=ISO_19115_2)
049    default InternationalString getDescription() {
050        return null;
051    }
052
053    /**
054     * Identification of the mission.
055     *
056     * @return identification of the mission, or {@code null}.
057     */
058    @UML(identifier="citation", obligation=OPTIONAL, specification=ISO_19115_2)
059    default Citation getCitation() {
060        return null;
061    }
062
063    /**
064     * Unique identification of the operation.
065     *
066     * @return unique identification of the operation.
067     */
068    @UML(identifier="identifier", obligation=OPTIONAL, specification=ISO_19115_2)
069    default Identifier getIdentifier() {
070        return null;
071    }
072
073    /**
074     * Status of the data acquisition.
075     *
076     * @return status of the data acquisition.
077     */
078    @UML(identifier="status", obligation=MANDATORY, specification=ISO_19115_2)
079    Progress getStatus();
080
081    /**
082     * Collection technique for the operation.
083     *
084     * @return collection technique for the operation, or {@code null}.
085     */
086    @UML(identifier="type", obligation=OPTIONAL, specification=ISO_19115_2)
087    default OperationType getType() {
088        return null;
089    }
090
091    /**
092     * Sub-missions that make up part of a larger mission.
093     *
094     * @return sub-missions.
095     */
096    @UML(identifier="childOperation", obligation=OPTIONAL, specification=ISO_19115_2)
097    default Collection<? extends Operation> getChildOperations() {
098        return Collections.emptyList();
099    }
100
101    /**
102     * Object(s) or area(s) of interest to be sensed.
103     *
104     * @return object(s) or area(s) of interest.
105     */
106    @UML(identifier="objective", obligation=OPTIONAL, specification=ISO_19115_2)
107    default Collection<? extends Objective> getObjectives() {
108        return Collections.emptyList();
109    }
110
111    /**
112     * Heritage of the operation.
113     *
114     * @return heritage of the operation, or {@code null}.
115     */
116    @UML(identifier="parentOperation", obligation=OPTIONAL, specification=ISO_19115_2)
117    default Operation getParentOperation() {
118        return null;
119    }
120
121    /**
122     * Plan satisfied by the operation.
123     *
124     * @return plan satisfied by the operation, or {@code null}.
125     */
126    @UML(identifier="plan", obligation=OPTIONAL, specification=ISO_19115_2)
127    default Plan getPlan() {
128        return null;
129    }
130
131    /**
132     * Platform (or platforms) used in the operation.
133     *
134     * @return Platforms used in the operation.
135     */
136    @UML(identifier="platform", obligation=OPTIONAL, specification=ISO_19115_2)
137    default Collection<? extends Platform> getPlatforms() {
138        return Collections.emptyList();
139    }
140
141    /**
142     * Record of an event occurring during an operation.
143     *
144     * @return record of an event occurring during an operation.
145     */
146    @UML(identifier="significantEvent", obligation=OPTIONAL, specification=ISO_19115_2)
147    default Collection<? extends Event> getSignificantEvents() {
148        return Collections.emptyList();
149    }
150}