import javax.swing.*; import java.awt.event.*; import java.awt.Container; import java.awt.BorderLayout; import java.awt.Font; import java.util.*; import java.io.*; import java.text.DateFormat; public class Logger extends JFrame { private JTextArea text; private DateFormat format; private JFileChooser chooser; private JTextField alertFld; private JComboBox formChoice; private List eventList; private LoggerIO ioHndlr; private String eol; private Font logFont; private static final String EMPTY = ""; private static final Date EARLIEST = new Date( 0L ); public static final String [] formats = { "Text", "Data", "Object" }; public static void main( String [] args ) { Logger logger = new Logger( ); logger.setVisible( true ); } public Logger( ) { super( "Logger" ); ioHndlr = new LoggerIO( this ); format = DateFormat.getDateTimeInstance( DateFormat.SHORT, DateFormat.MEDIUM ); chooser = new JFileChooser(); eventList = new LinkedList(); eol = System.getProperty( "line.separator" ); logFont = new Font( "SanSerif", Font.BOLD, 16 ); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); Container content = getContentPane(); JPanel btnPanel = new JPanel(); JLabel formLbl = new JLabel( "Format" ); btnPanel.add( formLbl ); formChoice = new JComboBox( formats ); formChoice.setSelectedItem( "Text" ); btnPanel.add( formChoice ); JLabel space = new JLabel( " " ); btnPanel.add( space ); JButton logBtn = new JButton( "Log" ); logBtn.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { log(); } } ); btnPanel.add( logBtn ); JButton sumBtn = new JButton( "Summarize" ); sumBtn.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { summarize(); } } ); btnPanel.add( sumBtn ); JButton clearBtn = new JButton( "Clear" ); clearBtn.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { clear(); } } ); btnPanel.add( clearBtn ); JButton saveBtn = new JButton( "Save" ); saveBtn.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { save(); } } ); btnPanel.add( saveBtn ); JButton loadBtn = new JButton( "Load" ); loadBtn.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { load(); } } ); btnPanel.add( loadBtn ); JButton quitBtn = new JButton( "Quit" ); quitBtn.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { quit(); } } ); btnPanel.add( quitBtn ); content.add( btnPanel, BorderLayout.NORTH ); JPanel textPanel = new JPanel(); text = new JTextArea( 20, 60 ); text.setFont( logFont ); text.setEditable( false ); text.setText( EMPTY ); JScrollPane scroller = new JScrollPane( text ); textPanel.add( scroller ); content.add( textPanel, BorderLayout.CENTER ); alertFld = new JTextField( 60 ); alertFld.setFont( logFont ); content.add( alertFld, BorderLayout.SOUTH ); pack(); } void announce( String txt ) { alertFld.setText( txt ); } private void log() { Date now = new Date(); eventList.add( now ); text.append( format.format( now ) + eol ); } private void summarize() { ListIterator iter = eventList.listIterator(); boolean outOfOrder = false; Date previous = EARLIEST; int count = 0; while ( iter.hasNext() ) { Date nDate = (Date) iter.next(); if ( previous.after( nDate ) ) outOfOrder = true; previous = nDate; count++; } StringBuffer sb = new StringBuffer(); if ( outOfOrder ) sb.append( "EVENTS OUT OF ORDER!! " ); sb.append( "Number of events = " + count ); alertFld.setText( sb.toString() ); } private void clear() { text.setText( EMPTY ); alertFld.setText( EMPTY ); eventList = new LinkedList(); } private void save() { File logFile = null; int confirm = chooser.showSaveDialog( this ); if ( confirm == JFileChooser.APPROVE_OPTION ) { logFile = chooser.getSelectedFile(); String form = (String) formChoice.getSelectedItem(); if ( form.equals( "Text" ) ) ioHndlr.saveToText( eventList, logFile ); else if ( form.equals( "Data" ) ) ioHndlr.saveToData( eventList, logFile ); else if ( form.equals( "Object" ) ) ioHndlr.saveToObject( eventList, logFile ); else alertFld.setText( "Choose a format" ); } } private void load() { File logFile = null; int confirm = chooser.showOpenDialog( this ); if ( confirm == JFileChooser.APPROVE_OPTION ) { clear(); logFile = chooser.getSelectedFile(); String form = (String) formChoice.getSelectedItem(); if ( form.equals( "Text" ) ) eventList = ioHndlr.loadFromText( logFile ); else if ( form.equals( "Data" ) ) eventList = ioHndlr.loadFromData( logFile ); else if ( form.equals( "Object" ) ) eventList = ioHndlr.loadFromObject( logFile ); else alertFld.setText( "Choose a format" ); if ( eventList == null ) eventList = new LinkedList(); ListIterator iter = eventList.listIterator(); while ( iter.hasNext() ) { Date next = (Date) iter.next(); text.append( format.format( next ) + eol ); } } } private void quit() { System.exit( 0 ); } }