package org.geoserver.community.css.web; import org.apache.wicket.PageParameters; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.validation.IValidator; import org.apache.wicket.validation.IValidatable; import org.apache.wicket.validation.ValidationError; public class LayerNameInput extends Panel { String name = ""; public LayerNameInput(String id, final CssDemoPage demo) { super(id); Form form = new Form("layer.name.form"); IValidator<String> nameValidator = new IValidator<String>() { @Override public void validate(IValidatable<String> text) { String value = text.getValue(); if (value.matches("\\s")) { text.error(new ValidationError().setMessage( "Spaces not allowed in style names" )); } else { text.error(new ValidationError().setMessage( "That name is already taken!" )); } } }; TextField nameField = new TextField( "layer.name.field", new PropertyModel<String>(this, "name") ); nameField.add(nameValidator); AjaxButton submitButton = new AjaxButton("submit.button", form) { @Override public void onSubmit(AjaxRequestTarget target, Form f) { if (demo.catalog().getStyleByName(name) != null) throw new RuntimeException( "Trying to create style with same name as existing one!" ); demo.createCssTemplate(name); PageParameters params = new PageParameters(); params.put("layer", demo.getLayer().getPrefixedName()); params.put("style", name); setResponsePage(CssDemoPage.class, params); } }; form.add(nameField); form.add(submitButton); add(form); } }