Removed all static references to the Pithos class
[pithos-web-client] / src / gr / grnet / pithos / web / client / FileUploadGearsIEDialog.java
1 /*
2  * Copyright 2011 GRNET S.A. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or
5  * without modification, are permitted provided that the following
6  * conditions are met:
7  *
8  *   1. Redistributions of source code must retain the above
9  *      copyright notice, this list of conditions and the following
10  *      disclaimer.
11  *
12  *   2. Redistributions in binary form must reproduce the above
13  *      copyright notice, this list of conditions and the following
14  *      disclaimer in the documentation and/or other materials
15  *      provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  *
30  * The views and conclusions contained in the software and
31  * documentation are those of the authors and should not be
32  * interpreted as representing official policies, either expressed
33  * or implied, of GRNET S.A.
34  */
35 package gr.grnet.pithos.web.client;
36
37 import java.util.List;
38
39 import gr.grnet.pithos.web.client.rest.RestCommand;
40
41 import com.google.gwt.gears.client.desktop.File;
42 import com.google.gwt.gears.client.httprequest.HttpRequest;
43 import com.google.gwt.gears.client.httprequest.ProgressEvent;
44 import com.google.gwt.gears.client.httprequest.ProgressHandler;
45 import com.google.gwt.gears.client.httprequest.RequestCallback;
46
47 /**
48  * The 'File upload' dialog box implementation with Google Gears support
49  * for IE.
50  */
51 public class FileUploadGearsIEDialog extends FileUploadGearsDialog {
52
53         /**
54          * Perform the HTTP request to upload the specified file.
55          */     
56         @Override
57         protected void doSend(final List<File> filesRemaining) {
58                 HttpRequest request = factory.createHttpRequest();
59                 requests.add(request);
60                 String method = "POST";
61
62                 String path;
63                 final String filename = getFilename(filesRemaining.get(0).getName());
64                 path = folder.getUri();
65                 if (!path.endsWith("/"))
66                         path = path + "/";
67                 path = path + encode(filename);
68
69                 String token = app.getToken();
70                 String resource = path.substring(app.getApiPath().length()-1, path.length());
71                 String date = RestCommand.getDate();
72                 String sig = RestCommand.calculateSig(method, date, resource, RestCommand.base64decode(token));
73                 request.open(method, path);
74                 request.setRequestHeader("Authorization", app.getCurrentUserResource().getUsername() + " " + sig);
75                 request.setRequestHeader("Accept", "application/json; charset=utf-8");
76                 request.setCallback(new RequestCallback() {
77                         @Override
78                         public void onResponseReceived(HttpRequest req) {
79                                 // XXX: No error checking, since IE throws an Internal Error
80                                 // when accessing req.getStatus().
81                                 filesRemaining.remove(0);
82                                 if(filesRemaining.isEmpty()){                                   
83                                         finish();                                       
84                                 }
85                                 doSend(filesRemaining); 
86                         }
87                 });
88                 request.getUpload().setProgressHandler(new ProgressHandler() {
89                         @Override
90                         public void onProgress(ProgressEvent event) {
91                                 double pcnt = (double) event.getLoaded() / event.getTotal();
92                                 progressBars.get(0).setProgress((int) Math.floor(pcnt * 100));
93                                 if(pcnt*100 == 100)
94                                         progressBars.remove(0);
95                         }
96                 });
97                 request.send(filesRemaining.get(0).getBlob());
98         }
99
100 }