labels.get(labelId).setName(labelName); } else { Label label = new Label(labelId, labelName); labels.put(label); labels.get(labelId).addAttribute(attrName, attrValue); } else { Label label = new Label(labelId); label.addAttribute(attrName, attrValue); labels.put(label); Label label = new Label(l.getId(), l.getName()); labels.put(label);
metadata.get(labelId).put(JSON_NAME, label.getName()); if (label.getCounters() != null) Math.max(0, label.getCounters().getTotalMessages())); metadata.get(labelId).put(JSON_MESSAGES_UNREAD, Math.max(0, label.getCounters().getUnreadMessages())); if (labelId == ReservedLabels.ALL_MAILS.getId()) Math.max(0, label.getCounters().getTotalBytes())); if (labelId == ReservedLabels.ALL_MAILS.getId()) { metadata.get(labelId).put(JSON_SIZE, 0); if (label.getAttributes() != null && !label.getAttributes().isEmpty()) metadata.get(labelId).put(JSON_ATTRIBUTES, label.getAttributes());
String labelKey = getLabelNameKey(label.getId()); Map<String, String> attributes = new HashMap<String, String>(1); if (label.getName() != null) attributes.put(labelKey, label.getName()); if (label.getAttributes() != null) for (Entry<String, String> labelAttr : label.getAttributes().entrySet()) String labelAttrKey = getLabelAttributeKey(label.getId(), labelAttr.getKey());
public Label put(Label label) { return labels.put(label.getId(), label); }
@Override public int add(Mailbox mailbox, Label label) { // get all existing labels LabelMap existingLabels = AccountPersistence.getLabels(mailbox.getId()); LabelUtils.validateLabelName(label.getName(), existingLabels); try { // generate new label id int labelId = LabelUtils.getNewLabelId(existingLabels.getIds()); label.setId(labelId); } catch (IllegalLabelException ile) { // log and rethrow logger.warn("{} reached max random label id attempts with {} labels", mailbox, existingLabels.size()); throw ile; } // begin batch operation Mutator<String> mutator = createMutator(keyspace, strSe); // add new label AccountPersistence.putLabel(mutator, mailbox.getId(), label); // commit batch operation mutator.execute(); return label.getId(); }
/** * Get aggregated {@link LabelCounter} stats for each label in the list of * messages. Results aggregated by label ID. * * @return */ public LabelMap aggregateCountersByLabel() { LabelMap labels = new LabelMap(); // get all labels of all messages, including label "all" for (UUID messageId : this.messages.keySet()) { Set<Integer> messageLabels = this.messages.get(messageId).getLabels(); for (int labelId : messageLabels) { if (!labels.containsId(labelId)) { Label label = new Label(labelId). setCounters(this.messages.get(messageId).getLabelCounters()); labels.put(label); } else { labels.get(labelId).getCounters().add( this.messages.get(messageId).getLabelCounters()); } } } return labels; }
@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(); }
Label label = new Label(labelId).setCounters(message.getLabelCounters()); labels.put(label); } else { labels.get(labelId).incrementCounters(message.getLabelCounters());
/** * Check if label with given name exists. Case insensitive. * * @param labelName * @return */ public boolean containsName(String labelName) { for (Label label : labels.values()) { if (label.getName().equalsIgnoreCase(labelName)) { return true; } } return false; }
LabelCounterPersistence.subtract(mutator, mailbox.getId(), labelId, labels.get(labelId).getCounters());
@Override public Message filter(Message message) { if (message.getMinorHeader(MimeParser.MIME_HEADER_SPAM) != null && message.getMinorHeader(MimeParser.MIME_HEADER_SPAM).equalsIgnoreCase(MIME_HEADER_SPAM_VALUE)) { logger.debug("Applying filter for SPAM"); message.addLabel(ReservedLabels.SPAM.getId()); } return message; } }
@Override public void update(Mailbox mailbox, Label label) throws IOException { // get all existing labels LabelMap existingLabels = AccountPersistence.getLabels(mailbox.getId()); // validate only if name is changed (skips letter case changes) if (label.getName() != null && !existingLabels.containsName(label.getName())) { LabelUtils.validateLabelName(label.getName(), existingLabels); } // check if label id reserved if (ReservedLabels.contains(label.getId())) { throw new ExistingLabelException("This is reserved label and can't be modified"); } // check if label id exists if (!existingLabels.containsId(label.getId())) { throw new IllegalLabelException("Label does not exist"); } // begin batch operation Mutator<String> mutator = createMutator(keyspace, strSe); // set new name AccountPersistence.putLabel(mutator, mailbox.getId(), label); // commit batch operation mutator.execute(); }
if (labelName.startsWith(l.getName() + LabelConstants.NESTED_LABEL_SEPARATOR.toString())) throw new IllegalLabelException("Netsted labels are not allowed under reserved labels");
message.addLabel(ReservedLabels.NOTIFICATIONS.getId());
@Override public Message filter(Message message) { // by default store in Inbox if(message.getLabels().isEmpty()) { message.addLabel(ReservedLabels.INBOX.getId()); // add to POP3 if enabled if (Configurator.isLmtpPop3Enabled()) { logger.debug("Adding message received via LMTP to POP3"); message.addLabel(ReservedLabels.POP3.getId()); } } return message; } }
/** * Initialise a list of messages visible for the current session * * @return List of messages */ private List<MessageMetaData> getPOP3MessageList() { // get list of messages Map<UUID, Message> messages = dao.getMessageIdsWithMetadata( mailbox, ReservedLabels.POP3.getId(), null, MAX_POP3_SESSION_MESSAGES, true, false); // convert to James Protocols list List<MessageMetaData> list = new ArrayList<MessageMetaData>(messages.size()); for (Map.Entry<UUID, Message> entry : messages.entrySet()) { MessageMetaData md = new MessageMetaData( Base64UUIDUtils.encode(entry.getKey()), entry.getValue().getSize()); list.add(md); } return list; }
@Override public void remove(String... uids) throws IOException { logger.debug("POP3: Removing messages {} from {}", uids, mailbox); Set<Integer> labels = new HashSet<Integer>(1); labels.add(ReservedLabels.POP3.getId()); List<UUID> uuids = new ArrayList<UUID>(uids.length); for (String uid : uids) { uuids.add(Base64UUIDUtils.decode(uid)); } dao.modify(mailbox, uuids, new MessageModification.Builder().removeLabels(labels).build()); }