Added retries to delete commands and in case of error the process continues with...
[pithos-web-client] / src / gr / grnet / pithos / web / client / rest / DeleteRequest.java
index 9d0c379..b6b71ee 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2011 GRNET S.A. All rights reserved.
+ * Copyright 2011-2012 GRNET S.A. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or
  * without modification, are permitted provided that the following
 
 package gr.grnet.pithos.web.client.rest;
 
+import gr.grnet.pithos.web.client.foldertree.Resource;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.core.client.Scheduler.ScheduledCommand;
 import com.google.gwt.http.client.Request;
 import com.google.gwt.http.client.RequestBuilder;
 import com.google.gwt.http.client.RequestException;
 import com.google.gwt.http.client.Response;
-import gr.grnet.pithos.web.client.foldertree.Resource;
-import java.util.HashMap;
-import java.util.Map;
 
 /**
  * Created by IntelliJ IDEA. User: chstath Date: 7/5/11 Time: 5:29 PM To change this template use File | Settings | File
  * Templates.
  */
 public abstract class DeleteRequest implements ScheduledCommand {
-    private String api;
+       
+       protected static final int MAX_RETRIES = 3; 
+
+       protected int retries = 0; 
 
-    private String owner;
+       private String api;
+
+    protected String owner;
 
     private String path;
 
@@ -74,7 +82,7 @@ public abstract class DeleteRequest implements ScheduledCommand {
             builder.setHeader(header, headers.get(header));
         }
         try {
-            builder.sendRequest("", new RestRequestCallback(api + owner + path, Response.SC_NO_CONTENT) {
+            builder.sendRequest("", new RestRequestCallback<Resource>(api + owner + path, Response.SC_NO_CONTENT) {
                 @Override
                 public void onSuccess(Resource object) {
                     DeleteRequest.this.onSuccess(object);
@@ -87,15 +95,29 @@ public abstract class DeleteRequest implements ScheduledCommand {
 
                 @Override
                 public void onError(Request request, Throwable throwable) {
-                    DeleteRequest.this.onError(throwable);
+                       if (retries >= MAX_RETRIES)
+                               DeleteRequest.this.onError(throwable);
+                       else
+                               Scheduler.get().scheduleDeferred(DeleteRequest.this);
                 }
+
+                               @Override
+                               public void onUnauthorized(Response response) {
+                       if (retries >= MAX_RETRIES)
+                               DeleteRequest.this.onUnauthorized(response);
+                       else
+                               Scheduler.get().scheduleDeferred(DeleteRequest.this);
+                               }
             });
+            retries++;
         }
         catch (RequestException e) {
         }
     }
 
-    public void setHeader(String header, String value) {
+    protected abstract void onUnauthorized(Response response);
+
+       public void setHeader(String header, String value) {
         headers.put(header, value);
     }
 }