1 //
2 // $Id: UploadPolicyFactory.java 629 2009-02-23 16:25:14Z etienne_sf $
3 //
4 // jupload - A file upload applet.
5 // Copyright 2007 The JUpload Team
6 //
7 // Created: 2009-05-11
8 // Creator: etienne_sf
9 // Last modified: $Date: 2009-02-23 17:25:14 +0100 (lun., 23 févr. 2009) $
10 //
11 // This program is free software; you can redistribute it and/or modify it under
12 // the terms of the GNU General Public License as published by the Free Software
13 // Foundation; either version 2 of the License, or (at your option) any later
14 // version. This program is distributed in the hope that it will be useful, but
15 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 // details. You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software Foundation, Inc.,
19 // 675 Mass Ave, Cambridge, MA 02139, USA.
20
21 package wjhk.jupload2.context;
22
23 import java.awt.Cursor;
24 import java.awt.Frame;
25 import java.util.Vector;
26
27 import javax.swing.JApplet;
28
29 import wjhk.jupload2.exception.JUploadException;
30 import wjhk.jupload2.gui.JUploadPanel;
31 import wjhk.jupload2.gui.JUploadTextArea;
32 import wjhk.jupload2.gui.filepanel.FilePanel;
33 import wjhk.jupload2.gui.filepanel.FilePanel.FileListViewMode;
34 import wjhk.jupload2.policies.DefaultUploadPolicy;
35 import wjhk.jupload2.policies.UploadPolicy;
36 import wjhk.jupload2.upload.helper.ByteArrayEncoderHTTP;
37
38 /**
39 * This interface it used in upload policies to get information on the current Context. This context is responsible for:
40 * <DIR> <LI>Reading parameters from the environment or the applet parameters. <LI>Storing the current UploadPolicy (or
41 * null if not set yet) <LI> <LI></DIR>
42 *
43 * @author etienne_sf
44 */
45 public interface JUploadContext {
46
47 /*
48 * **************************************************************************
49 * **************** VERSION MANAGEMENT *************************************************************************
50 */
51
52 /**
53 * @return The 'official' version (applet version and SVN revision)
54 */
55 public String getDetailedVersionMessage();
56
57 /**
58 * @return The applet version
59 */
60 public String getVersion();
61
62 /**
63 * @return The applet SVN revision, from which it was compiled
64 */
65 public String getSvnRevision();
66
67 /**
68 * @return Last modification date (date of last commit)
69 */
70 public String getLastModified();
71
72 /**
73 * @return Last modification date (date of last commit)
74 */
75 public String getBuildDate();
76
77 /**
78 * @return Last modification date (date of last commit)
79 */
80 public int getBuildNumber();
81
82 /*
83 * **************************************************************************
84 * **************** GUI MANAGEMENT *************************************************************************
85 */
86
87 /**
88 * Displays a given URL, in the given target. The target is meant in html <A> tag, and may be ignored if not
89 * relevant.
90 *
91 * @param url The URL to display, in text format. It will be normalized 'before use'.
92 * @param success Indicates whether the upload was a success or not.
93 */
94 public void displayURL(String url, boolean success);
95
96 /**
97 * Retrieves the current applet. This call is still used by {@link ByteArrayEncoderHTTP}, to append form variable.
98 * It will be removed, in the future.
99 *
100 * @return The current applet, or null if not running in an applet
101 */
102 public JApplet getApplet();
103
104 /**
105 * Returns the current frame. Can be used to attach Dialog, for instance.
106 *
107 * @return The current frame
108 */
109 public Frame getFrame();
110
111 /**
112 * Retrieves the current log window of this applet. This log window may visible or not depending on various applet
113 * parameter.
114 *
115 * @return the current log window of this instance.
116 * @see JUploadPanel#showOrHideLogWindow()
117 */
118 public JUploadTextArea getLogWindow();
119
120 /**
121 * Returns the mime type associated with the given file extension. As the applet may run on windows, the
122 * fileExtension is always changed to minor case, before looking for the corresponding mime type.
123 *
124 * @param fileExtension The file extension, in any case.
125 * @return Returns the current mime type, for this extension.
126 */
127
128 public String getMimeType(String fileExtension);
129
130 /**
131 * Retrieves the current upload panel.
132 *
133 * @return the current upload panel of this instance.
134 */
135 public JUploadPanel getUploadPanel();
136
137 /**
138 * This method the current UploadPolicy, associated with the current execution context. This UploadPolicy is set
139 * once, when the application start. It can not change afterwards.
140 *
141 * @return The current UploadPolicy, or null of the uploadPolicy has not been set yet.
142 * @throws JUploadException
143 */
144 public UploadPolicy getUploadPolicy() throws JUploadException;
145
146 /**
147 * @return The current cursor.
148 * @see UploadPolicy#setCursor(Cursor)
149 */
150 public Cursor getCursor();
151
152 /**
153 * @param cursor The cursor to set
154 * @return The Cursor that was active, before setting the new one. It's up to the caller to remind it, to be able to
155 * restore it if necessary.
156 * @see UploadPolicy#setCursor(Cursor)
157 */
158 public Cursor setCursor(Cursor cursor);
159
160 /**
161 * Sets the wait cursor on the current application (applet, executable...).
162 *
163 * @return The cursor that was active before the call to this method
164 * @see UploadPolicy#setCursor(Cursor)
165 */
166 public Cursor setWaitCursor();
167
168 /**
169 * Displays a message in the status window.
170 *
171 * @param status
172 */
173 public void showStatus(String status);
174
175 /*
176 * **************************************************************************
177 * **************** PARAMETERS MANAGEMENT *************************************************************************
178 */
179
180 /**
181 * Get a String parameter value from applet properties or System properties.
182 *
183 * @param key The name of the parameter to fetch.
184 * @param def A default value which is used, when the specified parameter is not set.
185 * @return The value of the applet parameter (resp. system property). If the parameter was not specified or no such
186 * system property exists, returns the given default value.
187 */
188 public String getParameter(String key, String def);
189
190 /**
191 * Get a String parameter value from applet properties or System properties.
192 *
193 * @param key The parameter name
194 * @param def The default value
195 * @return the parameter value, or the default, if the system is not set.
196 */
197 public int getParameter(String key, int def);
198
199 /**
200 * Get a String parameter value from applet properties or System properties.
201 *
202 * @param key The parameter name
203 * @param def The default value
204 * @return the parameter value, or the default, if the system is not set.
205 */
206 public float getParameter(String key, float def);
207
208 /**
209 * Get a String parameter value from applet properties or System properties.
210 *
211 * @param key The parameter name
212 * @param def The default value
213 * @return the parameter value, or the default, if the system is not set.
214 */
215 public long getParameter(String key, long def);
216
217 /**
218 * Get a boolean parameter value from applet properties or System properties.
219 *
220 * @param key The parameter name
221 * @param def The default value
222 * @return the parameter value, or the default, if the system is not set.
223 */
224 public boolean getParameter(String key, boolean def);
225
226 /**
227 * Get a {@link FilePanel.FileListViewMode} parameter value from applet properties or System properties.
228 *
229 * @param key The parameter name
230 * @param def The default value
231 * @return the parameter value, or the default, if the system is not set.
232 */
233 public FilePanel.FileListViewMode getParameter(String key, FilePanel.FileListViewMode def);
234
235 /**
236 * This function try to parse value as an integer. If value is not a correct integer, def is returned.
237 *
238 * @param value The string value, that must be parsed
239 * @param def The default value
240 * @return The integer value of value, or def if value is not valid.
241 */
242 public int parseInt(String value, int def);
243
244 /**
245 * This function try to parse value as a float number. If value is not a correct float, def is returned.
246 *
247 * @param value The string value, that must be parsed
248 * @param def The default value
249 * @return The float value of value, or def if value is not valid.
250 */
251 public float parseFloat(String value, float def);
252
253 /**
254 * This function try to parse value as a Long. If value is not a correct long, def is returned.
255 *
256 * @param value The string value, that must be parsed
257 * @param def The default value
258 * @return The integer value of value, or def if value is not valid.
259 */
260 public long parseLong(String value, long def);
261
262 /**
263 * This function try to parse value as a boolean. If value is not a correct boolean, def is returned.
264 *
265 * @param value The new value for this property. If invalid, the default value is used.
266 * @param def The default value: used if value is invalid.
267 * @return The boolean value of value, or def if value is not a valid boolean.
268 */
269 public boolean parseBoolean(String value, boolean def);
270
271 /**
272 * This function try to parse value as a {@link FilePanel.FileListViewMode}. If value is not a correct
273 * {@link FilePanel.FileListViewMode}, a warning is logged, and def is returned.
274 *
275 * @param value The new value for this property. If invalid, the default value is used.
276 * @param def The default value: used if value is invalid.
277 * @return The {@link FilePanel.FileListViewMode} value of value, or def if value is not a valid
278 * {@link FilePanel.FileListViewMode}.
279 */
280 public FileListViewMode parseFileListViewMode(String value, FilePanel.FileListViewMode def);
281
282 /*
283 * **************************************************************************
284 * **************** TECHNICAL MANAGEMENT *************************************************************************
285 */
286
287 /**
288 * This method allows to read the navigator cookies. These items will be added as headers, in the given Vector.
289 *
290 * @param headers The headers, coming from {@link DefaultUploadPolicy}
291 */
292 public void readCookieFromNavigator(Vector<String> headers);
293
294 /**
295 * This method allows to read the navigator userAgent. It will be added as headers, in the given Vector.
296 *
297 * @param headers The headers, coming from {@link DefaultUploadPolicy}
298 */
299 public void readUserAgentFromNavigator(Vector<String> headers);
300
301 /**
302 * Generates a valid URL, from a String. The generation may add the documentBase of the applet.
303 *
304 * @param url A url. Can be a path relative to the current one.
305 * @return The normalized URL
306 * @throws JUploadException
307 */
308 public String normalizeURL(String url) throws JUploadException;
309
310 /**
311 * Register a callback to be executed during applet termination.
312 *
313 * @param object The Object instance to be registered
314 * @param method The Method of that object to be registered. The method must be of type void and must not take any
315 * parameters and must be public.
316 */
317 public void registerUnload(Object object, String method);
318
319 /**
320 * Runs all callback that must be called when releasing the applet.
321 */
322 public void runUnload();
323
324 /**
325 * This allow runtime modifications of properties, from javascript. Currently, this can only be used after full
326 * initialization. This method only calls the UploadPolicy.setProperty method. <BR>
327 * Ex: document.jupload.setProperty(prop, value);
328 *
329 * @param prop The property name that must be set.
330 * @param value The value of this property.
331 */
332 public void setProperty(String prop, String value);
333
334 /**
335 * Public method that can be called by Javascript to start upload
336 *
337 * @return Returns the upload result. See the constants defined in the {@link JavascriptHandler} javadoc.
338 */
339 public String startUpload();
340 }