package jelectrum.db.mongo;
import java.util.Map;
import java.util.TreeMap;
import java.util.Set;
import java.util.HashSet;
import java.util.Collection;
import java.util.LinkedList;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ByteArrayOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.text.DecimalFormat;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;
import com.mongodb.WriteConcern;
import com.mongodb.BasicDBObject;
import org.bitcoinj.core.Sha256Hash;
import jelectrum.db.DBMapSet;
import jelectrum.db.DBTooManyResultsException;
public class MongoMapSet extends DBMapSet
{
private DBCollection collection;
public static final String KEY="key";
public MongoMapSet(DBCollection collection)
{
this.collection = collection;
//collection.ensureIndex(new BasicDBObject(KEY,1), new BasicDBObject());
collection.createIndex(new BasicDBObject(KEY,1));
/*Map<String, Object> m = new TreeMap<String, Object>();
m.put(KEY,1);
m.put("data",1);
collection.ensureIndex(new BasicDBObject(m), new BasicDBObject("unique",true));*/
}
public void clear()
{
collection.drop();
}
public Set<Sha256Hash> getSet(String key, int max_results)
{
Set<Sha256Hash> ret = new HashSet<Sha256Hash>();
DBCursor c = collection.find(new BasicDBObject(KEY, key));
int count =0;
while(c.hasNext())
{
ret.add(new Sha256Hash( MongoEntry.getValueString(c.next())));
count++;
if (count > max_results) throw new DBTooManyResultsException();
}
return ret;
}
public void add(String key, Sha256Hash value)
{
collection.save(new MongoEntry(key, value.toString(), KEY), WriteConcern.ACKNOWLEDGED);
}
public void addAll(Collection<Map.Entry<String, Sha256Hash> > in_lst)
{
LinkedList<MongoEntry> lst = new LinkedList<MongoEntry>();
for(Map.Entry<String, Sha256Hash> me : in_lst)
{
lst.add(new MongoEntry(me.getKey(), me.getValue().toString(), KEY));
}
if (lst.size() > 0)
{
try
{
collection.insert(lst, WriteConcern.ACKNOWLEDGED);
}
catch(com.mongodb.DuplicateKeyException e)
{
for(MongoEntry entry : lst)
{
collection.save(entry, WriteConcern.ACKNOWLEDGED);
}
}
}
}
}