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.ftp;
019
020/**
021 * FTPCommand stores a set of constants for FTP command codes. To interpret the meaning of the codes, familiarity with RFC 959 is assumed. The mnemonic constant
022 * names are transcriptions from the code descriptions of RFC 959. For those who think in terms of the actual FTP commands, a set of constants such as
023 * {@link #USER USER } are provided where the constant name is the same as the FTP command.
024 *
025 * @deprecated use {@link FTPCmd} instead
026 */
027@Deprecated
028public final class FTPCommand {
029
030    /** Command code {@value}. */
031    public static final int USER = 0;
032
033    /** Command code {@value}. */
034    public static final int PASS = 1;
035
036    /** Command code {@value}. */
037    public static final int ACCT = 2;
038
039    /** Command code {@value}. */
040    public static final int CWD = 3;
041
042    /** Command code {@value}. */
043    public static final int CDUP = 4;
044
045    /** Command code {@value}. */
046    public static final int SMNT = 5;
047
048    /** Command code {@value}. */
049    public static final int REIN = 6;
050
051    /** Command code {@value}. */
052    public static final int QUIT = 7;
053
054    /** Command code {@value}. */
055    public static final int PORT = 8;
056
057    /** Command code {@value}. */
058    public static final int PASV = 9;
059
060    /** Command code {@value}. */
061    public static final int TYPE = 10;
062
063    /** Command code {@value}. */
064    public static final int STRU = 11;
065
066    /** Command code {@value}. */
067    public static final int MODE = 12;
068
069    /** Command code {@value}. */
070    public static final int RETR = 13;
071
072    /** Command code {@value}. */
073    public static final int STOR = 14;
074
075    /** Command code {@value}. */
076
077    /** Command code {@value}. */
078    public static final int STOU = 15;
079
080    /** Command code {@value}. */
081    public static final int APPE = 16;
082
083    /** Command code {@value}. */
084
085    /** Command code {@value}. */
086    public static final int ALLO = 17;
087
088    /** Command code {@value}. */
089    public static final int REST = 18;
090
091    /** Command code {@value}. */
092    public static final int RNFR = 19;
093
094    /** Command code {@value}. */
095    public static final int RNTO = 20;
096
097    /** Command code {@value}. */
098    public static final int ABOR = 21;
099
100    /** Command code {@value}. */
101    public static final int DELE = 22;
102
103    /** Command code {@value}. */
104    public static final int RMD = 23;
105
106    /** Command code {@value}. */
107    public static final int MKD = 24;
108
109    /** Command code {@value}. */
110    public static final int PWD = 25;
111
112    /** Command code {@value}. */
113    public static final int LIST = 26;
114
115    /** Command code {@value}. */
116    public static final int NLST = 27;
117
118    /** Command code {@value}. */
119    public static final int SITE = 28;
120
121    /** Command code {@value}. */
122    public static final int SYST = 29;
123
124    /** Command code {@value}. */
125    public static final int STAT = 30;
126
127    /** Command code {@value}. */
128
129    /** Command code {@value}. */
130    public static final int HELP = 31;
131
132    /** Command code {@value}. */
133    public static final int NOOP = 32;
134
135    /**
136     * Command code {@value}.
137     *
138     * @since 2.0
139     */
140    public static final int MDTM = 33;
141
142    /**
143     * Command code {@value}.
144     *
145     * @since 2.2
146     */
147    public static final int FEAT = 34;
148
149    /**
150     * Command code {@value}.
151     *
152     * @since 2.0
153     */
154    public static final int MFMT = 35;
155
156    /**
157     * Command code {@value}.
158     *
159     * @since 2.0
160     */
161    public static final int EPSV = 36;
162
163    /**
164     * Command code {@value}.
165     *
166     * @since 2.0
167     */
168    public static final int EPRT = 37;
169
170    /**
171     * Machine parseable list for a directory.
172     *
173     * @since 3.0
174     */
175    public static final int MLSD = 38;
176
177    /**
178     * Machine parseable list for a single file.
179     *
180     * @since 3.0
181     */
182    public static final int MLST = 39;
183
184    // Must agree with final entry above; used to check array size
185    private static final int LAST = MLST;
186
187    /** Alias for {@value}. */
188    public static final int USERNAME = USER;
189
190    /** Alias for {@value}. */
191    public static final int PASSWORD = PASS;
192
193    /** Alias for {@value}. */
194    public static final int ACCOUNT = ACCT;
195
196    /** Alias for {@value}. */
197    public static final int CHANGE_WORKING_DIRECTORY = CWD;
198
199    /** Alias for {@value}. */
200    public static final int CHANGE_TO_PARENT_DIRECTORY = CDUP;
201
202    /** Alias for {@value}. */
203    public static final int STRUCTURE_MOUNT = SMNT;
204
205    /** Alias for {@value}. */
206    public static final int REINITIALIZE = REIN;
207
208    /** Alias for {@value}. */
209    public static final int LOGOUT = QUIT;
210
211    /** Alias for {@value}. */
212    public static final int DATA_PORT = PORT;
213
214    /** Alias for {@value}. */
215    public static final int PASSIVE = PASV;
216
217    /** Alias for {@value}. */
218    public static final int REPRESENTATION_TYPE = TYPE;
219
220    /** Alias for {@value}. */
221    public static final int FILE_STRUCTURE = STRU;
222
223    /** Alias for {@value}. */
224    public static final int TRANSFER_MODE = MODE;
225
226    /** Alias for {@value}. */
227    public static final int RETRIEVE = RETR;
228
229    /** Alias for {@value}. */
230    public static final int STORE = STOR;
231
232    /** Alias for {@value}. */
233    public static final int STORE_UNIQUE = STOU;
234
235    /** Alias for {@value}. */
236    public static final int APPEND = APPE;
237
238    /** Alias for {@value}. */
239    public static final int ALLOCATE = ALLO;
240
241    /** Alias for {@value}. */
242    public static final int RESTART = REST;
243
244    /** Alias for {@value}. */
245    public static final int RENAME_FROM = RNFR;
246
247    /** Alias for {@value}. */
248    public static final int RENAME_TO = RNTO;
249
250    /** Alias for {@value}. */
251    public static final int ABORT = ABOR;
252
253    /** Alias for {@value}. */
254    public static final int DELETE = DELE;
255
256    /** Alias for {@value}. */
257    public static final int REMOVE_DIRECTORY = RMD;
258
259    /** Alias for {@value}. */
260    public static final int MAKE_DIRECTORY = MKD;
261
262    /** Alias for {@value}. */
263    public static final int PRINT_WORKING_DIRECTORY = PWD;
264
265    // public static final int LIST = LIST;
266
267    /** Alias for {@value}. */
268    public static final int NAME_LIST = NLST;
269
270    /** Alias for {@value}. */
271    public static final int SITE_PARAMETERS = SITE;
272
273    /** Alias for {@value}. */
274    public static final int SYSTEM = SYST;
275
276    /** Alias for {@value}. */
277    public static final int STATUS = STAT;
278
279    // public static final int HELP = HELP;
280    // public static final int NOOP = NOOP;
281
282    /**
283     * Alias for {@value}.
284     * @since 2.0
285     */
286    public static final int MOD_TIME = MDTM;
287
288    /**
289     * Alias for {@value}.
290     * @since 2.2
291     */
292    public static final int FEATURES = FEAT;
293
294    /**
295     * Alias for {@value}.
296     * @since 2.2
297     */
298    public static final int GET_MOD_TIME = MDTM;
299
300    /**
301     * Alias for {@value}.
302     * @since 2.2
303     */
304    public static final int SET_MOD_TIME = MFMT;
305
306    private static final String[] COMMANDS = { "USER", "PASS", "ACCT", "CWD", "CDUP", "SMNT", "REIN", "QUIT", "PORT", "PASV", "TYPE", "STRU", "MODE", "RETR",
307            "STOR", "STOU", "APPE", "ALLO", "REST", "RNFR", "RNTO", "ABOR", "DELE", "RMD", "MKD", "PWD", "LIST", "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP",
308            "MDTM", "FEAT", "MFMT", "EPSV", "EPRT", "MLSD", "MLST" };
309
310    /**
311     * Default access needed for Unit test.
312     */
313    static void checkArray() {
314        final int expectedLength = LAST + 1;
315        if (COMMANDS.length != expectedLength) {
316            throw new IllegalStateException("Incorrect COMMANDS array. Should have length " + expectedLength + " found " + COMMANDS.length);
317        }
318    }
319
320    /**
321     * Retrieve the FTP protocol command string corresponding to a specified command code.
322     *
323     * @param command The command code.
324     * @return The FTP protcol command string corresponding to a specified command code.
325     */
326    public static String getCommand(final int command) {
327        return COMMANDS[command];
328    }
329
330    /** Cannot be instantiated. */
331    private FTPCommand() {
332    }
333}