/* * This file is part of rasdaman community. * * Rasdaman community is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Rasdaman community 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with rasdaman community. If not, see . * * Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann / rasdaman GmbH. * * For more information please see * or contact Peter Baumann via . */ package petascope.wcs.server.core; import petascope.wcs.server.exceptions.WCSException; import java.sql.SQLException; import java.util.Iterator; import javax.xml.bind.JAXBElement; import javax.xml.namespace.QName; import net.opengis.ows.v_1_0_0.CodeType; import net.opengis.ows.v_1_0_0.ContactType; import net.opengis.ows.v_1_0_0.OnlineResourceType; import net.opengis.ows.v_1_0_0.ResponsiblePartySubsetType; import net.opengis.ows.v_1_0_0.ServiceProvider; import net.opengis.wcs.ows.v_1_1_0.AllowedValues; import net.opengis.wcs.ows.v_1_1_0.DCP; import net.opengis.wcs.ows.v_1_1_0.DomainType; import net.opengis.wcs.ows.v_1_1_0.HTTP; import net.opengis.wcs.ows.v_1_1_0.Operation; import net.opengis.wcs.ows.v_1_1_0.OperationsMetadata; import net.opengis.wcs.ows.v_1_1_0.ServiceIdentification; import net.opengis.wcs.ows.v_1_1_0.ValueType; import net.opengis.wcs.v_1_1_0.Capabilities; import net.opengis.wcs.v_1_1_0.Contents; import net.opengis.wcs.v_1_1_0.CoverageSummaryType; import net.opengis.wcs.v_1_1_0.GetCapabilities; import petascope.wcps.server.core.DbMetadataSource; import petascope.wcps.server.core.Metadata; import petascope.wcps.server.exceptions.ResourceException; import javax.xml.XMLConstants; import net.opengis.ows.v_1_0_0.AddressType; import net.opengis.wcs.ows.v_1_1_0.RequestMethodType; import petascope.ConfigManager; import petascope.wcs.server.exceptions.InternalSqlException; import petascope.wcs.server.exceptions.InvalidParameterValueException; import petascope.wcs.server.exceptions.NoApplicableCodeException; /** * This class takes a WCS GetCapabilities XML request and executes request, * building the corresponding XML respose. * * @author Andrei Aiordachioaie */ public class executeGetCapabilities { private GetCapabilities input; private Capabilities output; private boolean finished; private DbMetadataSource meta; /** * Default constructor * @param cap GetCapabilities object, a WCS (or WCPS) request * @param metadataDbPath Path to the "dbparams.properties" file */ public executeGetCapabilities(GetCapabilities cap, DbMetadataSource source) throws WCSException { input = cap; output = new Capabilities(); meta = source; finished = false; } /** * Main method of this class. Retrieves the response to the GetCapabilities * request given to the constructor. If needed, it also calls process() * @return a Capabilities object. * @throws wcs_web_service.WCSException */ public Capabilities get() throws WCSException { if (finished == false) { process(); } if (finished == false) { throw new NoApplicableCodeException("Could not execute the GetCapabilities request! " + "Please see the other errors..."); } return output; } /** * Computes the response to the GetCapabilities request given to the constructor. * @throws wcs_web_service.WCSException */ public void process() throws WCSException { if (!input.SERVICE.equalsIgnoreCase("WCS")) { throw new InvalidParameterValueException("Service"); } try { buildField1(); // Service Identification buildField2(); // Service Provider buildField3(); // Operations Metadata buildField4(); // Contents finishBuild(); // Add the remaining required attributes finished = true; } catch (SQLException se) { finished = false; throw new InternalSqlException(se.getMessage(), se); } } /** * Builds the output node "Service Identification" */ private void buildField1() { ServiceIdentification ident = new ServiceIdentification(); ident.setTitle("PetaScope"); ident.setAbstract("PetaScope is a suite of OGC web-services comprising of " + "WCS, WCS-T and WCPS. It has been developed at Jacobs University, and " + "is mentained by the Jacobs University. Copyright Peter Baumann"); CodeType code = new CodeType(); code.setValue("WCS"); ident.setServiceType(code); ident.getServiceTypeVersion().add("1.1.0"); ident.setFees("NONE"); output.setServiceIdentification(ident); } /** * Builds the output node "Service Provider" */ private void buildField2() { ServiceProvider prov = new ServiceProvider(); prov.setProviderName("Jacobs University Bremen"); OnlineResourceType site = new OnlineResourceType(); site.setHref("http://www.petascope.org/"); prov.setProviderSite(site); ResponsiblePartySubsetType resp = new ResponsiblePartySubsetType(); resp.setIndividualName("Prof. Dr. Peter Baumann"); CodeType role = new CodeType(); role.setValue("Project Leader"); resp.setRole(role); ContactType contact = new ContactType(); AddressType addr = new AddressType(); addr.getElectronicMailAddress().add("p.baumann@jacobs-university.de"); addr.setCountry("Germany"); addr.setCity("Bremen"); addr.setPostalCode("28717"); contact.setAddress(addr); resp.setContactInfo(contact); prov.setServiceContact(resp); output.setServiceProvider(prov); } /** * Builds the output node "Operations Metadata" * @throws java.sql.SQLException */ private void buildField3() throws SQLException { OperationsMetadata opmeta = new OperationsMetadata(); Operation op1 = new Operation(); op1.setName("GetCapabilities"); DomainType postE = new DomainType(); postE.setName("PostEncoding"); AllowedValues val1 = new AllowedValues(); ValueType valX = new ValueType(); valX.setValue("XML"); val1.getValueOrRange().add(valX); postE.setAllowedValues(val1); op1.getConstraint().add(postE); DomainType store = new DomainType(); store.setName("store"); AllowedValues val2 = new AllowedValues(); ValueType v = new ValueType(); v.setValue("false"); val2.getValueOrRange().add(v); store.setAllowedValues(val2); op1.getParameter().add(store); DCP dcp = new DCP(); HTTP http = new HTTP(); RequestMethodType post = new RequestMethodType(); post.setHref(ConfigManager.PETASCOPE_SERVLET_URL); post.setType("simple"); http.getGetOrPost().add(new JAXBElement( new QName("http://www.opengis.net/wcs/1.1/ows", "Post", XMLConstants.DEFAULT_NS_PREFIX), RequestMethodType.class, post)); dcp.setHTTP(http); op1.getDCP().add(dcp); DomainType paramOnlyXml = new DomainType(); paramOnlyXml.setName("Format"); AllowedValues vals = new AllowedValues(); ValueType val = new ValueType(); val.setValue("text/xml"); vals.getValueOrRange().add(val); paramOnlyXml.setAllowedValues(vals); op1.getParameter().add(paramOnlyXml); opmeta.getOperation().add(op1); Operation op2 = new Operation(); op2.setName("GetCoverage"); op2.getConstraint().add(postE); // POST Encoding accepts only XML op2.getParameter().add(store); // Store parameter: not implemented op2.getDCP().add(dcp); // HTTP request URL op2.getConstraint().add(paramOnlyXml); opmeta.getOperation().add(op2); Operation op3 = new Operation(); op3.setName("DescribeCoverage"); op3.getConstraint().add(postE); // POST Encoding accepts only XML op3.getParameter().add(store); // Store parameter: not implemented op3.getDCP().add(dcp); // HTTP request URL op3.getConstraint().add(paramOnlyXml); opmeta.getOperation().add(op3); Operation op4 = new Operation(); op4.setName("ProcessCoverages"); op4.getConstraint().add(postE); // POST Encoding accepts only XML op4.getParameter().add(store); // Store parameter: not implemented op4.getDCP().add(dcp); // HTTP request URL op4.getConstraint().add(paramOnlyXml); opmeta.getOperation().add(op4); Operation op5 = new Operation(); op5.setName("Transaction"); op5.getConstraint().add(postE); // POST Encoding accepts only XML op5.getParameter().add(store); // Store parameter: not implemented op5.getDCP().add(dcp); // HTTP request URL op5.getConstraint().add(paramOnlyXml); opmeta.getOperation().add(op5); output.setOperationsMetadata(opmeta); } /** * Builds the output node "Contents" * @throws java.sql.SQLException */ private void buildField4() { Contents cont = new Contents(); Iterator coverages = null; try { coverages = meta.coverages().iterator(); } catch (ResourceException e) { } while (coverages.hasNext()) { Metadata metadata = null; try { metadata = meta.read(coverages.next()); } catch (Exception e) { } String covName = metadata.getCoverageName(); CoverageSummaryType sum = new CoverageSummaryType(); sum.setAbstract(metadata.getAbstract()); sum.setTitle(metadata.getTitle()); // code holds the coverage value CodeType code = new CodeType(); code.setValue(covName); // code is encapsulated in JAXBElement "jelem" JAXBElement jelem = new JAXBElement( new QName("http://www.opengis.net/wcs/1.1", "Identifier", XMLConstants.DEFAULT_NS_PREFIX), String.class, covName); // Insert "jelem" into this coveragesummary sum.getRest().add(jelem); // Add this CoverageSummary to the list of coverage summaries, to make up the Contents cont.getCoverageSummary().add(sum); } output.setContents(cont); } private void finishBuild() { /* WCS Standard Version ! */ output.setVersion("1.1.0"); } }