package com.subgraph.orchid.directory;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.subgraph.orchid.DirectoryStore;
import com.subgraph.orchid.Document;
import com.subgraph.orchid.TorConfig;
public class DirectoryStoreImpl implements DirectoryStore {
private final TorConfig config;
private Map<CacheFile, DirectoryStoreFile> fileMap;
DirectoryStoreImpl(TorConfig config) {
this.config = config;
this.fileMap = new HashMap<CacheFile, DirectoryStoreFile>();
}
public synchronized ByteBuffer loadCacheFile(CacheFile cacheFile) {
return getStoreFile(cacheFile).loadContents();
}
public synchronized void writeData(CacheFile cacheFile, ByteBuffer data) {
getStoreFile(cacheFile).writeData(data);
}
public synchronized void writeDocument(CacheFile cacheFile, Document document) {
writeDocumentList(cacheFile, Arrays.asList(document));
}
public synchronized void writeDocumentList(CacheFile cacheFile, List<? extends Document> documents) {
getStoreFile(cacheFile).writeDocuments(documents);
}
public synchronized void appendDocumentList(CacheFile cacheFile, List<? extends Document> documents) {
getStoreFile(cacheFile).appendDocuments(documents);
}
public synchronized void removeCacheFile(CacheFile cacheFile) {
getStoreFile(cacheFile).remove();
}
public synchronized void removeAllCacheFiles() {
for(CacheFile cf: CacheFile.values()) {
getStoreFile(cf).remove();
}
}
private DirectoryStoreFile getStoreFile(CacheFile cacheFile) {
if(!fileMap.containsKey(cacheFile)) {
fileMap.put(cacheFile, new DirectoryStoreFile(config, cacheFile.getFilename()));
}
return fileMap.get(cacheFile);
}
}