/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.monitor.ows.wcs11; import java.util.Arrays; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import net.opengis.ows11.CodeType; import org.eclipse.emf.ecore.EObject; import org.geoserver.monitor.ows.RequestObjectHandler; import org.geoserver.monitor.MonitorConfig; import org.geoserver.ows.util.OwsUtils; import org.geotools.geometry.jts.ReferencedEnvelope; import org.geotools.referencing.CRS; import org.geotools.util.logging.Logging; import org.geotools.xml.EMFUtils; import org.opengis.geometry.BoundingBox; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.operation.TransformException; public class GetCoverageHandler extends RequestObjectHandler { static Logger LOGGER = Logging.getLogger("org.geoserver.monitor"); public GetCoverageHandler(MonitorConfig config) { super("net.opengis.wcs11.GetCoverageType", config); } @Override public List<String> getLayers(Object request) { CodeType id = (CodeType)EMFUtils.get((EObject)request, "identifier"); return id != null ? Arrays.asList(id.getValue()) : null; } @Override protected BoundingBox getBBox(Object request) { Object domainSubset = OwsUtils.get(request, "domainSubset"); Object wcsBbox = OwsUtils.get(domainSubset, "boundingBox"); @SuppressWarnings("unchecked") List<Double> upperCorner = (List<Double>) OwsUtils.get(wcsBbox, "upperCorner"); @SuppressWarnings("unchecked") List<Double> lowerCorner = (List<Double>) OwsUtils.get(wcsBbox, "lowerCorner"); CoordinateReferenceSystem crs = null; String crsName= (String) OwsUtils.get(wcsBbox, "crs"); try { crs= CRS.decode(crsName); } catch (Exception e) { LOGGER.log(Level.WARNING, String.format("Could not decode CRS ID: %s", crsName), e); return null; } double minX = lowerCorner.get(0); double maxX = upperCorner.get(0); double minY = lowerCorner.get(1); double maxY = upperCorner.get(1); try{ // Turn into a class that implements BoundingBox return new ReferencedEnvelope(minX, maxX, minY, maxY, crs).toBounds(monitorConfig.getBboxCrs()); } catch (TransformException e) { LOGGER.log(Level.WARNING, "Could not transform bounding box to logging CRS", e); return null; } } }