package org.geoserver.wps;
import static org.custommonkey.xmlunit.XMLAssert.assertXpathExists;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.geotools.gml3.GMLConfiguration;
import org.w3c.dom.Document;
import com.mockrunner.mock.web.MockHttpServletResponse;
public class ExecuteTest extends WPSTestSupport {
public void testDataInline() throws Exception {
String xml =
"<wps:Execute service='WPS' version='1.0.0' xmlns:wps='http://www.opengis.net/wps/1.0.0' " +
"xmlns:ows='http://www.opengis.net/ows/1.1'>" +
"<ows:Identifier>gt:buffer</ows:Identifier>" +
"<wps:DataInputs>" +
"<wps:Input>" +
"<ows:Identifier>geom1</ows:Identifier>" +
"<wps:Data>" +
"<wps:ComplexData>" +
"<gml:Polygon xmlns:gml='http://www.opengis.net/gml'>" +
"<gml:exterior>" +
"<gml:LinearRing>" +
"<gml:coordinates>1 1 2 1 2 2 1 2 1 1</gml:coordinates>" +
"</gml:LinearRing>" +
"</gml:exterior>" +
"</gml:Polygon>" +
"</wps:ComplexData>" +
"</wps:Data>" +
"</wps:Input>" +
"<wps:Input>" +
"<ows:Identifier>buffer</ows:Identifier>" +
"<wps:Data>" +
"<wps:LiteralData>1</wps:LiteralData>" +
"</wps:Data>" +
"</wps:Input>" +
"</wps:DataInputs>" +
"<wps:ResponseForm>" +
"<wps:ResponseDocument storeExecuteResponse='false'>" +
"<wps:Output>" +
"<ows:Identifier>geom-buffered</ows:Identifier>" +
"</wps:Output>" +
"</wps:ResponseDocument>" +
"</wps:ResponseForm>" +
"</wps:Execute>";
Document d = postAsDOM( "wps", xml );
checkValidationErrors(d);
assertEquals( "wps:ExecuteResponse", d.getDocumentElement().getNodeName() );
assertXpathExists( "/wps:ExecuteResponse/wps:Status/wps:ProcessSucceeded", d);
assertXpathExists(
"/wps:ExecuteResponse/wps:ProcessOutputs/wps:Output/wps:Data/wps:ComplexData/gml:Polygon", d);
}
public void testDataInlineRawOutput() throws Exception {
String xml =
"<wps:Execute service='WPS' version='1.0.0' xmlns:wps='http://www.opengis.net/wps/1.0.0' " +
"xmlns:ows='http://www.opengis.net/ows/1.1'>" +
"<ows:Identifier>gt:buffer</ows:Identifier>" +
"<wps:DataInputs>" +
"<wps:Input>" +
"<ows:Identifier>geom1</ows:Identifier>" +
"<wps:Data>" +
"<wps:ComplexData>" +
"<gml:Polygon xmlns:gml='http://www.opengis.net/gml'>" +
"<gml:exterior>" +
"<gml:LinearRing>" +
"<gml:coordinates>1 1 2 1 2 2 1 2 1 1</gml:coordinates>" +
"</gml:LinearRing>" +
"</gml:exterior>" +
"</gml:Polygon>" +
"</wps:ComplexData>" +
"</wps:Data>" +
"</wps:Input>" +
"<wps:Input>" +
"<ows:Identifier>buffer</ows:Identifier>" +
"<wps:Data>" +
"<wps:LiteralData>1</wps:LiteralData>" +
"</wps:Data>" +
"</wps:Input>" +
"</wps:DataInputs>" +
"<wps:ResponseForm>" +
" <wps:RawDataOutput>" +
" <ows:Identifier>geom-buffered</ows:Identifier>" +
" </wps:RawDataOutput>" +
" </wps:ResponseForm>" +
"</wps:Execute>";
Document d = postAsDOM( "wps", xml );
checkValidationErrors(d, new GMLConfiguration());
assertEquals( "gml:Polygon", d.getDocumentElement().getNodeName() );
}
public void testFeatureCollectionInline() throws Exception {
String xml = "<wps:Execute service='WPS' version='1.0.0' xmlns:wps='http://www.opengis.net/wps/1.0.0' " +
"xmlns:ows='http://www.opengis.net/ows/1.1'>" +
"<ows:Identifier>gt:BufferFeatureCollection</ows:Identifier>" +
"<wps:DataInputs>" +
"<wps:Input>" +
"<ows:Identifier>features</ows:Identifier>" +
"<wps:Data>" +
"<wps:ComplexData>" +
readFileIntoString("states-FeatureCollection.xml") +
"</wps:ComplexData>" +
"</wps:Data>" +
"</wps:Input>" +
"<wps:Input>" +
"<ows:Identifier>buffer</ows:Identifier>" +
"<wps:Data>" +
"<wps:LiteralData>10</wps:LiteralData>" +
"</wps:Data>" +
"</wps:Input>" +
"</wps:DataInputs>" +
"<wps:ResponseForm>" +
"<wps:ResponseDocument storeExecuteResponse='false'>" +
"<wps:Output>" +
"<ows:Identifier>geom-buffered</ows:Identifier>" +
"</wps:Output>" +
"</wps:ResponseDocument>" +
"</wps:ResponseForm>" +
"</wps:Execute>";
Document d = postAsDOM( "wps", xml );
print(d);
checkValidationErrors(d);
assertEquals( "wps:ExecuteResponse", d.getDocumentElement().getNodeName() );
assertXpathExists( "/wps:ExecuteResponse/wps:Status/wps:ProcessSucceeded", d);
assertXpathExists(
"/wps:ExecuteResponse/wps:ProcessOutputs/wps:Output/wps:Data/wps:ComplexData/wfs:FeatureCollection", d);
}
String readFileIntoString( String filename ) throws IOException {
BufferedReader in =
new BufferedReader( new InputStreamReader(getClass().getResourceAsStream( filename ) ) );
StringBuffer sb = new StringBuffer();
String line = null;
while( (line = in.readLine() ) != null ) {
sb.append( line );
}
in.close();
return sb.toString();
}
public void testPlainAddition() throws Exception {
String xml =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\r\n" +
"<wps:Execute service=\"WPS\" version=\"1.0.0\"\r\n" +
" xmlns:wps=\"http://www.opengis.net/wps/1.0.0\" xmlns:ows=\"http://www.opengis.net/ows/1.1\"\r\n" +
" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n" +
" <ows:Identifier>gt:DoubleAddition</ows:Identifier>\r\n" +
" <wps:DataInputs>\r\n" +
" <wps:Input>\r\n" +
" <ows:Identifier>input_a</ows:Identifier>\r\n" +
" <wps:Data>\r\n" +
" <wps:LiteralData>7</wps:LiteralData>\r\n" +
" </wps:Data>\r\n" +
" </wps:Input>\r\n" +
" <wps:Input>\r\n" +
" <ows:Identifier>input_b</ows:Identifier>\r\n" +
" <wps:Data>\r\n" +
" <wps:LiteralData>7</wps:LiteralData>\r\n" +
" </wps:Data>\r\n" +
" </wps:Input>\r\n" +
" </wps:DataInputs>\r\n" +
" <wps:ResponseForm>\r\n" +
" <wps:RawDataOutput>\r\n" +
" <ows:Identifier>result</ows:Identifier>\r\n" +
" </wps:RawDataOutput>\r\n" +
" </wps:ResponseForm>\r\n" +
"</wps:Execute>";
MockHttpServletResponse response = postAsServletResponse(root(), xml);
assertEquals("text/plain", response.getContentType());
assertEquals("14.0", response.getOutputStreamContent());
}
}