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 | |
---|---|---|---|---|---|
#2 | 7374 | Sven Erik Knop | Rename/move file(s) - correct location for Eclipse project | ||
#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. |