All Downloads are FREE. Search and download functionalities are using the official Maven repository.

thredds.wcs.v1_1_0.GetCapabilities Maven / Gradle / Ivy

Go to download

The NetCDF-Java Library is a Java interface to NetCDF files, as well as to many other types of scientific data formats.

There is a newer version: 4.3.22
Show newest version
/*
 * Copyright 1998-2009 University Corporation for Atmospheric Research/Unidata
 *
 * Portions of this software were developed by the Unidata Program at the
 * University Corporation for Atmospheric Research.
 *
 * Access and use of this software shall impose the following obligations
 * and understandings on the user. The user is granted the right, without
 * any fee or cost, to use, copy, modify, alter, enhance and distribute
 * this software, and any derivative works thereof, and its supporting
 * documentation for any purpose whatsoever, provided that this entire
 * notice appears in all copies of the software, derivative works and
 * supporting documentation.  Further, UCAR requests that the user credit
 * UCAR/Unidata in any publications that result from the use of this
 * software or in any product that includes this software. The names UCAR
 * and/or Unidata, however, may not be used in any advertising or publicity
 * to endorse or promote any products or commercial entity unless specific
 * written permission is obtained from UCAR/Unidata. The user also
 * understands that UCAR/Unidata is not obligated to provide the user with
 * any support, consulting, training or assistance of any kind with regard
 * to the use, operation and performance of this software nor to provide
 * the user with any updates, revisions, new versions or "bug fixes."
 *
 * THIS SOFTWARE IS PROVIDED BY UCAR/UNIDATA "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL UCAR/UNIDATA BE LIABLE FOR ANY SPECIAL,
 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 * WITH THE ACCESS, USE OR PERFORMANCE OF THIS SOFTWARE.
 */
package thredds.wcs.v1_1_0;

import ucar.nc2.dt.GridDataset;

import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.net.URI;
import java.io.PrintWriter;
import java.io.IOException;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.Namespace;
import org.jdom.output.XMLOutputter;
import org.jdom.output.Format;

/**
 * _more_
 *
 * @author edavis
 * @since 4.0
 */
public class GetCapabilities
{
  private org.slf4j.Logger logger =
          org.slf4j.LoggerFactory.getLogger( GetCapabilities.class );

  protected static final Namespace wcsNS = Namespace.getNamespace( "http://www.opengis.net/wcs/1.1" );
  protected static final Namespace owcsNS = Namespace.getNamespace( "owcs", "http://www.opengis.net/wcs/1.1/ows" );
  protected static final Namespace owsNS = Namespace.getNamespace( "ows", "http://www.opengis.net/ows" );
  protected static final Namespace xlinkNS = Namespace.getNamespace( "xlink", "http://www.w3.org/1999/xlink" );

  public enum Section
  {
    ServiceIdentification, ServiceProvider,
    OperationsMetadata, Contents, All
  }

  private URI serverURI;

  private List
sections; private String version = "1.1.0"; private ServiceId serviceId; private ServiceProvider serviceProvider; private GridDataset dataset; private Document capabilitiesReport; public GetCapabilities( URI serverURI, List
sections, ServiceId serviceId, ServiceProvider serviceProvider, GridDataset dataset ) { this.serverURI = serverURI; this.sections = sections; this.serviceId = serviceId; this.serviceProvider = serviceProvider; this.dataset = dataset; if ( this.serverURI == null ) throw new IllegalArgumentException( "Non-null server URI required."); if ( this.sections == null ) throw new IllegalArgumentException( "Non-null sections list required (may be empty)."); if ( this.dataset == null ) throw new IllegalArgumentException( "Non-null dataset required."); } public Document getCapabilitiesReport() { if ( this.capabilitiesReport == null ) capabilitiesReport = generateCapabilities(); return capabilitiesReport; } public void writeCapabilitiesReport( PrintWriter pw ) throws IOException { XMLOutputter xmlOutputter = new XMLOutputter( Format.getPrettyFormat() ); xmlOutputter.output( getCapabilitiesReport(), pw ); } public Document generateCapabilities() { Element capabilitiesElem = new Element( "Capabilities", wcsNS ); capabilitiesElem.addNamespaceDeclaration( owcsNS ); capabilitiesElem.addNamespaceDeclaration( owsNS ); capabilitiesElem.addNamespaceDeclaration( xlinkNS ); capabilitiesElem.setAttribute( "version", this.version); // ToDo //capabilitiesElem.setAttribute( "updateSequence", ""); // ToDo boolean allSections = false; if ( sections == null || sections.size() == 0 || ( sections.size() == 1 && sections.get( 0 ).equals( Section.All ) ) ) { allSections = true; } if ( allSections || sections.contains( Section.ServiceIdentification)) { capabilitiesElem.addContent( generateServiceIdentification( serviceId )); } if ( allSections || sections.contains( Section.ServiceProvider)) { capabilitiesElem.addContent( generateServiceProvider( serviceProvider) ); } if ( allSections || sections.contains( Section.OperationsMetadata )) { capabilitiesElem.addContent( generateOperationsMetadata()); } if ( allSections || sections.contains( Section.Contents)) { capabilitiesElem.addContent( generateContents()); } return new Document( capabilitiesElem ); } public Element generateServiceIdentification( ServiceId serviceId ) { Element serviceIdElem = new Element( "ServiceIdentification", owcsNS ); if ( serviceId != null ) { if ( serviceId.getTitle() != null ) { Element titleElem = new Element( "Title", owsNS ); titleElem.addContent( serviceId.getTitle() ); serviceIdElem.addContent( titleElem ); } if ( serviceId.getAbstract() != null ) { Element abstractElem = new Element( "Abstract", owsNS ); abstractElem.addContent( serviceId.getAbstract() ); serviceIdElem.addContent( abstractElem ); } if ( serviceId.getKeywords() != null && serviceId.getKeywords().size() > 0 ) { Element keywordsElem = new Element( "Keywords", owsNS ); for ( String curKey : serviceId.getKeywords() ) { Element keywordElem = new Element( "Keyword", owsNS ); keywordElem.addContent( curKey ); keywordsElem.addContent( keywordElem ); } serviceIdElem.addContent( keywordsElem ); } if ( serviceId.getServiceType() != null ) { Element serviceTypeElem = new Element( "ServiceType", owcsNS ); serviceTypeElem.addContent( serviceId.getServiceType() ); serviceIdElem.addContent( serviceTypeElem ); } if ( serviceId.getServiceTypeVersion() != null && serviceId.getServiceTypeVersion().size() > 0 ) { for ( String curVer : serviceId.getServiceTypeVersion() ) { Element serviceTypeVersionElem = new Element( "ServiceTypeVersion", owcsNS ); serviceTypeVersionElem.addContent( curVer ); serviceIdElem.addContent( serviceTypeVersionElem ); } } // ToDo When would this be needed? What are Application Profiles? GML profiles? // List appProfileIds; // for ( URI curAppProfileId : appProfileIds) // { // serviceIdElem.addContent( new Element( "Profile", owcsNS).addContent( curAppProfileId.toString())); // } // 1) WCS spec says that encoding format application profile spec has title of the form: // "WCS 1.1 Application Profile for [Format] [formatVersion] encoding, [profileVersion]" // [[Here's the CF-NetCDF title: // "WCS 1.1 Application Profile for CF-netCDF (1.0-3.0) Coverage Encoding, 1.0" (OGC 06-082r1)]] // but it doesn't say anything about a URI for such an Application Profile. // 2) Whereas, the WCS Capabilities doc has a place to identify supported App Profiles by using a URI. if ( serviceId.getFees() != null ) { Element feesElem = new Element( "Fees", owcsNS ); feesElem.addContent( serviceId.getFees() ); serviceIdElem.addContent( feesElem ); } if ( serviceId.getAccessConstraints() != null && serviceId.getAccessConstraints().size() > 0 ) { for ( String curAC : serviceId.getAccessConstraints() ) { Element accessConstraintsElem = new Element( "AccessConstraints", owcsNS ); accessConstraintsElem.addContent( curAC ); serviceIdElem.addContent( accessConstraintsElem ); } } } return serviceIdElem; } public Element generateServiceProvider( ServiceProvider serviceProvider ) { // ServiceProvider (ows) [0..1] Element servProvElem = new Element( "ServiceProvider", owsNS ); if ( serviceProvider != null ) { if ( serviceProvider.name != null ) { // ServiceProvider/ProviderName (ows) [0..1] servProvElem.addContent( new Element( "ProviderName", owsNS ).addContent( serviceProvider.name ) ); } if ( serviceProvider.site != null ) { // ServiceProvider/ProviderSite (ows) [0..1] Element provSiteElem = new Element( "ProviderSite", owsNS ); provSiteElem.setAttribute( "type", "simple" ); if ( serviceProvider.site.title != null) provSiteElem.setAttribute( "title", serviceProvider.site.title, xlinkNS ); if ( serviceProvider.site.link != null ) provSiteElem.setAttribute( "href", serviceProvider.site.link.toString(), xlinkNS ); servProvElem.addContent( provSiteElem ); } if ( serviceProvider.contact != null ) { // ServiceProvider/ServiceContact (ows) [0..1] Element servContactElem = new Element( "ServiceContact", owsNS ); if ( serviceProvider.contact.individualName != null ) { // ServiceProvider/ServiceContact/IndividualName (ows) [0..1] Element individualNameElem = new Element( "IndividualName", owsNS); individualNameElem.addContent( serviceProvider.contact.individualName); servContactElem.addContent( individualNameElem); } if ( serviceProvider.contact.positionName != null ) { // ServiceProvider/ServiceContact/PositionName (ows) [0..1] Element positionNameElem = new Element( "PositionName", owsNS); positionNameElem.addContent( serviceProvider.contact.positionName ); servContactElem.addContent( positionNameElem ); } if ( serviceProvider.contact.contactInfo != null ) { // ServiceProvider/ServiceContact/ContactInfo (ows)[0..1] Element contactInfoElem = new Element( "ContactInfo", owsNS); if ( serviceProvider.contact.contactInfo.voicePhone != null || serviceProvider.contact.contactInfo.faxPhone != null ) { // ServiceProvider/ServiceContact/ContactInfo/Phone (ows)[0..1] Element phoneElem = new Element( "Phone", owsNS); if ( serviceProvider.contact.contactInfo.voicePhone != null ) for (String curPhone : serviceProvider.contact.contactInfo.voicePhone) // ServiceProvider/ServiceContact/ContactInfo/Phone/Voice (ows)[0..*] phoneElem.addContent( new Element( "Voice", owsNS ).addContent( curPhone )); if ( serviceProvider.contact.contactInfo.faxPhone != null ) for (String curPhone : serviceProvider.contact.contactInfo.faxPhone) // ServiceProvider/ServiceContact/ContactInfo/Phone/Facsimile (ows)[0..*] phoneElem.addContent( new Element( "Facsimile", owsNS ).addContent( curPhone )); contactInfoElem.addContent( phoneElem); } if ( serviceProvider.contact.contactInfo.address != null ) { // ServiceProvider/ServiceContact/ContactInfo/Address (ows) [0..1] Element addressElem = new Element( "Address", owsNS); if ( serviceProvider.contact.contactInfo.address.deliveryPoint != null ) { for ( String curDP : serviceProvider.contact.contactInfo.address.deliveryPoint) { // ServiceProvider/ServiceContact/ContactInfo/Address/DeliveryPoint (ows) [0..*] addressElem.addContent( new Element( "DeliveryPoint", owsNS).addContent( curDP)); } } if ( serviceProvider.contact.contactInfo.address.city != null ) { // ServiceProvider/ServiceContact/ContactInfo/Address/City (ows) [0..1] addressElem.addContent( new Element( "City", owsNS) .addContent( serviceProvider.contact.contactInfo.address.city)); } if ( serviceProvider.contact.contactInfo.address.adminArea != null ) { // ServiceProvider/ServiceContact/ContactInfo/Address/AdministrativeArea (ows) [0..1] addressElem.addContent( new Element( "AdministrativeArea", owsNS ) .addContent( serviceProvider.contact.contactInfo.address.adminArea ) ); } if ( serviceProvider.contact.contactInfo.address.postalCode != null ) { // ServiceProvider/ServiceContact/ContactInfo/Address/PostalCode (ows) [0..1] addressElem.addContent( new Element( "PostalCode", owsNS ) .addContent( serviceProvider.contact.contactInfo.address.postalCode ) ); } if ( serviceProvider.contact.contactInfo.address.country != null) { // ServiceProvider/ServiceContact/ContactInfo/Address/Country (ows) [0..1] addressElem.addContent( new Element( "Country", owsNS ) .addContent( serviceProvider.contact.contactInfo.address.country ) ); } if ( serviceProvider.contact.contactInfo.address.email != null ) { for ( String curEmail : serviceProvider.contact.contactInfo.address.email ) { // ServiceProvider/ServiceContact/ContactInfo/Address/ElectronicMailAddress (ows) [0..*] addressElem.addContent( new Element( "ElectronicMailAddress", owsNS ) .addContent( curEmail ) ); } } contactInfoElem.addContent( addressElem); } if ( serviceProvider.contact.contactInfo.onlineResource != null ) { // ServiceProvider/ServiceContact/ContactInfo/OnlineResource (ows) [0..1] Element onlineResourceElem = new Element( "OnlineResource", owsNS); onlineResourceElem.setAttribute( "type", "simple"); if ( serviceProvider.contact.contactInfo.onlineResource.title != null ) onlineResourceElem.setAttribute( "title", serviceProvider.contact.contactInfo.onlineResource.title, xlinkNS ); if ( serviceProvider.contact.contactInfo.onlineResource.link != null ) onlineResourceElem.setAttribute( "href", serviceProvider.contact.contactInfo.onlineResource.link.toString(), xlinkNS ); contactInfoElem.addContent( onlineResourceElem); } if ( serviceProvider.contact.contactInfo.hoursOfService != null ) // ServiceProvider/ServiceContact/ContactInfo/HoursOfService (ows) [0..1] contactInfoElem.addContent( new Element( "HoursOfService", owsNS) .addContent( serviceProvider.contact.contactInfo.hoursOfService)); if ( serviceProvider.contact.contactInfo.contactInstructions != null ) // ServiceProvider/ServiceContact/ContactInfo/ContactInstructions (ows) [0..1] contactInfoElem.addContent( new Element( "ContactInstructions", owsNS ) .addContent( serviceProvider.contact.contactInfo.contactInstructions ) ); servContactElem.addContent( contactInfoElem); } if ( serviceProvider.contact.role != null ) { // ServiceProvider/ServiceContact/Role (ows) [0..1] servContactElem.addContent( new Element( "Role", owsNS ) .addContent( serviceProvider.contact.role)); } servProvElem.addContent( servContactElem ); } } return servProvElem; } public Element generateOperationsMetadata() { // OperationsMetadata (owcs) [0..1] Element opsMetadataElem = new Element( "OperationsMetadata", owcsNS ); // OperationsMetadata/Operation (owcs) [2..*] // OperationsMetadata/Operation@name - i.e., "GetCapabilities" or "DescribeCoverage" or "GetCoverage" // OperationsMetadata/Operation/... opsMetadataElem.addContent( genGetCapOpsElement()); opsMetadataElem.addContent( genDescCovOpsElement()); opsMetadataElem.addContent( genGetCovOpsElement()); // OperationsMetadata/Parameter (owcs) [0..*] // OperationsMetadata/Parameter/..(?) (owcs) [0..*] // OperationsMetadata/Constraint (owcs) [0..*] // OperationsMetadata/Constraint/.. (owcs) [0..*] // OperationsMetadata/ExtendedCapabilities (owcs) [0..1] // OperationsMetadata/ExtendedCapabilities/.. (owcs) [0..1] // return opsMetadataElem; } private Element genGetCapOpsElement() { // OperationsMetadata/Operation (owcs) @name="GetCapabilities" Element getCapOpsElem = new Element( "Operation", owcsNS ); getCapOpsElem.setAttribute( "name", Request.Operation.GetCapabilities.toString() ); // Add DCP/HTTP/GET element with xlink to this server. // OperationsMetadata/Operation/DCP/HTTP/{GET|POST} (owcs) [1..*] // - @type=simple, @xlink:title, @xlink:href getCapOpsElem.addContent( new Element( "DCP", owcsNS ).addContent( new Element( "HTTP", owcsNS ).addContent( new Element( "GET", owcsNS ).setAttribute( "href", serverURI.toString(), xlinkNS ) ) ) ); // Add the "Service", "AcceptVersions", and "Sections" parameters. // OperationsMetadata/Operation/Parameter (owcs) [0..*] getCapOpsElem.addContent( genParamElement( "service", Collections.singletonList( "WCS" ) ) ); List allowedValList = new ArrayList(); allowedValList.add( "1.1.0" ); allowedValList.add( "1.0.0" ); getCapOpsElem.addContent( genParamElement( "AcceptVersions", allowedValList ) ); List sectList = new ArrayList(); sectList.add( "ServiceIdentification" ); sectList.add( "ServiceProvider" ); sectList.add( "OperationsMetadata" ); sectList.add( "Content" ); sectList.add( "All" ); getCapOpsElem.addContent( genParamElement( "Sections", sectList ) ); // No constraints or metadata for this operation. // OperationsMetadata/Operation/Constraint (owcs) [0..*] // OperationsMetadata/Operation/Metadata (ows) [0..*] return getCapOpsElem; } private Element genDescCovOpsElement() { // OperationsMetadata/Operation (owcs) @name="DescribeCoverage" Element descCovOpsElem = new Element( "Operation", owcsNS ); descCovOpsElem.setAttribute( "name", Request.Operation.DescribeCoverage.toString() ); // Add DCP/HTTP/GET element with xlink to this server. // OperationsMetadata/Operation/DCP/HTTP/{GET|POST} (owcs) [1..*] // - @type=simple, @xlink:title, @xlink:href descCovOpsElem.addContent( new Element( "DCP", owcsNS ).addContent( new Element( "HTTP", owcsNS ).addContent( new Element( "GET", owcsNS ).setAttribute( "href", serverURI.toString(), xlinkNS ) ) ) ); // Add the "Service", "Version", "AcceptVersions", and "Sections" parameters. // OperationsMetadata/Operation/Parameter (owcs) [0..*] descCovOpsElem.addContent( genParamElement( "service", Collections.singletonList( "WCS" ) ) ); descCovOpsElem.addContent( genParamElement( "version", Collections.singletonList( "1.1.0" ) ) ); List idList = new ArrayList(); for ( GridDataset.Gridset gs : this.dataset.getGridsets() ) { idList.add( gs.getGeoCoordSystem().getName()); } descCovOpsElem.addContent( genParamElement( "Identifier", idList ) ); // No constraints or metadata for this operation. // OperationsMetadata/Operation/Constraint (owcs) [0..*] // OperationsMetadata/Operation/Metadata (ows) [0..*] return descCovOpsElem; } private Element genGetCovOpsElement() { // OperationsMetadata/Operation (owcs) @name="GetCoverage" Element getCovOpsElem = new Element( "Operation", owcsNS ); getCovOpsElem.setAttribute( "name", Request.Operation.GetCoverage.toString() ); // Add DCP/HTTP/GET element with xlink to this server. // OperationsMetadata/Operation/DCP/HTTP/{GET|POST} (owcs) [1..*] // - @type=simple, @xlink:title, @xlink:href getCovOpsElem.addContent( new Element( "DCP", owcsNS ).addContent( new Element( "HTTP", owcsNS ).addContent( new Element( "GET", owcsNS ).setAttribute( "href", serverURI.toString(), xlinkNS ) ) ) ); // Add the "Service", "Version", "AcceptVersions", and "Sections" parameters. // OperationsMetadata/Operation/Parameter (owcs) [0..*] getCovOpsElem.addContent( genParamElement( "service", Collections.singletonList( "WCS" ) ) ); getCovOpsElem.addContent( genParamElement( "version", Collections.singletonList( "1.1.0" ) ) ); getCovOpsElem.addContent( genParamElement( "store", Collections.singletonList( "False" ) ) ); List idList = new ArrayList(); for ( GridDataset.Gridset gs : this.dataset.getGridsets() ) { idList.add( gs.getGeoCoordSystem().getName() ); } getCovOpsElem.addContent( genParamElement( "Identifier", idList ) ); // No constraints or metadata for this operation. // OperationsMetadata/Operation/Constraint (owcs) [0..*] // OperationsMetadata/Operation/Metadata (ows) [0..*] return getCovOpsElem; } private Element genParamElement( String name, List allowedValues ) { Element paramElem = new Element( "Parameter", owcsNS ).setAttribute( "name", name ); Element allowedValuesElem = new Element( "AllowedValues", owcsNS ); for ( String curVal : allowedValues ) allowedValuesElem.addContent( new Element( "Value", owcsNS).addContent( curVal ) ); return paramElem.addContent( allowedValuesElem); } public Element generateContents() { // Contents (wcs) [0..1] Element contentElem = new Element( "Contents", wcsNS ); for ( GridDataset.Gridset gs : this.dataset.getGridsets()) { // Contents/CoverageSummary (wcs) [0..1] // [[NOTE(1): use unless info can be found in Contents/OtherSources.]] Element curCovSum = new Element( "CoverageSummary", wcsNS); // Contents/CoverageSummary/Title (ows) [0..1] curCovSum.addContent( new Element( "Title", owsNS).addContent( gs.getGeoCoordSystem().getName())); // Contents/CoverageSummary/Abstract (ows) [0..1] // Contents/CoverageSummary/Keywords (ows) [0..*] // Contents/CoverageSummary/Metadata/... (ows) [0..*] // [[NOTE: Either xlink simple type or a concrete AbstractMetaData element.]] // [[NOTE: We are going to support xlink simple type only but probably the TDS won't use this element.]] // Contents/CoverageSummary/WGS84BoundingBox/... (ows) [0..*] // Contents/CoverageSummary/SupportedCRS (ows) [0..*] - URI // Contents/CoverageSummary/SupportedFormats (ows) [0..*] - MIME type curCovSum.addContent( new Element( "SupportedFormats", owsNS).addContent("application/x-netcdf")); // ---- // [[NOTE: This coverage must contain lowerl-level coverages and/or an identifier.]] // Contents/CoverageSummary/CoverageSummary/... (wcs) [1..*] // [[NOTE: Indicates that the parent coverage contains lower-level coverages.]] // Contents/CoverageSummary/Identifier (wcs) [0..1] // [[NOTE: Indicates that this coverage can be accessed directly by GetCoverage and DescribeCoverage.]] // [[NOTE: this ID must be unique to this WCS server.]] curCovSum.addContent( new Element( "Identifier", wcsNS).addContent( gs.getGeoCoordSystem().getName())); // ---- contentElem.addContent( curCovSum); } // Contents/SupportedCRS (wcs) [0..*] - URI // [[NOTE: union of all SupportedCRS from nested CoverageSummary-s]] // Contents/SupportedFormat (wcs) [0..*] - MIME type // [[NOTE: union of all SupportedFormat from nested CoverageSummary-s]] // Contents/OtherSource (wcs) [0..*] - @type=simple, @xlink:title, @xlink:href // [[NOTE(1): unless info can be found in sibling CoverageSummary elements.]] return contentElem; } /** * Contain the content needed for a GetCapabilities ServiceIdentification section. */ public static class ServiceId { private String title, _abstract; private List keywords; private String serviceType; private List serviceTypeVersion; private String fees; private List accessConstraints; public ServiceId( String title, String anAbstract, List keywords, String serviceType, List serviceTypeVersion, String fees, List accessConstraints ) { this.title = title; this._abstract = anAbstract; this.keywords = new ArrayList( keywords); this.serviceType = serviceType; this.serviceTypeVersion = new ArrayList( serviceTypeVersion ); this.fees = fees; this.accessConstraints = new ArrayList( accessConstraints ); } public String getTitle() { return title; } public String getAbstract() { return _abstract; } public List getKeywords() { return Collections.unmodifiableList( keywords); } public String getServiceType() { return serviceType; } public List getServiceTypeVersion() { return Collections.unmodifiableList( serviceTypeVersion); } public String getFees() { return fees; } public List getAccessConstraints() { return Collections.unmodifiableList( accessConstraints); } } /** * Contain content needed for a GetCapabilities ServiceProvider section. */ public static class ServiceProvider { public ServiceProvider( String name, OnlineResource site, ServiceContact contact ) { this.name = name; this.site = site; this.contact = contact; } public String getName(){ return name; } private String name; public OnlineResource getSite() { return site; } private OnlineResource site; public ServiceContact getContact() { return contact; } private ServiceContact contact; public static class OnlineResource { public OnlineResource( URI link, String title ) { this.link = link; this.title = title; } public URI getLink() { return link; } private URI link; public String getTitle() { return title; } private String title; } public static class ServiceContact { public ServiceContact( String individualName, String positionName, ContactInfo contactInfo, String role ) { this.individualName = individualName; this.positionName = positionName; this.contactInfo = contactInfo; this.role = role; } public String getIndividualName() { return individualName; } private String individualName; public String getPositionName() { return positionName; } private String positionName; public ContactInfo getContactInfo() { return contactInfo; } private ContactInfo contactInfo; public String getRole() { return role; } private String role; } public static class ContactInfo { public ContactInfo( List voicePhone, List faxPhone, Address address, OnlineResource onlineResource, String hoursOfService, String contactInstructions ) { this.voicePhone = new ArrayList( voicePhone); this.faxPhone = new ArrayList( faxPhone); this.address = address; this.onlineResource = onlineResource; this.hoursOfService = hoursOfService; this.contactInstructions = contactInstructions; } public List getVoicePhone() { return Collections.unmodifiableList( voicePhone); } private List voicePhone; public List getFaxPhone() { return Collections.unmodifiableList( faxPhone); } private List faxPhone; public Address getAddress() { return address; } private Address address; public OnlineResource getOnlineResource() { return onlineResource; } private OnlineResource onlineResource; public String getHoursOfService() { return hoursOfService; } private String hoursOfService; public String getContactInstructions() { return contactInstructions; } private String contactInstructions; } public static class Address { public Address( List deliveryPoint, String city, String adminArea, String postalCode, String country, List email ) { this.deliveryPoint = new ArrayList( deliveryPoint); this.city = city; this.adminArea = adminArea; this.postalCode = postalCode; this.country = country; this.email = new ArrayList( email); } public List getDeliveryPoint() { return Collections.unmodifiableList( deliveryPoint); } private List deliveryPoint; public String getCity() { return city; } private String city; public String getAdminArea() { return adminArea; } private String adminArea; public String getPostalCode() { return postalCode; } private String postalCode; public String getCountry() { return country; } private String country; public List getEmail() { return Collections.unmodifiableList( email); } private List email; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy