Use exponential backoff when updating the password or last login time in WebDAV.
[pithos] / src / gr / ebs / gss / server / rest / TrashHandler.java
index 37b3dd0..281dbc4 100644 (file)
@@ -24,11 +24,13 @@ import gr.ebs.gss.client.exceptions.RpcException;
 import gr.ebs.gss.server.domain.User;
 import gr.ebs.gss.server.domain.dto.FileHeaderDTO;
 import gr.ebs.gss.server.domain.dto.FolderDTO;
+import gr.ebs.gss.server.ejb.TransactionHelper;
 
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.Callable;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
@@ -117,6 +119,7 @@ public class TrashHandler extends RequestHandler {
                                        put("content", f.getMimeType()).
                                        put("path", f.getFolder().getPath()).
                                        put("creationDate", f.getAuditInfo().getCreationDate().getTime()).
+                                       put("modificationDate", f.getAuditInfo().getModificationDate().getTime()).
                                put("uri", getApiRoot() + f.getURI());
                                JSONObject p = new JSONObject();
                                p.put("uri", getApiRoot() + f.getFolder().getURI()).
@@ -156,14 +159,20 @@ public class TrashHandler extends RequestHandler {
        }
                try {
                        User user = getUser(req);
-                       User owner = getOwner(req);
+                       final User owner = getOwner(req);
                        if (!owner.equals(user))
                                throw new InsufficientPermissionsException("User " + user.getUsername()
                                                        + " does not have permission to empty the trash can owned by "
                                                        + owner.getUsername());
                        if (logger.isDebugEnabled())
                                logger.debug("Emptying trash for user " + owner.getUsername());
-                       getService().emptyTrash(owner.getId());
+                       new TransactionHelper<Void>().tryExecute(new Callable<Void>() {
+                               @Override
+                               public Void call() throws Exception {
+                                       getService().emptyTrash(owner.getId());
+                                       return null;
+                               }
+                       });
                        resp.setStatus(HttpServletResponse.SC_NO_CONTENT);
                } catch (RpcException e) {
                        logger.error("", e);
@@ -172,6 +181,9 @@ public class TrashHandler extends RequestHandler {
                        resp.sendError(HttpServletResponse.SC_NOT_FOUND, e.getMessage());
                } catch (InsufficientPermissionsException e) {
                        resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, e.getMessage());
+               } catch (Exception e) {
+                       logger.error("", e);
+                       resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                }
        }