    001    /*
    002     * Licensed to the Apache Software Foundation (ASF) under one or more
    003     * contributor license agreements.  See the NOTICE file distributed with
    004     * this work for additional information regarding copyright ownership.
    005     * The ASF licenses this file to You under the Apache License, Version 2.0
    006     * (the "License"); you may not use this file except in compliance with
    007     * the License.  You may obtain a copy of the License at
    008     *
    009     *      http://www.apache.org/licenses/LICENSE-2.0
    010     *
    011     * Unless required by applicable law or agreed to in writing, software
    012     * distributed under the License is distributed on an "AS IS" BASIS,
    013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014     * See the License for the specific language governing permissions and
    015     * limitations under the License.
    016     */
    017
    018    package org.apache.commons.net.imap;
    019
    020    /**
    021     * IMAPCommand stores IMAP command codes.
    022     */
    023    public enum IMAPCommand
    024    {
    025        // These enums must either use the same name as the IMAP command
    026        // or must provide the correct string as the parameter.
    027
    028        // Commands valid in any state:
    029
    030        CAPABILITY(0),
    031        NOOP(0),
    032        LOGOUT(0),
    033
    034        // Commands valid in Not Authenticated state
    035        STARTTLS(0),
    036        AUTHENTICATE(1),
    037        LOGIN(2),
    038
    039        XOAUTH(1),
    040
    041        // commands valid in authenticated state
    042        SELECT(1),
    043        EXAMINE(1),
    044        CREATE(1),
    045        DELETE(1),
    046        RENAME(2),
    047        SUBSCRIBE(1),
    048        UNSUBSCRIBE(1),
    049        LIST(2),
    050        LSUB(2),
    051        STATUS(2), // P2 = list in ()
    052        APPEND(2,4), // mbox [(flags)] [date-time] literal
    053
    054        // commands valid in selected state (substate of authenticated)
    055        CHECK(0),
    056        CLOSE(0),
    057        EXPUNGE(0),
    058        SEARCH(1, Integer.MAX_VALUE),
    059        FETCH(2),
    060        STORE(3),
    061        COPY(2),
    062        UID(2, Integer.MAX_VALUE),
    063        ;
    064
    065        private final String imapCommand;
    066
    067        @SuppressWarnings("unused") // not yet used
    068        private final int minParamCount;
    069        @SuppressWarnings("unused") // not yet used
    070        private final int maxParamCount;
    071
    072        IMAPCommand(){
    073            this(null);
    074        }
    075
    076        IMAPCommand(String name){
    077            this(name, 0);
    078        }
    079
    080        IMAPCommand(int paramCount){
    081            this(null, paramCount, paramCount);
    082       }
    083
    084        IMAPCommand(int minCount, int maxCount){
    085            this(null, minCount, maxCount);
    086       }
    087
    088        IMAPCommand(String name, int paramCount){
    089            this(name, paramCount, paramCount);
    090        }
    091
    092        IMAPCommand(String name, int minCount, int maxCount){
    093            this.imapCommand = name;
    094            this.minParamCount = minCount;
    095            this.maxParamCount = maxCount;
    096        }
    097
    098        /**
    099         * Get the IMAP protocol string command corresponding to a command code.
    100         *
    101         * @param command the IMAPCommand whose command string is required.
    102         * @return The IMAP protocol string command corresponding to a command code.
    103         */
    104        public static final String getCommand(IMAPCommand command) {
    105            return command.getIMAPCommand();
    106        }
    107
    108        /**
    109         * Get the IMAP protocol string command for this command
    110         *
    111         * @return The IMAP protocol string command corresponding to this command
    112         */
    113        public String getIMAPCommand() {
    114            return imapCommand != null ? imapCommand : name();
    115        }
    116
    117    }
    118
    119    /* kate: indent-width 4; replace-tabs on; */