com.orange.atk.error.ErrorFrame.java Source code

Java tutorial

Introduction

Here is the source code for com.orange.atk.error.ErrorFrame.java

Source

/*
 * Software Name : ATK
 *
 * Copyright (C) 2007 - 2012 France Tlcom
 *
 * Licensed 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.
 * 
 * ------------------------------------------------------------------
 * File Name   : ErrorFrame.java
 *
 * Created     : 15/03/2010
 * Author(s)   : HENAFF Mari-Mai
 */
package com.orange.atk.error;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.StringTokenizer;

import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;

import com.lowagie.text.Font;
import com.orange.atk.internationalization.ResourceManager;

@SuppressWarnings("serial")
class ErrorFrame extends JFrame {
    MultiLineLabel errorLabel;
    JButton detailButton;
    JButton okButton;
    JTextArea detailArea;
    JScrollPane detailScrollPane;
    private final String detailArrowsRight = ResourceManager.getInstance().getString("DETAIL_BUTTON_TITLE") + " >>";
    private final String detailArrowsLeft = "<< " + ResourceManager.getInstance().getString("DETAIL_BUTTON_TITLE");
    private final String defaultTitle = ResourceManager.getInstance().getString("ERROR_FRAME_DEFAULT_TITLE");

    public ErrorFrame() {
        super();
        setTitle(defaultTitle);
        JPanel panel = new JPanel();
        panel.setLayout(new GridBagLayout());

        addWindowListener(new WindowListener() {
            public void windowActivated(WindowEvent arg0) {
            }

            public void windowClosed(WindowEvent arg0) {
            }

            public void windowClosing(WindowEvent arg0) {
                close();
            }

            public void windowDeactivated(WindowEvent arg0) {
            }

            public void windowDeiconified(WindowEvent arg0) {
            }

            public void windowIconified(WindowEvent arg0) {
            }

            public void windowOpened(WindowEvent arg0) {
            }
        });

        //default constraints
        //top left with no insets or a 0.1 weight (few move on resizing
        GridBagConstraints gbc = new GridBagConstraints(0, 0, //gridx, gridy
                2, 1, //gridwidth, gridheight
                0, 0, //weightx, weighty
                GridBagConstraints.CENTER, // anchor
                GridBagConstraints.NONE, // FILL
                new Insets(10, 10, 5, 10), // padding top, left, bottom, right
                0, 0); //ipadx, ipady

        // Error message
        errorLabel = new MultiLineLabel(UIManager.getIcon("OptionPane.errorIcon"));
        panel.add(errorLabel, gbc);

        // ok Button
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.gridwidth = 1;
        gbc.weightx = 0.5;
        gbc.anchor = GridBagConstraints.EAST;
        gbc.fill = GridBagConstraints.NONE;
        gbc.insets = new Insets(5, 10, 10, 5);
        okButton = new JButton(ResourceManager.getInstance().getString("OK_BUTTON_TITLE"));
        okButton.setFont(okButton.getFont().deriveFont(Font.BOLD, 11));
        okButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                close();
            }
        });

        panel.add(okButton, gbc);

        // Detail Button
        gbc.gridx = 1;
        gbc.gridy = 1;
        gbc.gridwidth = 1;
        gbc.weightx = 0.5;
        gbc.anchor = GridBagConstraints.WEST;
        gbc.fill = GridBagConstraints.NONE;
        gbc.insets = new Insets(5, 5, 10, 10);
        detailButton = new JButton(detailArrowsRight);
        detailButton.setFont(okButton.getFont().deriveFont(Font.BOLD, 11));
        detailButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                detailPerformed();
            }
        });
        panel.add(detailButton, gbc);

        // Detail Area
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.gridwidth = 2;
        gbc.weightx = 1;
        gbc.anchor = GridBagConstraints.CENTER;
        gbc.fill = GridBagConstraints.BOTH;
        gbc.insets = new Insets(0, 10, 10, 10);
        detailArea = new JTextArea(8, 40);
        detailScrollPane = new JScrollPane(detailArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        detailArea.setEditable(false);
        detailScrollPane.setVisible(false);
        panel.add(detailScrollPane, gbc);

        this.setContentPane(panel);
        this.setMaximumSize(new Dimension(500, 500));
        setOnMiddleOfTheScreen();
        this.setAlwaysOnTop(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

    private void setOnMiddleOfTheScreen() {
        // Get the size of the screen
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();

        // Determine the new location of the window
        int w = getSize().width;
        int h = getSize().height;
        int x = (dim.width - w) / 2;
        int y = (dim.height - h) / 2;

        // Move the window
        setLocation(x, y);
    }

    public void display() {
        display(defaultTitle);
    }

    public void display(String title) {
        // update ErrorFrame according to ErrorManager contents
        ErrorManager errorManager = ErrorManager.getInstance();
        int errorNb = errorManager.getErrorsNumber();
        if (errorNb != 0) {
            errorLabel.setText(errorManager.getLastError().toString());
            detailArea.setText(errorManager.getAllErrors().toString());
            if (errorNb > 1)
                detailButton.setEnabled(true);
            else
                detailButton.setEnabled(false);
            // by default, the detail scroll pane is always hidden
            if (detailScrollPane.isVisible()) {
                detailScrollPane.setVisible(false);
                detailButton.setText(detailArrowsRight);
            }
            pack();
            setVisible(true);
        }
    }

    private void close() {
        setVisible(false);
        dispose();
    }

    private void detailPerformed() {
        if (detailScrollPane.isVisible()) {
            detailScrollPane.setVisible(false);
            detailButton.setText(detailArrowsRight);
            pack();
        } else {
            detailScrollPane.setVisible(true);
            detailButton.setText(this.detailArrowsLeft);
            pack();
        }
    }

    class MultiLineLabel extends JPanel {
        JPanel labelsPane;
        JLabel iconLabel;

        public MultiLineLabel(Icon icon) {
            super();
            this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
            iconLabel = new JLabel();
            iconLabel.setIcon(icon);
            this.add(iconLabel);
            labelsPane = new JPanel();
            labelsPane.setLayout(new BoxLayout(labelsPane, BoxLayout.Y_AXIS));
            this.add(labelsPane);
        }

        public void setText(String text) {
            labelsPane.removeAll();
            StringTokenizer st = new StringTokenizer(text, "\n");
            while (st.hasMoreTokens()) {
                labelsPane.add(new JLabel(st.nextToken()));
            }
        }

    }

}