org.xaloon.wicket.plugin.admin.PluginAdministrationPanel.java Source code

Java tutorial

Introduction

Here is the source code for org.xaloon.wicket.plugin.admin.PluginAdministrationPanel.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.xaloon.wicket.plugin.admin;

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

import org.apache.commons.lang.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.basic.Label;
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.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.value.ValueMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xaloon.core.api.plugin.AbstractPluginBean;
import org.xaloon.core.api.plugin.EmptyPlugin;
import org.xaloon.core.api.plugin.Plugin;
import org.xaloon.core.impl.plugin.category.CategoryConstants;
import org.xaloon.core.impl.plugin.category.CategoryGroupPlugin;
import org.xaloon.core.impl.plugin.category.CategoryMenuPlugin;
import org.xaloon.core.impl.plugin.category.DefaultPluginCategories;
import org.xaloon.core.impl.plugin.tree.GenericTreeNode;
import org.xaloon.core.impl.plugin.tree.MenuItem;
import org.xaloon.wicket.component.classifier.panel.CustomModalWindow;
import org.xaloon.wicket.plugin.AbstractPluginPanel;
import org.xaloon.wicket.plugin.menu.panel.FlatDynamicMenuPanel;

/**
 * Plugin administration panel shows configuration panel for available plugins
 * 
 * @author vytautas r.
 * @version 1.1, 09/28/10
 * @since 1.3
 */

public class PluginAdministrationPanel extends AbstractPluginPanel<AbstractPluginBean, EmptyPlugin> {
    private static final long serialVersionUID = 1L;

    private static final Logger logger = LoggerFactory.getLogger(PluginAdministrationPanel.class);

    private static final String PLUGIN_PROPERTY_CONTAINER = "plugin_enabled_container";

    private PageParameters pageParameters;

    private CategoryGroupPlugin categoryGroupPlugin;

    private CategoryMenuPlugin categoryMenuPlugin;

    /**
     * Construct.
     * 
     * @param id
     * @param pageParameters
     */
    public PluginAdministrationPanel(String id, PageParameters pageParameters) {
        super(id);
        this.pageParameters = pageParameters;
    }

    @Override
    protected void onBeforeRender() {
        super.onBeforeRender();
        removeAll();
        init();
    }

    private void init() {
        List<List<GenericTreeNode<MenuItem>>> menuItems = new ArrayList<List<GenericTreeNode<MenuItem>>>();
        menuItems.add(getCategoryMenuPlugin().getTree().getChildren());
        FlatDynamicMenuPanel hierarchyMenu = new FlatDynamicMenuPanel("hierarchy-menu", menuItems);
        hierarchyMenu.setMenuItemPageClass(PluginAdministrationPage.class);
        add(hierarchyMenu);

        String filter = pageParameters.get(CategoryConstants.PAGE_NAMED_PARAMETER_PARENT_CATEGORY).toString();
        List<GenericTreeNode<Plugin>> pluginCollection;
        if (StringUtils.isEmpty(filter)) {
            pluginCollection = getCategoryGroupPlugin().getTree().getChildren();
        } else {
            pluginCollection = getCategoryGroupPlugin().getTreeNodesByContext().get("/" + filter).getChildren();
        }
        add(new ListView<GenericTreeNode<Plugin>>("plugin-view", pluginCollection) {
            private static final long serialVersionUID = 1L;

            @Override
            protected void populateItem(final ListItem<GenericTreeNode<Plugin>> item) {
                item.setOutputMarkupId(true);
                final ValueMap properties = new ValueMap();

                final Plugin plugin = item.getModelObject().getData();
                if (plugin == null || plugin.getAdministratorFormClass() == null) {
                    item.setVisible(false);
                    return;
                }
                boolean pluginEnabled = getPluginRegistry().isEnabled(plugin);
                properties.put(PLUGIN_PROPERTY_CONTAINER, pluginEnabled);

                item.add(new Label("plugin-name", new Model<String>(plugin.getName())));
                item.add(new Label("plugin-version", new Model<String>(plugin.getVersion())));
                item.add(new Label("plugin-description", new Model<String>(plugin.getDescription()))
                        .setVisible(!StringUtils.isEmpty(plugin.getDescription())));
                final ModalWindow pluginConfigurationModalWindow = new CustomModalWindow("plugin-config", "title");
                item.add(pluginConfigurationModalWindow);

                pluginConfigurationModalWindow.setContent(
                        new PluginConfigurationPanel(pluginConfigurationModalWindow, new Model<Plugin>(plugin)));

                // add link to open configuration window
                final AjaxLink<Void> openConfigWindow = new AjaxLink<Void>("link-plugin-config") {
                    private static final long serialVersionUID = 1L;

                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        pluginConfigurationModalWindow.show(target);
                    }
                };
                item.add(openConfigWindow);
                openConfigWindow.setVisible(pluginEnabled);

                // } catch (CreateClassInstanceException e) {
                // setVisible(false);// TODO double check
                // if (logger.isWarnEnabled()) {
                // logger.warn("Could not create instance for administration class: " + plugin.getAdministratorFormClass());
                // }
                // }

                AjaxCheckBox pluginEnabledCheckbox = new AjaxCheckBox(PLUGIN_PROPERTY_CONTAINER,
                        new PropertyModel<Boolean>(properties, PLUGIN_PROPERTY_CONTAINER)) {

                    /**
                     * 
                     */
                    private static final long serialVersionUID = 1L;

                    @Override
                    protected void onUpdate(AjaxRequestTarget target) {
                        Boolean pluginEnabled = getModelObject();
                        getPluginRegistry().setEnabled(plugin, pluginEnabled);
                        openConfigWindow.setVisible(pluginEnabled);
                        target.add(item);
                    }
                };
                item.add(pluginEnabledCheckbox);
                pluginEnabledCheckbox
                        .setEnabled(!DefaultPluginCategories.ADMINISTRATION.equals(plugin.getCategory()));
            }
        });
    }

    private CategoryGroupPlugin getCategoryGroupPlugin() {
        if (categoryGroupPlugin == null) {
            categoryGroupPlugin = getPluginRegistry().lookup(CategoryGroupPlugin.class);
        }
        return categoryGroupPlugin;
    }

    private CategoryMenuPlugin getCategoryMenuPlugin() {
        if (categoryMenuPlugin == null) {
            categoryMenuPlugin = getPluginRegistry().lookup(CategoryMenuPlugin.class);
        }
        return categoryMenuPlugin;
    }

    @Override
    protected void onInitialize(EmptyPlugin plugin, AbstractPluginBean pluginBean) {
    }
}