Package com.elasticinbox.core.model

Examples of com.elasticinbox.core.model.LabelCounters


    {
      if (labels.containsId(labelId) && counters.containsKey(labelId)) {
        labels.get(labelId).setCounters(counters.get(labelId));
      } else if (labels.containsId(labelId) && !counters.containsKey(labelId)) {
        // assume zeros for all counters if not yet initialised
        labels.get(labelId).setCounters(new LabelCounters());
      } else if (!labels.containsId(labelId) && counters.containsKey(labelId)) {
        logger.warn("Found counters for label {}/{}, but label does not exist.", mailbox.getId(), labelId);
      }
    }
View Full Code Here


    // 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 });
View Full Code Here

  {
    URI uri = null;
    logger.debug("Storing message: key={}", messageId.toString());

    // Check quota
    LabelCounters mailboxCounters = LabelCounterPersistence.get(
        mailbox.getId(), ReservedLabels.ALL_MAILS.getId());

    long requiredBytes = mailboxCounters.getTotalBytes() + message.getSize();
    long requiredCount = mailboxCounters.getTotalMessages() + 1;

    if ((requiredBytes > Configurator.getDefaultQuotaBytes()) ||
      (requiredCount > Configurator.getDefaultQuotaCount()))
    {
      logger.info("Mailbox is over quota: {} size={}/{}, count={}/{}",
View Full Code Here

        MessagePersistence.persistAttributes(mutator, mailbox.getId(), messageIds, markersToAddAsAttributes);

        // decrement unread message counter only if message does not have SEEN marker
        if (mod.getMarkersToAdd().contains(Marker.SEEN) && !message.getMarkers().contains(Marker.SEEN))
        {
          LabelCounters labelCounters = new LabelCounters();
          labelCounters.setUnreadMessages(1L);
          LabelCounterPersistence.subtract(mutator, mailbox.getId(), message.getLabels(), labelCounters);
        }
      }
     
      // remove markers
      if (!mod.getMarkersToRemove().isEmpty())
      {
        // remove markers from messages
        MessagePersistence.deleteAttributes(mutator, mailbox.getId(), messageIds, markersToRemoveAsAttributes);

        // increment unread message counter only if message has SEEN marker
        if (mod.getMarkersToRemove().contains(Marker.SEEN) && message.getMarkers().contains(Marker.SEEN))
        {
          LabelCounters labelCounters = new LabelCounters();
          labelCounters.setUnreadMessages(1L);
          LabelCounterPersistence.add(mutator, mailbox.getId(), message.getLabels(), labelCounters);
        }
      }

      mutator.executeIfFull();
View Full Code Here

    // Step 1: add message to label TRASH
    UUID messageId = addMessage(EMAIL_REGULAR, ReservedLabels.TRASH.getId());

    // counters before operation
    String jsonResponse = expect().statusCode(200).when().get(REST_PATH + "/mailbox?metadata=true").asString();
    LabelCounters initialAllCounters = getCounters(jsonResponse, ReservedLabels.ALL_MAILS.getId());
    LabelCounters initialTrashCounters = getCounters(jsonResponse, ReservedLabels.TRASH.getId());

    // Repeat add label TRASH
    for (int i=0; i<5; i++)
    {
      given().
        pathParam("messageId", messageId.toString()).
        pathParam("labelId", ReservedLabels.TRASH.getId()).
      expect().
        statusCode(204).
      when().
        put(REST_PATH + "/mailbox/message/{messageId}?addlabel={labelId}");
    }

    // counters after operation
    jsonResponse = expect().statusCode(200).when().get(REST_PATH + "/mailbox?metadata=true").asString();
    LabelCounters finalAllCounters = getCounters(jsonResponse, ReservedLabels.ALL_MAILS.getId());
    LabelCounters finalTrashCounters = getCounters(jsonResponse, ReservedLabels.TRASH.getId());
   
    assertThat(finalAllCounters, equalTo(initialAllCounters));
    assertThat(finalTrashCounters, equalTo(initialTrashCounters));
   
    // STEP 2: remove label and add marker
View Full Code Here

  @Test
  public void countersTest() throws IOException
  {
    initAccount();

    LabelCounters allCounters = new LabelCounters();
    LabelCounters inboxCounters = new LabelCounters();
    LabelCounters spamCounters = new LabelCounters();

    // check label counter before message added
    String jsonResponse = expect().statusCode(200).when().get(REST_PATH + "/mailbox?metadata=true").asString();
    allCounters = getCounters(jsonResponse, ReservedLabels.ALL_MAILS.getId());
    inboxCounters = getCounters(jsonResponse, ReservedLabels.INBOX.getId());
    spamCounters = getCounters(jsonResponse, ReservedLabels.SPAM.getId());

    // add message A
    long fileSizeA = getResourceSize(EMAIL_REGULAR);
    UUID messageIdA = addMessage(EMAIL_REGULAR, ReservedLabels.INBOX.getId());

    // check label counters
    jsonResponse =
      expect().
        statusCode(200).and().
        body("'" + ReservedLabels.ALL_MAILS.getId() + "'.size",
            equalTo((int) (allCounters.getTotalBytes().longValue() + fileSizeA))).
        body("'" + ReservedLabels.ALL_MAILS.getId() + "'.total",
            equalTo((int) (allCounters.getTotalMessages().longValue() + 1))).
        body("'" + ReservedLabels.ALL_MAILS.getId() + "'.unread",
            equalTo((int) (allCounters.getUnreadMessages().longValue() + 1))).
        body("'" + ReservedLabels.INBOX.getId() + "'.total",
            equalTo((int) (inboxCounters.getTotalMessages().longValue() + 1))).
        body("'" + ReservedLabels.INBOX.getId() + "'.unread",
            equalTo((int) (inboxCounters.getUnreadMessages().longValue() + 1))).
      when().
        get(REST_PATH + "/mailbox?metadata=true").asString();

    // add label SPAM to message A
    given().
      pathParam("messageId", messageIdA.toString()).
      pathParam("labelId", ReservedLabels.SPAM.getId()).
    expect().
      statusCode(204).
    when().
      put(REST_PATH + "/mailbox/message/{messageId}?addlabel={labelId}");

    // check label counters
    jsonResponse =
      expect().
        statusCode(200).and().
        body("'" + ReservedLabels.SPAM.getId() + "'.total",
            equalTo((int) (spamCounters.getTotalMessages().longValue() + 1))).
        body("'" + ReservedLabels.SPAM.getId() + "'.unread",
            equalTo((int) (spamCounters.getUnreadMessages().longValue() + 1))).
      when().
        get(REST_PATH + "/mailbox?metadata=true").asString();

    // update counters
    allCounters = getCounters(jsonResponse, ReservedLabels.ALL_MAILS.getId());
    inboxCounters = getCounters(jsonResponse, ReservedLabels.INBOX.getId());
    spamCounters = getCounters(jsonResponse, ReservedLabels.SPAM.getId());

    // mark message as read
    given().
      pathParam("messageId", messageIdA.toString()).
      pathParam("marker", Marker.SEEN.toString().toLowerCase()).
    expect().
      statusCode(204).
    when().
      put(REST_PATH + "/mailbox/message/{messageId}?addmarker={marker}");

    // check label counters
    jsonResponse =
      expect().
        statusCode(200).and().
        body("'" + ReservedLabels.ALL_MAILS.getId() + "'.unread",
            equalTo((int) (allCounters.getUnreadMessages().longValue() - 1))).
        body("'" + ReservedLabels.INBOX.getId() + "'.unread",
            equalTo((int) (inboxCounters.getUnreadMessages().longValue() - 1))).
        body("'" + ReservedLabels.SPAM.getId() + "'.unread",
            equalTo((int) (spamCounters.getUnreadMessages().longValue() - 1))).
      when().
        get(REST_PATH + "/mailbox?metadata=true").asString();

    // update counters
    allCounters = getCounters(jsonResponse, ReservedLabels.ALL_MAILS.getId());
    inboxCounters = getCounters(jsonResponse, ReservedLabels.INBOX.getId());
    spamCounters = getCounters(jsonResponse, ReservedLabels.SPAM.getId());

    // remove label INBOX from message A
    given().
      pathParam("messageId", messageIdA.toString()).
      pathParam("labelId", ReservedLabels.INBOX.getId()).
    expect().
      statusCode(204).
    when().
      put(REST_PATH + "/mailbox/message/{messageId}?removelabel={labelId}");

    // check label counters
    jsonResponse =
      expect().
        statusCode(200).and().
        body("'" + ReservedLabels.ALL_MAILS.getId() + "'.size",
            equalTo((int) (allCounters.getTotalBytes().longValue()))).
        body("'" + ReservedLabels.ALL_MAILS.getId() + "'.total",
            equalTo((int) (allCounters.getTotalMessages().longValue()))).
        body("'" + ReservedLabels.ALL_MAILS.getId() + "'.unread",
            equalTo((int) (allCounters.getUnreadMessages().longValue()))).
        body("'" + ReservedLabels.INBOX.getId() + "'.total",
            equalTo((int) (inboxCounters.getTotalMessages().longValue() - 1))).
        body("'" + ReservedLabels.INBOX.getId() + "'.unread",
            equalTo((int) (inboxCounters.getUnreadMessages().longValue()))).
        body("'" + ReservedLabels.SPAM.getId() + "'.total",
            equalTo((int) (spamCounters.getTotalMessages().longValue()))).
        body("'" + ReservedLabels.SPAM.getId() + "'.unread",
            equalTo((int) (spamCounters.getUnreadMessages().longValue()))).
      when().
        get(REST_PATH + "/mailbox?metadata=true").asString();

    // update counters
    allCounters = getCounters(jsonResponse, ReservedLabels.ALL_MAILS.getId());
    inboxCounters = getCounters(jsonResponse, ReservedLabels.INBOX.getId());
    spamCounters = getCounters(jsonResponse, ReservedLabels.SPAM.getId());

    // add message B to SPAM
    long fileSizeB = getResourceSize(EMAIL_LARGE_ATT);
    addMessage(EMAIL_LARGE_ATT, ReservedLabels.SPAM.getId());

    // check label counters
    jsonResponse =
      expect().
        statusCode(200).and().
        body("'" + ReservedLabels.ALL_MAILS.getId() + "'.size",
            equalTo((int) (allCounters.getTotalBytes().longValue() + fileSizeB))).
        body("'" + ReservedLabels.ALL_MAILS.getId() + "'.total",
            equalTo((int) (allCounters.getTotalMessages().longValue() + 1))).
        body("'" + ReservedLabels.ALL_MAILS.getId() + "'.unread",
            equalTo((int) (allCounters.getUnreadMessages().longValue() + 1))).
        body("'" + ReservedLabels.INBOX.getId() + "'.total",
            equalTo((int) (inboxCounters.getTotalMessages().longValue()))).
        body("'" + ReservedLabels.INBOX.getId() + "'.unread",
            equalTo((int) (inboxCounters.getUnreadMessages().longValue()))).
        body("'" + ReservedLabels.SPAM.getId() + "'.total",
            equalTo((int) (spamCounters.getTotalMessages().longValue() + 1))).
        body("'" + ReservedLabels.SPAM.getId() + "'.unread",
            equalTo((int) (spamCounters.getUnreadMessages().longValue() + 1))).
      when().
        get(REST_PATH + "/mailbox?metadata=true").asString();

    // update counters
    allCounters = getCounters(jsonResponse, ReservedLabels.ALL_MAILS.getId());
    inboxCounters = getCounters(jsonResponse, ReservedLabels.INBOX.getId());
    spamCounters = getCounters(jsonResponse, ReservedLabels.SPAM.getId());

    // remove message A
    given().
      pathParam("messageId", messageIdA.toString()).
    expect().
      statusCode(204).
    when().
      delete(REST_PATH + "/mailbox/message/{messageId}");

    // check label counters
    jsonResponse =
      expect().
        statusCode(200).and().
        body("'" + ReservedLabels.ALL_MAILS.getId() + "'.size",
            equalTo((int) (allCounters.getTotalBytes().longValue() - fileSizeA))).
        body("'" + ReservedLabels.ALL_MAILS.getId() + "'.total",
            equalTo((int) (allCounters.getTotalMessages().longValue() - 1))).
        body("'" + ReservedLabels.ALL_MAILS.getId() + "'.unread",
            equalTo((int) (allCounters.getUnreadMessages().longValue()))).
        body("'" + ReservedLabels.SPAM.getId() + "'.total",
            equalTo((int) (spamCounters.getTotalMessages().longValue() - 1))).
        body("'" + ReservedLabels.SPAM.getId() + "'.unread",
            equalTo((int) (spamCounters.getUnreadMessages().longValue()))).
      when().
        get(REST_PATH + "/mailbox?metadata=true").asString();

    logger.info("Counters Test OK");
  }
View Full Code Here

   */
  protected static Pair<LabelMap, Map<Integer, List<UUID>>> populateMailbox() throws IOException
  {
    Map<Integer, List<UUID>> messages = new HashMap<Integer, List<UUID>>();
    LabelMap labels = new LabelMap();
    LabelCounters inboxCounters = new LabelCounters();
    LabelCounters notifCounters = new LabelCounters();
    LabelCounters trashCounters = new LabelCounters();
    LabelCounters spamCounters = new LabelCounters();

    // INBOX: add 5 messages, mark 2 as unread
    messages.put(ReservedLabels.INBOX.getId(), new ArrayList<UUID>());
    List<UUID> inboxMessages = messages.get(ReservedLabels.INBOX.getId());
    inboxMessages.add(addMessage(EMAIL_REGULAR, ReservedLabels.INBOX.getId()));
    inboxMessages.add(addMessage(EMAIL_REGULAR, ReservedLabels.INBOX.getId()));
    inboxMessages.add(addMessage(EMAIL_REGULAR, ReservedLabels.INBOX.getId()));
    inboxMessages.add(addMessage(EMAIL_REGULAR, ReservedLabels.INBOX.getId()));
    inboxMessages.add(addMessage(EMAIL_REGULAR, ReservedLabels.INBOX.getId()));
    markAsRead(inboxMessages.get(3));
    markAsRead(inboxMessages.get(4));
    inboxCounters.setTotalMessages(5L);
    inboxCounters.setUnreadMessages(3L);
    labels.put(ReservedLabels.INBOX);
    labels.get(ReservedLabels.INBOX.getId()).setCounters(inboxCounters);

    // NOTIFICATIONS: add 3 messages, mark 1 as read
    messages.put(ReservedLabels.NOTIFICATIONS.getId(), new ArrayList<UUID>());
    List<UUID> notifMessages = messages.get(ReservedLabels.NOTIFICATIONS.getId());
    notifMessages.add(addMessage(EMAIL_REGULAR, ReservedLabels.NOTIFICATIONS.getId()));
    notifMessages.add(addMessage(EMAIL_REGULAR, ReservedLabels.NOTIFICATIONS.getId()));
    notifMessages.add(addMessage(EMAIL_REGULAR, ReservedLabels.NOTIFICATIONS.getId()));
    markAsRead(notifMessages.get(1));
    notifCounters.setTotalMessages(3L);
    notifCounters.setUnreadMessages(2L);
    labels.put(ReservedLabels.NOTIFICATIONS);
    labels.get(ReservedLabels.NOTIFICATIONS.getId()).setCounters(notifCounters);

    // SPAM: add 5 messages, keep all unread
    messages.put(ReservedLabels.SPAM.getId(), new ArrayList<UUID>());
    List<UUID> spamMessages = messages.get(ReservedLabels.SPAM.getId());
    spamMessages.add(addMessage(EMAIL_REGULAR, ReservedLabels.SPAM.getId()));
    spamMessages.add(addMessage(EMAIL_REGULAR, ReservedLabels.SPAM.getId()));
    spamMessages.add(addMessage(EMAIL_REGULAR, ReservedLabels.SPAM.getId()));
    spamMessages.add(addMessage(EMAIL_REGULAR, ReservedLabels.SPAM.getId()));
    spamMessages.add(addMessage(EMAIL_REGULAR, ReservedLabels.SPAM.getId()));
    spamCounters.setTotalMessages(5L);
    spamCounters.setUnreadMessages(5L);
    labels.put(ReservedLabels.SPAM);
    labels.get(ReservedLabels.SPAM.getId()).setCounters(spamCounters);

    // TRASH: add 4 messages, mark 2 as read
    messages.put(ReservedLabels.TRASH.getId(), new ArrayList<UUID>());
View Full Code Here

   * @param labelId
   * @return
   */
  private LabelCounters getCounters(String json, Integer labelId)
  {
    LabelCounters lc = new LabelCounters();
    String l = Integer.toString(labelId);

    lc.setUnreadMessages( (long) from(json).getInt("'" + l + "'.unread") );
    lc.setTotalMessages( (long) from(json).getInt("'" + l + "'.total") );
    // size returned only for ALL_MAILS
    if(labelId == ReservedLabels.ALL_MAILS.getId()) {
      lc.setTotalBytes( (long) from(json).getInt("'" + l + "'.size") );
    }

    return lc;
  }
View Full Code Here

    sliceQuery.setRange(startRange, endRange, false, 5);

    QueryResult<CounterSlice<Composite>> r = sliceQuery.execute();

    Map<Integer, LabelCounters> counters = compositeColumnsToCounters(mailbox, r.get().getColumns());
    LabelCounters labelCounters = counters.containsKey(labelId) ? counters.get(labelId) : new LabelCounters();

    logger.debug("Fetched counters for single label {} with {}", labelId, labelCounters);

    return labelCounters;
  }
View Full Code Here

  public static void delete(Mutator<String> mutator, final String mailbox,
      final Integer labelId)
  {
    // reset all counters (since delete won't work in most cases)
    // see: http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/possible-coming-back-to-life-bug-with-counters-tp6464338p6475427.html
    LabelCounters labelCounters = get(mailbox, labelId);

    // if counter super-column for this label exists
    if (labelCounters != null) {
      subtract(mutator, mailbox, labelId, labelCounters);

      // delete counters
      HCounterColumn<Composite> c;
     
      c = countersToCompositeColumn(labelId, CN_SUBTYPE_MESSAGES, labelCounters.getTotalMessages());
      mutator.addDeletion(mailbox, CF_COUNTERS, c.getName(), new CompositeSerializer());
     
      c = countersToCompositeColumn(labelId, CN_SUBTYPE_UNREAD, labelCounters.getTotalMessages());
      mutator.addDeletion(mailbox, CF_COUNTERS, c.getName(), new CompositeSerializer());

      // delete bytes only if ALL_MAILS
      if (labelId == ReservedLabels.ALL_MAILS.getId()) {
        c = countersToCompositeColumn(labelId, CN_SUBTYPE_BYTES, labelCounters.getTotalMessages());
        mutator.addDeletion(mailbox, CF_COUNTERS, c.getName(), new CompositeSerializer());
      }
    }
  }
View Full Code Here

TOP

Related Classes of com.elasticinbox.core.model.LabelCounters

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.