/* (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));
}
}
}