org.geogig.geoserver.web.repository.ConfigEditPanel.java Source code

Java tutorial

Introduction

Here is the source code for org.geogig.geoserver.web.repository.ConfigEditPanel.java

Source

/* (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.geogig.geoserver.web.repository;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
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.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.validation.IValidator;
import org.apache.wicket.validation.validator.PatternValidator;

public class ConfigEditPanel extends Panel {

    private static final long serialVersionUID = -1015911960516043997L;

    Form<ConfigEntry> form;

    TextField<String> name;

    TextField<String> value;

    ConfigEditPanel(String id, IModel<ConfigEntry> model, final ModalWindow parentWindow,
            final ConfigListPanel table) {
        super(id, model);

        form = new Form<>("form", model);
        add(form);

        final FeedbackPanel feedback = new FeedbackPanel("feedback");
        feedback.setOutputMarkupId(true);
        form.add(feedback);

        final boolean isNew = model.getObject().getId() == null;
        name = new TextField<>("name", new PropertyModel<>(model, "name"));
        name.setRequired(true);
        name.add(new PatternValidator("[^\\s]+"));
        name.add(new IValidator<String>() {
            private static final long serialVersionUID = 2927770353770055054L;

            final String previousName = isNew ? null : form.getModelObject().getName();

            @Override
            public void validate(IValidatable<String> validatable) {
                String name = validatable.getValue();
                if (ConfigEntry.isRestricted(name)) {
                    form.error(String.format(
                            "Modifying %s through this interface can have unintended consequences and is not allowed.",
                            name));
                } else {
                    for (ConfigEntry config : table.getConfigs()) {
                        String newName = config.getName();
                        if (newName != null && !newName.equals(previousName) && newName.equals(name)) {
                            form.error(String.format("A config entry called %s already exists", name));
                        }
                    }
                }
            }
        });

        value = new TextField<>("value", new PropertyModel<>(model, "value"));
        value.setRequired(true);

        form.add(name);
        form.add(value);

        form.add(new AjaxSubmitLink("submit", form) {
            private static final long serialVersionUID = 1L;

            @Override
            protected void onError(AjaxRequestTarget target, Form<?> form) {
                target.add(feedback);
            }

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                ConfigEntry newConfig = (ConfigEntry) form.getModelObject();
                boolean isNew = newConfig.getId() == null;
                if (isNew) {
                    table.add(newConfig);
                }
                parentWindow.close(target);
                target.add(table);
            }
        });

        form.add(new AjaxLink<Void>("cancel") {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                parentWindow.close(target);
                target.add(table);
            }
        });
    }

}