Skip to content

Commit

Permalink
[GEOS-7697] Error <Field 'latLonBoundingBox' is required> when creati…
Browse files Browse the repository at this point in the history
…ng layer
  • Loading branch information
aaime committed Oct 2, 2016
1 parent 4895e68 commit 4d04308
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 35 deletions.
Expand Up @@ -13,6 +13,7 @@


import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink; import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.DropDownChoice;
Expand All @@ -33,6 +34,7 @@
import org.geoserver.web.GeoServerApplication; import org.geoserver.web.GeoServerApplication;
import org.geoserver.web.wicket.CRSPanel; import org.geoserver.web.wicket.CRSPanel;
import org.geoserver.web.wicket.EnvelopePanel; import org.geoserver.web.wicket.EnvelopePanel;
import org.geoserver.web.wicket.FeedbackMessageCleaner;
import org.geoserver.web.wicket.GeoServerAjaxFormLink; import org.geoserver.web.wicket.GeoServerAjaxFormLink;
import org.geoserver.web.wicket.KeywordsEditor; import org.geoserver.web.wicket.KeywordsEditor;
import org.geoserver.web.wicket.LiveCollectionModel; import org.geoserver.web.wicket.LiveCollectionModel;
Expand Down Expand Up @@ -174,17 +176,17 @@ public boolean getDefaultFormProcessing() {
}; };
} }


GeoServerAjaxFormLink computeLatLonBoundsLink(final Form refForm, AjaxSubmitLink computeLatLonBoundsLink(final Form refForm,
final EnvelopePanel nativeBBox, final EnvelopePanel latLonPanel) { final EnvelopePanel nativeBBox, final EnvelopePanel latLonPanel) {
return new GeoServerAjaxFormLink("computeLatLon", refForm) { return new AjaxSubmitLink("computeLatLon", refForm) {


private static final long serialVersionUID = -5981662004745936762L; private static final long serialVersionUID = -5981662004745936762L;


@Override @Override
protected void onClick(AjaxRequestTarget target, Form form) { protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
// perform manual processing of the required fields // perform manual processing of the required fields
nativeBBox.processInput(); form.process(null);
declaredCRS.processInput(); form.visitFormComponents(new FeedbackMessageCleaner<>(FeedbackMessage.UNDEFINED));


ReferencedEnvelope nativeBounds = (ReferencedEnvelope) nativeBBox.getModelObject(); ReferencedEnvelope nativeBounds = (ReferencedEnvelope) nativeBBox.getModelObject();
try { try {
Expand All @@ -206,6 +208,13 @@ protected void onClick(AjaxRequestTarget target, Form form) {
} }
target.add(latLonPanel); target.add(latLonPanel);
} }

@Override
public boolean getDefaultFormProcessing() {
// disable the default processing or the link won't trigger
// when any validation fails
return false;
}
}; };
} }


Expand Down
@@ -0,0 +1,39 @@
/* (c) 2016 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.web.wicket;

import org.apache.wicket.Component;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.feedback.FeedbackMessages;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;

/**
* Cleans messages in components recursively
*
* @author Andrea Aime
*/
public class FeedbackMessageCleaner<C extends Component, R> implements IVisitor<C, R> {

int level;

/**
* Builds a cleaner removing all messages at or above the specified level. See {@link FeedbackMessage} for a list of levels
* @param level
*/
public FeedbackMessageCleaner(int level) {
this.level = level;
}

@Override
public void component(C component, IVisit<R> visit) {
if (component.hasFeedbackMessage()) {
FeedbackMessages messages = component.getFeedbackMessages();
messages.clear(message -> message.getLevel() >= level);
}

}

}
Expand Up @@ -5,13 +5,23 @@
*/ */
package org.geoserver.web.data.resource; package org.geoserver.web.data.resource;


import static org.junit.Assert.*;

import java.io.IOException;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxEventBehavior; import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.AjaxRequestTarget;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.CatalogBuilder;
import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.catalog.FeatureTypeInfo; import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.catalog.LayerInfo; import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.ResourceInfo; import org.geoserver.catalog.ResourceInfo;
import org.geoserver.data.test.MockData; import org.geoserver.data.test.MockData;
import org.geoserver.web.GeoServerWicketTestSupport; import org.geoserver.web.GeoServerWicketTestSupport;
import org.geotools.feature.NameImpl;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.junit.Test; import org.junit.Test;


public class ResourceConfigurationPageTest extends GeoServerWicketTestSupport { public class ResourceConfigurationPageTest extends GeoServerWicketTestSupport {
Expand Down Expand Up @@ -51,34 +61,29 @@ public void onEvent(AjaxRequestTarget target) {
tester.assertContains("the_geom"); tester.assertContains("the_geom");
} }


// I can't make the last assertion work, my wicket-fu is not good enough or else the @Test
// public void testComputeLatLon() throws Exception {
// public void testTabSwitch() { final Catalog catalog = getCatalog();
// ResourceInfo info = getGeoServerApplication()
// .getCatalog() final CatalogBuilder cb = new CatalogBuilder(catalog);
// .getResources(ResourceInfo.class).get(0); cb.setStore(catalog.getStoreByName(MockData.POLYGONS.getPrefix(), DataStoreInfo.class));
// FeatureTypeInfo ft = cb.buildFeatureType(new NameImpl(MockData.POLYGONS));
// login(); LayerInfo layer = cb.buildLayer(ft);
// tester.startPage(new ResourceConfigurationPage(info, false));
// FormTester ft = tester.newFormTester("resource"); login();
// ft.setValue("tabs:panel:theList:0:content:title", "Some other title"); ResourceConfigurationPage page = new ResourceConfigurationPage(layer, true);
// ft.submit(); tester.startPage(page);
// assertEquals("Some other title", ft.getTextComponentValue("tabs:panel:theList:0:content:title")); // print(tester.getLastRenderedPage(), true, true, true);
// tester.assertModelValue("resource:tabs:panel:theList:0:content:title", "Some other title"); tester.executeAjaxEvent("publishedinfo:tabs:panel:theList:0:content:referencingForm:computeLatLon", "onclick");
// // print(tester.getLastRenderedPage(), true, true, true);
// // switch to the other page // we used to have error messages
// tester.clickLink("resource:tabs:tabs-container:tabs:1:link"); tester.assertNoErrorMessage();
// tester.assertRenderedPage(ResourceConfigurationPage.class); Component llbox = tester.getComponentFromLastRenderedPage("publishedinfo:tabs:panel:theList:0:content:referencingForm:latLonBoundingBox");
// tester.assertComponent("resource:tabs:panel:theList:0:content", BasicLayerConfig.class); ReferencedEnvelope re = (ReferencedEnvelope) llbox.getDefaultModelObject();
// assertEquals(-93, re.getMinX(), 0.1);
// // switch back assertEquals(4.5, re.getMinY(), 0.1);
// tester.clickLink("resource:tabs:tabs-container:tabs:0:link"); assertEquals(-93, re.getMaxX(), 0.1);
// tester.assertRenderedPage(ResourceConfigurationPage.class); assertEquals(4.5, re.getMaxY(), 0.1);
// tester.assertComponent("resource:tabs:panel:theList:0:content", BasicResourceConfig.class); }
//
// // check the title is still what we did set (switching tabs did not make us loose the value)
// tester.assertComponent("resource:tabs:panel:theList:0:content:title", TextField.class);
// ft = tester.newFormTester("resource");
// tester.assertModelValue("resource:tabs:panel:theList:0:content:title", "Some other title");
// }
} }

0 comments on commit 4d04308

Please sign in to comment.