/*
* Copyright (c) 2007 BUSINESS OBJECTS SOFTWARE LIMITED
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Business Objects nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/*
* MonitorMainFrame.java
* Created: 15-Mar-2004
* By: Rick Cameron
*/
package org.openquark.samples.bam.ui;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.WindowEvent;
import java.io.File;
import java.net.URL;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JToolBar;
import org.openquark.samples.bam.MonitorApp;
import org.openquark.samples.bam.model.MonitorDocument;
import org.openquark.samples.bam.model.MonitorJobDescription;
import org.openquark.util.ui.ExtensionFileFilter;
import org.openquark.util.ui.SmartCheckBoxMenuItem;
/**
*
*
*/
public class MonitorMainFrame extends JFrame {
private static final long serialVersionUID = -1506327581746672170L;
private final MonitorApp app;
private boolean logMessages = false;
public MonitorMainFrame (MonitorApp app) {
super ("Business Activity Monitor");
this.app = app;
setDefaultCloseOperation (JFrame.DO_NOTHING_ON_CLOSE);
ImageIcon frameIcon = loadIcon("BAMIcon.png");
setIconImage(frameIcon.getImage());
MonitorDocumentEditor editor = new MonitorDocumentEditor (app);
LogPanel logPanel = new LogPanel ();
app.addLogHandler (logPanel.getLogHandler ());
makeMenuBar (editor, logPanel);
makeContents (editor, logPanel);
pack ();
setLocationRelativeTo (null);
}
/**
* @see javax.swing.JFrame#processWindowEvent(java.awt.event.WindowEvent)
*/
@Override
protected void processWindowEvent (WindowEvent e) {
super.processWindowEvent (e);
if (e.getID () == WindowEvent.WINDOW_CLOSING) {
onExit ();
}
}
/**
* Method makeMenuBar
*
*
*/
private void makeMenuBar (MonitorDocumentEditor editor, LogPanel logPanel) {
JMenuBar menuBar = new JMenuBar ();
JMenu fileMenu = new JMenu ("File");
fileMenu.add (new AbstractAction ("New") {
private static final long serialVersionUID = -7231496657495666085L;
public void actionPerformed (ActionEvent e) {
onFileNew ();
}
});
fileMenu.add (new AbstractAction ("Open...") {
private static final long serialVersionUID = 8513791034284527200L;
public void actionPerformed (ActionEvent e) {
onFileOpen ();
}
});
fileMenu.add (new AbstractAction ("Save") {
private static final long serialVersionUID = -8298609793391808996L;
public void actionPerformed (ActionEvent e) {
onFileSave ();
}
});
fileMenu.add (new AbstractAction ("Save As...") {
private static final long serialVersionUID = -8349400151145739033L;
public void actionPerformed (ActionEvent e) {
onFileSaveAs ();
}
});
fileMenu.addSeparator ();
fileMenu.add (new AbstractAction ("Exit") {
private static final long serialVersionUID = -2934786890178912553L;
public void actionPerformed (ActionEvent e) {
onExit ();
}
});
menuBar.add (fileMenu);
JMenu editMenu = new JMenu ("Edit");
editMenu.add (editor.getAddMessageSourceAction ());
editMenu.add (editor.getRemoveMessageSourceAction ());
editMenu.addSeparator ();
editMenu.add (editor.getAddTriggerAction ());
editMenu.add (editor.getEditTriggerAction ());
editMenu.add (editor.getRemoveTriggerAction ());
editMenu.addSeparator ();
editMenu.add (editor.getAddActionAction ());
editMenu.add (editor.getEditActionAction ());
editMenu.add (editor.getRemoveActionAction ());
menuBar.add (editMenu);
JMenu toolsMenu = new JMenu ("Tools");
toolsMenu.add (new SmartCheckBoxMenuItem (app.getEnableMessageLoggingAction ()));
toolsMenu.add (logPanel.getClearLogAction ());
toolsMenu.addSeparator ();
toolsMenu.add (new AbstractAction ("Manage Gems") {
private static final long serialVersionUID = 2688897007995190167L;
public void actionPerformed (ActionEvent e) {
onBlessGems ();
}
});
menuBar.add (toolsMenu);
JMenu testMenu = new JMenu ("Test");
testMenu.add (new AbstractAction ("Make test document") {
private static final long serialVersionUID = 6948959299447701086L;
public void actionPerformed (ActionEvent e) {
makeTestDocument ();
}
});
menuBar.add (testMenu);
JMenu helpMenu = new JMenu ("Help");
helpMenu.add (new AbstractAction ("About") {
private static final long serialVersionUID = -4668449109712768769L;
public void actionPerformed (ActionEvent e) {
JOptionPane.showMessageDialog (MonitorMainFrame.this,
"Business Activity Monitor\nversion 0.1\nFrom the Research Group", "About Monitor",
JOptionPane.INFORMATION_MESSAGE);
}
});
menuBar.add (helpMenu);
setJMenuBar (menuBar);
}
/**
* Method onBlessGems
*
*
*/
protected void onBlessGems () {
GemBlessingDialog dialog = new GemBlessingDialog (this, app);
dialog.doModal();
app.getTriggerGemManager().resetAvailableGems();
app.getActionGemManager().resetAvailableGems();
}
/**
* Method onFileNew
*
*
*/
protected void onFileNew () {
if (app.isRunning ()) {
JOptionPane.showMessageDialog (this, "Please stop the monitor before creating a new document.", "BAM Sample",
JOptionPane.WARNING_MESSAGE);
return;
}
app.setDocument (new MonitorDocument ());
}
/**
* Method onFileOpen
*
*
*/
protected void onFileOpen () {
if (app.isRunning ()) {
JOptionPane.showMessageDialog (this, "Please stop the monitor before opening a document.", "BAM Sample",
JOptionPane.WARNING_MESSAGE);
return;
}
JFileChooser fileChooser = new JFileChooser ();
fileChooser.addChoosableFileFilter (new ExtensionFileFilter ("bam", "Monitor document"));
if (fileChooser.showOpenDialog (this) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile ();
MonitorDocument document = MonitorDocument.Load (file);
if (document != null) {
app.setDocument (document);
}
}
}
/**
* Method onFileSave
*
*
*/
protected void onFileSave () {
MonitorDocument document = app.getDocument ();
String pathname = document.getPathname ();
if (pathname == null || pathname.length () == 0) {
onFileSaveAs ();
} else {
File file = new File (pathname);
document.save (file);
}
}
/**
* Method onFileSaveAs
*
*
*/
protected void onFileSaveAs () {
MonitorDocument document = app.getDocument ();
String pathname = document.getPathname ();
JFileChooser fileChooser = new JFileChooser (pathname);
fileChooser.addChoosableFileFilter (new ExtensionFileFilter ("bam", "Monitor document"));
if (fileChooser.showSaveDialog (this) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile ();
document.save (file);
}
}
/**
* Method onLogMessages
*
*
*/
protected void onLogMessages () {
logMessages = !logMessages;
}
/**
* Method makeTestDocument
*
*
*/
protected void makeTestDocument () {
MonitorDocument newDocument = new MonitorDocument ();
newDocument.addJobDescription (MonitorJobDescription.makeTestInstance ());
newDocument.addJobDescription (MonitorJobDescription.makeAnotherTestInstance ());
app.setDocument (newDocument);
}
/**
* Method makeContents
*
*
*/
private void makeContents (MonitorDocumentEditor editor, LogPanel logPanel) {
getContentPane ().setLayout (new BorderLayout ());
JToolBar toolBar = new JToolBar ("Toolbar");
addToolbarButton (toolBar, app.getRunAction (), "play.gif");
addToolbarButton (toolBar, app.getStopAction (), "stop.gif");
JPanel mainPanel = new JPanel (new BorderLayout ());
JTabbedPane tabbedPane = new JTabbedPane (JTabbedPane.BOTTOM, JTabbedPane.SCROLL_TAB_LAYOUT);
tabbedPane.addTab ("Editor", null, editor, "Use this tab to edit the BAM jobs");
tabbedPane.addTab ("Log", null, logPanel, "Use this tab to view the log of actions");
getContentPane().add (new MonitorSidePanel (), BorderLayout.WEST);
mainPanel.add (toolBar, BorderLayout.NORTH);
mainPanel.add (tabbedPane, BorderLayout.CENTER);
getContentPane ().add (mainPanel, BorderLayout.CENTER);
}
private void addToolbarButton (JToolBar toolBar, Action action, String iconFileName) {
JButton button = toolBar.add (action);
Icon icon = loadIcon(iconFileName);
if (icon != null) {
button.setText ("");
button.setIcon (icon);
}
}
private ImageIcon loadIcon (String iconFileName) {
String iconFilePath = "/Resources/" + iconFileName; //$NON-NLS-1$
URL url = getClass().getResource (iconFilePath);
if (url != null) {
return new ImageIcon (url);
} else {
return null;
}
}
/**
* Method onExit
*
*
*/
private void onExit () {
if (app.isRunning ()) {
JOptionPane.showMessageDialog (this, "You must stop the application before exiting",
"Business Activity Monitor", JOptionPane.WARNING_MESSAGE);
return;
}
System.exit (0);
}
}