/* (c) 2014 - 2016 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.wcs.web.demo; import java.io.ByteArrayOutputStream; import java.util.Collections; import java.util.logging.Level; import javax.servlet.http.HttpServletRequest; import javax.xml.transform.TransformerException; import org.apache.wicket.Page; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink; import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.Model; import org.geoserver.ows.URLMangler.URLType; import org.geoserver.ows.util.ResponseUtils; import org.geoserver.wcs.responses.CoverageResponseDelegateFinder; import org.geoserver.wcs.web.demo.GetCoverageRequest.Version; import org.geoserver.web.GeoServerApplication; import org.geoserver.web.GeoServerBasePage; import org.geoserver.web.demo.DemoRequest; import org.geoserver.web.demo.DemoRequestResponse; import org.geoserver.web.demo.PlainCodePage; import org.geotools.xml.transform.TransformerBase; /** * Small embedded WCS client enabling users to build a wcs GetCoverage request (and as a side effect * also showing what capabilities and describe process would provide) using * * @author Andrea Aime - OpenGeo */ @SuppressWarnings("serial") public class WCSRequestBuilder extends GeoServerBasePage { ModalWindow responseWindow; WCSRequestBuilderPanel builder; public WCSRequestBuilder() { // the form Form form = new Form("form"); add(form); // the actual request builder component builder = new WCSRequestBuilderPanel("requestBuilder", new GetCoverageRequest()); form.add(builder); // the xml popup window final ModalWindow xmlWindow = new ModalWindow("xmlWindow"); add(xmlWindow); xmlWindow.setPageCreator(new ModalWindow.PageCreator() { public Page createPage() { return new PlainCodePage(xmlWindow, responseWindow, getRequestXML()); } }); // the output response window responseWindow = new ModalWindow("responseWindow"); add(responseWindow); //responseWindow.setPageMapName("demoResponse"); responseWindow.setCookieName("demoResponse"); responseWindow.setPageCreator(new ModalWindow.PageCreator() { public Page createPage() { DemoRequest request = new DemoRequest(null); HttpServletRequest http = GeoServerApplication.get().servletRequest(); String url = ResponseUtils.buildURL(ResponseUtils.baseURL(http), "ows", Collections .singletonMap("strict", "true"), URLType.SERVICE); request.setRequestUrl(url); request.setRequestBody((String) responseWindow.getDefaultModelObject()); return new DemoRequestResponse(new Model(request)); } }); form.add(new AjaxSubmitLink("execute") { @Override protected void onSubmit(AjaxRequestTarget target, Form form) { responseWindow.setDefaultModel(new Model(getRequestXML())); responseWindow.show(target); } @Override protected void onError(AjaxRequestTarget target, Form form) { super.onError(target, form); target.add(builder.getFeedbackPanel()); } }); form.add(new AjaxSubmitLink("executeXML") { @Override protected void onSubmit(AjaxRequestTarget target, Form form) { try { getRequestXML(); xmlWindow.show(target); } catch (Exception e) { error(e.getMessage()); target.add(getFeedbackPanel()); } } @Override protected void onError(AjaxRequestTarget target, Form form) { target.add(getFeedbackPanel()); } }); } String getRequestXML() { ByteArrayOutputStream out = new ByteArrayOutputStream(); TransformerBase tx; if (builder.getCoverage.version == Version.v1_0_0) { tx = new WCS10GetCoverageTransformer(getCatalog()); } else { CoverageResponseDelegateFinder responseFactory = (CoverageResponseDelegateFinder) getGeoServerApplication().getBean("coverageResponseDelegateFactory"); tx = new WCS11GetCoverageTransformer(getCatalog(), responseFactory); } try { tx.setIndentation(2); tx.transform(builder.getCoverageRequest(), out); } catch (TransformerException e) { LOGGER.log(Level.SEVERE, "Error generating xml request", e); error(e); } return out.toString(); } }