org.onehippo.forge.settings.management.config.urlrewriter.UrlRewriterConfigPanel.java Source code

Java tutorial

Introduction

Here is the source code for org.onehippo.forge.settings.management.config.urlrewriter.UrlRewriterConfigPanel.java

Source

/**
 * Copyright 2016 Hippo B.V. (http://www.onehippo.com)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.onehippo.forge.settings.management.config.urlrewriter;

import java.util.ArrayList;

import javax.jcr.RepositoryException;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.Radio;
import org.apache.wicket.markup.html.form.RadioGroup;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.ResourceModel;
import org.hippoecm.frontend.plugin.IPluginContext;
import org.hippoecm.frontend.plugin.config.IPluginConfig;
import org.hippoecm.frontend.plugins.standards.ClassResourceModel;
import org.onehippo.forge.settings.management.FeatureConfigPanel;

public class UrlRewriterConfigPanel extends FeatureConfigPanel {

    private final Model<ArrayList<String>> copyOfSkippedPrefixesModel;
    private UrlRewriterConfigModel urlRewriterConfigModel;

    public UrlRewriterConfigPanel(IPluginContext context, IPluginConfig config) {
        super(context, config, new ResourceModel("title"));

        urlRewriterConfigModel = new UrlRewriterConfigModel();

        final RadioGroup skipPostRadioGroup = new RadioGroup("urlrewriter-skip-post",
                new PropertyModel(urlRewriterConfigModel, "skipPost"));
        skipPostRadioGroup.add(new Radio("skip-post-disabled", new Model(Boolean.FALSE)));
        skipPostRadioGroup.add(new Radio("skip-post-enabled", new Model(Boolean.TRUE)));
        add(skipPostRadioGroup);

        final RadioGroup ignoreContextPathRadioGroup = new RadioGroup("urlrewriter-ignore-context-path",
                new PropertyModel(urlRewriterConfigModel, "ignoreContextPath"));
        ignoreContextPathRadioGroup.add(new Radio("ignore-context-path-disabled", new Model(Boolean.FALSE)));
        ignoreContextPathRadioGroup.add(new Radio("ignore-context-path-enabled", new Model(Boolean.TRUE)));
        add(ignoreContextPathRadioGroup);

        final RadioGroup useQueryStringRadioGroup = new RadioGroup("urlrewriter-use-query-string",
                new PropertyModel(urlRewriterConfigModel, "useQueryString"));

        useQueryStringRadioGroup.add(new Radio("use-query-string-disabled", new Model(Boolean.FALSE)));
        useQueryStringRadioGroup.add(new Radio("use-query-string-enabled", new Model(Boolean.TRUE)));
        add(useQueryStringRadioGroup);

        ArrayList<String> copy = new ArrayList<>();
        copy.addAll(urlRewriterConfigModel.getObject().getSkippedPrefixes());
        copyOfSkippedPrefixesModel = new Model(copy);
        final WebMarkupContainer skippedPrefixes = createSkippedPrefixes(copyOfSkippedPrefixesModel);
        add(skippedPrefixes);

        final Label notInstalledMessage = new Label("not-installed",
                new ClassResourceModel("not-installed", UrlRewriterConfigPanel.class));
        notInstalledMessage.setVisible(false);
        add(notInstalledMessage);

        if (!urlRewriterConfigModel.getObject().hasConfiguration()) {
            notInstalledMessage.setVisible(true);
            skipPostRadioGroup.setEnabled(false);
            ignoreContextPathRadioGroup.setEnabled(false);
            useQueryStringRadioGroup.setEnabled(false);
            skippedPrefixes.setEnabled(false);
        }
    }

    private WebMarkupContainer createSkippedPrefixes(Model copyOfSkippedPrefixesModel) {

        final WebMarkupContainer listContainer = new WebMarkupContainer("skippedPrefixesContainer");
        //generate a markup-id so the contents can be updated through an AJAX call
        listContainer.setOutputMarkupId(true);
        ListView<String> skippedPrefixes = new ListView<String>("urlrewriter-skipped-prefixes",
                copyOfSkippedPrefixesModel) {
            private static final long serialVersionUID = 1L;

            @Override
            protected void populateItem(final ListItem<String> item) {
                RequiredTextField prefixField = new RequiredTextField("prefix", item.getModel());
                prefixField.setOutputMarkupId(true);
                prefixField.add(new OnChangeAjaxBehavior() {
                    private static final long serialVersionUID = 1L;

                    @Override
                    protected void onUpdate(AjaxRequestTarget target) {
                    }
                });
                item.add(prefixField);

                AjaxSubmitLink remove = new AjaxSubmitLink("remove") {
                    private static final long serialVersionUID = 1L;

                    @Override
                    protected void onSubmit(AjaxRequestTarget target, Form form) {
                        int index = item.getIndex();
                        getModelObject().remove(index);
                        target.add(listContainer);
                    }
                };
                remove.setDefaultFormProcessing(false);
                item.add(remove);
            }
        };

        AjaxLink addPrefix = new AjaxLink("add") {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                skippedPrefixes.getModelObject().add("");
                target.add(listContainer);
                target.focusComponent(this);
            }
        };

        skippedPrefixes.setOutputMarkupId(true);
        listContainer.add(skippedPrefixes);
        listContainer.add(addPrefix);
        return listContainer;
    }

    public void save() {
        UrlRewriterConfig userManagementConfig = urlRewriterConfigModel.getObject();
        userManagementConfig.setSkippedPrefixes(copyOfSkippedPrefixesModel.getObject());

        try {
            userManagementConfig.save();
        } catch (RepositoryException e) {
            error("An error occurred while trying to save event log configuration: " + e);
        }
    }

    public void cancel() {
        // do nothing.
    }
}