/* (c) 2015 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wps.web; import static org.junit.Assert.assertEquals; import java.util.List; import org.apache.wicket.markup.repeater.OddEvenItem; import org.geoserver.data.test.SystemTestData; import org.geoserver.wps.ProcessGroupInfo; import org.geoserver.wps.ProcessInfo; import org.geoserver.wps.ProcessInfoImpl; import org.geoserver.wps.WPSInfo; import org.geoserver.wps.validator.MaxSizeValidator; import org.geoserver.wps.validator.MultiplicityValidator; import org.geoserver.wps.validator.NumberRangeValidator; import org.geoserver.wps.web.FilteredProcessesProvider.FilteredProcess; import org.geoserver.wps.web.ProcessLimitsPage.InputLimit; import org.geotools.feature.NameImpl; import org.geotools.process.raster.RasterProcessFactory; import org.geotools.util.NumberRange; import org.junit.Test; public class ProcessLimitsPageTest extends WPSPagesTestSupport { @Override protected void onSetUp(SystemTestData testData) throws Exception { super.onSetUp(testData); // add some limits to the processes WPSInfo wps = getGeoServer().getService(WPSInfo.class); ProcessGroupInfo rasterGroup = getRasterGroup(wps.getProcessGroups()); // for the buffer process ProcessInfo contour = new ProcessInfoImpl(); contour.setEnabled(true); contour.setName(new NameImpl("ras", "Contour")); contour.getValidators().put("data", new MaxSizeValidator(1)); contour.getValidators().put("levels", new NumberRangeValidator(new NumberRange<Double>(Double.class, -8000d, 8000d))); contour.getValidators().put("levels", new MultiplicityValidator(3)); rasterGroup.getFilteredProcesses().add(contour); // save getGeoServer().save(wps); } @Test public void test() throws Exception { login(); WPSInfo wps = getGeoServerApplication().getGeoServer().getService(WPSInfo.class); ProcessGroupInfo rasterGroup = getRasterGroup(wps.getProcessGroups()); ProcessInfo pi = getProcess(rasterGroup.getFilteredProcesses(), "Contour"); // start the pages WPSAccessRulePage accessRulePage = (WPSAccessRulePage) tester .startPage(new WPSAccessRulePage()); ProcessSelectionPage selectionPage = (ProcessSelectionPage) tester .startPage(new ProcessSelectionPage(accessRulePage, rasterGroup)); FilteredProcess filteredProcess = new FilteredProcess(pi.getName(), ""); filteredProcess.setValidators(pi.getValidators()); ProcessLimitsPage limitsPage = (ProcessLimitsPage) tester.startPage(new ProcessLimitsPage( selectionPage, filteredProcess)); // print(limitsPage, true, true); // grab the table and check its contents (the order should be stable, we are iterating over // the process inputs) OddEvenItem item = (OddEvenItem) tester .getComponentFromLastRenderedPage("form:table:listContainer:items:1"); // max input size InputLimit il = (InputLimit) item.getDefaultModelObject(); assertEquals("data", il.getName()); assertEquals(new Integer(1), item.get("itemProperties:2:component:text") .getDefaultModelObject()); // levels range validator item = (OddEvenItem) tester .getComponentFromLastRenderedPage("form:table:listContainer:items:3"); il = (InputLimit) item.getDefaultModelObject(); assertEquals("levels", il.getName()); assertEquals(new NumberRange(Double.class, -8000d, 8000d), item.get("itemProperties:2:component:range").getDefaultModelObject()); // multiplicity validator item = (OddEvenItem) tester .getComponentFromLastRenderedPage("form:table:listContainer:items:4"); il = (InputLimit) item.getDefaultModelObject(); assertEquals("levels", il.getName()); assertEquals(new Integer(3), item.get("itemProperties:2:component:text") .getDefaultModelObject()); } private ProcessInfo getProcess(List<ProcessInfo> filteredProcesses, String name) { for (ProcessInfo pi : filteredProcesses) { if (pi.getName().getLocalPart().equals(name)) { return pi; } } return null; } private ProcessGroupInfo getRasterGroup(List<ProcessGroupInfo> processGroups) { for (ProcessGroupInfo pgi : processGroups) { if (pgi.getFactoryClass().equals(RasterProcessFactory.class)) { return pgi; } } return null; } }