Java tutorial
/* * 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()); } } }