/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2004-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* This package contains documentation from OpenGIS specifications.
* OpenGIS consortium's work is fully acknowledged here.
*/
package org.geotools.metadata.iso.citation;
import java.net.URI;
import java.net.URISyntaxException;
import org.opengis.metadata.citation.Contact;
import org.opengis.metadata.citation.OnLineFunction;
import org.opengis.metadata.citation.OnLineResource;
import org.opengis.metadata.citation.ResponsibleParty;
import org.opengis.metadata.citation.Role;
import org.opengis.util.InternationalString;
import org.geotools.metadata.iso.MetadataEntity;
import org.geotools.util.logging.Logging;
import org.geotools.util.SimpleInternationalString;
/**
* Identification of, and means of communication with, person(s) and
* organizations associated with the dataset.
*
* @since 2.1
* @source $URL$
* @version $Id$
* @author Martin Desruisseaux (IRD)
* @author Touraïvane
*/
public class ResponsiblePartyImpl extends MetadataEntity implements ResponsibleParty {
/**
* Serial number for interoperability with different versions.
*/
private static final long serialVersionUID = -2477962229031486552L;
/**
* The name of Open Geospatial Consortium as an international string.
*
* @todo Localize.
*/
static final InternationalString OGC_NAME =
new SimpleInternationalString("Open Geospatial Consortium");
/**
* Creates a responsible party metadata entry for OGC involvement.
* The organisation name is automatically set to "Open Geospatial Consortium".
*
* @param role The OGC role (point of contact, owner, etc.) for a resource.
* @param resource The URI to the resource.
* @return Responsible party describing OGC involvement.
*
* @since 2.2
*/
public static ResponsibleParty OGC(final Role role, final OnLineResource resource) {
final ContactImpl contact = new ContactImpl(resource);
contact.freeze();
final ResponsiblePartyImpl ogc = new ResponsiblePartyImpl(role);
ogc.setOrganisationName(OGC_NAME);
ogc.setContactInfo(contact);
ogc.freeze();
return ogc;
}
/**
* Creates a responsible party metadata entry for OGC involvement.
* The organisation name is automatically set to "Open Geospatial Consortium".
*
* @param role The OGC role (point of contact, owner, etc.) for a resource.
* @param function The OGC function (information, download, etc.) for a resource.
* @param onlineResource The URI to the resource.
* @return Responsible party describing OGC involvement.
*/
public static ResponsibleParty OGC(final Role role,
final OnLineFunction function,
final URI onlineResource)
{
final OnLineResourceImpl resource = new OnLineResourceImpl(onlineResource);
resource.setFunction(function);
resource.freeze();
return OGC(role, resource);
}
/**
* Creates a responsible party metadata entry for OGC involvement.
* The organisation name is automatically set to "Open Geospatial Consortium".
*
* @param role The OGC role (point of contact, owner, etc.) for a resource.
* @param function The OGC function (information, download, etc.) for a resource.
* @param onlineResource The URI on the resource.
* @return Responsible party describing OGC involvement.
*/
static ResponsibleParty OGC(final Role role,
final OnLineFunction function,
final String onlineResource)
{
try {
return OGC(role, function, new URI(onlineResource));
}
catch (URISyntaxException badContact) {
Logging.unexpectedException("org.geotools.metadata.iso", ResponsibleParty.class, "OGC",
badContact);
return OGC;
}
}
/**
* The <A HREF="http://www.opengeospatial.org">Open Geospatial consortium</A> responsible party.
* "Open Geospatial consortium" is the new name for "OpenGIS consortium".
*
* @see ContactImpl#OGC
*/
public static ResponsibleParty OGC;
static {
final ResponsiblePartyImpl r = new ResponsiblePartyImpl(Role.RESOURCE_PROVIDER);
r.setOrganisationName(OGC_NAME);
r.setContactInfo(ContactImpl.OGC);
r.freeze();
OGC = r;
}
/**
* The <A HREF="http://www.opengis.org">OpenGIS consortium</A> responsible party.
* "OpenGIS consortium" is the old name for "Open Geospatial consortium".
*
* @see ContactImpl#OPEN_GIS
*/
public static ResponsibleParty OPEN_GIS;
static {
final ResponsiblePartyImpl r = new ResponsiblePartyImpl(Role.RESOURCE_PROVIDER);
r.setOrganisationName(new SimpleInternationalString("OpenGIS consortium"));
r.setContactInfo(ContactImpl.OPEN_GIS);
r.freeze();
OPEN_GIS = r;
}
/**
* The <A HREF="http://www.epsg.org">European Petroleum Survey Group</A> responsible party.
*
* @see ContactImpl#EPSG
*/
public static ResponsibleParty EPSG;
static {
final ResponsiblePartyImpl r = new ResponsiblePartyImpl(Role.PRINCIPAL_INVESTIGATOR);
r.setOrganisationName(new SimpleInternationalString("European Petroleum Survey Group"));
r.setContactInfo(ContactImpl.EPSG);
r.freeze();
EPSG = r;
}
/**
* The <A HREF="http://www.remotesensing.org/geotiff/geotiff.html">GeoTIFF</A> responsible
* party.
*
* @see ContactImpl#GEOTIFF
*/
public static ResponsibleParty GEOTIFF;
static {
final ResponsiblePartyImpl r = new ResponsiblePartyImpl(Role.PRINCIPAL_INVESTIGATOR);
r.setOrganisationName(new SimpleInternationalString("GeoTIFF"));
r.setContactInfo(ContactImpl.GEOTIFF);
r.freeze();
GEOTIFF = r;
}
/**
* The <A HREF="http://www.esri.com">ESRI</A> responsible party.
*
* @see ContactImpl#ESRI
*/
public static ResponsibleParty ESRI;
static {
final ResponsiblePartyImpl r = new ResponsiblePartyImpl(Role.OWNER);
r.setOrganisationName(new SimpleInternationalString("ESRI"));
r.setContactInfo(ContactImpl.ESRI);
r.freeze();
ESRI = r;
}
/**
* The <A HREF="http://www.oracle.com">Oracle</A> responsible party.
*
* @see ContactImpl#ORACLE
*/
public static ResponsibleParty ORACLE;
static {
final ResponsiblePartyImpl r = new ResponsiblePartyImpl(Role.OWNER);
r.setOrganisationName(new SimpleInternationalString("Oracle"));
r.setContactInfo(ContactImpl.ORACLE);
r.freeze();
ORACLE = r;
}
/**
* The <A HREF="http://postgis.refractions.net">PostGIS</A> responsible party.
*
* @see ContactImpl#POSTGIS
*
* @since 2.4
*/
public static ResponsibleParty POSTGIS;
static {
final ResponsiblePartyImpl r = new ResponsiblePartyImpl(Role.PRINCIPAL_INVESTIGATOR);
r.setOrganisationName(new SimpleInternationalString("PostGIS"));
r.setContactInfo(ContactImpl.POSTGIS);
r.freeze();
POSTGIS = r;
}
/**
* The <A HREF="http://www.sun.com/">Sun Microsystems</A> party.
*
* @see ContactImpl#SUN_MICROSYSTEMS
*
* @since 2.2
*/
public static ResponsibleParty SUN_MICROSYSTEMS;
static {
final ResponsiblePartyImpl r = new ResponsiblePartyImpl(Role.PRINCIPAL_INVESTIGATOR);
r.setOrganisationName(new SimpleInternationalString("Sun Microsystems"));
r.setContactInfo(ContactImpl.SUN_MICROSYSTEMS);
r.freeze();
SUN_MICROSYSTEMS = r;
}
/**
* The <A HREF="http://www.geotools.org">Geotools</A> project.
*
* @see ContactImpl#GEOTOOLS
*/
public static ResponsibleParty GEOTOOLS;
static {
final ResponsiblePartyImpl r = new ResponsiblePartyImpl(Role.PRINCIPAL_INVESTIGATOR);
r.setOrganisationName(new SimpleInternationalString("Geotools"));
r.setContactInfo(ContactImpl.GEOTOOLS);
r.freeze();
GEOTOOLS = r;
}
/**
* Name of the responsible person- surname, given name, title separated by a delimiter.
*/
private String individualName;
/**
* Name of the responsible organization.
*/
private InternationalString organisationName;
/**
* Role or position of the responsible person
*/
private InternationalString positionName;
/**
* Address of the responsible party.
*/
private Contact contactInfo;
/**
* Function performed by the responsible party.
*/
private Role role;
/**
* Constructs an initially empty responsible party.
*/
public ResponsiblePartyImpl() {
}
/**
* Constructs a new responsible party initialized to the values specified by the given object.
* This constructor performs a shallow copy (i.e. each source attributes are reused without
* copying them).
*
* @since 2.2
*/
public ResponsiblePartyImpl(final ResponsibleParty source) {
super(source);
}
/**
* Constructs a responsability party with the given role.
*/
public ResponsiblePartyImpl(final Role role) {
setRole(role);
}
/**
* Returns the name of the responsible person- surname, given name, title separated by a delimiter.
* Only one of {@code individualName}, {@link #getOrganisationName organisationName}
* and {@link #getPositionName positionName} should be provided.
*/
public String getIndividualName() {
return individualName;
}
/**
* Set the name of the responsible person- surname, given name, title separated by a delimiter.
* Only one of {@code individualName}, {@link #getOrganisationName organisationName}
* and {@link #getPositionName positionName} should be provided.
*/
public synchronized void setIndividualName(final String newValue) {
checkWritePermission();
individualName = newValue;
}
/**
* Returns the name of the responsible organization.
* Only one of {@link #getIndividualName individualName}, </code>organisationName</code>
* and {@link #getPositionName positionName} should be provided.
*/
public InternationalString getOrganisationName() {
return organisationName;
}
/**
* Set the name of the responsible organization.
* Only one of {@link #getIndividualName individualName}, </code>organisationName</code>
* and {@link #getPositionName positionName} should be provided.
*/
public synchronized void setOrganisationName(final InternationalString newValue) {
checkWritePermission();
organisationName = newValue;
}
/**
* Returns the role or position of the responsible person
* Only one of {@link #getIndividualName individualName},
* {@link #getOrganisationName organisationName} and {@code positionName}
* should be provided.
*/
public InternationalString getPositionName() {
return positionName;
}
/**
* set the role or position of the responsible person
* Only one of {@link #getIndividualName individualName},
* {@link #getOrganisationName organisationName} and {@code positionName}
* should be provided.
*/
public synchronized void setPositionName(final InternationalString newValue) {
checkWritePermission();
positionName = newValue;
}
/**
* Returns the address of the responsible party.
*/
public Contact getContactInfo() {
return contactInfo;
}
/**
* Set the address of the responsible party.
*/
public synchronized void setContactInfo(final Contact newValue) {
checkWritePermission();
contactInfo = newValue;
}
/**
* Returns the function performed by the responsible party.
*/
public Role getRole() {
return role;
}
/**
* Set the function performed by the responsible party.
*/
public synchronized void setRole(final Role newValue) {
checkWritePermission();
role = newValue;
}
}