/* * Copyright 2001-2005 Stephen Colebourne * * 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 org.joda.example.time; /* * Import required Java packages. */ import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.PrintStream; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.TimeZone; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.WindowConstants; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import org.joda.time.DateTime; /** DateTimeBrowser is a Java Swing application which reads a file contining * strings and displays DateTime values in a JTable.<p> * The input strings must be suitable for instantiation * of DateTime objects. The file is read, and an attempt is made * to instantiate a DateTimeObject from the input string on each file * line.<p> * Comments (beginning with '#') and blank lines may appear in * the file.<p> * Error messages may result from invalid input.<p> * Values calculated from any resulting DateTime objects are placed * in a JTable and displayed in a JFrame.<p> * * @author Guy Allard * @version 1.0 */ public class DateTimeBrowser extends JFrame { // private String[] mainArgs = null; // Copy of args[] reference. // private LoadedFile currFile = null; // New ones possible at // runtime. private JScrollPane mainSP = null; // Swapped around at runtime // /** * The getter view menu item. */ JMenuItem jmiGetter = null; /** * The hexadecimal view menu item. */ JMenuItem jmiHex = null; /** * The Java Date view menu item. */ JMenuItem jmiDate = null; /** * The java calendar menu item. */ JMenuItem jmiCal = null; // // Done deals. // private final JFileChooser chooser = new JFileChooser(); private final boolean debugf = false; // debugging flag private final boolean debugt = true; // debugging flag /** * This is the main swing application method. It sets up and displays the * initial GUI, and controls execution thereafter. Everything else in * this class is 'private', please read the code. */ public static void main(String[] args) { /* * Developers Notes: * * -No corresponding Junit test class currently * provided. Test by eyeball of the output. * * -Add a menu with Help(About) * --> TBD. * * -Figure out some sane way to set initial default * column sizes. * * -Lots of inner classes here, done in order to keep * all the .class files easily identifiable. Some of * this code is pretty ugly, very procedural in nature. * Lots of very tight coupling between all the classes, * thinly disguised switch statements, etc ..... This * code written on the fly, with almost no thought given * to OO design. * * -Also, I'm not really a GUI guy, so forgive any * transgressions. * */ if ( args.length < 1 ) { System.err.println("File name is required!"); usage(); System.exit(1); } /* * Instantiate a DateTimeBrowser and invoke it's go method, * passing the input argument list. */ new DateTimeBrowser().go( args ); } // main /* * usage A private static method to display usage information to * the user before an error exit. */ private static void usage() { System.err.println("Usage:"); System.err.print("java <options> "); System.err.print(DateTimeBrowser.class.getName()); System.err.println(" <filename>"); System.err.println("<filename> contains a list of Strings"); System.err.println("\twhich are valid for DateTime instantiation."); System.err.println("<optons>"); System.err.println("\t-Duse.time.zone="); System.err.println("\t\tA valid timezone name. If not specified"); System.err.println("\t\tthe OS/user default is used. If sepcified"); System.err.println("\t\tincorrectly, GMT is quietly used."); System.err.println("\t-Duse.view="); System.err.println("\t\tAn initial view to be displayed."); System.err.println("\t\tValid names are: getter, hex, date, cal"); System.err.println("\t\tIf incorrectly specified, getter is used."); System.err.println("\t\tThis becomes the default view."); } // usage /* * go This method reads the file, creates the table to display, * the window to display it in, and displays the window. * @param fileName the name of the file to read. * @param tryLines An estimate of the number of lines in * the file. */ private void go(String[] args) { mainArgs = args; setDefaultTimeZone(); // let user override if needed // setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); // JMenuBar menuBar = new JMenuBar(); setJMenuBar( menuBar ); addMenus( menuBar ); /* * Add a fast close listener */ addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { setVisible( false ); dispose(); System.exit(0); } } ); // // Load current file, prime tables and JFrame. // currFile = new LoadedFile( mainArgs[0] ); TableView tView = getDefaultTableView(); resetDefaults( tView ); // // Set max size at start, and display the window. // Dimension screenMax = Toolkit.getDefaultToolkit().getScreenSize(); setSize ( screenMax ); setVisible(true); } // // --> Private implementation methods follow. // /* * getDefaultTableView */ private TableView getDefaultTableView() { // No user input. String viewStr = System.getProperty("use.view"); if ( viewStr == null ) { jmiGetter.setEnabled( false ); return new GetterTableView( currFile ); } // Valid user input. if ( viewStr.equalsIgnoreCase("hex") ) { jmiHex.setEnabled( false ); return new HexTableView( currFile ); } else if ( viewStr.equalsIgnoreCase("date") ) { jmiDate.setEnabled( false ); return new DateTableView( currFile ); } else if ( viewStr.equalsIgnoreCase("cal") ) { jmiCal.setEnabled( false ); return new CalTableView( currFile ); } else if ( viewStr.equalsIgnoreCase("getter") ) { jmiGetter.setEnabled( false ); return new GetterTableView( currFile ); } else { // error by user System.err.println("View name: " + viewStr + " invalid."); jmiGetter.setEnabled( false ); return new GetterTableView( currFile ); } } /* * setDefaultTableView */ private void setDefaultTableView(String newView) { System.setProperty( "use.view", newView ); } /* * setDefaultTimeZone */ private void setDefaultTimeZone() { String tzName = System.getProperty("use.time.zone"); if ( tzName == null ) return; // Use OS/user default. // // If tzName is bogus, not understood by the JRE, // 'getTimeZone' returns GMT. // TimeZone toSet = TimeZone.getTimeZone( tzName ); // // Set default to whatever was returned. // TimeZone.setDefault( toSet ); } /* * addMenus */ private void addMenus( JMenuBar menuBar) { // // Create all the menus. // JMenu fileMenu = new JMenu("File"); JMenu viewMenu = new JMenu("View"); // // Add them to the menubar in order. // menuBar.add( fileMenu ); menuBar.add( viewMenu ); // // Create action objects and menu items. // Action open = new OpenAction(); JMenuItem jmiOpen = new JMenuItem( open ); Action exit = new ExitAction(); JMenuItem jmiExit = new JMenuItem( exit ); // // Next Menu // Action getter = new GetterAction(); jmiGetter = new JMenuItem( getter ); getter.setEnabled( true ); // Action hex = new HexAction(); jmiHex = new JMenuItem( hex ); hex.setEnabled( true ); // Action date = new DateAction(); jmiDate = new JMenuItem( date ); date.setEnabled( true ); // Action cal = new CalAction(); jmiCal = new JMenuItem( cal ); cal.setEnabled( true ); // // Build the file menu. // fileMenu.add( jmiOpen ); fileMenu.addSeparator(); fileMenu.add( jmiExit ); // // Build the view menu. // viewMenu.add( jmiGetter ); viewMenu.add( jmiHex ); viewMenu.add( jmiDate ); viewMenu.add( jmiCal ); // // *temp Developer's code // // jmiGetter.setEnabled( false ); // // JMenuItem getter2 = new JMenuItem( "getter2" ); // getter2.addActionListener( new myMouseListener() ); // viewMenu.add( getter2 ); } // end of addMenus /* * A private method to dump the arrays of Object[][] * if desired by the developer * @param objs The array of arrays to be dumped. */ private void dumpObjs(Object[][] objs, PrintStream out ) { for (int i = 0; i < objs.length; ++i) { for (int j = 0; j < objs[i].length; ++j) { out.println(i + " " + j + " " + objs[i][j]); } // for j } // for i } /* * enableAll */ private void enableAllViews() { jmiGetter.setEnabled( true ); jmiHex.setEnabled( true ); jmiDate.setEnabled( true ); jmiCal.setEnabled( true ); } // end of enableAllViews /* * getADate Returns a new DateTime object reference if possible, * otherwise null. * @return retDT A DateTime object reference. */ private DateTime getADate(String s) { DateTime retDT = null; try { retDT = new DateTime( s ); } // the try catch(IllegalArgumentException pe) { // ignore it here, caller sees null } // the catch return retDT; } // getADate // private static final String PADCHARS = "00000000000000000000000000000000"; /* * LPad Return a String, left padded with '0's as specified * by the caller. */ private String LPad(String inStr, int maxLen) { if (inStr.length() >= maxLen) return inStr.toUpperCase(); String zeroes = PADCHARS.substring(0, maxLen - inStr.length()); String retVal = zeroes + inStr; return retVal.toUpperCase(); } /* * resetDefaults */ private void resetDefaults( TableView tView ) { Object[] colNames = tView.getColNames(); Object[][] tableValues = tView.getCalcdValues(); // dumpObjs( tableValues, System.out); JTable table = new JTable( tableValues, colNames ); tView.setViewColumnsWidth( table ); setTitle( tView.getViewTitle() ); // if ( mainSP != null ) getContentPane().remove( mainSP ); mainSP = new JScrollPane( table ); getContentPane().add( mainSP, "Center" ); validate(); } // end of resetDefaults // // ----> Private internal classes follow. // /* * LoadedFile This class represents a file that has been loaded * for viewing. */ private class LoadedFile { // Instance variables String fileName = null; ArrayList fileStrings = null; ArrayList dtObjects = null; int lineGuess = 0; /* * LoadedFile constructor. */ LoadedFile(String fileName) { validateFile( fileName ); this.fileName = fileName; // fileStrings = new ArrayList( lineGuess ); dtObjects = new ArrayList( lineGuess ); try { BufferedReader rdr = new BufferedReader( new FileReader( fileName ) ); String inputLine = null; DateTime calculatedDT = null; int currLine = 0; while( (inputLine = rdr.readLine()) != null ) { currLine++; inputLine = inputLine.trim(); // Ignore blank and comment lines if ( inputLine.length() == 0 ) continue; if ( inputLine.charAt(0) == '#' ) continue; // Ignore lines which fail DateTime construction if ( (calculatedDT = getADate(inputLine)) == null ) { System.err.println("Parse failed for: " + inputLine + " at line number " + currLine); continue; } // Add the input file string and DateTime to lists fileStrings.add( inputLine ); dtObjects.add( calculatedDT ); } rdr.close(); } catch(IOException ioe) { System.err.println("Load of file: " + fileName + " failed!"); ioe.printStackTrace(); System.exit(100); } // Try to be efficient (?really?) fileStrings.trimToSize(); dtObjects.trimToSize(); } // end of LoadedFile() constructor /* * General getters. */ public String getFileName() { return fileName; } public int getLineGuess() { return lineGuess; } public ArrayList getFileStrings() { return fileStrings; } public ArrayList getDtObjects() { return dtObjects; } public int getLoadedFileSize() { if ( dtObjects == null ) return 0; return dtObjects.size(); } /* * validateFile */ private void validateFile(String fileName) { /* * Verify the user specified file exists and can * be read. */ File f = new File( fileName ); if ( !f.exists() || !f.canRead() ) { System.err.println("File: " + mainArgs[0] + " does not exist or cannot be read!"); usage(); System.exit(2); } /* * Try to get a reasonable estimate of the number of lines * in the file. */ // Java does not do this right IMO. The number of bytes in a // file is a // long, but the length of a string is an int. Why? lineGuess = (int)(f.length() / (long)"YYYY-MM-DDTHH:MM:SS".length()); lineGuess += (lineGuess / 10); // // Debugging // if ( false ) { System.out.println("Line guess is: " + lineGuess); } } // end of validateFile(String) } // end of class LoadedFile class /* * TableView This abstract class defines the operations * necessary to create and access the Object arrays * required to create a JTable. */ private abstract class TableView { protected Object[] colNames = null; protected Object[][] calcdValues = null; protected LoadedFile lddFile = null; // TableView(LoadedFile lddFile) { this.lddFile = lddFile; } // public Object[] getColNames() { return colNames; } public Object[][] getCalcdValues() { return calcdValues; } // abstract Object[] genColNames(); abstract Object[][] genCalcdValues(); abstract String getViewTitle(); abstract void setViewColumnsWidth(JTable jt); // } // end of abstract class TableView /* * GetterTableView This class implements the operations * for the GetterView of the Jtable. */ private class GetterTableView extends TableView { // GetterTableView(LoadedFile lddFile) { super(lddFile); setDefaultTableView( "getter" ); colNames = genColNames(); calcdValues = genCalcdValues(); } /* * genCalcdValues is required by the base class. */ Object[][] genCalcdValues() { Object[][] retValues = null; /* * Create an array of Objects that will contain * other arrays of Objects. (This is the 'column' * array). */ ArrayList fileStrings = lddFile.getFileStrings(); ArrayList dtObjects = lddFile.getDtObjects(); int numRows = fileStrings.size(); retValues = new Object[numRows][]; int numCols = colNames.length; // System.err.println("NumCols : " + numCols); /* * Prime the array of arrays of Objects, allocating a new * secondary array for each of the primary array's * elements. */ for (int nextStrNum = 0; nextStrNum < fileStrings.size(); ++ nextStrNum) { retValues[nextStrNum] = new Object[numCols]; // get the 'col' array //**** //* This needs to be sync'd with the colNames array. //**** // Current row, 1st column int column = 0; // working row value String fileString = (String)fileStrings.get(nextStrNum); retValues[nextStrNum][column++] = fileString; // Current row, 2nd column DateTime adt = (DateTime)dtObjects.get(nextStrNum); String adtStr = adt.toString(); retValues[nextStrNum][column++] = adtStr; // Current row, other columns. // Order here must match that specified in the colNames // array. retValues[nextStrNum][column++] = new Integer( adt.getMillisOfSecond() ); retValues[nextStrNum][column++] = new Integer( adt.getSecondOfMinute() ); retValues[nextStrNum][column++] = new Integer( adt.getMinuteOfHour() ); retValues[nextStrNum][column++] = new Integer( adt.getHourOfDay() ); retValues[nextStrNum][column++] = new Integer( adt.getDayOfWeek() ); retValues[nextStrNum][column++] = new Integer( adt.getDayOfMonth() ); retValues[nextStrNum][column++] = new Integer( adt.getDayOfYear() ); retValues[nextStrNum][column++] = new Integer( adt.getWeekOfWeekyear() ); retValues[nextStrNum][column++] = new Integer( adt.getWeekyear() ); retValues[nextStrNum][column++] = new Integer( adt.getMonthOfYear() ); retValues[nextStrNum][column++] = new Integer( adt.getYear() ); // } // the for if ( debugf ) dumpObjs( retValues, System.err ); return retValues; } // end of genTBValues /* * genColNames is required by the base class. */ Object[] genColNames() { Object[] retVal = { "FileString", "toString()", "MillisOfSec", "SecOfMin", "MinOfHr", "HrOfDay", "DayOfWk", "DayOfMon", "DayOfYr", "WeekOfWY", "Weekyear", "MonOfYr", "Year" }; return retVal; } /* * getViewTitle */ String getViewTitle() { return "DateTime.getXXX() Method Calculations" + " : " + TimeZone.getDefault().getDisplayName() + " : " + " Record Count " + currFile.getLoadedFileSize(); } /* * setViewColumnLengths */ void setViewColumnsWidth(JTable jt) { /* * Resize column 0, 1 */ TableColumnModel colmodel = jt.getColumnModel(); TableColumn col0 = colmodel.getColumn(0); col0.setPreferredWidth(200); TableColumn col1 = colmodel.getColumn(1); col1.setPreferredWidth(200); return; } } // end of class getterTableView /* * HexView This class implements the operations for * the HexView of the file. */ private class HexTableView extends TableView { // HexTableView(LoadedFile lddFile) { super(lddFile); setDefaultTableView( "hex" ); colNames = genColNames(); calcdValues = genCalcdValues(); } /* * genCalcdValues is required by the base class. */ Object[][] genCalcdValues() { Object[][] retValues = null; /* * Create an array of Objects that will contain * other arrays of Objects. (This is the 'column' * array). */ ArrayList fileStrings = lddFile.getFileStrings(); ArrayList dtObjects = lddFile.getDtObjects(); int numRows = fileStrings.size(); retValues = new Object[numRows][]; int numCols = colNames.length; // System.err.println("NumCols : " + numCols); String fs = "yyyy-MM-dd'T'HH:mm:ss"; DateFormat df = new SimpleDateFormat( fs ); /* * Prime the array of arrays of Objects, allocating a new * secondary array for each of the primary array's * elements. */ for (int nextStrNum = 0; nextStrNum < fileStrings.size(); ++ nextStrNum) { retValues[nextStrNum] = new Object[numCols]; // get the 'col' array //**** //* This needs to be sync'd with the colNames array. //**** // Current row, 1st column int column = 0; String fileString = (String)fileStrings.get(nextStrNum); retValues[nextStrNum][column++] = fileString; // Current row, 2nd column DateTime adt = (DateTime)dtObjects.get(nextStrNum); String adtStr = adt.toString(); retValues[nextStrNum][column++] = adtStr; // Current row, other columns. // Order here must match that specified in the colNames // array. long lVal = adt.getMillis(); Long millis = new Long( lVal ); retValues[nextStrNum][column++] = millis; String hexVal = Long.toHexString( lVal ); String octalVal = Long.toOctalString( lVal ); retValues[nextStrNum][column++] = "0"+ LPad(octalVal,22); retValues[nextStrNum][column++] = "0x" + LPad(hexVal,16); // Date javaDate = null; try { javaDate = df.parse( fileString ); } catch(ParseException e) { System.err.println("Parse failed for : " + fileString); // pe.printStackTrace(); } // lVal = javaDate.getTime(); millis = new Long( lVal ); hexVal = Long.toHexString( lVal ); octalVal = Long.toOctalString( lVal ); retValues[nextStrNum][column++] = millis; retValues[nextStrNum][column++] = "0"+ LPad(octalVal,22); retValues[nextStrNum][column++] = "0x" + LPad(hexVal,16); // } // the for if ( debugf ) dumpObjs( retValues, System.err ); return retValues; } // end of genTBValues /* * genColNames is required by the base class. */ Object[] genColNames() { Object[] retVal = { "FileString", "toString()", "JDT-millis", "JDT-Oct", "JDT-Hex", "Date-millis", "Date-Oct", "Date-Hex" }; return retVal; } /* * getViewTitle */ String getViewTitle() { return "View the long values" + " : " + TimeZone.getDefault().getDisplayName() + " : " + " Record Count " + currFile.getLoadedFileSize(); } /* * setViewColumnLengths */ void setViewColumnsWidth(JTable jt) { return; } } // end of class HexTableView /* * DateTableView This class implements the operations for * the java.util.Date of the file. */ private class DateTableView extends TableView { // DateTableView(LoadedFile lddFile) { super(lddFile); setDefaultTableView( "date" ); colNames = genColNames(); calcdValues = genCalcdValues(); } /* * genCalcdValues is required by the base class. */ Object[][] genCalcdValues() { Object[][] retValues = null; /* * Create an array of Objects that will contain * other arrays of Objects. (This is the 'column' * array). */ ArrayList fileStrings = lddFile.getFileStrings(); ArrayList dtObjects = lddFile.getDtObjects(); int numRows = fileStrings.size(); retValues = new Object[numRows][]; int numCols = colNames.length; // System.err.println("NumCols : " + numCols); /* * Prime the array of arrays of Objects, allocating a new * secondary array for each of the primary array's * elements. */ for (int nextStrNum = 0; nextStrNum < fileStrings.size(); ++ nextStrNum) { retValues[nextStrNum] = new Object[numCols]; // get the 'col' array //**** //* This needs to be sync'd with the colNames array. //**** // Current row, 1st column int column = 0; String fileString = (String)fileStrings.get(nextStrNum); retValues[nextStrNum][column++] = fileString; // Current row, 2nd column DateTime adt = (DateTime)dtObjects.get(nextStrNum); String adtStr = adt.toString(); retValues[nextStrNum][column++] = adtStr; // Current row, other columns. // Order here must match that specified in the colNames // array. long lVal = adt.getMillis(); java.util.Date jDate = new java.util.Date( lVal ); retValues[nextStrNum][column++] = new Integer( jDate.getSeconds() ); retValues[nextStrNum][column++] = new Integer( jDate.getMinutes() ); retValues[nextStrNum][column++] = new Integer( jDate.getHours() ); retValues[nextStrNum][column++] = new Integer( jDate.getDay() ); retValues[nextStrNum][column++] = new Integer( jDate.getDate() ); retValues[nextStrNum][column++] = new Integer( jDate.getMonth() ); retValues[nextStrNum][column++] = new Integer( jDate.getYear() ); // } // the for if ( debugf ) dumpObjs( retValues, System.err ); return retValues; } // end of genTBValues /* * genColNames is required by the base class. */ Object[] genColNames() { Object[] retVal = { "FileString", // 0 "toString()", // 1 "Seconds", // 2 "Minutes", // 3 "Hours", // 4 "Day Of Week", // 5 "Day Of Month", // 6 "Month", // 7 "Year" // 8 }; return retVal; } /* * getViewTitle */ String getViewTitle() { return "java.util.Date getXXX" + " : " + TimeZone.getDefault().getDisplayName() + " : " + " Record Count " + currFile.getLoadedFileSize(); } /* * setViewColumnLengths */ void setViewColumnsWidth(JTable jt) { /* * Resize column 0, 1 */ TableColumnModel colmodel = jt.getColumnModel(); TableColumn col0 = colmodel.getColumn(0); col0.setPreferredWidth(150); TableColumn col1 = colmodel.getColumn(1); col1.setPreferredWidth(150); return; } } // end of class DateTableView /* * CalTableView This class implements the operations for * the java.util.Date of the file. */ private class CalTableView extends TableView { // CalTableView(LoadedFile lddFile) { super(lddFile); setDefaultTableView( "cal" ); colNames = genColNames(); calcdValues = genCalcdValues(); } /* * genCalcdValues is required by the base class. */ Object[][] genCalcdValues() { Object[][] retValues = null; /* * Create an array of Objects that will contain * other arrays of Objects. (This is the 'column' * array). */ ArrayList fileStrings = lddFile.getFileStrings(); ArrayList dtObjects = lddFile.getDtObjects(); int numRows = fileStrings.size(); retValues = new Object[numRows][]; int numCols = colNames.length; // System.err.println("NumCols : " + numCols); /* * Prime the array of arrays of Objects, allocating a new * secondary array for each of the primary array's * elements. */ for (int nextStrNum = 0; nextStrNum < fileStrings.size(); ++ nextStrNum) { retValues[nextStrNum] = new Object[numCols]; // get the 'col' array //**** //* This needs to be sync'd with the colNames array. //**** // Current row, 1st column int column = 0; String fileString = (String)fileStrings.get(nextStrNum); retValues[nextStrNum][column++] = fileString; // Current row, 2nd column DateTime adt = (DateTime)dtObjects.get(nextStrNum); String adtStr = adt.toString(); retValues[nextStrNum][column++] = adtStr; // Current row, other columns. // Order here must match that specified in the colNames // array. long lVal = adt.getMillis(); GregorianCalendar cal = new GregorianCalendar(); cal.setTime( new Date( lVal ) ); cal.setMinimalDaysInFirstWeek(4); retValues[nextStrNum][column++] = new Integer( cal.get( Calendar.MILLISECOND ) ); retValues[nextStrNum][column++] = new Integer( cal.get( Calendar.SECOND ) ); retValues[nextStrNum][column++] = new Integer( cal.get( Calendar.MINUTE ) ); retValues[nextStrNum][column++] = new Integer( cal.get( Calendar.HOUR_OF_DAY ) ); retValues[nextStrNum][column++] = new Integer( cal.get( Calendar.DAY_OF_WEEK ) ); retValues[nextStrNum][column++] = new Integer( cal.get( Calendar.DAY_OF_MONTH ) ); retValues[nextStrNum][column++] = new Integer( cal.get( Calendar.DAY_OF_YEAR ) ); retValues[nextStrNum][column++] = new Integer( cal.get( Calendar.WEEK_OF_YEAR ) ); retValues[nextStrNum][column++] = new Integer( cal.get( Calendar.MONTH ) ); retValues[nextStrNum][column++] = new Integer( cal.get( Calendar.YEAR ) ); // } // the for if ( debugf ) dumpObjs( retValues, System.err ); return retValues; } // end of genTBValues /* * genColNames is required by the base class. */ Object[] genColNames() { Object[] retVal = { "FileString", // 0 "toString()", // 1 "Millis", // 2 "Sec", // 3 "Min", // 4 "HrOfDay", // 5 "DayOfWeek", // 6 "DayOfMon", // 7 "DayOfYr", // 8 "WkofYr", // 9 "MonOfYr", // 10 "Year" // 11 }; return retVal; } /* * getViewTitle */ String getViewTitle() { return "java.util.Calendar.get(int)" + " : " + TimeZone.getDefault().getDisplayName() + " : " + " Record Count " + currFile.getLoadedFileSize(); } /* * setViewColumnLengths */ void setViewColumnsWidth(JTable jt) { /* * Resize column 0, 1 */ TableColumnModel colmodel = jt.getColumnModel(); TableColumn col0 = colmodel.getColumn(0); col0.setPreferredWidth(175); TableColumn col1 = colmodel.getColumn(1); col1.setPreferredWidth(175); return; } } // end of class CalTableView /* * OpenAction */ private class OpenAction extends AbstractAction { /* * Constructor */ public OpenAction() { super("Open"); } // end of ctor /* * actionPerformed */ public void actionPerformed(ActionEvent e) { int result = chooser.showOpenDialog( DateTimeBrowser.this ); String canPath = null; if ( result == JFileChooser.APPROVE_OPTION ) { File chosenFile = chooser.getSelectedFile(); try { canPath = chosenFile.getCanonicalPath(); } catch(IOException ioe) { System.err.println( "I/O Error on file: " + chosenFile ); // Ignore it for now. } enableAllViews(); currFile = new LoadedFile( canPath ); TableView tView = getDefaultTableView(); resetDefaults( tView ); } // end of if a file actually chosen. } // end of actionPerformed } // end of class OpenAction /* * ExitAction */ private class ExitAction extends AbstractAction { /* * Constructor */ public ExitAction() { super("Exit"); } // end of ctor /* * actionPerformed */ public void actionPerformed(ActionEvent e) { DateTimeBrowser.this.setVisible( false ); DateTimeBrowser.this.dispose(); System.exit(0); } // end of actionPerformed } // end of class OpenAction /* * GetterAction */ private class GetterAction extends AbstractAction { /* * Constructor */ public GetterAction() { super("Getter"); } // end of ctor /* * actionPerformed */ public void actionPerformed(ActionEvent e) { TableView tView = new GetterTableView( currFile ); resetDefaults( tView ); enableAllViews(); jmiGetter.setEnabled( false ); } // end of actionPerformed } // end of class OpenAction /* * HexAction */ private class HexAction extends AbstractAction { /* * Constructor */ public HexAction() { super("Hex"); } // end of ctor /* * actionPerformed */ public void actionPerformed(ActionEvent e) { TableView tView = new HexTableView( currFile ); resetDefaults( tView ); enableAllViews(); jmiHex.setEnabled( false ); } // end of actionPerformed } // end of class OpenAction /* * DateAction */ private class DateAction extends AbstractAction { /* * Constructor */ public DateAction() { super("Date"); } // end of ctor /* * actionPerformed */ public void actionPerformed(ActionEvent e) { TableView tView = new DateTableView( currFile ); resetDefaults( tView ); enableAllViews(); jmiDate.setEnabled( false ); } // end of actionPerformed } // end of class DateAction /* * CalAction */ private class CalAction extends AbstractAction { /* * Constructor */ public CalAction() { super("Calendar"); } // end of ctor /* * actionPerformed */ public void actionPerformed(ActionEvent e) { TableView tView = new CalTableView( currFile ); resetDefaults( tView ); enableAllViews(); jmiCal.setEnabled( false ); } // end of actionPerformed } // end of class CalAction } // class DateTimeBrowser