/*
* Copyright 2011 Future Systems
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.krakenapps.logstorage.file;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Date;
public abstract class LogFileReader {
public static LogFileReader getLogFileReader(File indexPath, File dataPath) throws InvalidLogFileHeaderException, IOException {
LogFileReader reader = null;
RandomAccessFile indexHeaderReader = null;
RandomAccessFile dataHeaderReader = null;
try {
indexHeaderReader = new RandomAccessFile(indexPath, "r");
dataHeaderReader = new RandomAccessFile(dataPath, "r");
LogFileHeader indexHeader = LogFileHeader.extractHeader(indexHeaderReader, indexPath);
LogFileHeader dataHeader = LogFileHeader.extractHeader(dataHeaderReader, dataPath);
if (indexHeader.version() != dataHeader.version())
throw new InvalidLogFileHeaderException("different log version index and data file");
if (indexHeader.version() == 1)
reader = new LogFileReaderV1(indexPath, dataPath);
else if (indexHeader.version() == 2)
reader = new LogFileReaderV2(indexPath, dataPath);
else
throw new InvalidLogFileHeaderException("unsupported log version");
} finally {
if (indexHeaderReader != null)
indexHeaderReader.close();
if (dataHeaderReader != null)
dataHeaderReader.close();
}
return reader;
}
public abstract LogRecord find(long id) throws IOException;
public abstract void traverse(long limit, LogRecordCallback callback) throws IOException, InterruptedException;
public abstract void traverse(long offset, long limit, LogRecordCallback callback) throws IOException, InterruptedException;
public abstract void traverse(Date from, Date to, long limit, LogRecordCallback callback) throws IOException,
InterruptedException;
public abstract void traverse(Date from, Date to, long offset, long limit, LogRecordCallback callback) throws IOException,
InterruptedException;
public abstract void close() throws IOException;
}