Package com.eviware.x.impl.swing

Source Code of com.eviware.x.impl.swing.SwingDialogs$RequestFocusListener

/*
* 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.x.impl.swing;

import com.eviware.soapui.support.DefaultHyperlinkListener;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.components.ProgressDialog;
import com.eviware.x.dialogs.XDialogs;
import com.eviware.x.dialogs.XProgressDialog;
import com.jgoodies.forms.factories.ButtonBarFactory;

import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;

/**
* @author Lars
*/
public class SwingDialogs implements XDialogs {
    private Component parent;
    private JDialog extendedInfoDialog;
    private Boolean extendedInfoResult;

    public SwingDialogs(Component parent) {
        this.parent = parent;
    }

    public void showErrorMessage(final String message) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JOptionPane.showMessageDialog(parent, message, "Error", JOptionPane.ERROR_MESSAGE);
            }
        });
    }

    public boolean confirm(String question, String title) {
        return JOptionPane.showConfirmDialog(this.parent, question, title, JOptionPane.YES_NO_OPTION) == JOptionPane.OK_OPTION;
    }

    @Override
    public boolean confirm(String question, String title, Component parent) {
        return JOptionPane.showConfirmDialog(parent, question, title, JOptionPane.YES_NO_OPTION) == JOptionPane.OK_OPTION;
    }

    public String prompt(String question, String title, String value) {
        return (String) JOptionPane.showInputDialog(parent, question, title, JOptionPane.QUESTION_MESSAGE, null, null,
                value);
    }

    public String prompt(String question, String title) {
        return JOptionPane.showInputDialog(parent, question, title, JOptionPane.QUESTION_MESSAGE);
    }

    public void showInfoMessage(String message) {
        showInfoMessage(message, "Information");
    }

    public void showInfoMessage(final String message, final String title) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JOptionPane.showMessageDialog(parent, message, title, JOptionPane.INFORMATION_MESSAGE);
            }
        });
    }

    public Object prompt(String question, String title, Object[] objects) {
        return JOptionPane.showInputDialog(parent, question, title, JOptionPane.OK_CANCEL_OPTION, null,
                objects, null);
    }

    public Object prompt(String question, String title, Object[] objects, String value) {
        return JOptionPane.showInputDialog(parent, question, title, JOptionPane.OK_CANCEL_OPTION, null,
                objects, value);
    }

    public Boolean confirmOrCancel(String question, String title) {
        int result = JOptionPane.showConfirmDialog(parent, question, title, JOptionPane.YES_NO_CANCEL_OPTION);

        if (result == JOptionPane.CANCEL_OPTION || result == JOptionPane.CLOSED_OPTION) {
            return null;
        }

        return result == JOptionPane.YES_OPTION;
    }

    public int yesYesToAllOrNo(String question, String title) {
        String[] buttons = {"Yes", "Yes to all", "No"};
        return JOptionPane.showOptionDialog(parent, question, title, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, buttons,
                buttons[0]);
    }

    public XProgressDialog createProgressDialog(String label, int length, String initialValue, boolean canCancel) {
        return new ProgressDialog("Progress", label, length, initialValue, canCancel);
    }

    public void showExtendedInfo(final String title, final String description, final String content, final Dimension size) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JPanel buttonBar = ButtonBarFactory.buildRightAlignedBar(new JButton(new OkAction("OK")));
                showExtendedInfo(title, description, content, buttonBar, size);
            }
        });
    }

    private void showExtendedInfo(String title, String description, String content, JPanel buttonBar, Dimension size) {
        extendedInfoDialog = new JDialog(UISupport.getMainFrame(), title);
        extendedInfoDialog.setModal(true);
        JPanel panel = new JPanel(new BorderLayout());

        if (description != null) {
            panel.add(UISupport.buildDescription(title, description, null), BorderLayout.NORTH);
        }

        JEditorPane editorPane = new JEditorPane("text/html", content);
        editorPane.setCaretPosition(0);
        editorPane.setEditable(false);
        editorPane.addHyperlinkListener(new DefaultHyperlinkListener(editorPane));

        JScrollPane scrollPane = new JScrollPane(editorPane);
        scrollPane.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5),
                scrollPane.getBorder()));

        panel.add(scrollPane);
        buttonBar.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 5));
        panel.add(buttonBar, BorderLayout.SOUTH);

        extendedInfoDialog.getRootPane().setContentPane(panel);
        if (size == null) {
            extendedInfoDialog.setSize(400, 300);
        } else {
            extendedInfoDialog.setSize(size);
        }

        extendedInfoResult = null;
        UISupport.showDialog(extendedInfoDialog);
    }

    public boolean confirmExtendedInfo(String title, String description, String content, Dimension size) {
        JPanel buttonBar = ButtonBarFactory.buildRightAlignedBar(new JButton(new OkAction("OK")), new JButton(
                new CancelAction("Cancel")));

        showExtendedInfo(title, description, content, buttonBar, size);

        return extendedInfoResult == null ? false : extendedInfoResult;
    }

    public Boolean confirmOrCancleExtendedInfo(String title, String description, String content, Dimension size) {
        JPanel buttonBar = ButtonBarFactory.buildRightAlignedBar(new JButton(new OkAction("Yes")), new JButton(
                new NoAction("No")), new JButton(new CancelAction("Cancel")));

        showExtendedInfo(title, description, content, buttonBar, size);

        return extendedInfoResult;
    }

    private final class OkAction extends AbstractAction {
        public OkAction(String name) {
            super(name);
        }

        public void actionPerformed(ActionEvent e) {
            extendedInfoResult = true;
            extendedInfoDialog.setVisible(false);
        }
    }

    private final class NoAction extends AbstractAction {
        public NoAction(String name) {
            super(name);
        }

        public void actionPerformed(ActionEvent e) {
            extendedInfoResult = false;
            extendedInfoDialog.setVisible(false);
        }
    }

    private final class CancelAction extends AbstractAction {
        public CancelAction(String name) {
            super(name);
        }

        public void actionPerformed(ActionEvent e) {
            extendedInfoResult = null;
            extendedInfoDialog.setVisible(false);
        }
    }

    public String selectXPath(String title, String info, String xml, String xpath) {
        return prompt("Specify XPath expression", "Select XPath", xpath);
    }

    @Override
    public String selectJsonPath(String title, String info, String json, String jsonPath) {
        return prompt("Specify JsonPath expression", "Select JsonPath", jsonPath);
    }

    /*
     * (non-Javadoc)
     *
     * @see com.eviware.x.dialogs.XDialogs#promptPassword(java.lang.String,
     * java.lang.String)
     */
    public char[] promptPassword(String question, String title) {
        JPasswordField passwordField = new JPasswordField();
        passwordField.addAncestorListener(new RequestFocusListener());
        JLabel qLabel = new JLabel(question);
        JOptionPane.showConfirmDialog(parent, new Object[]{qLabel, passwordField}, title,
                JOptionPane.OK_CANCEL_OPTION);
        return passwordField.getPassword();
    }

    /*
     * Used to give focus to password field, instead of the default OK button in
     * the confirmation dialog.
     */
    private static class RequestFocusListener implements AncestorListener {
        public void ancestorAdded(final AncestorEvent e) {
            final AncestorListener al = this;
            SwingUtilities.invokeLater(new Runnable() {

                @Override
                public void run() {
                    JComponent component = e.getComponent();
                    component.requestFocusInWindow();
                    component.removeAncestorListener(al);
                }
            });
        }

        public void ancestorMoved(AncestorEvent e) {
        }

        public void ancestorRemoved(AncestorEvent e) {
        }
    }
}
TOP

Related Classes of com.eviware.x.impl.swing.SwingDialogs$RequestFocusListener

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.