/* * 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.OnLineFunction; import org.opengis.metadata.citation.OnLineResource; import org.opengis.util.InternationalString; import org.geotools.metadata.iso.MetadataEntity; /** * Information about on-line sources from which the dataset, specification, or * community profile name and extended metadata elements can be obtained. * * @since 2.1 * * @source $URL$ * @version $Id$ * @author Martin Desruisseaux (IRD) * @author Touraïvane */ public class OnLineResourceImpl extends MetadataEntity implements OnLineResource { /** * Serial number for interoperability with different versions. */ private static final long serialVersionUID = 5412370008274334799L; /** * The online resources for the <A HREF="http://www.opengeospatial.org">Open Geospatial Consortium</A>. * "Open Geospatial consortium" is the new name for "OpenGIS consortium". * * @see #OPEN_GIS */ public static final OnLineResource OGC; static { final OnLineResourceImpl r; OGC = r = new OnLineResourceImpl("http://www.opengeospatial.org/"); r.freeze(); } /** * The online resources for the <A HREF="http://www.opengis.org">OpenGIS consortium</A>. * "OpenGIS consortium" is the old name for "Open Geospatial consortium". * * @see #OGC */ public static final OnLineResource OPEN_GIS; static { final OnLineResourceImpl r; OPEN_GIS = r = new OnLineResourceImpl("http://www.opengis.org"); r.freeze(); } /** * The online resources for the * <A HREF="http://www.epsg.org">European Petroleum Survey Group</A>. */ public static final OnLineResource EPSG; static { final OnLineResourceImpl r; EPSG = r = new OnLineResourceImpl("http://www.epsg.org"); r.freeze(); } /** * The online resources for the * <A HREF="http://www.remotesensing.org/geotiff/geotiff.html">GeoTIFF</A> group. */ public static final OnLineResource GEOTIFF; static { final OnLineResourceImpl r; GEOTIFF = r = new OnLineResourceImpl("http://www.remotesensing.org/geotiff"); r.freeze(); } /** * The online resources for <A HREF="http://www.esri.com">ESRI</A>. */ public static final OnLineResource ESRI; static { final OnLineResourceImpl r; ESRI = r = new OnLineResourceImpl("http://www.esri.com"); r.freeze(); } /** * The online resources for <A HREF="http://www.oracle.com">Oracle</A>. */ public static final OnLineResource ORACLE; static { final OnLineResourceImpl r; ORACLE = r = new OnLineResourceImpl("http://www.oracle.com"); r.freeze(); } /** * The online resources for <A HREF="http://postgis.refractions.net">PostGIS</A>. * * @since 2.4 */ public static final OnLineResource POSTGIS; static { final OnLineResourceImpl r; POSTGIS = r = new OnLineResourceImpl("http://postgis.refractions.net"); r.freeze(); } /** * The online resources for <A HREF="http://java.sun.com/">Sun Microsystems</A>. * This online resources point to the Java developper site. * * @since 2.2 */ public static final OnLineResource SUN_MICROSYSTEMS; static { final OnLineResourceImpl r; SUN_MICROSYSTEMS = r = new OnLineResourceImpl("http://java.sun.com"); r.freeze(); } /** * The online resources for the <A HREF="http://www.geotools.org">Geotools</A> project. */ public static final OnLineResource GEOTOOLS; static { final OnLineResourceImpl r; GEOTOOLS = r = new OnLineResourceImpl("http://www.geotools.org"); r.freeze(); } /** * The download link for <A HREF="http://portal.opengis.org/files/?artifact_id=5316">Web Map * Service</A> specification. The download link may change in future Geotools versions in * order to point toward the latest specification. * * @since 2.2 */ public static final OnLineResource WMS; static { final OnLineResourceImpl r; WMS = r = new OnLineResourceImpl("http://portal.opengis.org/files/?artifact_id=5316"); r.setFunction(OnLineFunction.DOWNLOAD); r.freeze(); } /** * Name of an application profile that can be used with the online resource. */ private String applicationProfile; /** * Detailed text description of what the online resource is/does. */ private InternationalString description; /** * Code for function performed by the online resource. */ private OnLineFunction function; /** * Location (address) for on-line access using a Uniform Resource Locator address or * similar addressing scheme such as http://www.statkart.no/isotc211. */ private URI linkage; /** * Name of the online resources. */ private String name; /** * Creates an initially empty on line resource. */ public OnLineResourceImpl() { } /** * Constructs a metadata entity initialized with the values from the specified metadata. * * @since 2.4 */ public OnLineResourceImpl(final OnLineResource source) { super(source); } /** * Creates an on line resource initialized to the given URI. * This method is private for now since, if this constructor was public, some * users may expect a string argument to be for the description text instead. * Furthermore, a public method should not catch the {@link URISyntaxException} * and should not set a function. */ private OnLineResourceImpl(final String linkage) { try { setLinkage(new URI(linkage)); } catch (URISyntaxException exception) { throw new IllegalArgumentException(exception); } setFunction(OnLineFunction.INFORMATION); } /** * Creates an on line resource initialized to the given URI. */ public OnLineResourceImpl(final URI linkage) { setLinkage(linkage); } /** * Returns the name of an application profile that can be used with the online resource. * Returns {@code null} if none. */ public String getApplicationProfile() { return applicationProfile; } /** * Set the name of an application profile that can be used with the online resource. */ public synchronized void setApplicationProfile(final String newValue) { checkWritePermission(); applicationProfile = newValue; } /** * Name of the online resource. Returns {@code null} if none. * * @since 2.4 */ public String getName() { return name; } /** * Set the name of the online resource. * * @since 2.4 */ public synchronized void setName(final String newValue) { checkWritePermission(); name = newValue; } /** * Returns the detailed text description of what the online resource is/does. * Returns {@code null} if none. */ public InternationalString getDescription() { return description; } /** * Set the detailed text description of what the online resource is/does. */ public synchronized void setDescription(final InternationalString newValue) { checkWritePermission(); description = newValue; } /** * Returns the code for function performed by the online resource. * Returns {@code null} if unspecified. */ public OnLineFunction getFunction() { return function; } /** * Set the code for function performed by the online resource. */ public synchronized void setFunction(final OnLineFunction newValue) { checkWritePermission(); function = newValue; } /** * Returns the location (address) for on-line access using a Uniform Resource Locator address or * similar addressing scheme such as http://www.statkart.no/isotc211. */ public URI getLinkage() { return linkage; } /** * Set the location (address) for on-line access using a Uniform Resource Locator address or * similar addressing scheme such as http://www.statkart.no/isotc211. */ public synchronized void setLinkage(final URI newValue) { checkWritePermission(); linkage = newValue; } /** * Returns the connection protocol to be used. * Returns {@code null} if none. */ public String getProtocol() { final URI linkage = this.linkage; return (linkage!=null) ? linkage.getScheme() : null; } }