/sitebricks-mail/src/main/java/com/google/sitebricks/mail/imap/OpenFolderExtractor.java

http://github.com/dhanji/sitebricks · Java · 43 lines · 33 code · 6 blank · 4 comment · 9 complexity · 8381d78d0d1619a277134bdb7c5676e7 MD5 · raw file

  1. package com.google.sitebricks.mail.imap;
  2. import com.google.common.base.Preconditions;
  3. import java.util.List;
  4. import java.util.regex.Matcher;
  5. import java.util.regex.Pattern;
  6. /**
  7. * @author dhanji@gmail.com (Dhanji R. Prasanna)
  8. */
  9. class OpenFolderExtractor implements Extractor<Folder> {
  10. private static final Pattern UIDNEXT_REGEX = Pattern.compile("\\s*. OK \\[UIDNEXT (\\d+)\\]\\s*", Pattern.CASE_INSENSITIVE);
  11. private static final String SELECTED = "selected";
  12. @Override
  13. public Folder extract(List<String> messages) {
  14. String folderName = null;
  15. int count = 0, nextUid = -1;
  16. for (String message : messages) {
  17. String[] pieces = message.split("[ ]+", 4);
  18. if (pieces.length > 1 && "EXISTS".equalsIgnoreCase(pieces[2])) {
  19. count = Integer.valueOf(pieces[1]);
  20. } else if (message.contains(SELECTED)) {
  21. // Extract folder name as given by the server.
  22. int left = message.indexOf(pieces[2]) + pieces[2].length();
  23. folderName = message.substring(left, message.indexOf(SELECTED)).trim();
  24. } else {
  25. Matcher matcher = UIDNEXT_REGEX.matcher(message);
  26. if (matcher.find()) {
  27. String uidNext = matcher.group(1);
  28. if (!uidNext.isEmpty())
  29. nextUid = Integer.parseInt(uidNext);
  30. }
  31. }
  32. }
  33. Preconditions.checkState(null != folderName, "Error in IMAP protocol, " +
  34. "could not detect folder name");
  35. return new Folder(folderName, count, nextUid);
  36. }
  37. }