/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
- package com.google.sitebricks.mail.imap;
- import com.google.common.base.Preconditions;
- import java.util.List;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- /**
- * @author dhanji@gmail.com (Dhanji R. Prasanna)
- */
- class OpenFolderExtractor implements Extractor<Folder> {
- private static final Pattern UIDNEXT_REGEX = Pattern.compile("\\s*. OK \\[UIDNEXT (\\d+)\\]\\s*", Pattern.CASE_INSENSITIVE);
- private static final String SELECTED = "selected";
- @Override
- public Folder extract(List<String> messages) {
- String folderName = null;
- int count = 0, nextUid = -1;
- for (String message : messages) {
- String[] pieces = message.split("[ ]+", 4);
- if (pieces.length > 1 && "EXISTS".equalsIgnoreCase(pieces[2])) {
- count = Integer.valueOf(pieces[1]);
- } else if (message.contains(SELECTED)) {
- // Extract folder name as given by the server.
- int left = message.indexOf(pieces[2]) + pieces[2].length();
- folderName = message.substring(left, message.indexOf(SELECTED)).trim();
- } else {
- Matcher matcher = UIDNEXT_REGEX.matcher(message);
- if (matcher.find()) {
- String uidNext = matcher.group(1);
- if (!uidNext.isEmpty())
- nextUid = Integer.parseInt(uidNext);
- }
- }
- }
- Preconditions.checkState(null != folderName, "Error in IMAP protocol, " +
- "could not detect folder name");
- return new Folder(folderName, count, nextUid);
- }
- }