final String mailbox, final List<HCounterColumn<Composite>> columnList)
{
Map<Integer, LabelCounters> result =
new HashMap<Integer, LabelCounters>(LabelConstants.MAX_RESERVED_LABEL_ID);
LabelCounters labelCounters = new LabelCounters();
int prevLabelId = 0; // remember previous labelid which is always start form 0
for (HCounterColumn<Composite> c : columnList)
{
int labelId = Integer.parseInt(c.getName().get(1, strSe));
char subtype = c.getName().get(2, strSe).charAt(0);
// since columns are ordered by labels, we can
// flush label counters to result map as we traverse
if (prevLabelId != labelId) {
logger.debug("Fetched counters for label {} with {}", prevLabelId, labelCounters);
result.put(prevLabelId, labelCounters);
labelCounters = new LabelCounters();
prevLabelId = labelId;
}
switch (subtype) {
case CN_SUBTYPE_BYTES:
labelCounters.setTotalBytes(c.getValue());
break;
case CN_SUBTYPE_MESSAGES:
labelCounters.setTotalMessages(c.getValue());
break;
case CN_SUBTYPE_UNREAD:
labelCounters.setUnreadMessages(c.getValue());
break;
}
if (c.getValue() < 0) {
logger.warn("Negative counter value found for label {}/{}: ", mailbox, labelId);