Package com.eviware.soapui.support.components

Source Code of com.eviware.soapui.support.components.GroovyEditorComponent

/*
* Copyright 2004-2014 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/

package com.eviware.soapui.support.components;

import com.eviware.soapui.impl.support.actions.ShowOnlineHelpAction;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.GroovyEditor;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.GroovyEditorModel;
import com.eviware.soapui.support.UISupport;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.SwingConstants;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import static com.eviware.soapui.impl.wsdl.teststeps.Script.*;

public class GroovyEditorComponent extends JPanel implements PropertyChangeListener {
    private GroovyEditor editor;
    private JButton insertCodeButton;
    private Action runAction;
    private JXToolBar toolBar;
    private final GroovyEditorModel editorModel;
    private final String helpUrl;

    public GroovyEditorComponent(GroovyEditorModel editorModel, String helpUrl) {
        super(new BorderLayout());
        this.editorModel = editorModel;
        this.helpUrl = helpUrl;

        editor = new GroovyEditor(editorModel);
        editor.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3),
                editor.getBorder()));
        add(editor, BorderLayout.CENTER);
        buildToolbar(editorModel, helpUrl);

        editorModel.addPropertyChangeListener(this);
    }

    public GroovyEditor getEditor() {
        return editor;
    }

    @Override
    public void setEnabled(boolean enabled) {
        super.setEnabled(enabled);

        editor.setEnabled(enabled);
        if (runAction != null) {
            runAction.setEnabled(enabled);
        }

        insertCodeButton.setEnabled(enabled);
    }

    protected void buildToolbar(GroovyEditorModel editorModel, String helpUrl) {
        if (toolBar == null) {
            toolBar = UISupport.createSmallToolbar();
        } else {
            remove(toolBar);
            toolBar.removeAll();
        }

        runAction = editorModel.getRunAction();
        if (runAction != null) {
            JButton runButton = UISupport.createToolbarButton(runAction);
            if (runButton.getIcon() == null) {
                runButton.setIcon(UISupport.createImageIcon("/run_testcase.gif"));
            }

            if (runButton.getToolTipText() == null) {
                runButton.setToolTipText("Runs this script");
            }

            toolBar.add(runButton);
            toolBar.addRelatedGap();
        }

        if (insertCodeButton == null) {
            insertCodeButton = new JButton(new InsertCodeAction());
            insertCodeButton.setIcon(UISupport.createImageIcon("/down_arrow.gif"));
            insertCodeButton.setHorizontalTextPosition(SwingConstants.LEFT);
        }

        toolBar.addFixed(insertCodeButton);

        toolBar.add(Box.createHorizontalGlue());

        String[] args = editorModel.getKeywords();
        if (args != null && args.length > 0) {
            String scriptName = editorModel.getScriptName();
            if (scriptName == null) {
                scriptName = "";
            } else {
                scriptName = scriptName.trim() + " ";
            }

            StringBuilder text = new StringBuilder("<html>" + scriptName + "Script is invoked with ");
            for (int c = 0; c < args.length; c++) {
                if (c > 0) {
                    text.append(", ");
                }

                text.append("<font face=\"courier\">").append(args[c]).append("</font>");
            }
            text.append(" variables</html>");

            JLabel label = new JLabel(text.toString());
            label.setToolTipText(label.getText());
            label.setMaximumSize(label.getPreferredSize());

            toolBar.addFixed(label);
            toolBar.addUnrelatedGap();
        }

        if (helpUrl != null) {
            toolBar.addFixed(UISupport.createToolbarButton(new ShowOnlineHelpAction(helpUrl)));
        }

        add(toolBar, BorderLayout.NORTH);
        revalidate();
        repaint();
    }

    public class InsertCodeAction extends AbstractAction {
        public InsertCodeAction() {
            super("Edit");
            putValue(Action.SHORT_DESCRIPTION, "Inserts code at caret");
        }

        public void actionPerformed(ActionEvent e) {
            JPopupMenu popup = editor.getEditArea().getComponentPopupMenu();
            popup.show(insertCodeButton, insertCodeButton.getWidth() / 2, insertCodeButton.getHeight() / 2);
        }
    }

    public void release() {
        editorModel.removePropertyChangeListener(this);
        getEditor().release();
    }

    public void propertyChange(PropertyChangeEvent evt) {
        if (!evt.getPropertyName().equals(SCRIPT_PROPERTY)) {
            buildToolbar(editorModel, helpUrl);
        }
    }
}
TOP

Related Classes of com.eviware.soapui.support.components.GroovyEditorComponent

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.