1 /*
2 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
3 * Copyright (C) 2004-2010 Frederico Caldeira Knabben
4 *
5 * == BEGIN LICENSE ==
6 *
7 * Licensed under the terms of any of the following licenses at your
8 * choice:
9 *
10 * - GNU General Public License Version 2 or later (the "GPL")
11 * http://www.gnu.org/licenses/gpl.html
12 *
13 * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
14 * http://www.gnu.org/licenses/lgpl.html
15 *
16 * - Mozilla Public License Version 1.1 or later (the "MPL")
17 * http://www.mozilla.org/MPL/MPL-1.1.html
18 *
19 * == END LICENSE ==
20 */
21 package net.fckeditor.handlers;
22
23 import java.util.HashMap;
24 import java.util.Map;
25
26 import net.fckeditor.tool.Utils;
27
28 /**
29 * File Browser <code>GET</code> and <code>POST</code> commands.<br />
30 * The File Browser sends a specific command for each and every request. This
31 * class is intended to reflect these in an Enum-like manner.
32 * <p>
33 * The commands are for <code>GET</code>:
34 * <ul>
35 * <li>GetFolders</li>
36 * <li>GetFoldersAndFiles</li>
37 * <li>CreateFolder</li>
38 * </ul>
39 * and for <code>POST</code>:
40 * <ul>
41 * <li>FileUpload</li>
42 * <li>QuickUpload</li>
43 *</ul>
44 *
45 * @version $Id: Command.java 4785 2009-12-21 20:10:28Z mosipov $
46 */
47 public class Command {
48
49 private String name;
50 private static final Map<String, Command> getCommands = new HashMap<String, Command>(
51 3);
52 private static final Map<String, Command> postCommands = new HashMap<String, Command>(
53 2);
54 /** GET command <code>GetFolders</code> */
55 public static final Command GET_FOLDERS = new Command("GetFolders");
56 /** GET command <code>GetFoldersAndFiles</code> */
57 public static final Command GET_FOLDERS_AND_FILES = new Command(
58 "GetFoldersAndFiles");
59 /** GET command <code>CreateFolder</code> */
60 public static final Command CREATE_FOLDER = new Command("CreateFolder");
61 /** POST command <code>FileUpload</code> */
62 public static final Command FILE_UPLOAD = new Command("FileUpload");
63 /** POST command <code>QuickUpload</code> */
64 public static final Command QUICK_UPLOAD = new Command("QuickUpload");
65
66 static {
67 // initialize the get commands
68 getCommands.put(GET_FOLDERS.getName(), GET_FOLDERS);
69 getCommands.put(GET_FOLDERS_AND_FILES.getName(), GET_FOLDERS_AND_FILES);
70 getCommands.put(CREATE_FOLDER.getName(), CREATE_FOLDER);
71
72 // initialize the post commands
73 postCommands.put(FILE_UPLOAD.getName(), FILE_UPLOAD);
74 postCommands.put(QUICK_UPLOAD.getName(), QUICK_UPLOAD);
75 }
76
77 /**
78 * Constructs a command with the given name.
79 *
80 * @param name
81 * the name of the new command
82 */
83 private Command(final String name) {
84 this.name = name;
85 }
86
87 /**
88 * Returns the name of this command.
89 *
90 * @return the name of this command
91 */
92 public String getName() {
93 return name;
94 }
95
96 /**
97 * Returns the command constant with the specified name.
98 *
99 * @param name
100 * the name of the constant to return
101 * @return the command constant with the specified name
102 * @throws IllegalArgumentException
103 * if this class has no constant with the specified name
104 * @throws NullPointerException
105 * if <code>name</code> is null or empty
106 */
107 public static Command valueOf(final String name) {
108 if (Utils.isEmpty(name))
109 throw new NullPointerException("Name is null or empty");
110
111 Command command = getCommands.get(name);
112 if (command == null)
113 command = postCommands.get(name);
114 if (command == null)
115 throw new IllegalArgumentException("No command const " + name);
116
117 return command;
118 }
119
120 /**
121 * Returns <code>true</code> if name represents a valid <code>GET</code>
122 * command constant.
123 *
124 * @param name
125 * the command to check
126 * @return <code>true</code> if name represents a valid command, else
127 * <code>false</code>
128 */
129 public static boolean isValidForGet(final String name) {
130 return getCommands.containsKey(name);
131 }
132
133 /**
134 * Returns <code>true</code> if name represents a valid <code>POST</code>
135 * command constant.
136 *
137 * @param name
138 * the command to check
139 * @return <code>true</code> if name represents a valid command, else
140 * <code>false</code>
141 */
142 public static boolean isValidForPost(final String name) {
143 return postCommands.containsKey(name);
144 }
145
146 /**
147 * Returns the command constant with the specified name. In contrast to
148 * {@link #valueOf(String)} it returns a null instead of throwing an
149 * exception if a command constant was not found.
150 *
151 * @param name
152 * the name of the constant to return
153 * @return the command constant with the specified name, else
154 * <code>null</code>
155 */
156 public static Command getCommand(final String name) {
157 try {
158 return Command.valueOf(name);
159 } catch (Exception e) {
160 return null;
161 }
162 }
163
164 /**
165 * Compares the specified object with this command for equality. The
166 * comparison is based on class and name only.
167 *
168 * @param obj
169 * Object to be compared with this command.
170 * @return <code>true</code> if the specified object is equal to this
171 * command
172 */
173 @Override
174 public boolean equals(Object obj) {
175 if (this == obj)
176 return true;
177
178 if (obj == null || this.getClass() != obj.getClass())
179 return false;
180
181 final Command command = (Command) obj;
182 return name.equals(command.getName());
183 }
184
185 /**
186 * Returns the hash code value for this command. The hash code equals the
187 * hash code of the name field.
188 *
189 * @return the hash code value for this command
190 */
191 @Override
192 public int hashCode() {
193 return name.hashCode();
194 }
195
196 /**
197 * Returns a string representation of this command.
198 *
199 * @return a string representation of this command
200 * @see #getName()
201 */
202 @Override
203 public String toString() {
204 return name;
205 }
206 }