SortCommandParser.java

package com.icegreen.greenmail.imap.commands;

import com.icegreen.greenmail.imap.ImapRequestLineReader;
import com.icegreen.greenmail.imap.ProtocolException;

/**
 * Created on 10/03/2016.
 *
 * @author Reda.Housni-Alaoui
 */
class SortCommandParser extends CommandParser {

    private final SearchCommandParser searchCommandParser = new SearchCommandParser();

    public SortTerm sortTerm(ImapRequestLineReader request) throws ProtocolException {
        SortTerm sortTerm = new SortTerm();

        /* Sort criteria */
        char next = request.nextChar();
        StringBuilder sb = new StringBuilder();
        boolean buffering = false;
        while (next != '\n') {
            if (next != '(' && next != ')' && next != 32 /* space */ && next != 13 /* cr */) {
                sb.append(next);
            } else {
                if (buffering) {
                    sortTerm.getSortCriteria().add(SortKey.valueOf(sb.toString()));
                    sb = new StringBuilder();
                } else {
                    buffering = next == '(';
                }
            }
            request.consume();
            if (next == ')') {
                break;
            }
            next = request.nextChar();
        }

        /* Charset */
        sortTerm.setCharset(consumeWord(request, new AtomCharValidator()));

        /* Search term */
        sortTerm.setSearchTerm(searchCommandParser.searchTerm(request));
        searchCommandParser.endLine(request);

        return sortTerm;
    }
}