/* (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.wcs2_0.kvp;
import java.util.Collection;
import java.util.Map;
import net.opengis.ows20.AcceptVersionsType;
import net.opengis.ows20.Ows20Factory;
import net.opengis.wcs20.GetCapabilitiesType;
import net.opengis.wcs20.Wcs20Factory;
import org.eclipse.emf.ecore.EObject;
import org.geoserver.ows.kvp.AcceptVersionsKvpParser;
import org.geoserver.ows.kvp.EMFKvpRequestReader;
import org.geoserver.ows.util.KvpUtils;
import org.geotools.xml.EMFUtils;
/**
* Parses a GetCapabilities request for WCS into the correspondent model object
*
* @author Emanuele Tajariol (etj) - GeoSolutions
*
*/
@SuppressWarnings(value={"rawtypes","unchecked"})
public class WCS20GetCapabilitiesRequestReader extends EMFKvpRequestReader {
public WCS20GetCapabilitiesRequestReader() {
super(GetCapabilitiesType.class, Wcs20Factory.eINSTANCE);
}
public Object read(Object request, Map kvp, Map rawKvp) throws Exception {
if(rawKvp.containsKey("acceptVersions")) {
AcceptVersionsKvpParser avp = new WCS20AcceptVersionsKvpParser();
String value = (String) rawKvp.get("acceptVersions");
LOGGER.info("acceptVersions: " + value);
AcceptVersionsType avt = (AcceptVersionsType) avp.parse(value);
kvp.put("acceptVersions", avt);
}
// make sure we get the right Sections-Type param -> workaround for GEOS-6807
if(rawKvp.containsKey("sections")) {
String value = (String) rawKvp.get("sections");
LOGGER.info("Sections: " + value);
EObject sections = Ows20Factory.eINSTANCE.createSectionsType();
((Collection)EMFUtils.get(sections, "section")).addAll(KvpUtils.readFlat(value, KvpUtils.INNER_DELIMETER));
kvp.put("sections", sections);
}
request = super.read(request, kvp, rawKvp);
return request;
}
}