public static void add(Mutator<String> mutator, final String mailbox, final Integer labelId, final LabelCounters labelCounters) { Set<Integer> labelIds = new HashSet<Integer>(1); labelIds.add(labelId); add(mutator, mailbox, labelIds, labelCounters); }
public static void subtract(Mutator<String> mutator, final String mailbox, final Set<Integer> labelIds, final LabelCounters labelCounters) { // perform addition of inverse (i.e. subtraction) add(mutator, mailbox, labelIds, labelCounters.getInverse()); }
@Override public void setCounters(Mailbox mailbox, LabelMap newCounters) { Map<Integer, LabelCounters> existingCounters = LabelCounterPersistence.getAll(mailbox.getId()); // begin batch operation Mutator<String> m = createMutator(keyspace, strSe); // update with the new counter values 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); } // reset non-existing counters for (int labelId : existingCounters.keySet()) { if (!newCounters.containsId(labelId)) { LabelCounterPersistence.subtract( m, mailbox.getId(), labelId, existingCounters.get(labelId)); } } m.execute(); }
LabelCounterPersistence.add(m, mailbox.getId(), message.getLabels(), message.getLabelCounters());