src.com.ibm.as400.util.commtrace.FormatDisplay Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400-jdk8 Show documentation
Show all versions of jt400-jdk8 Show documentation
The Open Source version of the IBM Toolbox for Java
The newest version!
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: FormatDisplay.java
//
// The source code contained herein is licensed under the IBM Public License
// Version 1.0, which has been approved by the Open Source Initiative.
// Copyright (C) 2002 International Business Machines Corporation and
// others. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
package com.ibm.as400.util.commtrace;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Writer;
import java.util.Properties;
import javax.swing.JButton;
import javax.swing.JComboBox;
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.JTextArea;
import javax.swing.KeyStroke;
import com.ibm.as400.access.AS400;
import com.ibm.as400.access.Trace;
import com.ibm.as400.vaccess.FileFilter;
import com.ibm.as400.vaccess.IFSFileDialog;
/**
* FormatDisplay is used to format traces. The actual formatting is done by the Format class.
* FormatDisplay is also used to display formatted traces from disk.
*/
class FormatDisplay extends WindowAdapter implements Runnable {
private final String ALL = "*ALL",
YES = "*YES",
NO = "*NO",
CLASS="FormatDisplay";
private AS400 sys; // The system we are connected to
private Thread fmtThread=null; // This thread
private Format fmt=null; // The format object. Our interface to the trace
private Find find=null; // The find dialog to search our text area
private String filterIPaddr_, // The filter arguments passed to the class
filterIPaddr2_,
filterPort_,
filterBdcst_;
private String currPage="", // The current page
lastPage="", // The previously viewed page
slastPage="",// The oldest page
path=null, // The path of the file we are displaying
file=null, // The name of the file we are displaying
filename=null, // The path that contains the file to be traced, and the name of the file
outfile=null; // The name of the file to save to
private int nextRecLen = 0,index=0;
/** Run a local display operation */
public final static int OPEN = 1;
/** Run a remote display operation */
public final static int OPENRMT = 2;
/** Run a format operation and displays the output */
public final static int FMT = 3;
private final static String SAVEEXT = ".bin"; // The extension to append to our formatted trace output
private int ifsrecs=0, // The number of records in this commtrace
recsdisp=0, // The number of records displayed so far
page=0, // The page we are showing. 0 - current, 1 - lastPage, 2 - slastPage
oper; // The operation to be run
// Format Menubar items
private JMenuItem fsave, // File Menu
fclose,
ffind, // Edit Menu
fcopy,
fclear,
fcut,
fpaste;
private JButton next,
prev;
private JComboBox numberList_;
private JLabel msg;
private JTextArea formattrace;
private JFrame l;
/**
* Creates a FormatDisplay and performs the specified operation.
* @param filterIPaddr The IP address filter.
* @param filterIPaddr2 The IP address filter.
* @param filterPort The port filter.
* @param filterBdcst The broadcast filter.
* @param oper The operation to be performed.
*/
public FormatDisplay(String filterIPaddr, String filterIPaddr2, String filterPort, String filterBdcst,int oper) {
filterIPaddr_ = filterIPaddr;
filterIPaddr2_ = filterIPaddr2;
filterPort_ = filterPort;
filterBdcst_ = filterBdcst;
this.oper = oper;
FileDialog fd;
if(oper==FMT) {
// Ask the user for the file to format
fd = new FileDialog(CommTrace.getMainFrame(),ResourceBundleLoader_ct.getText("FormatDialog"),FileDialog.LOAD);
fd.show(); // Show the dialog
String path = fd.getDirectory();
filename = fd.getFile();
// If the didn't specify a file return
if(path==null || filename==null) {
return;
}
filename = path + filename;
} else if(oper==OPEN || oper==OPENRMT) {
open();
}
}
/**
* Displays a formatted trace. Used to display a file remotely.
* @param path
* @param file
* @param sys
* @param oper
*/
public FormatDisplay(String path,String file,AS400 sys,int oper) {
this.oper = oper;
this.sys = sys;
// The path and file that the user just remotely formatted if available
this.path = path;
this.file = file;
if(oper==OPENRMT || oper==OPEN) {
open();
}
}
/**
* Runs the specified FormatDisplay operation.
*/
public void run() {
// True until we have formatted/displayed the file the user specified
boolean fmt=true;
Thread myThread = Thread.currentThread();
while(fmtThread==myThread) {
if(fmt) {
if(oper==FMT) {
if(filename==null) { // The user didn't select a file
return;
}
// Display file dialog so user can specify a place to save the trace
FileDialog fd = new FileDialog(CommTrace.getMainFrame(),ResourceBundleLoader_ct.getText("SaveAs"),FileDialog.SAVE);
fd.setFile(filename + SAVEEXT);
fd.show();
String outpath = fd.getDirectory();
String outfilename = fd.getFile();
if(outfilename==null) { // User didn't sepecify a file
return;
}
outfile = outpath + outfilename;
// Initalize the format object
FormatProperties prop = new FormatProperties();
prop.setProgress(FormatProperties.TRUE);
// Set the filter properties that the user specified
if(!filterIPaddr_.equals(ALL)) {
prop.setIPAddress(filterIPaddr_);
if (Trace.isTraceOn() && Trace.isTraceInformationOn()) {
Trace.log(Trace.INFORMATION,CLASS + ".run() " + "Filtering on IP address");
}
}
if(!filterIPaddr2_.equals(ALL)) {
prop.setSecondIPAddress(filterIPaddr2_);
if (Trace.isTraceOn() && Trace.isTraceInformationOn()) {
Trace.log(Trace.INFORMATION,CLASS + ".run() " + "Filtering on IP address");
}
}
if(!filterPort_.equals(ALL)) {
prop.setPort(filterPort_);
if (Trace.isTraceOn() && Trace.isTraceInformationOn()) {
Trace.log(Trace.INFORMATION,CLASS + ".run() " + "Filtering on port number");
}
}
if(filterBdcst_.equals(NO)) {
prop.setBroadcast(filterBdcst_);
if (Trace.isTraceOn() && Trace.isTraceInformationOn()) {
Trace.log(Trace.INFORMATION,CLASS + ".run() " + "Filtering broadcast records");
}
}
this.fmt = new Format(prop,outfile,filename); // Create the format
long strtime = System.currentTimeMillis(); // Record start time of trace
this.fmt.toLclBinFile(); // Format and output to the file specified
long endtime = System.currentTimeMillis(); // Record end time of trace
if (Trace.isTraceOn() && Trace.isTraceInformationOn()) {
Trace.log(Trace.INFORMATION,CLASS + ".run() " + "Format Start/End/Total Time:" + strtime + "/" + endtime + "/" + (endtime - strtime));
}
this.fmt.openLclFile(); // Open the outfile for display
showOutput(); // Display the output
fmt = false; // We are done with the user operation.
} else if(oper==OPEN || oper==OPENRMT) {
showOutput();
fmt=false; // We are done with the user operation
}
} else {
try { // Idle until the thread is ended
Thread.sleep(1000);
} catch (InterruptedException e) {
// the VM doesn't want us to sleep anymore,
// so get back to work
}
}
}
this.fmt.close(); // Close the Format before exiting
}
/**
* Creates a frame and displays the output.
*/
private void showOutput() {
if (Trace.isTraceOn() && Trace.isTraceInformationOn()) {
Trace.log(Trace.INFORMATION,CLASS + ".showOutput() " + "Showing Output");
}
ObjectInputStream ser;
l = new JFrame("Comm Trace");
formattrace = new JTextArea("",10,80);
JMenuBar formatmb = new JMenuBar();
JMenu ffile = new JMenu(ResourceBundleLoader_ct.getText("File"));
JMenu fedit = new JMenu(ResourceBundleLoader_ct.getText("Edit"));
JScrollPane p = new JScrollPane(formattrace);
// Navigation
JPanel north = new JPanel();
north.setLayout(new GridLayout(0,1));
JPanel nav = new JPanel();
GridBagLayout gridbag = new GridBagLayout();
nav.setLayout(gridbag);
GridBagConstraints c = new GridBagConstraints();
c.anchor=GridBagConstraints.EAST;
c.gridwidth=3;
c.gridheight=3;
// Create the Show Label
JLabel lshow = new JLabel(ResourceBundleLoader_ct.getText("Show"));
gridbag.setConstraints(lshow,c);
nav.add(lshow);
// Create the TextField which allows the user to enter the number of
// records they want displayed at a time
c.anchor=GridBagConstraints.CENTER;
c.gridwidth=GridBagConstraints.RELATIVE;
String[] numberStrings = { "10", "50", "100", "1000", "10000" };
// Create the combo box, select item at index 4.
numberList_ = new JComboBox(numberStrings);
numberList_.setSelectedIndex(2);
gridbag.setConstraints(numberList_,c);
nav.add(numberList_);
// Create the frames label
c.anchor=GridBagConstraints.CENTER;
c.gridwidth=GridBagConstraints.REMAINDER;
JLabel lframes = new JLabel(ResourceBundleLoader_ct.getText("ShowDescription"));
gridbag.setConstraints(lframes,c);
nav.add(lframes);
// Create the message description label
c.anchor=GridBagConstraints.WEST;
c.gridwidth=GridBagConstraints.RELATIVE;
c.gridheight=GridBagConstraints.RELATIVE;
JLabel msgdesc = new JLabel(ResourceBundleLoader_ct.getText("DisplayDescription"));
gridbag.setConstraints(msgdesc,c);
nav.add(msgdesc);
// Create the message label
c.gridwidth=GridBagConstraints.REMAINDER;
msg = new JLabel(ResourceBundleLoader_ct.getText("Prolog"));
gridbag.setConstraints(msg,c);
nav.add(msg);
// Create the previous button
c.anchor=GridBagConstraints.CENTER;
c.gridwidth=GridBagConstraints.RELATIVE;
c.gridheight=GridBagConstraints.REMAINDER;
prev = new JButton(ResourceBundleLoader_ct.getText("Prev"));
prev.addActionListener(new CommTraceDisplayListener(this));
gridbag.setConstraints(prev,c);
nav.add(prev);
// Create the Next button
c.anchor=GridBagConstraints.WEST;
c.gridwidth=GridBagConstraints.REMAINDER;
next = new JButton(ResourceBundleLoader_ct.getText("Next"));
next.addActionListener(new CommTraceDisplayListener(this));
gridbag.setConstraints(next,c);
nav.add(next);
north.add(nav);
String record = ResourceBundleLoader_ct.getText("Record");
String mac = ResourceBundleLoader_ct.getText("MACAddress");
StringBuffer Banner1 = new StringBuffer();
Banner1.append(record);
Banner1.append(" ");
Banner1.append(ResourceBundleLoader_ct.getText("Data"));
Banner1.append(" ");
Banner1.append(record);
Banner1.append(" ");
Banner1.append(ResourceBundleLoader_ct.getText("Destination"));
Banner1.append(" ");
Banner1.append(ResourceBundleLoader_ct.getText("Source"));
Banner1.append(" ");
Banner1.append(ResourceBundleLoader_ct.getText("Frame"));
StringBuffer Banner2 = new StringBuffer();
Banner2.append(ResourceBundleLoader_ct.getText("Number"));
Banner2.append(" ");
Banner2.append(ResourceBundleLoader_ct.getText("S/R"));
Banner2.append(" ");
Banner2.append(ResourceBundleLoader_ct.getText("Length"));
Banner2.append(" ");
Banner2.append(ResourceBundleLoader_ct.getText("Timer"));
Banner2.append(" ");
Banner2.append(mac);
Banner2.append(" ");
Banner2.append(mac);
Banner2.append(" ");
Banner2.append(ResourceBundleLoader_ct.getText("Format"));
String Banner3 = "------ --- ------ ------------ -------------- -------------- ------";
// Banner
JPanel ban = new JPanel();
ban.setLayout(new GridLayout(3,1));
JLabel banner = new JLabel(Banner1.toString()),
banner2 = new JLabel(Banner2.toString()),
banner3 = new JLabel(Banner3);
banner.setFont(new Font("Monospaced", Font.PLAIN, 12));
banner2.setFont(new Font("Monospaced", Font.PLAIN, 12));
banner3.setFont(new Font("Monospaced", Font.PLAIN, 12));
ban.add(banner);
ban.add(banner2);
ban.add(banner3);
// Format Menu Bar
// File Menu
fsave = new JMenuItem(ResourceBundleLoader_ct.getText("Save"),KeyEvent.VK_S); // Create the menu and its key binding
fsave.setAccelerator(KeyStroke.getKeyStroke( // Bind the key binding to the menu item
KeyEvent.VK_S, ActionEvent.CTRL_MASK));
// Disable save if they are displaying a previously traced file
if(oper==OPEN || oper==OPENRMT) {
fsave.setEnabled(false);
}
fclose = new JMenuItem(ResourceBundleLoader_ct.getText("Close"),KeyEvent.VK_W);
fclose.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_W, ActionEvent.CTRL_MASK));
// Edit Menu
ffind = new JMenuItem(ResourceBundleLoader_ct.getText("Find"),KeyEvent.VK_F);
ffind.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_F, ActionEvent.CTRL_MASK));
fcopy = new JMenuItem(ResourceBundleLoader_ct.getText("Copy"),KeyEvent.VK_C);
fcopy.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_C, ActionEvent.CTRL_MASK));
fclear = new JMenuItem(ResourceBundleLoader_ct.getText("Clear"));
fcut = new JMenuItem(ResourceBundleLoader_ct.getText("Cut"),KeyEvent.VK_X);
fcut.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_X, ActionEvent.CTRL_MASK));
fpaste = new JMenuItem(ResourceBundleLoader_ct.getText("Paste"),KeyEvent.VK_V);
fpaste.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_V, ActionEvent.CTRL_MASK));
// Add the menu items and their action listener
ffile.add(fsave);
fsave.addActionListener(new CommTraceDisplayListener(this));
ffile.add(fclose);
fclose.addActionListener(new CommTraceDisplayListener(this));
fedit.add(ffind);
ffind.addActionListener(new CommTraceDisplayListener(this));
fedit.add(fcopy);
fcopy.addActionListener(new CommTraceDisplayListener(this));
fedit.add(fclear);
fclear.addActionListener(new CommTraceDisplayListener(this));
fedit.add(fcut);
fcut.addActionListener(new CommTraceDisplayListener(this));
fedit.add(fpaste);
fpaste.addActionListener(new CommTraceDisplayListener(this));
// Disable cut and past
fcut.setEnabled(false);
fpaste.setEnabled(false);
formatmb.add(ffile);
formatmb.add(fedit);
l.setJMenuBar(formatmb);
formattrace.enableInputMethods(true);
// Need a monospaced font otherwise formatting will not look correct
formattrace.setFont(new Font("Monospaced", Font.PLAIN, 12));
if(fmt==null) { // If format is null we were never initialized so just return
if (Trace.isTraceOn() && Trace.isTraceInformationOn()) {
Trace.log(Trace.ERROR, CLASS + ".showOutput() " + "initialization failed");
}
return;
}
showRecs(1); // Read in and display the prolog
msg.setText("Prolog");// Viewing the prolog
recsdisp=0;
ifsrecs=fmt.getIntFromFile(); // Get the total number of records that this trace contains
l.getContentPane().add(p,BorderLayout.CENTER);
l.getContentPane().add(north,BorderLayout.SOUTH);
l.getContentPane().add(ban,BorderLayout.NORTH);
l.setBackground(Color.black);
l.setForeground(Color.white);
l.addWindowListener(this);
l.setSize(800,600);
l.setVisible(true);
}
/**
* Displays numrecs in the TextArea.
* @param numrecs the number of records to show.
* @return returns false when there are no more records to display.
*/
public boolean showRecs(int numrecs) {
int tcprecs = fmt.getNumberOfTCPRecords();
// Display the wait cursor
((Component) l).setCursor(new Cursor(Cursor.WAIT_CURSOR));
if(page==0) { // If we are supposed to view a new page
if(oper==OPEN || oper==OPENRMT) { // We are reading the data in from a stream
int end = recsdisp+numrecs;
if(end>ifsrecs) {
msg.setText(recsdisp + "-" + ifsrecs + " " + ResourceBundleLoader_ct.getText("of") + " " + ifsrecs + " " + ResourceBundleLoader_ct.getText("possible"));
} else {
msg.setText(recsdisp + "-" + (recsdisp+numrecs) + " " + ResourceBundleLoader_ct.getText("of") + " " + ifsrecs + " " + ResourceBundleLoader_ct.getText("possible"));
}
recsdisp = end;
if(lastPage.equals("")) {
// Save the page we are currently viewing
lastPage = formattrace.getText();
} else {
slastPage = lastPage;
lastPage = formattrace.getText();
}
formattrace.setText(null); // Clear the TextArea
for(int i=0;itcprecs) {
msg.setText(recsdisp + "-" + (tcprecs) + " " + ResourceBundleLoader_ct.getText("of") + " " + tcprecs);
} else {
msg.setText(recsdisp + "-" + (end) + " " + ResourceBundleLoader_ct.getText("of") + " " + tcprecs);
}
recsdisp = end;
if(lastPage.equals("")) {
// Save the page we are currently viewing
lastPage = formattrace.getText();
} else {
slastPage = lastPage;
lastPage = formattrace.getText();
}
formattrace.setText(null); // Clear the TextArea
for(int i=0;iifsrecs) {
msg.setText(recsdisp + "-" + ifsrecs + " " + ResourceBundleLoader_ct.getText("of") + " " + ifsrecs + " " + ResourceBundleLoader_ct.getText("possible"));
} else {
msg.setText(recsdisp-numrecs + "-" + (recsdisp) + " " + ResourceBundleLoader_ct.getText("of") + " " + ifsrecs + " " + ResourceBundleLoader_ct.getText("possible"));
}
if(recsdisp>=ifsrecs) {
// Display the default cursor
((Component) l).setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
page=0; // User is viewing current page
return false;
}
} else {
// User is attempting to view past the end of the available
// number of records
if(recsdisp>tcprecs) {
msg.setText(recsdisp + "-" + (tcprecs) + " " + ResourceBundleLoader_ct.getText("of") + " " + tcprecs);
} else {
msg.setText(recsdisp-numrecs + "-" + (recsdisp) + " " + ResourceBundleLoader_ct.getText("of") + " " + tcprecs);
}
if(recsdisp>=tcprecs) {
// Display the default cursor
((Component) l).setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
page=0; // User is viewing current page
return false;
}
}
page=0; // User is viewing current page
} else if(page==2) { // The user wants to view the 2nd to last page
formattrace.setText(lastPage);
msg.setText(ResourceBundleLoader_ct.getText("PreviousPage"));
page=1; // User is viewing 2nd to last page
}
// Display the default cursor
((Component) l).setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
return true;
}
/** Show the previous page. */
public void showPrev() {
if(page==0) {
currPage = formattrace.getText();
formattrace.setText(lastPage);
msg.setText(ResourceBundleLoader_ct.getText("PreviousPage"));
page=1;
} else if(page==1) {
formattrace.setText(slastPage);
msg.setText(ResourceBundleLoader_ct.getText("PreviousPage") + " 2");
page=2;
} else if(page==2) {
CommTrace.error(l,"Not Found","Only the two previous pages are stored");
}
}
/**
* Opens a formatted file for reading.
* Can be either a local file or a remote IFS file.
*/
public void open() {
if(oper==OPEN) {
// Display file dialog so user can specify a file to open
FileDialog fd = new FileDialog(CommTrace.getMainFrame(),ResourceBundleLoader_ct.getText("OpenDialog"),FileDialog.LOAD);
fd.show();
String path = fd.getDirectory();
String file = fd.getFile();
if(path == null || file == null) { // User cancled the FileDialog
return;
}
fmt = new Format();
fmt.openLclFile(path + file);
outfile = path + file;
} else if(oper==OPENRMT) {
if((path.length() > 0) && (file.length() > 0)) {
fmt = new Format(sys);
fmt.openIFSFile(path+"/" + file + FormatRemote.EXT);
} else {
IFSFileDialog fd = new IFSFileDialog((new JFrame()), ResourceBundleLoader_ct.getText("FiletoView"), sys);
FileFilter [] filterList = {new FileFilter(ResourceBundleLoader_ct.getText("AllFiles"), "*.*"),
new FileFilter(ResourceBundleLoader_ct.getText("CommTraceFiles"), "*.bin")};
fd.setFileFilter(filterList, 0);
fd.setDirectory(path);
fd.setFileName(file);
String fullpath="";
if (fd.showDialog() == IFSFileDialog.OK) {
fullpath = fd.getAbsolutePath(); // get fully qualified file
fmt = new Format(sys);
fmt.openIFSFile(fullpath);
}
}
}
}
/**
* Saves the output from the trace to the user specified location as ASCII
* text.
* @return true if save is successful
*/
public boolean save() {
// Display file dialog so user can specify a place to save the trace
FileDialog fd = new FileDialog(l,ResourceBundleLoader_ct.getText("SaveAs"),FileDialog.SAVE);
if(filename==null) {
int index;
String file = outfile;
if((index = outfile.indexOf('.'))!=-1) {
file = outfile.substring(0,index);
}
fd.setFile(file + ".txt");
} else {
fd.setFile(filename + ".txt");
}
fd.show();
String path = fd.getDirectory();
String file = fd.getFile();
Writer out;
// Set the cursor to a wait cursor
((Component)l).setCursor(new Cursor(Cursor.WAIT_CURSOR));
try {
out = new BufferedWriter(new FileWriter(path + file)); // Opens an output stream on the local file
} catch (IOException e) {
if (Trace.isTraceOn() && Trace.isTraceErrorOn()) {
Trace.log(Trace.ERROR,CLASS + ".save() " + "Error opening " + path + file,e);
}
return false;
}
try {
Format fmtlcl = new Format();
fmtlcl.openLclFile(outfile);
String prolog = fmtlcl.getRecFromFile();
out.write(prolog);
int numrecs = fmtlcl.getIntFromFile();
int recPrinted=0;
String rec;
while((rec = fmtlcl.getRecFromFile())!=null) {
if(recPrinted%5==0) {
out.write(fmt.addBanner());
}
out.write(rec);
recPrinted++;
}
fmtlcl.close();
} catch (IOException e) {
if (Trace.isTraceOn() && Trace.isTraceErrorOn()) {
Trace.log(Trace.ERROR,CLASS + ".save() " + "Error writing to " + path + file,e);
}
return false;
}
try {
out.close();
} catch (IOException e) {
if (Trace.isTraceOn() && Trace.isTraceErrorOn()) {
Trace.log(Trace.ERROR,CLASS + ".save() " + "Error closing " + path + file,e);
}
return false;
}
// Set the cursor back to the default cursor
((Component)l).setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
return true;
}
/** Add the end banner. */
private String addEndBanner() {
return("\n* * * * * * * * * * * * * " +
ResourceBundleLoader_ct.getText("EOCP") +
" * * * * * * * * * * * * *\n");
}
/**
* Closes the output window and ends the thread.
*/
public void close() {
if (Trace.isTraceOn() && Trace.isTraceInformationOn()) {
Trace.log(Trace.INFORMATION,CLASS + ".close()");
}
if(l!=null) {
l.setVisible(false);
}
if(fmt!=null) {
fmt.close();
}
fmtThread=null;
}
/**
* Sets the correct window invisible based on the user input.
* Called by the JVM when the user attempts to close our window.
*/
public void windowClosing(WindowEvent e) {
if (e.getSource() == l) {
close();
}
}
/**
* Creates a Find object to search our TextArea.
*/
public void find() {
if(find==null || find.isClosed()) {
find = new Find(formattrace);
} else {
find.toFront();
}
}
/** Copies the selected text. */
public void copy() {
formattrace.copy();
}
/** Clears the text area. */
public void clear() {
formattrace.setText("");
}
/** Cuts the selected text. */
public void cut() {
formattrace.cut();
}
/** Pastes the copied text into the text area. */
public void paste() {
formattrace.paste();
}
/**
* Returns the thread this object executes under.
* @return Thread
*/
public Thread getThread() {
return fmtThread;
}
/**
* Sets the thread to execute under.
* @param tr
*/
public void setThread(Thread tr) {
fmtThread = tr;
}
/**
* Returns the JComboBox with which the user selects the number of records to display.
* @return JComboBox
*/
public JComboBox getNumberList() {
return numberList_;
}
/**
* Returns the Save Menu Item.
* @return JMenuItem
*/
public JMenuItem getSaveMenuItem() {
return fsave;
}
/**
* Returns the Close Menu Item.
* @return JMenuItem
*/
public JMenuItem getCloseMenuItem() {
return fclose;
}
/**
* Returns the Find Menu Item.
* @return JMenuItem
*/
public JMenuItem getFindMenuItem() {
return ffind;
}
/**
* Returns the Copy Menu Item.
* @return JMenuItem
*/
public JMenuItem getCopyMenuItem() {
return fcopy;
}
/**
* Returns the Clear Menu Item.
* @return JMenuItem
*/
public JMenuItem getClearMenuItem() {
return fclear;
}
/**
* Returns the Cut Menu Item.
* @return JMenuItem
*/
public JMenuItem getCutMenuItem() {
return fcut;
}
/**
* Returns the Paste Menu Item.
* @return JMenuItem
*/
public JMenuItem getPasteMenuItem() {
return fpaste;
}
/**
* Returns the Next Button.
* @return JButton
*/
public JButton getNextButton() {
return next;
}
/**
* Returns the Previous Button.
* @return JButton
*/
public JButton getPrevButton() {
return prev;
}
/**
* Returns the main frame for the Display of records.
* @return JFrame
*/
public JFrame getDisplayFrame() {
return l;
}
}