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(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; */