isi.pasco2.Main.java Source code

Java tutorial

Introduction

Here is the source code for isi.pasco2.Main.java

Source

/*
 * Copyright 2006 Bradley Schatz. All rights reserved.
 *
 * This file is part of pasco2, the next generation Internet Explorer cache
 * and history record parser.
 *
 * pasco2 is free software; you can redistribute it and/or modify
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2 of the License, or (at your
 * option) any later version.
 *
 * pasco2 is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with pasco2; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 * USA
 */

package isi.pasco2;

import isi.pasco2.handler.CountingCacheHandler;
import isi.pasco2.handler.Pasco2HistoryHandler;
import isi.pasco2.io.FastReadIndexFile;
import isi.pasco2.io.IndexFile;
import isi.pasco2.parser.IECacheFileParser;
import isi.pasco2.parser.IEHistoryFileParser;
import isi.pasco2.parser.IEIndexFileParser;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.TimeZone;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;

/**
 * Main command line parser for pasco2
 * 
 * @author Bradley Schatz
 *
 */
public class Main {
    public static void main(String[] args) {
        CommandLineParser parser = new PosixParser();

        Options options = new Options();
        Option undelete = new Option("d", "Undelete activity records");
        options.addOption(undelete);
        Option disableAllocation = new Option("M", "Disable allocation detection");
        options.addOption(disableAllocation);
        Option fieldDelimeter = OptionBuilder.withArgName("field-delimeter").hasArg()
                .withDescription("Field Delimeter (TAB by default)").create("t");
        options.addOption(fieldDelimeter);

        Option timeFormat = OptionBuilder.withArgName("time-format").hasArg()
                .withDescription("xsd or standard (pasco1 compatible)").create("f");
        options.addOption(timeFormat);

        Option fileTypeOption = OptionBuilder.withArgName("file-type").hasArg()
                .withDescription("The type of file: cache or history").create("T");

        options.addOption(fileTypeOption);

        try {
            CommandLine line = parser.parse(options, args);
            boolean undeleteMethod = false;
            String delimeter = null;
            String format = null;
            String fileType = null;
            boolean disableAllocationTest = false;

            if (line.hasOption("d")) {
                undeleteMethod = true;
            }

            if (line.hasOption('t')) {
                delimeter = line.getOptionValue('t');
            }

            if (line.hasOption('M')) {
                disableAllocationTest = true;
            }

            if (line.hasOption('T')) {
                fileType = line.getOptionValue('T');
            }

            if (line.hasOption('f')) {
                format = line.getOptionValue('f');
            }

            if (line.getArgs().length != 1) {
                System.err.println("No file specified.");
                HelpFormatter formatter = new HelpFormatter();
                formatter.printHelp("pasco2", options);
                System.exit(1);
            }
            String fileName = line.getArgs()[0];

            try {
                IndexFile fr = new FastReadIndexFile(fileName, "r");

                CountingCacheHandler handler = null;

                if (fileType == null) {
                    handler = new CountingCacheHandler();
                }
                if (fileType == null) {
                    handler = new CountingCacheHandler();
                } else if (fileType.equals("cache")) {
                    handler = new CountingCacheHandler();
                } else if (fileType.equals("history")) {
                    handler = new Pasco2HistoryHandler();
                }

                if (format != null) {
                    if (format.equals("pasco")) {
                        DateFormat regularDateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss.SSS");
                        handler.setDateFormat(regularDateFormat);
                        TimeZone tz = TimeZone.getTimeZone("Australia/Brisbane");
                        regularDateFormat.setTimeZone(tz);

                    } else if (format.equals("standard")) {
                        DateFormat xsdDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
                        handler.setDateFormat(xsdDateFormat);
                        xsdDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
                    } else {
                        System.err.println("Format not supported.");
                        HelpFormatter formatter = new HelpFormatter();
                        formatter.printHelp("pasco2", options);
                        System.exit(1);
                    }
                }

                if (delimeter != null) {
                    handler.setDelimeter(delimeter);
                }

                IEIndexFileParser logparser = null;
                if (fileType == null) {
                    System.err.println("Using cache file parser.");
                    logparser = new IECacheFileParser(fileName, fr, handler);
                } else if (fileType.equals("cache")) {
                    logparser = new IECacheFileParser(fileName, fr, handler);
                } else if (fileType.equals("history")) {
                    logparser = new IEHistoryFileParser(fileName, fr, handler);
                } else {
                    System.err.println("Unsupported file type.");
                    HelpFormatter formatter = new HelpFormatter();
                    formatter.printHelp("pasco2", options);
                    System.exit(1);
                }
                if (disableAllocationTest) {
                    logparser.setDisableAllocationTest(true);
                }
                logparser.parseFile();

            } catch (Exception ex) {
                System.err.println(ex.getMessage());
                ex.printStackTrace();
            }

        } catch (ParseException exp) {
            System.out.println("Unexpected exception:" + exp.getMessage());
        }
    }
}