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    // commands valid in authenticated state
040    SELECT(1),
041    EXAMINE(1),
042    CREATE(1),
043    DELETE(1),
044    RENAME(2),
045    SUBSCRIBE(1),
046    UNSUBSCRIBE(1),
047    LIST(2),
048    LSUB(2),
049    STATUS(2), // P2 = list in ()
050    APPEND(2,4), // mbox [(flags)] [date-time] literal
051    
052    // commands valid in selected state (substate of authenticated)
053    CHECK(0),
054    CLOSE(0),
055    EXPUNGE(0),
056    SEARCH(1, Integer.MAX_VALUE),
057    FETCH(2),
058    STORE(3),
059    COPY(2),
060    UID(2, Integer.MAX_VALUE),
061    ;
062    
063    private final String imapCommand;
064    
065    @SuppressWarnings("unused") // not yet used
066    private final int minParamCount;
067    @SuppressWarnings("unused") // not yet used
068    private final int maxParamCount;
069
070    IMAPCommand(){
071        this(null);
072    }
073    
074    IMAPCommand(String name){
075        this(name, 0);
076    }
077    
078    IMAPCommand(int paramCount){
079        this(null, paramCount, paramCount);
080   }
081    
082    IMAPCommand(int minCount, int maxCount){
083        this(null, minCount, maxCount);
084   }
085    
086    IMAPCommand(String name, int paramCount){
087        this(name, paramCount, paramCount);
088    }
089    
090    IMAPCommand(String name, int minCount, int maxCount){
091        this.imapCommand = name;
092        this.minParamCount = minCount;
093        this.maxParamCount = maxCount;
094    }
095
096    /**
097     * Get the IMAP protocol string command corresponding to a command code.
098     *
099     * @param command the IMAPCommand whose command string is required.
100     * @return The IMAP protocol string command corresponding to a command code.
101     */
102    public static final String getCommand(IMAPCommand command) {
103        return command.getIMAPCommand();
104    }
105
106    /**
107     * Get the IMAP protocol string command for this command
108     *
109     * @return The IMAP protocol string command corresponding to this command
110     */
111    public String getIMAPCommand() {
112        return imapCommand != null ? imapCommand : name();
113    }
114
115}
116
117/* kate: indent-width 4; replace-tabs on; */