diff options
Diffstat (limited to 'petascope/src/petascope/wcs2/server/ops/DescribeCoverage.java')
-rw-r--r-- | petascope/src/petascope/wcs2/server/ops/DescribeCoverage.java | 204 |
1 files changed, 0 insertions, 204 deletions
diff --git a/petascope/src/petascope/wcs2/server/ops/DescribeCoverage.java b/petascope/src/petascope/wcs2/server/ops/DescribeCoverage.java deleted file mode 100644 index 6f4e752..0000000 --- a/petascope/src/petascope/wcs2/server/ops/DescribeCoverage.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * 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 <http://www.gnu.org/licenses/>. - * - * Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann / - rasdaman GmbH. - * - * For more information please see <http://www.rasdaman.org> - * or contact Peter Baumann via <baumann@rasdaman.com>. - */ -package petascope.wcs2.server.ops; - -//~--- non-JDK imports -------------------------------------------------------- -import java.util.HashSet; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import petascope.ConfigManager; - -import petascope.wcps.server.core.CellDomainElement; -import petascope.wcps.server.core.DbMetadataSource; -import petascope.wcps.server.core.DomainElement; -import petascope.wcps.server.core.Metadata; -import petascope.wcps.server.core.RangeElement; - -import petascope.wcs.server.exceptions.WCSException; - -//~--- JDK imports ------------------------------------------------------------ - -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import petascope.wcps.server.core.SDU; -import petascope.wcs.server.exceptions.InvalidParameterValueException; -import petascope.wcs.server.exceptions.InvalidServiceConfigurationException; -import petascope.wcs.server.exceptions.NoApplicableCodeException; - -/** - * Describe Coverage operation for WCS 2.0 - * - * @author Andrei Aiordachioaie - */ -public class DescribeCoverage implements WcsOperation { - - public static String DATATYPE_URN_PREFIX = "urn:ogc:def:dataType:OGC:1.1:"; - private static Logger LOG = LoggerFactory.getLogger(DescribeCoverage.class); - /* Template XMLs for response types */ - private String DescribeCoverageResponse; - /* Other useful stuff */ - private String coverageDescriptionTemplate; - private String listOfFormats; - private String low, high, axisLabels; - private DbMetadataSource meta; - private String rangeComponentTemplate; - private String rangeComponents, gridDimension, gridId; - - public DescribeCoverage(DbMetadataSource metadata) throws InvalidServiceConfigurationException { - meta = metadata; - - DescribeCoverageResponse = ConfigManager.WCS2_DESCRIBE_COVERAGE_TEMPLATE; - if (DescribeCoverageResponse == null) { - throw new InvalidServiceConfigurationException("Could not find template file."); - } - listOfFormats = "application/xml"; - - /* Find the CoverageDescription template string */ - String starttag = "<wcs:CoverageDescription ", endtag = "</wcs:CoverageDescription>"; - int start = DescribeCoverageResponse.indexOf(starttag); - int end = DescribeCoverageResponse.indexOf(endtag); - - coverageDescriptionTemplate = DescribeCoverageResponse.substring(start, end + endtag.length()); - String newResponse = DescribeCoverageResponse.substring(0, start - 1) + DescribeCoverageResponse.substring(end + endtag.length()); - - DescribeCoverageResponse = newResponse; - - /* Find the RangeComponent template string */ - starttag = "<gmlwcs:rangeField"; - endtag = "</gmlwcs:rangeField>"; - start = coverageDescriptionTemplate.indexOf(starttag); - end = coverageDescriptionTemplate.indexOf(endtag); - rangeComponentTemplate = coverageDescriptionTemplate.substring(start, end + endtag.length()); - String newTemplate = coverageDescriptionTemplate.substring(0, start - 1) + coverageDescriptionTemplate.substring(end + endtag.length()); - - coverageDescriptionTemplate = newTemplate; - } - - @Override - public String execute(String stringXml) throws WCSException { - String output; - String desc = ""; - - String listOfCoverageDescriptions = ""; - int start, end; - - start = stringXml.indexOf("gml:id=\""); - while (start != -1) { - end = stringXml.substring(start + 8).indexOf("\""); - String coverageId = stringXml.substring(start + 8, start + 8 + end); - - stringXml = stringXml.substring(start + 8 + end + 1); - start = stringXml.indexOf("gml:id=\""); - - // Describe "coverageId" - if (meta.existsCoverageName(coverageId)) { - Metadata cov = null; - - // Read in coverage metadata - try { - cov = meta.read(coverageId); - } catch (Exception e) { - e.printStackTrace(); - - throw new NoApplicableCodeException("Metadata for coverage '" + coverageId + "' is not valid."); - } - - // Analyze the grid components and their values - Iterator<DomainElement> it = cov.getDomainIterator(); - Iterator<CellDomainElement> it2 = cov.getCellDomainIterator(); - - low = ""; - high = ""; - axisLabels = ""; - while (it.hasNext() && it2.hasNext()) { - DomainElement dom = it.next(); - CellDomainElement cell = it2.next(); - - axisLabels += dom.getName() + " "; - low += cell.getLo() + " "; - high += cell.getHi() + " "; - } - - // Build the range components data structure - Iterator<RangeElement> it3 = cov.getRangeIterator(); - Iterator<String> nilIterator = cov.getNullSetIterator(); - - - rangeComponents = ""; - int i = -1; - while (it3.hasNext()) { - String component = rangeComponentTemplate; - RangeElement range = it3.next(); - i++; - String rangeId = "range-" + cov.getCoverageId() + "-" + range.getName(); - - component = component.replaceAll("\\{rangeFieldId\\}", rangeId); - component = component.replaceAll("\\{fieldName\\}", range.getName()); - component = component.replaceAll("\\{datatype\\}", DATATYPE_URN_PREFIX + range.getType()); - - // Compute the null values for this range field - Set<String> nullVals = new HashSet<String>(); - Iterator<String> it4 = cov.getNullSetIterator(); - while (it4.hasNext()) { - List<String> nilVal = SDU.str2string(it4.next()); - nullVals.add(nilVal.get(i)); - } - StringBuffer nullValsString = new StringBuffer(); - it4 = nullVals.iterator(); - while (it4.hasNext()) { - nullValsString.append(" " + it4.next()); - } - component = component.replaceAll("\\{nilValues\\}", nullValsString.toString().substring(1)); - - // And add this range field to the range structure - rangeComponents += component; - } - - desc = coverageDescriptionTemplate.replaceAll("\\{coverageId\\}", coverageId); - gridId = "grid" + coverageId; - desc = desc.replaceAll("\\{gridId\\}", gridId); - gridDimension = String.valueOf(cov.getDimension()); - desc = desc.replaceAll("\\{gridDimension\\}", gridDimension); - desc = desc.replaceAll("\\{low\\}", low); - desc = desc.replaceAll("\\{high\\}", high); - desc = desc.replaceAll("\\{axisLabels\\}", axisLabels); - desc = desc.replaceAll("\\{rangeFields\\}", rangeComponents); - desc = desc.replaceAll("\\{rangeStructureId\\}", "rangeStructure-" + coverageId); - desc = desc.replaceAll("\\{supportedFormats\\}", listOfFormats); - - listOfCoverageDescriptions += desc; - } else { - throw new InvalidParameterValueException("gml:id"); - } - } - - output = DescribeCoverageResponse.replaceAll("\\{listOfCoverageDescriptions\\}", - listOfCoverageDescriptions); - - output = output.replaceAll("\\{wcsSchemaUrl\\}", ConfigManager.WCS2_SCHEMA_URL); - - return output; - } -} |