Package org.openengsb.ui.admin.organizeGlobalsPage

Source Code of org.openengsb.ui.admin.organizeGlobalsPage.OrganizeGlobalsPage

/**
* Licensed to the Austrian Association for Software Tool Integration (AASTI)
* under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright
* ownership. The AASTI 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.openengsb.ui.admin.organizeGlobalsPage;

import java.util.ArrayList;
import java.util.Map;

import javax.inject.Inject;
import javax.inject.Named;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.extensions.markup.html.tree.BaseTree;
import org.apache.wicket.extensions.markup.html.tree.LinkTree;
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.model.CompoundPropertyModel;
import org.apache.wicket.model.StringResourceModel;
import org.openengsb.core.api.security.annotation.SecurityAttribute;
import org.openengsb.core.workflow.api.RuleBaseException;
import org.openengsb.core.workflow.api.RuleManager;
import org.openengsb.ui.admin.basePage.BasePage;
import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@SecurityAttribute(key = "org.openengsb.ui.component", value = "WORKFLOW_ADMIN")
@PaxWicketMountPoint(mountPoint = "globals")
public class OrganizeGlobalsPage extends BasePage {

    private static final long serialVersionUID = -8984270399033782826L;

    private static final Logger LOGGER = LoggerFactory.getLogger(OrganizeGlobalsPage.class);

    public static final String PAGE_NAME_KEY = "organizeGlobals.tile";
    public static final String PAGE_DESCRIPTION_KEY = "organizeGlobals.description";

    @Inject
    @Named("ruleManager")
    private RuleManager ruleManager;

    private String globalName = "";
    private String className = "";

    private TextField<String> nameField;
    private TextField<String> classNameField;
    private AjaxButton submitButton;
    private AjaxButton deleteButton;

    private FeedbackPanel feedbackPanel;

    @SuppressWarnings("serial")
    public OrganizeGlobalsPage() {
        TreeModel treeModel = createTreeModel();

        final LinkTree tree = new LinkTree("tree", treeModel)
        {
            @Override
            protected void onNodeLinkClicked(Object node, BaseTree tree, AjaxRequestTarget target) {
                DefaultMutableTreeNode mnode = (DefaultMutableTreeNode) node;
                if (!mnode.isLeaf()) {
                    return;
                }
                Global global = (Global) mnode.getUserObject();
                globalName = global.getName();
                className = global.getClassname();
                target.add(nameField);
                target.add(classNameField);
            }

        };
        tree.getTreeState().expandAll();

        add(tree);

        Form<Object> form = new Form<Object>("editForm", new CompoundPropertyModel<Object>(this));

        submitButton = new AjaxButton("submitButton", form) {

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

                if (globalName == null || globalName.equals("") || className == null || className.equals("")) {
                    String message = new StringResourceModel("emptyError", this, null).getString();
                    error(message);
                    target.add(feedbackPanel);
                    return;
                }

                try {
                    ruleManager.addGlobal(className, globalName);
                    String message = new StringResourceModel("insertedGlobal", this, null).getString();
                    info(globalName + " " + message);
                    LOGGER.info("successfully inserted global " + globalName);
                } catch (RuleBaseException e) {
                    LOGGER.debug("error while inserting global " + globalName, e);
                    String temp = ruleManager.getGlobalType(globalName);
                    try {
                        // it comes here if the global already exists
                        ruleManager.removeGlobal(globalName);
                        ruleManager.addGlobal(className, globalName);
                        String message = new StringResourceModel("updatedGlobal", this, null).getString();
                        info(globalName + " " + message);
                    } catch (RuleBaseException ex) {
                        LOGGER.debug("error while updating global " + globalName, e);
                        // it restores the old value if the new value for global is invalid
                        ruleManager.removeGlobal(globalName);
                        ruleManager.addGlobal(temp, globalName);
                        String message = new StringResourceModel("savingError", this, null).getString();
                        error(globalName + " " + message + "\n" + ex.getLocalizedMessage());
                    }
                }
                tree.setModelObject(createTreeModel());
                globalName = "";
                className = "";

                target.add(nameField);
                target.add(classNameField);
                target.add(tree);
                target.add(feedbackPanel);
            }

            @Override
            protected void onError(AjaxRequestTarget target, Form<?> form) {
                LOGGER.warn("Error during handling submitButton submit");
            }

        };
        submitButton.setOutputMarkupId(true);
        form.add(submitButton);

        deleteButton = new AjaxButton("deleteButton", form) {

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                String temp = ruleManager.getGlobalType(globalName);
                try {
                    ruleManager.removeGlobal(globalName);
                    String message = new StringResourceModel("deletedGlobal", this, null).getString();
                    info(globalName + " " + message);
                    LOGGER.info("successfully deleted global " + globalName);
                } catch (RuleBaseException e) {
                    LOGGER.debug("error while deleting global " + globalName, e);
                    if (e.getMessage().startsWith("Rule Compilation error")) {
                        ruleManager.addGlobal(temp, globalName);
                        String message = new StringResourceModel("deletingError", this, null).getString();
                        error(globalName + " " + message + "\n" + e.getLocalizedMessage());
                    } else {
                        String message = new StringResourceModel("notExistingError", this, null).getString();
                        error(globalName + " " + message);
                    }
                    target.add(feedbackPanel);
                    return;
                }
                tree.setModelObject(createTreeModel());

                globalName = "";
                className = "";

                target.add(feedbackPanel);
                target.add(nameField);
                target.add(classNameField);
                target.add(tree);
            }

            @Override
            protected void onError(AjaxRequestTarget target, Form<?> form) {
                LOGGER.warn("Deletebutton error during submit.");
            }
        };
        deleteButton.setOutputMarkupId(true);
        form.add(deleteButton);

        nameField = new TextField<String>("globalName");
        nameField.setOutputMarkupId(true);
        form.add(nameField);

        classNameField = new TextField<String>("className");
        classNameField.setOutputMarkupId(true);
        form.add(classNameField);

        add(form);

        feedbackPanel = new FeedbackPanel("feedback");
        feedbackPanel.setOutputMarkupId(true);

        add(feedbackPanel);
    }

    private TreeModel createTreeModel() {
        Map<String, String> globals = ruleManager.listGlobals();
        ArrayList<Global> glob = new ArrayList<Global>();
        for (String key : globals.keySet()) {
            glob.add(new Global(key, globals.get(key)));
        }

        TreeModel model = null;
        DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Globals");
        for (Global global : glob) {
            DefaultMutableTreeNode child = new DefaultMutableTreeNode(global);
            rootNode.add(child);
        }
        model = new DefaultTreeModel(rootNode);
        return model;
    }

    public String getGlobalName() {
        return globalName;
    }

    public void setGlobalName(String globalName) {
        this.globalName = globalName;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }
}
TOP

Related Classes of org.openengsb.ui.admin.organizeGlobalsPage.OrganizeGlobalsPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.