001    /*
002     *    GeoAPI - Java interfaces for OGC/ISO standards
003     *    http://www.geoapi.org
004     *
005     *    Copyright (C) 2005-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.citation;
033    
034    import java.net.URI;
035    import java.util.Collection;
036    import org.opengis.util.InternationalString;
037    import org.opengis.annotation.Obligation;
038    import org.opengis.util.Factory;
039    
040    
041    /**
042     * A factory for metadata from the citation package.
043     * All factory methods accept null value for {@linkplain Obligation#OPTIONAL optional} arguments.
044     * The value must be non-null for {@linkplain Obligation#MANDATORY mandatory} arguments.
045     *
046     * @version <A HREF="http://www.opengeospatial.org/standards/as#01-111">ISO 19115</A>
047     * @author  Jesse Crossley (SYS Technologies)
048     * @since   GeoAPI 2.0
049     */
050    public interface CitationFactory extends Factory {
051        /**
052         * Location of the responsible individual or organization.
053         *
054         * @param deliveryPoints          Address line for the location (as described in ISO 11180, Annex A).
055         * @param city                    The city of the location.
056         * @param administrativeArea      State, province of the location.
057         * @param postalCode              ZIP or other postal code.
058         * @param country                 Country of the physical address.
059         * @param electronicMailAddresses Address of the electronic mailbox of the responsible organization or individual.
060         * @return The address.
061         */
062        Address createAddress(
063                Collection<String>  deliveryPoints,
064                InternationalString city,
065                InternationalString administrativeArea,
066                String              postalCode,
067                InternationalString country,
068                Collection<String>  electronicMailAddresses);
069    
070        /**
071         * Information required to enable contact with the responsible person and/or organization.
072         *
073         * @param phone               Telephone numbers at which the organization or individual may be contacted.
074         * @param address             Physical and email address at which the organization or individual may be contacted.
075         * @param onLineResource      On-line information that can be used to contact the individual or organization.
076         * @param hoursOfService      Time period (including time zone) when individuals can contact the organization or individual.
077         * @param contactInstructions Supplemental instructions on how or when to contact the individual or organization.
078         * @return The contact.
079         */
080        Contact createContact(
081                Telephone           phone,
082                Address             address,
083                OnlineResource      onLineResource,
084                InternationalString hoursOfService,
085                InternationalString contactInstructions);
086    
087        /**
088         * Information about on-line sources from which the dataset, specification, or
089         * community profile name and extended metadata elements can be obtained.
090         *
091         * @param linkage            Location (address) for on-line access.
092         * @param protocol           Connection protocol to be used.
093         * @param applicationProfile Name of an application profile that can be used with the online resource.
094         * @param description        Detailed text description of what the online resource is/does.
095         * @param function           Code for function performed by the online resource.
096         * @return The online resource.
097         */
098        OnlineResource createOnLineResource(
099                URI                 linkage,
100                String              protocol,
101                String              applicationProfile,
102                InternationalString description,
103                OnLineFunction      function);
104    
105        /**
106         * Identification of, and means of communication with, person(s) and organizations associated with the dataset.
107         * Only one of {@code individualName}, {@code organisationName} and {@code positionName} should be provided.
108         *
109         * @param individualName   Name of the responsible person- surname, given name, title separated by a delimiter.
110         * @param organisationName Name of the responsible organization.
111         * @param positionName     Role or position of the responsible person.
112         * @param contactInfo      Address of the responsible party.
113         * @param role             Function performed by the responsible party.
114         * @return The responsible party.
115         */
116        ResponsibleParty createResponsibleParty(
117                String              individualName,
118                InternationalString organisationName,
119                InternationalString positionName,
120                Contact             contactInfo,
121                Role                role);
122    
123        /**
124         * Telephone numbers for contacting the responsible individual or organization.
125         *
126         * @param voice     Telephone number by which individuals can speak to the responsible organization or individual.
127         * @param facsimile Telephone number of a facsimile machine for the responsible organization or individual.
128         * @return The telephone.
129         */
130        Telephone createTelephone(
131                String voice,
132                String facsimile);
133    }