package database;
import java.util.HashMap;
import java.util.Map;
import org.mapdb.DB;
import qora.voting.Poll;
import utils.ObserverMessage;
import database.DBSet;
import database.serializer.PollSerializer;
public class PollMap extends DBMap<String, Poll>
{
private Map<Integer, Integer> observableData = new HashMap<Integer, Integer>();
public PollMap(DBSet databaseSet, DB database)
{
super(databaseSet, database);
this.observableData.put(DBMap.NOTIFY_ADD, ObserverMessage.ADD_POLL_TYPE);
this.observableData.put(DBMap.NOTIFY_REMOVE, ObserverMessage.REMOVE_POLL_TYPE);
this.observableData.put(DBMap.NOTIFY_LIST, ObserverMessage.LIST_POLL_TYPE);
}
public PollMap(PollMap parent)
{
super(parent);
}
protected void createIndexes(DB database)
{
//VOTES INDEX
/*final NavigableSet<Tuple2<BigDecimal, String>> namesIndex = database.createTreeSet("polls_index_votes")
.comparator(Fun.COMPARATOR)
.makeOrGet();
final NavigableSet<Tuple2<BigDecimal, String>> descendingNamesIndex = database.createTreeSet("polls_index_votes_descending")
.comparator(new ReverseComparator(Fun.COMPARATOR))
.makeOrGet();
createIndex(VOTES_INDEX, namesIndex, descendingNamesIndex, new Fun.Function2<BigDecimal, String, Poll>() {
@Override
public BigDecimal run(String key, Poll value) {
return value.getTotalVotes();
}
});
//REMOVE PREVIOUS VOTES INDEX ON UPDATE
((BTreeMap) this.map).modificationListenerAdd(new Bind.MapListener<String, Poll>() {
@Override
public void update(String key, Poll oldPoll, Poll newPoll) {
//CHECK IF UPDATE
if(oldPoll != null && newPoll != null)
{
//REMOVE PREVIOUS INDEX
boolean result1 = namesIndex.remove(new Tuple2<BigDecimal, String>(oldPoll.getTotalVotes(), key));
boolean result2 = descendingNamesIndex.remove(new Tuple2<BigDecimal, String>(oldPoll.getTotalVotes(), key));
}
}
});*/
}
@Override
protected Map<String, Poll> getMap(DB database)
{
//OPEN MAP
return database.createTreeMap("polls")
.valueSerializer(new PollSerializer())
.counterEnable()
.makeOrGet();
}
@Override
protected Map<String, Poll> getMemoryMap()
{
return new HashMap<String, Poll>();
}
@Override
protected Poll getDefaultValue()
{
return null;
}
@Override
protected Map<Integer, Integer> getObservableData()
{
return this.observableData;
}
public boolean contains(Poll poll) {
return this.contains(poll.getName());
}
public void add(Poll poll) {
this.set(poll.getName(), poll);
}
public void delete(Poll poll) {
this.delete(poll.getName());
}
}