alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Java example source code file (DateTimeBrowser.java)

This example Java source code file (DateTimeBrowser.java) is included in the alvinalexander.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Learn more about this Java project at its project page.

Java - Java tags/keywords

abstractaction, arraylist, awt, caltableview, datetime, event, gettertableview, gui, integer, jmenuitem, loadedfile, lpad, object, openaction, string, swing, tablecolumn, tableview, text, util

The DateTimeBrowser.java Java example source code

/*
 *  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

Other Java examples (source code examples)

Here is a short list of links related to this Java DateTimeBrowser.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.