1 //
2 // $Id$
3 //
4 // jupload - A file upload applet.
5 //
6 // Copyright 2010 The JUpload Team
7 //
8 // Created: 3 fevr. 2010
9 // Creator: etienne_sf
10 // Last modified: $Date$
11 //
12 // This program is free software; you can redistribute it and/or modify
13 // it under the terms of the GNU General Public License as published by
14 // the Free Software Foundation; either version 2 of the License, or
15 // (at your option) any later version.
16 //
17 // This program is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 // GNU General Public License for more details.
21 //
22 // You should have received a copy of the GNU General Public License
23 // along with this program; if not, write to the Free Software
24 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25
26 package wjhk.jupload2.upload;
27
28 import wjhk.jupload2.exception.JUploadException;
29
30 /**
31 * @author etienne_sf
32 *
33 */
34 public interface FileUploadManagerThread {
35
36 /** Indicates that nothings has begun */
37 public static final int UPLOAD_STATUS_NOT_STARTED = 1;
38
39 /**
40 * We're sending data to the server, for the file identified by
41 * numOfFileInCurrentUpload.
42 */
43 public static final int UPLOAD_STATUS_UPLOADING = 2;
44
45 /**
46 * A chunk (a part) of the file identified by numOfFileInCurrentUpload has
47 * been sent. But the server response has not been received yet.
48 */
49 public static final int UPLOAD_STATUS_CHUNK_UPLOADED_WAITING_FOR_RESPONSE = 3;
50
51 /**
52 * All data for the file identified by numOfFileInCurrentUpload has been
53 * sent. But the server response has not been received yet.
54 */
55 public static final int UPLOAD_STATUS_FILE_UPLOADED_WAITING_FOR_RESPONSE = 4;
56
57 /**
58 * The upload for the file identified by numOfFileInCurrentUpload is
59 * finished
60 */
61 public static final int UPLOAD_STATUS_UPLOADED = 5;
62
63 /**
64 * The heart of the program. This method prepare the upload, then calls
65 * doUpload for each HTTP request.
66 *
67 * @throws InterruptedException
68 * @see java.lang.Thread#join()
69 */
70 public void join() throws InterruptedException;
71
72 /**
73 * The heart of the program. This method prepare the upload, then calls
74 * doUpload for each HTTP request.
75 *
76 * @see java.lang.Thread#run()
77 */
78 public void run();
79
80 /**
81 * The heart of the program. This method prepare the upload, then calls
82 * doUpload for each HTTP request.
83 *
84 * @see java.lang.Thread#start()
85 */
86 public void start();
87
88 /**
89 * Check if the thread is running...
90 *
91 * @see java.lang.Thread#interrupt()
92 */
93 public void interrupt();
94
95 /**
96 * Check if the thread is running...
97 *
98 * @return True if it's running
99 * @see java.lang.Thread#isAlive()
100 */
101 public boolean isAlive();
102
103 /**
104 * Stores the last upload exception that occurs. This method won't write to
105 * the log file.
106 *
107 * @param uploadException
108 */
109 public void setUploadException(JUploadException uploadException);
110
111 /**
112 * Get the last upload exception that occurs.
113 *
114 * @return The last upload exception, or null if no exception occurs.
115 */
116 public JUploadException getUploadException();
117
118 /**
119 * Indicates whether the upload is finished or not. As several conditions
120 * can make the upload being finished (all files uploaded, an error occured,
121 * the user stops the upload), a specific boolean is built. It's managed by
122 * the {@link #run()} method.
123 *
124 * @return true if the upload is finished. False otherwise.
125 */
126 public boolean isUploadFinished();
127
128 /**
129 * Indicates if the upload has been stopped by the user, or by any upload
130 * error. This method should not be used to know if it's the end of the
131 * upload. To do this, see {@link #isUploadFinished()}
132 *
133 * @return true if the current upload has been asked to stop by the user,
134 * false otherwise.
135 */
136 public boolean isUploadStopped();
137
138 /**
139 * Used by the UploadFileData#uploadFile(java.io.OutputStream, long) for
140 * each uploaded buffer
141 *
142 * @param nbBytes
143 * Number of additional bytes that where uploaded.
144 * @param uploadFileData
145 * The file that is currently being uploade (or null if no file
146 * is being uploaded)
147 * @throws JUploadException
148 */
149 public void nbBytesUploaded(long nbBytes, UploadFileData uploadFileData)
150 throws JUploadException;
151
152 /**
153 * Indicate the current state of the upload, to allow a correct display of
154 * UPLOAD_STATUS_UPLOADED status. the upload progress bar.
155 *
156 * @param uploadFilePacket
157 * The current packet. This parameter is mandatory only for the
158 * @param uploadFileData
159 * The file whose upload begins, is going on or is finished.
160 * @param uploadStatus
161 * @throws JUploadException
162 */
163 public void setUploadStatus(UploadFilePacket uploadFilePacket,
164 UploadFileData uploadFileData, int uploadStatus)
165 throws JUploadException;
166
167 /**
168 * Reaction to the user click on the 'Stop' button, or any action from the
169 * user asking to stop the upload. The upload should go on for the current
170 * file, and stop before starting the next upload request to the server, to
171 * avoid strange problems on the server.
172 */
173 public void stopUpload();
174
175 /**
176 * This method is called each time a new file is sent to the server. It's
177 * main aim is to allow a proper display of the progress bar. It is public,
178 * as upload is done in another thread, whose class maybe in another
179 * package.
180 *
181 * @param uploadFilePacket
182 * @param newlyUploadedFileData
183 * @throws JUploadException
184 */
185 public void anotherFileHasBeenSent(UploadFilePacket uploadFilePacket,
186 UploadFileData newlyUploadedFileData) throws JUploadException;
187
188 /**
189 * This method is called when the server response for the upload indicates a
190 * success. It is public, as upload is done in another thread, whose class
191 * maybe in another package.
192 *
193 * @param packet
194 * The packet of files that was successfully uploaded.
195 * @throws JUploadException
196 */
197 public void currentRequestIsFinished(UploadFilePacket packet)
198 throws JUploadException;
199
200 }