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); } } } } }