Removed all static references to the Pithos class
[pithos] / web_client / src / gr / grnet / pithos / web / client / rest / MultipleDeleteCommand.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.rest;
36
37 import gr.grnet.pithos.web.client.Pithos;
38 import gr.grnet.pithos.web.client.InsufficientPermissionsException;
39
40 import java.util.ArrayList;
41 import java.util.HashMap;
42 import java.util.List;
43 import java.util.Map;
44
45 import com.google.gwt.core.client.GWT;
46 import com.google.gwt.http.client.Request;
47 import com.google.gwt.http.client.RequestBuilder;
48 import com.google.gwt.http.client.RequestCallback;
49 import com.google.gwt.http.client.Response;
50
51 public abstract class MultipleDeleteCommand extends RestCommand {
52
53
54         Map<String, Throwable> errors = new HashMap<String, Throwable>();
55
56         List<String> successPaths = new ArrayList<String>();
57
58         String[] paths;
59
60         public MultipleDeleteCommand(Pithos _app, String[] pathToDelete){
61                 this(_app, pathToDelete, true);
62         }
63
64         public MultipleDeleteCommand(Pithos _app, String[] pathToDelete, boolean showLoading){
65         super(_app);
66                 setShowLoadingIndicator(showLoading);
67                 if(isShowLoadingIndicator())
68                         app.showLoadingIndicator("Deleting "+pathToDelete.length+" items",null);
69                 paths = pathToDelete;
70                 for (final String pathg : pathToDelete) {
71                         GWT.log("[DEL]"+pathg, null);
72                         RequestBuilder builder = new RequestBuilder(RequestBuilder.DELETE, pathg);
73
74                         try {
75                                 handleHeaders(builder, pathg);
76                                 builder.sendRequest("", new RequestCallback() {
77
78                                         @Override
79                                         public void onError(Request arg0, Throwable arg1) {
80                                                 errors.put(pathg, arg1);
81                                         }
82
83                                         @Override
84                                         public void onResponseReceived(Request arg0, Response arg1) {
85                                                 if (arg1.getStatusCode() == 204)
86                                                         successPaths.add(pathg);
87                                                 else if(arg1.getStatusCode() == 403)
88                                                         sessionExpired();
89                                                 else if (arg1.getStatusCode() == 405)
90                                                         errors.put(pathg, new InsufficientPermissionsException("You don't have permissions to delete this resource"));
91                                                 else
92                                                         errors.put(pathg, new RestException(pathg, arg1.getStatusCode(), arg1.getStatusText(), arg1.getText()));
93                                         }
94
95                                 });
96                         } catch (Exception ex) {
97                                 errors.put(pathg, ex);
98                         }
99                 }
100         }
101
102         public boolean isComplete() {
103                 return errors.size() + successPaths.size() == paths.length;
104         }
105
106         @Override
107         public boolean execute() {
108                 boolean com = isComplete();
109                 if (com) {
110                         if(hasErrors())
111                                 for(String p : errors.keySet())
112                                         onError(p, errors.get(p));
113                         onComplete();
114                         if(isShowLoadingIndicator())
115                                 app.hideLoadingIndicator();
116                         return false;
117                 }
118                 return true;
119         }
120
121         public boolean hasErrors(){
122                 return errors.size() >0;
123         }
124
125
126         /**
127          * Retrieve the errors.
128          *
129          * @return the errors
130          */
131         public Map<String, Throwable> getErrors() {
132                 return errors;
133         }
134
135         public void debug(){
136                 GWT.log("-ERRORS-->"+getErrors().size(), null);
137                 for(String p : getErrors().keySet())
138                         GWT.log("error:"+p, getErrors().get(p));
139         }
140
141         public abstract void onError(String path, Throwable throwable);
142
143 }