Beispiel #1
0
  // Caller is responsible for filtering out Appointments/Tasks marked private if the requester
  // is not the mailbox owner.
  public Iterator<? extends MailItem> getMailItems(
      UserServletContext context, long startTime, long endTime, long chunkSize)
      throws ServiceException {
    if (context.requestedItems != null) {
      return context.getRequestedItems();
    }

    assert (context.target != null);
    String query = context.getQueryString();
    if (query != null) {
      if (context.target instanceof Folder) {
        Folder f = (Folder) context.target;
        if (f.getId() != Mailbox.ID_FOLDER_USER_ROOT) {
          query = "in:" + f.getPath() + " " + query;
        }
      }
      Set<MailItem.Type> types;
      if (context.getTypesString() == null) {
        types = getDefaultSearchTypes();
      } else {
        try {
          types = MailItem.Type.setOf(context.getTypesString());
        } catch (IllegalArgumentException e) {
          throw MailServiceException.INVALID_TYPE(e.getMessage());
        }
      }
      ZimbraQueryResults results =
          context.targetMailbox.index.search(
              context.opContext,
              query,
              types,
              SortBy.DATE_DESC,
              context.getOffset() + context.getLimit());
      return new QueryResultIterator(results);
    } else if (context.target instanceof Folder) {
      Collection<? extends MailItem> items =
          getMailItemsFromFolder(context, (Folder) context.target, startTime, endTime, chunkSize);
      return items != null ? items.iterator() : null;
    } else {
      ArrayList<MailItem> result = new ArrayList<MailItem>();
      result.add(context.target);
      return result.iterator();
    }
  }