protected void appendFlag()

in geronimo-mail_2.1_impl/geronimo-mail_2.1_provider/src/main/java/org/apache/geronimo/mail/store/imap/connection/IMAPCommand.java [851:922]


    protected void appendFlag(FlagTerm term, String charset) {
        // decide which one we need to test for
        boolean set = term.getTestSet();

        Flags flags = term.getFlags();
        Flags.Flag[] systemFlags = flags.getSystemFlags();

        String[] userFlags = flags.getUserFlags();

        // empty search term?  not sure if this is an error.  The default search implementation would
        // not consider this an error, so we'll just ignore this.
        if (systemFlags.length == 0 && userFlags.length == 0) {
            return;
        }

        if (set) {
            for (int i = 0; i < systemFlags.length; i++) {
                Flags.Flag flag = systemFlags[i];

                if (flag == Flags.Flag.ANSWERED) {
                    appendAtom("ANSWERED");
                }
                else if (flag == Flags.Flag.DELETED) {
                    appendAtom("DELETED");
                }
                else if (flag == Flags.Flag.DRAFT) {
                    appendAtom("DRAFT");
                }
                else if (flag == Flags.Flag.FLAGGED) {
                    appendAtom("FLAGGED");
                }
                else if (flag == Flags.Flag.RECENT) {
                    appendAtom("RECENT");
                }
                else if (flag == Flags.Flag.SEEN) {
                    appendAtom("SEEN");
                }
            }
        }
        else {
            for (int i = 0; i < systemFlags.length; i++) {
                Flags.Flag flag = systemFlags[i];

                if (flag == Flags.Flag.ANSWERED) {
                    appendAtom("UNANSWERED");
                }
                else if (flag == Flags.Flag.DELETED) {
                    appendAtom("UNDELETED");
                }
                else if (flag == Flags.Flag.DRAFT) {
                    appendAtom("UNDRAFT");
                }
                else if (flag == Flags.Flag.FLAGGED) {
                    appendAtom("UNFLAGGED");
                }
                else if (flag == Flags.Flag.RECENT) {
                    // not UNRECENT?
                    appendAtom("OLD");
                }
                else if (flag == Flags.Flag.SEEN) {
                    appendAtom("UNSEEN");
                }
            }
        }


        // User flags are done as either "KEYWORD name" or "UNKEYWORD name"
        for (int i = 0; i < userFlags.length; i++) {
            appendAtom(set ? "KEYWORD" : "UNKEYWORD");
            appendAtom(userFlags[i]);
        }
    }