Package nz.govt.natlib.meta.ui.log

Source Code of nz.govt.natlib.meta.ui.log.LogWindow

/*
*  Copyright 2006 The National Library of New Zealand
*
*  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.
*/

package nz.govt.natlib.meta.ui.log;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.WindowEvent;
import java.io.File;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;

import nz.govt.natlib.meta.config.Config;
import nz.govt.natlib.meta.log.FileLogger;
import nz.govt.natlib.meta.log.LevelFilter;
import nz.govt.natlib.meta.log.LogFilter;
import nz.govt.natlib.meta.log.LogManager;
import nz.govt.natlib.meta.log.LogMessage;
import nz.govt.natlib.meta.ui.FileDialog;
import nz.govt.natlib.meta.ui.FileDialogUser;
import nz.govt.natlib.meta.ui.HorizLineBorder;
import nz.govt.natlib.meta.ui.ImageButton;
import nz.govt.natlib.meta.ui.ImagePanel;
import nz.govt.natlib.meta.ui.NLNZCombo;
import nz.govt.natlib.meta.ui.TitleBlock;

/**
* A window for log messages.
*
* @author unascribed
* @version 1.0
*/

public class LogWindow extends JFrame implements FileDialogUser {
  GridBagLayout gridBagLayout1 = new GridBagLayout();

  JMenuBar mainMenu = new JMenuBar();

  JMenu jMenu1 = new JMenu();

  JMenuItem openMenu = new JMenuItem();

  JMenuItem closeMenu = new JMenuItem();

  ImageIcon closeIcon;

  LogModel liveModel;

  LogModel viewModel;

  JPanel jPanel1 = new JPanel();

  TitledBorder titledBorder1;

  Border border1;

  TitledBorder titledBorder2;

  JPanel jPanel3 = new JPanel();

  JLabel jLabel1 = new JLabel();

  NLNZCombo priorityFilter = new NLNZCombo(new LevelFilter[] {
      new LevelFilter("All", LogMessage.WORTHLESS_CHATTER, false, true),
      new LevelFilter(LogMessage.CRITICAL),
      new LevelFilter(LogMessage.ERROR),
      new LevelFilter(LogMessage.DEBUG),
      new LevelFilter(LogMessage.INFO),
      new LevelFilter(LogMessage.WORTHLESS_CHATTER) });

  JScrollPane jScrollPane1 = new JScrollPane();

  LogTable logTable;

  BorderLayout borderLayout1 = new BorderLayout();

  TitledBorder titledBorder3;

  FlowLayout flowLayout1 = new FlowLayout();

  Border lineBorder = new HorizLineBorder();

  private static final String NORMAL_HELP = "You can save and open log files from the file menu of this window";

  private static final String NORMAL_DESC = "Currently shows the log messages for this session";

  TitleBlock titlePanel = new TitleBlock("xp_log.gif", "Log", NORMAL_DESC,
      NORMAL_HELP);

  JMenuItem saveAs = new JMenuItem();

  JMenuItem viewLive = new JMenuItem();

  JMenuItem jMenuItem1 = new JMenuItem();

  public LogWindow(JFrame parent, LogModel model) {
    super("Log");
    setIconImage(parent.getIconImage());
    this.liveModel = model;
    try {
      jbInit();
      pack();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  private void jbInit() throws Exception {
    logTable = new LogTable();
    setViewModel(liveModel);
    try {
      closeIcon = new ImageIcon(ImagePanel
          .resolveImage("button_close.gif"));
    } catch (Exception e) {
    }
    ImageButton close = new ImageButton("Close", closeIcon);

    titledBorder2 = new TitledBorder(BorderFactory.createEtchedBorder(
        Color.white, new Color(148, 145, 140)), "Log Messages");
    titledBorder3 = new TitledBorder(BorderFactory.createEtchedBorder(
        Color.white, new Color(148, 145, 140)), "Message Filter");
    this.getContentPane().setLayout(gridBagLayout1);
    jMenu1.setText("File");
    openMenu.setText("Open");
    openMenu.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        openMenu_actionPerformed(e);
      }
    });
    closeMenu.setText("Close");
    closeMenu.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        closeMenu_actionPerformed(e);
      }
    });
    this.setJMenuBar(mainMenu);
    this.addWindowListener(new java.awt.event.WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        this_windowClosing(e);
      }
    });
    jPanel1.setLayout(borderLayout1);
    jLabel1.setText("Message Priority:");
    close.setMnemonic('C');
    close.setText("Close");
    close.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        close_actionPerformed(e);
      }
    });
    jPanel3.setBorder(titledBorder3);
    jPanel3.setLayout(flowLayout1);
    flowLayout1.setAlignment(FlowLayout.LEFT);
    jPanel1.setBorder(titledBorder1);
    priorityFilter.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        priorityFilter_actionPerformed(e);
      }
    });
    saveAs.setText("Save As");
    saveAs.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        saveAs_actionPerformed(e);
      }
    });
    viewLive.setText("View Current Log");
    viewLive.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        viewLive_actionPerformed(e);
      }
    });
    jMenuItem1.setText("Clear Current Log");
    jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        jMenuItem1_actionPerformed(e);
      }
    });
    mainMenu.add(jMenu1);
    jMenu1.add(saveAs);
    jMenu1.add(openMenu);
    jMenu1.addSeparator();
    jMenu1.add(viewLive);
    jMenu1.add(jMenuItem1);
    jMenu1.addSeparator();
    jMenu1.add(closeMenu);
    this.getContentPane().add(
        titlePanel,
        new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0,
            GridBagConstraints.CENTER, GridBagConstraints.BOTH,
            new Insets(2, 0, 2, 0), 0, 0));
    this.getContentPane().add(
        jPanel1,
        new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0,
            GridBagConstraints.CENTER, GridBagConstraints.BOTH,
            new Insets(5, 2, 5, 2), 0, 0));
    this.getContentPane().add(
        jPanel3,
        new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
            GridBagConstraints.NORTHWEST,
            GridBagConstraints.HORIZONTAL, new Insets(5, 2, 5, 2),
            0, 0));
    jPanel3.add(jLabel1, null);
    jPanel3.add(priorityFilter, null);
    this.getContentPane().add(
        close,
        new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0,
            GridBagConstraints.SOUTHEAST, GridBagConstraints.NONE,
            new Insets(5, 5, 7, 5), 0, 0));
    jPanel1.add(jScrollPane1, BorderLayout.CENTER);
    jScrollPane1.getViewport().add(logTable);
  }

  private void close() {
    this.setVisible(false);
  }

  private void saveViewModel() {
    // create and open a fileDialog
    JDialog fileDialog = new JDialog(this, "Open File", true);
    FileDialog filePanel = new FileDialog(this, this, true, false, false);
    fileDialog.getContentPane().add(filePanel);
    fileDialog.pack();

    // set the location.
    Point p1 = this.getLocation();
    Dimension d1 = this.getSize();
    Dimension d2 = fileDialog.getSize();
    fileDialog.setLocation((p1.x + (d1.width / 2)) - (d2.width / 2),
        (p1.y + (d1.height / 2)) - (d2.height / 2));

    filePanel.setCurrentDirectory(Config.getInstance().getBaseHarvestDir());
    fileDialog.show();
  }

  public void saveTo(File file) {
    try {
      if (!file.exists()) {
        file.createNewFile();
      }
      FileLogger logger = new FileLogger(file);
      for (int i = 0; i < viewModel.getRowCount(); i++) {
        logger.logMessage((LogMessage) viewModel.getRow(i));
      }
      logger.close();
      LogMessage msg = new LogMessage(LogMessage.WORTHLESS_CHATTER, null,
          "Saved logfile: " + file, "");
      LogManager.getInstance().logMessage(msg);
    } catch (Exception ex) {
      LogMessage msg = new LogMessage(LogMessage.ERROR, ex,
          "Error saving logfile", "");
      LogManager.getInstance().logMessage(msg);
    }
  }

  private void setViewModel(LogModel model) {
    viewModel = model;
    TableSorter sorter = new TableSorter(viewModel);
    logTable.setModel(sorter);
    sorter.addMouseListenerToHeaderInTable(logTable);
    logTable.setColumnWidths();
    logTable.getColumnModel().getColumn(0).setCellRenderer(
        new LogLevelRenderer());
  }

  public void openFile(File file[], FileDialog dialog) {
    // check the file.
    if (file.length == 1) {

      try {
        LogMessage[] msg = FileLogger.readMessages(file[0]);
        LogModel newModel = new LogModel(msg,
            (LogFilter) priorityFilter.getSelectedItem());
        setViewModel(newModel);
        LogMessage logMsg = new LogMessage(
            LogMessage.WORTHLESS_CHATTER, null, "Opened logfile: "
                + file[0], "");
        LogManager.getInstance().logMessage(logMsg);
        setTitle("Log: " + file[0]);
        titlePanel
            .setDescription("Note: This window currently shows the log messages from the file: "
                + file[0]);
        titlePanel
            .setHelp("You can view the log for the current session by selecting 'View Current Log' from the 'File' menu");
      } catch (Exception ex) {
        LogMessage msg = new LogMessage(LogMessage.ERROR, ex,
            "Error reading logfile", "");
        LogManager.getInstance().logMessage(msg);
      }

    } else {
      LogManager.getInstance().logMessage(LogMessage.ERROR,
          "You must select only one file to open in the log window");
    }
  }

  public void error(Throwable t) {
    LogManager.getInstance().logMessage(t);
  }

  private void openFile() {
    // create and open a fileDialog
    JDialog fileDialog = new JDialog(this, "Select File", true);
    FileDialog filePanel = new FileDialog(this, this, false, false, false);
    fileDialog.getContentPane().add(filePanel);
    fileDialog.pack();

    // set the location.
    Point p1 = this.getLocation();
    Dimension d1 = this.getSize();
    Dimension d2 = fileDialog.getSize();
    fileDialog.setLocation((p1.x + (d1.width / 2)) - (d2.width / 2),
        (p1.y + (d1.height / 2)) - (d2.height / 2));

    filePanel.setCurrentDirectory(Config.getInstance().getBaseHarvestDir());
    fileDialog.show();
  }

  private void closeMenu_actionPerformed(ActionEvent e) {
    close();
  }

  private void close_actionPerformed(ActionEvent e) {
    close();
  }

  private void this_windowClosing(WindowEvent e) {
    close();
  }

  private void priorityFilter_actionPerformed(ActionEvent e) {
    viewModel.setFilter((LogFilter) priorityFilter.getSelectedItem());
  }

  void viewLive_actionPerformed(ActionEvent e) {
    setViewModel(liveModel);
    setTitle("Log");
    titlePanel.setDescription(NORMAL_DESC);
    titlePanel.setHelp(NORMAL_HELP);
  }

  void saveAs_actionPerformed(ActionEvent e) {
    saveViewModel();
  }

  void openMenu_actionPerformed(ActionEvent e) {
    openFile();
  }

  void jMenuItem1_actionPerformed(ActionEvent e) {
    liveModel.clear();
  }

}
TOP

Related Classes of nz.govt.natlib.meta.ui.log.LogWindow

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.