001/*
002 *    GeoAPI - Java interfaces for OGC/ISO standards
003 *    Copyright © 2009-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.citation.ResponsibleParty;
027import org.opengis.util.InternationalString;
028
029import static org.opengis.annotation.Obligation.*;
030import static org.opengis.annotation.Specification.*;
031
032
033/**
034 * Designation of the platform 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_Platform", specification=ISO_19115_2)
041public interface Platform {
042    /**
043     * Source where information about the platform is described.
044     *
045     * @return source where information about the platform is described, or {@code null}.
046     */
047    @UML(identifier="citation", obligation=OPTIONAL, specification=ISO_19115_2)
048    default Citation getCitation() {
049        return null;
050    }
051
052    /**
053     * Unique identification of the platform.
054     *
055     * @return unique identification of the platform.
056     */
057    @UML(identifier="identifier", obligation=MANDATORY, specification=ISO_19115_2)
058    Identifier getIdentifier();
059
060    /**
061     * Narrative description of the platform supporting the instrument.
062     *
063     * @return narrative description of the platform.
064     */
065    @UML(identifier="description", obligation=MANDATORY, specification=ISO_19115_2)
066    InternationalString getDescription();
067
068    /**
069     * Organization responsible for building, launch, or operation of the platform.
070     *
071     * <div class="warning"><b>Upcoming API change — generalization</b><br>
072     * As of ISO 19115:2014, {@code ResponsibleParty} is replaced by the {@link Responsibility} parent interface.
073     * This change may be applied in GeoAPI 4.0.
074     * </div>
075     *
076     * @return organization responsible for building, launch, or operation of the platform.
077     */
078    @UML(identifier="sponsor", obligation=OPTIONAL, specification=ISO_19115_2, version=2003)
079    default Collection<? extends ResponsibleParty> getSponsors() {
080        return Collections.emptyList();
081    }
082
083    /**
084     * Instrument(s) mounted on a platform.
085     *
086     * @return instrument(s) mounted on a platform.
087     */
088    @UML(identifier="instrument", obligation=MANDATORY, specification=ISO_19115_2)
089    Collection<? extends Instrument> getInstruments();
090}