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;
52 public abstract class MultiplePostCommand extends RestCommand {
54 Map<String, Throwable> errors = new HashMap<String, Throwable>();
56 List<String> successPaths = new ArrayList<String>();
60 public MultiplePostCommand(Pithos app, String[] pathToDelete, final int okStatusCode){
61 this(app, pathToDelete, okStatusCode, true);
64 public MultiplePostCommand(Pithos app, String[] pathToDelete, String data, final int okStatusCode){
65 this(app, pathToDelete, data, okStatusCode, true);
68 public MultiplePostCommand(Pithos app, String[] pathToDelete, final int okStatusCode, boolean showLoading){
69 this(app, pathToDelete, "", okStatusCode, showLoading);
72 public MultiplePostCommand(Pithos app, String[] pathToDelete, String data, final int okStatusCode, boolean showLoading){
74 setShowLoadingIndicator(showLoading);
75 if(isShowLoadingIndicator())
76 app.showLoadingIndicator("Updating "+pathToDelete.length+" items", null);
78 for (final String pathg : pathToDelete) {
79 GWT.log("[DEL]"+pathg, null);
80 RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, pathg);
83 handleHeaders(builder, pathg);
84 builder.sendRequest(data, new RequestCallback() {
87 public void onError(Request arg0, Throwable arg1) {
88 errors.put(pathg, arg1);
92 public void onResponseReceived(Request arg0, Response arg1) {
93 if (arg1.getStatusCode() == okStatusCode)
94 successPaths.add(pathg);
95 else if(arg1.getStatusCode() == 403)
97 else if (arg1.getStatusCode() == 405)
98 errors.put(pathg, new InsufficientPermissionsException("You don't have permissions to delete this resource"));
100 errors.put(pathg, new RestException(pathg, arg1.getStatusCode(), arg1.getStatusText(), arg1.getText()));
104 } catch (Exception ex) {
105 errors.put(pathg, ex);
110 public boolean isComplete() {
111 return errors.size() + successPaths.size() == paths.length;
115 public boolean execute() {
116 boolean com = isComplete();
119 for(String p : errors.keySet())
120 onError(p, errors.get(p));
122 if(isShowLoadingIndicator())
123 app.hideLoadingIndicator();
134 public abstract void onError(String p, Throwable throwable);
136 public boolean hasErrors(){
137 return errors.size() >0;
142 * Retrieve the errors.
146 public Map<String, Throwable> getErrors() {
151 GWT.log("-ERRORS-->"+getErrors().size(), null);
152 for(String p : getErrors().keySet())
153 GWT.log("error:"+p, getErrors().get(p));
157 public void onError(Throwable t) {