package journal.reader; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.text.ParseException; import journal.action.PrintAction; public class JournalParser { private Tokenizer tokenizer; private Reader reader; public JournalParser(Reader reader) { this.reader = reader; this.tokenizer = new Tokenizer(this.reader); } public JournalEntry parseNext() throws ParseException, IOException { Token startToken = tokenizer.nextToken(); if (startToken == null) return null; if (startToken.getType() == Token.Type.START_TOKEN) { if (ActionType.TransactionAction.contains(startToken.getAction()) ) { Token pidToken = tokenizer.nextToken(); Token timestampToken = tokenizer.nextToken(); return new TransactionJournalEntry(startToken, pidToken, timestampToken); } else { Token versionToken = tokenizer.nextToken(); if (versionToken.getType() == Token.Type.INTEGER_TOKEN) { Token tableToken = tokenizer.nextToken(); if (tableToken.getType() == Token.Type.STRING_TOKEN) { DataJournalEntry journalEntry = new DataJournalEntry(startToken, versionToken, tableToken); Token token = tokenizer.nextToken(); while (token != null && token.getType() != Token.Type.START_TOKEN) { try { journalEntry.addArgument(token); } catch (RuntimeException e) { e.printStackTrace(); System.out.println("Token is " + token); throw new ParseException("Trouble : " + token, token.getLine()); } token = tokenizer.nextToken(); } if (token != null) tokenizer.pushToken(token); // need to return start token for next entry return journalEntry; } else { throw new ParseException("Illegal tableToken : " + tableToken, tableToken.getLine()); } } else { throw new ParseException("Illegal versionToken : " + versionToken, versionToken.getLine()); } } } else { throw new ParseException("Illegal StartToken : " + startToken, startToken.getLine()); } } public static void main(String[] args) { if (args.length < 1) { System.err.println("Usage : JournalParser journalFileName"); System.exit(1); } String fileName = args[0]; PrintAction action = new PrintAction(); while (true) { try { Reader fileReader = new FileReader(fileName); JournalParser parser = new JournalParser(fileReader); JournalEntry entry = parser.parseNext(); while (entry != null) { entry.invokeAction(action); entry = parser.parseNext(); } break; } catch (Exception e) { e.printStackTrace(); break; } } } }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#3 | 7529 | Sven Erik Knop |
Deleted the whole JournalReader. It has actually moved to //guest/sven_erik_knop/java/JournalReader/. |
||
#2 | 7375 | Sven Erik Knop |
Major update of the JournalReader. Complete rewrite of the command line parsing Change in the options parsing within the journal reader New SQLLoader action. Currently only against MySQL (needs MySQL JDBC driver) with fixed database and user name. This will be replaced by a config file at some stage. |
||
#1 | 7374 | Sven Erik Knop | Rename/move file(s) - correct location for Eclipse project | ||
//guest/sven_erik_knop/JournalReader/journal/reader/JournalParser.java | |||||
#1 | 6467 | Sven Erik Knop |
Added JournalReader, a Java library of useful tools to read and process checkpoints and journals. Added are a readme.txt to explain some details, and a jar file that contains the compiled class files. The programs will need Java 1.6 to run. |