org.geoserver.params.extractor.web.ParamsExtractorRulePage.java Source code

Java tutorial

Introduction

Here is the source code for org.geoserver.params.extractor.web.ParamsExtractorRulePage.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.geoserver.params.extractor.web;

import org.apache.wicket.extensions.ajax.markup.html.tabs.AjaxTabbedPanel;
import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
import org.apache.wicket.markup.html.form.*;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.geoserver.web.GeoServerSecuredPage;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class ParamsExtractorRulePage extends GeoServerSecuredPage {

    public ParamsExtractorRulePage(Optional<RuleModel> optionalRuleModel) {
        CompoundPropertyModel<RuleModel> simpleRuleModel = new CompoundPropertyModel<>(
                optionalRuleModel.orElse(new RuleModel()));
        CompoundPropertyModel<RuleModel> complexRuleModel = new CompoundPropertyModel<>(
                optionalRuleModel.orElse(new RuleModel()));
        CompoundPropertyModel<RuleModel> echoParameterModel = new CompoundPropertyModel<>(
                optionalRuleModel.orElse(new RuleModel(true)));
        Form<RuleModel> form = new Form<>("form");
        add(form);
        List<WrappedTab> tabs = new ArrayList<>();
        if (!optionalRuleModel.isPresent() || optionalRuleModel.get().isEchoOnly()) {
            tabs.add(new WrappedTab("Echo Parameter", echoParameterModel) {
                public Panel getPanel(String panelId) {
                    return new EchoParameterPanel(panelId, echoParameterModel);
                }
            });
        }
        if (!optionalRuleModel.isPresent() || optionalRuleModel.get().getPosition() != null) {
            tabs.add(new WrappedTab("Basic Rule", simpleRuleModel) {
                public Panel getPanel(String panelId) {
                    return new SimpleRulePanel(panelId, simpleRuleModel);
                }
            });
        }
        if (!optionalRuleModel.isPresent() || optionalRuleModel.get().getMatch() != null) {
            tabs.add(new WrappedTab("Advanced Rule", complexRuleModel) {
                public Panel getPanel(String panelId) {
                    return new ComplexRulePanel(panelId, complexRuleModel);
                }
            });
        }
        AjaxTabbedPanel tabbedPanel = new AjaxTabbedPanel<>("tabs", tabs);
        form.add(tabbedPanel);
        form.add(new SubmitLink("save") {
            @Override
            public void onSubmit() {
                try {
                    WrappedTab selectedTab = tabs.get(tabbedPanel.getSelectedTab());
                    RuleModel ruleModel = selectedTab.getModel().getObject();
                    RulesModel.saveOrUpdate(ruleModel);
                    doReturn(ParamsExtractorConfigPage.class);
                } catch (Exception exception) {
                    error(exception);
                }
            }
        });
        form.add(new BookmarkablePageLink("cancel", ParamsExtractorConfigPage.class));
    }

    public abstract class WrappedTab extends AbstractTab {

        private final IModel<RuleModel> model;

        public WrappedTab(String title, IModel<RuleModel> model) {
            super(new Model<>(title));
            this.model = model;
        }

        public IModel<RuleModel> getModel() {
            return model;
        }
    }

    public class SimpleRulePanel extends Panel {

        public SimpleRulePanel(String panelId, IModel<RuleModel> model) {
            super(panelId, model);
            add(new NumberTextField<Integer>("position").setMinimum(1).setRequired(true));
            add(new TextField<String>("parameter").setRequired(true));
            add(new TextField<String>("transform").setRequired(true));
            add(new CheckBox("echo"));
        }
    }

    public class ComplexRulePanel extends Panel {

        public ComplexRulePanel(String panelId, IModel<RuleModel> model) {
            super(panelId, model);
            add(new TextField<String>("match").setRequired(true));
            add(new TextField<String>("activation"));
            add(new TextField<String>("parameter").setRequired(true));
            add(new TextField<String>("transform").setRequired(true));
            add(new NumberTextField<Integer>("remove").setMinimum(1));
            add(new TextField<String>("combine"));
            add(new CheckBox("echo"));
        }
    }

    public class EchoParameterPanel extends Panel {

        public EchoParameterPanel(String panelId, IModel<RuleModel> model) {
            super(panelId, model);
            add(new TextField<String>("parameter").setRequired(true));
        }
    }
}