utybo.easypastebin.windows.MainWindow.java Source code

Java tutorial

Introduction

Here is the source code for utybo.easypastebin.windows.MainWindow.java

Source

package utybo.easypastebin.windows;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import org.apache.http.client.ClientProtocolException;
import utybo.easypastebin.main.EasyPastebin;
import utybo.easypastebin.utils.EnumExpireDate;
import utybo.easypastebin.utils.HttpHelper;
import utybo.easypastebin.utils.MissingParamException;
import utybo.easypastebin.utils.UnsupportedDesktopException;
import utybo.sinkj.logger.SinkJLevel;

/**
 * Main window for EasyPastebin, including generic classes
 * 
 * @author utybo
 * 
 */
@SuppressWarnings("serial")
public class MainWindow extends JFrame {

    private JPanel contentPane;
    private JTextArea pasteContent;
    private JTextField pasteTitle;
    private JComboBox<EnumExpireDate> pasteExpireDate;
    private JTextField pastebinUrl;
    private JButton btnSubmit;

    /**
     * Creates the window
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public MainWindow() {
        EasyPastebin.LOGGER.log("Initializing the window", SinkJLevel.INFO);
        setTitle("EasyPastebin");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 664, 431);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
        contentPane.add(tabbedPane, BorderLayout.CENTER);

        JPanel main = new JPanel();
        tabbedPane.addTab("EasyPastebin", null, main, null);
        main.setLayout(null);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(62, 39, 312, 132);
        main.add(scrollPane);

        pasteContent = new JTextArea();
        pasteContent.setFont(new Font("Monospaced", Font.PLAIN, 11));
        pasteContent.setWrapStyleWord(true);
        pasteContent.setLineWrap(true);
        pasteContent.setToolTipText("Put your paste here!");
        scrollPane.setViewportView(pasteContent);

        JLabel titleLabel = new JLabel("Title :");
        titleLabel.setFont(new Font("Tahoma", Font.PLAIN, 12));
        titleLabel.setBounds(10, 11, 42, 21);
        main.add(titleLabel);

        pasteTitle = new JTextField();
        pasteTitle.setBounds(62, 12, 312, 20);
        main.add(pasteTitle);
        pasteTitle.setColumns(10);

        JLabel lblPaste = new JLabel("Paste :");
        lblPaste.setForeground(Color.RED);
        lblPaste.setFont(new Font("Tahoma", Font.PLAIN, 12));
        lblPaste.setBounds(10, 85, 53, 21);
        main.add(lblPaste);

        pasteExpireDate = new JComboBox();
        pasteExpireDate.setFont(new Font("Tahoma", Font.PLAIN, 12));
        pasteExpireDate.setModel(new DefaultComboBoxModel(EnumExpireDate.values()));
        pasteExpireDate.setBounds(468, 12, 155, 21);
        main.add(pasteExpireDate);

        JLabel lblExpireDate = new JLabel("Expire Date :");
        lblExpireDate.setFont(new Font("Tahoma", Font.PLAIN, 12));
        lblExpireDate.setBounds(384, 14, 81, 14);
        main.add(lblExpireDate);

        JLabel lblfieldsInRed = new JLabel("(Fields in red are required)");
        lblfieldsInRed.setBounds(72, 182, 302, 14);
        main.add(lblfieldsInRed);

        btnSubmit = new JButton("Submit!");
        btnSubmit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                EasyPastebin.LOGGER.log("Starting Submit script", SinkJLevel.INFO);
                btnSubmit.setEnabled(false);
                btnSubmit.setText("Please wait...");

                boolean success = true;
                String paste = pasteContent.getText();
                String title = pasteTitle.getText();
                EnumExpireDate expireDate = (EnumExpireDate) pasteExpireDate.getSelectedItem();

                if (paste.equals("") || paste.equals(" ") || paste.equals(null)) {
                    pastebinUrl.setText("ERROR");
                    JOptionPane.showMessageDialog(null, "You cannot send empty pastes!",
                            "Error while processing paste", JOptionPane.ERROR_MESSAGE);
                } else {
                    try {
                        EasyPastebin.LOGGER.log("Setting options", SinkJLevel.INFO);
                        Map map = new HashMap<String, String>();
                        map.put("api_dev_key", HttpHelper.API_KEY);
                        map.put("api_option", "paste");
                        map.put("api_paste_code", paste);
                        if (!(expireDate.equals(null) || expireDate.equals(EnumExpireDate.NEVER)))
                            map.put("api_paste_expire_date", expireDate.getRawName());
                        if (!(title.equals("") || title.equals(" ") || title.equals(null)))
                            map.put("api_paste_name", title);

                        EasyPastebin.LOGGER.log("Sending paste", SinkJLevel.INFO);
                        String actionResult = HttpHelper.sendPost("http://pastebin.com/api/api_post.php", map)
                                .asString();
                        EasyPastebin.LOGGER.log("Paste sent, checking output", SinkJLevel.INFO);
                        // Exception handlers
                        if (actionResult.equals("Bad API request, invalid api_option")) {
                            success = false;
                            EasyPastebin.LOGGER.log(
                                    "The output is an error message : " + actionResult + ". Submit script failed!",
                                    SinkJLevel.ERROR);
                            JOptionPane.showMessageDialog(null,
                                    "Error while processing paste. Incorrect Pastebin option!", "Error",
                                    JOptionPane.ERROR_MESSAGE);
                        }
                        if (actionResult.equals("Bad API request, invalid api_dev_key")) {
                            success = false;
                            EasyPastebin.LOGGER.log(
                                    "The output is an error message : " + actionResult + ". Submit script failed!",
                                    SinkJLevel.ERROR);
                            JOptionPane.showMessageDialog(null,
                                    "Error while processing paste. Incorrect dev key! Try again with a more recent version!",
                                    "Error", JOptionPane.ERROR_MESSAGE);
                        }
                        if (actionResult.equals("Bad API request, IP blocked")) {
                            success = false;
                            EasyPastebin.LOGGER.log(
                                    "The output is an error message : " + actionResult + ". Submit script failed!",
                                    SinkJLevel.ERROR);
                            JOptionPane.showMessageDialog(null, "Error while processing paste. Your IP is blocked!",
                                    "Error", JOptionPane.ERROR_MESSAGE);
                        }
                        if (actionResult.equals(
                                "Bad API request, maximum number of 25 unlisted pastes for your free account")) {
                            success = false;
                            EasyPastebin.LOGGER.log(
                                    "The output is an error message : " + actionResult + ". Submit script failed!",
                                    SinkJLevel.ERROR);
                        }
                        if (actionResult.equals(
                                "Bad API request, maximum number of 10 private pastes for your free account")) {
                            success = false;
                            EasyPastebin.LOGGER.log(
                                    "The output is an error message : " + actionResult + ". Submit script failed!",
                                    SinkJLevel.ERROR);
                        }
                        if (actionResult.equals("Bad API request, api_paste_code was empty")) {
                            success = false;
                            EasyPastebin.LOGGER.log(
                                    "The output is an error message : " + actionResult + ". Submit script failed!",
                                    SinkJLevel.ERROR);
                        }
                        if (actionResult.equals("Bad API request, maximum paste file size exceeded")) {
                            success = false;
                            EasyPastebin.LOGGER.log(
                                    "The output is an error message : " + actionResult + ". Submit script failed!",
                                    SinkJLevel.ERROR);
                            JOptionPane.showMessageDialog(null,
                                    "Error while processing paste. Your paste is too big!", "Error",
                                    JOptionPane.ERROR_MESSAGE);
                        }
                        if (actionResult.equals("Bad API request, invalid api_expire_date")) {
                            success = false;
                            EasyPastebin.LOGGER.log(
                                    "The output is an error message : " + actionResult + ". Submit script failed!",
                                    SinkJLevel.ERROR);
                            JOptionPane.showMessageDialog(null,
                                    "Error while processing paste. Invalid expire date!", "Error",
                                    JOptionPane.ERROR_MESSAGE);
                        }
                        if (actionResult.equals("Bad API request, invalid api_paste_private")) {
                            success = false;
                            EasyPastebin.LOGGER.log(
                                    "The output is an error message : " + actionResult + ". Submit script failed!",
                                    SinkJLevel.ERROR);
                            JOptionPane.showMessageDialog(null,
                                    "Error while processing paste. Invalid privacy value!", "Error",
                                    JOptionPane.ERROR_MESSAGE);
                        }
                        if (actionResult.equals("Bad API request, invalid api_paste_format")) {
                            success = false;
                            EasyPastebin.LOGGER.log(
                                    "The output is an error message : " + actionResult + ". Submit script failed!",
                                    SinkJLevel.ERROR);
                            JOptionPane.showMessageDialog(null, "Error while processing paste. Invalid format!",
                                    "Error", JOptionPane.ERROR_MESSAGE);
                        }
                        // END

                        // Starting display stuff
                        if (success == false) {
                            EasyPastebin.LOGGER.log("Submit script failed : success == false", SinkJLevel.ERROR);
                            pastebinUrl.setText("ERROR");
                        }
                        if (success == true) {
                            EasyPastebin.LOGGER.log("Paste sent! Starting display script!", SinkJLevel.INFO);
                            pastebinUrl.setText(actionResult);
                            JOptionPane.showMessageDialog(null, "Paste successfully sent!", "Done!",
                                    JOptionPane.INFORMATION_MESSAGE);
                            EasyPastebin.LOGGER.log("Display script finished! Paste URL is : " + actionResult,
                                    SinkJLevel.INFO);
                        }

                    } catch (ClientProtocolException e) {
                        EasyPastebin.LOGGER.log("Unexpected error! " + e, SinkJLevel.ERROR);
                        JOptionPane.showMessageDialog(null, "Error while processing paste : " + e, "Error",
                                JOptionPane.ERROR_MESSAGE);
                        e.printStackTrace();
                    } catch (IOException e) {
                        EasyPastebin.LOGGER.log("Unexpected error! " + e, SinkJLevel.ERROR);
                        JOptionPane.showMessageDialog(null, "Error while processing paste : " + e, "Error",
                                JOptionPane.ERROR_MESSAGE);
                        e.printStackTrace();
                    } catch (MissingParamException e) {
                        EasyPastebin.LOGGER.log("Unexpected error! " + e, SinkJLevel.ERROR);
                        JOptionPane.showMessageDialog(null, "Error while processing paste : " + e
                                + "! This is a severe programming error! Try again with a more recent version!",
                                "Error", JOptionPane.ERROR_MESSAGE);
                        e.printStackTrace();
                    }
                }

                EasyPastebin.LOGGER.log("Re-enabling the Submit button ", SinkJLevel.INFO);
                btnSubmit.setEnabled(true);
                btnSubmit.setText("Submit another paste!");
                EasyPastebin.LOGGER.log("Finished submit script! Success : " + success, SinkJLevel.INFO);
            }
        });
        btnSubmit.setBounds(386, 45, 237, 44);
        main.add(btnSubmit);

        pastebinUrl = new JTextField();
        pastebinUrl.setText("The paste's URL will be shown here!");
        pastebinUrl.setEditable(false);
        pastebinUrl.setBounds(384, 198, 239, 32);
        main.add(pastebinUrl);
        pastebinUrl.setColumns(10);

        JPanel about = new JPanel();
        tabbedPane.addTab("About", null, about, null);

        JLabel label = new JLabel("EasyPastebin");
        label.setBounds(12, 12, 623, 39);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        label.setFont(new Font("Dialog", Font.PLAIN, 25));

        JLabel lblTheEasiestWay = new JLabel("The easiest way to use Pastebin.com");
        lblTheEasiestWay.setBounds(12, 63, 623, 32);
        lblTheEasiestWay.setFont(new Font("Dialog", Font.PLAIN, 16));
        lblTheEasiestWay.setHorizontalAlignment(SwingConstants.CENTER);
        about.setLayout(null);
        about.add(label);
        about.add(lblTheEasiestWay);

        JButton btnForkM = new JButton("Fork me on Github!");
        btnForkM.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                goToUrl("https://github.com/utybo/EasyPastebin");
            }
        });
        btnForkM.setBounds(12, 117, 623, 25);
        about.add(btnForkM);

        JButton btnCheckOutUtybos = new JButton("Check out utybo's projects!");
        btnCheckOutUtybos.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                goToUrl("http://utybo.github.io/");
            }
        });
        btnCheckOutUtybos.setBounds(12, 154, 623, 25);
        about.add(btnCheckOutUtybos);

        JButton btnGoToPastebincom = new JButton("Go to Pastebin.com!");
        btnGoToPastebincom.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                goToUrl("http://www.pastebin.com");
            }
        });
        btnGoToPastebincom.setBounds(12, 191, 623, 25);
        about.add(btnGoToPastebincom);

        JLabel lblcUtybo = new JLabel(
                "This soft was made by utybo. It uses Apache's libraries for the interaction with Pastebin's API");
        lblcUtybo.setFont(new Font("Dialog", Font.PLAIN, 10));
        lblcUtybo.setHorizontalAlignment(SwingConstants.CENTER);
        lblcUtybo.setBounds(12, 324, 623, 15);
        about.add(lblcUtybo);

        JLabel lblClickMeTo = new JLabel("Click me to go to Apache's licence official website");
        lblClickMeTo.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                goToUrl("http://www.apache.org/licenses/LICENSE-2.0");
            }
        });
        lblClickMeTo.setHorizontalAlignment(SwingConstants.CENTER);
        lblClickMeTo.setFont(new Font("Dialog", Font.PLAIN, 10));
        lblClickMeTo.setBounds(12, 342, 623, 15);
        about.add(lblClickMeTo);

        setVisible(true);

        EasyPastebin.LOGGER.log("Done!", SinkJLevel.INFO);
    }

    protected static void goToUrl(String url) {
        EasyPastebin.LOGGER.log("Opening URL : " + url, SinkJLevel.INFO);
        try {
            HttpHelper.openWebpage(url);
        } catch (IOException | URISyntaxException | MissingParamException e1) {
            EasyPastebin.LOGGER.log("Failed to open URL : " + url + ". (Exception : " + e1 + ")", SinkJLevel.ERROR);
            JOptionPane.showMessageDialog(null, "Error while opening URL : " + url, "Error",
                    JOptionPane.ERROR_MESSAGE);
            e1.printStackTrace();
        } catch (UnsupportedDesktopException e1) {
            EasyPastebin.LOGGER.log("Failed to open URL : " + url + ". (Exception : " + e1 + ")", SinkJLevel.ERROR);
            JOptionPane.showMessageDialog(null,
                    "Error while opening URL : " + url + ". Your OS/browser is not supported!", "Error",
                    JOptionPane.ERROR_MESSAGE);
            e1.printStackTrace();
        }
    }
}