@Override
public void setCounters(Mailbox mailbox, LabelMap newCounters)
{
Map<Integer, LabelCounters> existingCounters =
LabelCounterPersistence.getAll(mailbox.getId());
Mutator<String> m = createMutator(keyspace, strSe);
for (Label label : newCounters.values())
{
int labelId = label.getId();
LabelCounters diff = new LabelCounters(label.getCounters());
if (existingCounters.containsKey(labelId)) {
diff.add(existingCounters.get(labelId).getInverse());
}
logger.debug(
"Recalculated counters for label {}:\n\tCurrent: {}\n\tCalculated: {}\n\tDiff: {}",
new Object[] { labelId, existingCounters.get(labelId), label.getCounters(), diff });
LabelCounterPersistence.add(m, mailbox.getId(), labelId, diff);
}
for (int labelId : existingCounters.keySet())
{
if (!newCounters.containsId(labelId)) {
LabelCounterPersistence.subtract(
m, mailbox.getId(), labelId, existingCounters.get(labelId));
}
}
m.execute();
}