package com.activequant.archive.hbase;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.activequant.domainmodel.TimeFrame;
import com.activequant.interfaces.archive.IArchiveFactory;
import com.activequant.interfaces.archive.IArchiveReader;
import com.activequant.interfaces.archive.IArchiveWriter;
/**
* Instantiates readers and writers for different time frames. Stores them
* internally in a hashmap. Access to the getReader and getWriter methods is
* synchronized.
*
* @author ustaudinger
*
*/
public class HBaseArchiveFactory implements IArchiveFactory {
private final Map<TimeFrame, IArchiveReader> readers = new HashMap<TimeFrame, IArchiveReader>();
private final Map<TimeFrame, IArchiveWriter> writers = new HashMap<TimeFrame, IArchiveWriter>();
private final String zookeeperHost;
private final int zookeeperPort;
private boolean reuseFlag = true;
public HBaseArchiveFactory(final String zookeeperHost) {
this.zookeeperHost = zookeeperHost;
this.zookeeperPort = 2181;
}
public HBaseArchiveFactory(final String zookeeperHost,
final int zookeeperPort) {
this.zookeeperHost = zookeeperHost;
this.zookeeperPort = zookeeperPort;
}
public void setReuseReaders(boolean reuseFlag) {
this.reuseFlag = reuseFlag;
}
public synchronized IArchiveReader getReader(TimeFrame tf) {
if (readers.get(tf) == null)
try {
IArchiveReader reader = new HBaseArchiveReader(zookeeperHost,
zookeeperPort, tf);
if (reuseFlag)
readers.put(tf, reader);
else
return reader;
} catch (IOException e) {
e.printStackTrace();
}
return readers.get(tf);
}
public synchronized IArchiveWriter getWriter(TimeFrame tf) {
if (writers.get(tf) == null)
try {
IArchiveWriter writer = new HBaseArchiveWriter(zookeeperHost,
zookeeperPort, tf);
if (reuseFlag)
writers.put(tf, writer);
else
return writer;
} catch (IOException e) {
e.printStackTrace();
}
return writers.get(tf);
}
}