package freenet.client.async;
import java.util.HashMap;
import java.util.Set;
import freenet.keys.ClientKey;
import freenet.keys.ClientKeyBlock;
import freenet.keys.Key;
import freenet.keys.KeyBlock;
import freenet.keys.KeyVerifyException;
import freenet.support.Logger;
/**
* Simple BlockSet implementation, keeps all keys in RAM.
*
* @author toad
*/
public class SimpleBlockSet implements BlockSet {
private final HashMap<Key, KeyBlock> blocksByKey = new HashMap<Key, KeyBlock>();
@Override
public synchronized void add(KeyBlock block) {
blocksByKey.put(block.getKey(), block);
}
@Override
public synchronized KeyBlock get(Key key) {
return blocksByKey.get(key);
}
@Override
public synchronized Set<Key> keys() {
return blocksByKey.keySet();
}
@Override
public ClientKeyBlock get(ClientKey key) {
KeyBlock block = get(key.getNodeKey(false));
if(block == null) return null;
try {
return Key.createKeyBlock(key, block);
} catch (KeyVerifyException e) {
Logger.error(this, "Caught decoding block with "+key+" : "+e, e);
return null;
}
}
}