    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
    018package org.apache.commons.net.imap;
    019
    020/**
    021 * IMAPCommand stores IMAP command codes.
    022 */
    023public 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(final String name){
    077        this(name, 0);
    078    }
    079
    080    IMAPCommand(final int paramCount){
    081        this(null, paramCount, paramCount);
    082   }
    083
    084    IMAPCommand(final int minCount, final int maxCount){
    085        this(null, minCount, maxCount);
    086   }
    087
    088    IMAPCommand(final String name, final int paramCount){
    089        this(name, paramCount, paramCount);
    090    }
    091
    092    IMAPCommand(final String name, final int minCount, final 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(final 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; */