/* (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.wms.describelayer; import java.util.List; import java.util.Map; import org.geoserver.ows.KvpRequestReader; import org.geoserver.platform.ServiceException; import org.geoserver.wms.DescribeLayerRequest; import org.geoserver.wms.MapLayerInfo; import org.geoserver.wms.WMS; import org.geoserver.wms.kvp.MapLayerInfoKvpParser; /** * Parses a DescribeLayer request, wich consists only of a list of layer names, given by the * <code>"LAYER"</code> parameter. * * * @author Gabriel Roldan * @version $Id$ */ public class DescribeLayerKvpRequestReader extends KvpRequestReader { private WMS wms; public DescribeLayerKvpRequestReader(WMS wms) { super(DescribeLayerRequest.class); this.wms = wms; } /** * @throws ServiceException * if no layers has been requested, or one of the requested layers does not exists * on this server instance, or the version parameter was not provided. * @see org.geoserver.ows.KvpRequestReader#read(java.lang.Object, java.util.Map, java.util.Map) */ @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public Object read(Object req, Map kvp, Map rawKvp) throws Exception { DescribeLayerRequest request = (DescribeLayerRequest) super.read(req, kvp, rawKvp); request.setRawKvp(rawKvp); final String version = request.getVersion(); if (null == version) { String code = "NoVersionInfo"; String simpleName = getClass().getSimpleName(); throw new ServiceException( "Version parameter not provided for DescribeLayer operation", code, simpleName); } if (!wms.getVersion().equals(version)) { throw new ServiceException("Wrong value for version parameter: " + version + ". This server accetps version " + wms.getVersion(), "InvalidVersion", getClass().getSimpleName()); } List<MapLayerInfo> layers = new MapLayerInfoKvpParser("LAYERS", wms).parse((String) rawKvp.get("LAYERS")); request.setLayers(layers); if (layers == null || layers.size() == 0) { throw new ServiceException("No LAYERS has been requested", "NoLayerRequested", getClass().getName()); } return request; } }