2 * Copyright 2011 GRNET S.A. All rights reserved.
4 * Redistribution and use in source and binary forms, with or
5 * without modification, are permitted provided that the following
8 * 1. Redistributions of source code must retain the above
9 * copyright notice, this list of conditions and the following
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.
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.
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.
35 package gr.grnet.pithos.web.client.rest;
37 import gr.grnet.pithos.web.client.Pithos;
38 import gr.grnet.pithos.web.client.InsufficientPermissionsException;
40 import java.util.ArrayList;
41 import java.util.HashMap;
42 import java.util.List;
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;
51 public abstract class MultipleDeleteCommand extends RestCommand {
54 Map<String, Throwable> errors = new HashMap<String, Throwable>();
56 List<String> successPaths = new ArrayList<String>();
60 public MultipleDeleteCommand(Pithos _app, String[] pathToDelete){
61 this(_app, pathToDelete, true);
64 public MultipleDeleteCommand(Pithos _app, String[] pathToDelete, boolean showLoading){
66 setShowLoadingIndicator(showLoading);
67 if(isShowLoadingIndicator())
68 app.showLoadingIndicator("Deleting "+pathToDelete.length+" items",null);
70 for (final String pathg : pathToDelete) {
71 GWT.log("[DEL]"+pathg, null);
72 RequestBuilder builder = new RequestBuilder(RequestBuilder.DELETE, pathg);
75 handleHeaders(builder, pathg);
76 builder.sendRequest("", new RequestCallback() {
79 public void onError(Request arg0, Throwable arg1) {
80 errors.put(pathg, arg1);
84 public void onResponseReceived(Request arg0, Response arg1) {
85 if (arg1.getStatusCode() == 204)
86 successPaths.add(pathg);
87 else if(arg1.getStatusCode() == 403)
89 else if (arg1.getStatusCode() == 405)
90 errors.put(pathg, new InsufficientPermissionsException("You don't have permissions to delete this resource"));
92 errors.put(pathg, new RestException(pathg, arg1.getStatusCode(), arg1.getStatusText(), arg1.getText()));
96 } catch (Exception ex) {
97 errors.put(pathg, ex);
102 public boolean isComplete() {
103 return errors.size() + successPaths.size() == paths.length;
107 public boolean execute() {
108 boolean com = isComplete();
111 for(String p : errors.keySet())
112 onError(p, errors.get(p));
114 if(isShowLoadingIndicator())
115 app.hideLoadingIndicator();
121 public boolean hasErrors(){
122 return errors.size() >0;
127 * Retrieve the errors.
131 public Map<String, Throwable> getErrors() {
136 GWT.log("-ERRORS-->"+getErrors().size(), null);
137 for(String p : getErrors().keySet())
138 GWT.log("error:"+p, getErrors().get(p));
141 public abstract void onError(String path, Throwable throwable);