/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002-2006 * Sleepycat Software. All rights reserved. * * $Id: PrintFileReader.java,v 1.1 2006/05/06 09:00:04 ckaestne Exp $ */ package com.sleepycat.je.log; import java.io.IOException; import java.nio.ByteBuffer; import com.sleepycat.je.DatabaseException; import com.sleepycat.je.dbi.EnvironmentImpl; import com.sleepycat.je.log.entry.LogEntry; /** * The PrintFileReader prints out the target log entries. */ public class PrintFileReader extends DumpFileReader { /** * Create this reader to start at a given LSN. */ public PrintFileReader(EnvironmentImpl env, int readBufferSize, long startLsn, long finishLsn, String entryTypes, String txnIds, boolean verbose) throws IOException, DatabaseException { super(env, readBufferSize, startLsn, finishLsn, entryTypes, txnIds, verbose); } /** * This reader prints the log entry item. */ protected boolean processEntry(ByteBuffer entryBuffer) throws DatabaseException { /* Figure out what kind of log entry this is */ LogEntryType lastEntryType = LogEntryType.findType(currentEntryTypeNum, currentEntryTypeVersion); /* Print out a common header for each log item */ StringBuffer sb = new StringBuffer(); sb.append("<entry lsn=\"0x").append (Long.toHexString(readBufferFileNum)); sb.append("/0x").append (Long.toHexString(currentEntryOffset)); sb.append("\" type=\"").append(lastEntryType); if (LogEntryType.isProvisional(currentEntryTypeVersion)) { sb.append("\" isProvisional=\"true"); } sb.append("\" prev=\"0x"); sb.append(Long.toHexString(currentEntryPrevOffset)); if (verbose) { sb.append("\" size=\"").append(currentEntrySize); sb.append("\" cksum=\"").append(currentEntryChecksum); } sb.append("\">"); /* Read the entry and dump it into a string buffer. */ LogEntry entry = lastEntryType.getSharedLogEntry(); entry.readEntry(entryBuffer, currentEntrySize, currentEntryTypeVersion, true); boolean dumpIt = true; if (targetTxnIds.size() > 0) { if (entry.isTransactional()) { if (!targetTxnIds.contains (new Long(entry.getTransactionId()))) { /* Not in the list of txn ids. */ dumpIt = false; } } else { /* If -tx spec'd and not a transactional entry, don't dump. */ dumpIt = false; } } if (dumpIt) { entry.dumpEntry(sb, verbose); sb.append("</entry>"); System.out.println(sb.toString()); } return true; } }