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