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;
import de.ovgu.cide.jakutil.*;
/**
* 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 {
LogEntryType lastEntryType=LogEntryType.findType(currentEntryTypeNum,currentEntryTypeVersion);
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("\">");
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()))) {
dumpIt=false;
}
}
else {
dumpIt=false;
}
}
if (dumpIt) {
entry.dumpEntry(sb,verbose);
sb.append("</entry>");
System.out.println(sb.toString());
}
return true;
}
}