IMAPCommand.java
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.net.imap;
/**
* IMAPCommand stores IMAP command codes.
*/
public enum IMAPCommand {
// These enums must either use the same name as the IMAP command
// or must provide the correct string as the parameter.
// Commands valid in any state:
/**
* Valid in any state.
*/
CAPABILITY(0),
/**
* Valid in any state.
*/
NOOP(0),
/**
* Valid in any state.
*/
LOGOUT(0),
// Commands valid in Not Authenticated state
/**
* Valid in Not Authenticated state
*/
STARTTLS(0),
/**
* Valid in Not Authenticated state
*/
AUTHENTICATE(1),
/**
* Valid in Not Authenticated state
*/
LOGIN(2),
XOAUTH(1),
// commands valid in authenticated state
/**
* Valid in authenticated state.
*/
SELECT(1),
/**
* Valid in authenticated state.
*/
EXAMINE(1),
/**
* Valid in authenticated state.
*/
CREATE(1),
/**
* Valid in authenticated state.
*/
DELETE(1),
/**
* Valid in authenticated state.
*/
RENAME(2),
/**
* Valid in authenticated state.
*/
SUBSCRIBE(1),
/**
* Valid in authenticated state.
*/
UNSUBSCRIBE(1),
/**
* Valid in authenticated state.
*/
LIST(2),
/**
* Valid in authenticated state.
*/
LSUB(2),
/**
* Valid in authenticated state.
*/
STATUS(2), // P2 = list in ()
/**
* Valid in authenticated state.
*/
APPEND(2, 4), // mbox [(flags)] [date-time] literal
// commands valid in selected state (substate of authenticated)
/**
* Valid in selected state (substate of authenticated).
*/
CHECK(0),
/**
* Valid in selected state (substate of authenticated).
*/
CLOSE(0),
/**
* Valid in selected state (substate of authenticated).
*/
EXPUNGE(0),
/**
* Valid in selected state (substate of authenticated).
*/
SEARCH(1, Integer.MAX_VALUE),
/**
* Valid in selected state (substate of authenticated).
*/
FETCH(2),
/**
* Valid in selected state (substate of authenticated).
*/
STORE(3),
/**
* Valid in selected state (substate of authenticated).
*/
COPY(2),
/**
* Valid in selected state (substate of authenticated).
*/
UID(2, Integer.MAX_VALUE);
/**
* Gets the IMAP protocol string command corresponding to a command code.
*
* @param command the {@link IMAPCommand} whose command string is required. Must not be null.
* @return The IMAP protocol string command corresponding to a command code.
*/
public static final String getCommand(final IMAPCommand command) {
return command.getIMAPCommand();
}
private final String imapCommand;
@SuppressWarnings("unused") // not yet used
private final int minParamCount;
@SuppressWarnings("unused") // not yet used
private final int maxParamCount;
IMAPCommand() {
this(null);
}
IMAPCommand(final int paramCount) {
this(null, paramCount, paramCount);
}
IMAPCommand(final int minCount, final int maxCount) {
this(null, minCount, maxCount);
}
IMAPCommand(final String name) {
this(name, 0);
}
IMAPCommand(final String name, final int paramCount) {
this(name, paramCount, paramCount);
}
IMAPCommand(final String name, final int minCount, final int maxCount) {
this.imapCommand = name;
this.minParamCount = minCount;
this.maxParamCount = maxCount;
}
/**
* Gets the IMAP protocol string command for this command
*
* @return The IMAP protocol string command corresponding to this command
*/
public String getIMAPCommand() {
return imapCommand != null ? imapCommand : name();
}
}