X-Git-Url: https://code.grnet.gr/git/pithos/blobdiff_plain/bd5ad44d026a53bdc216a88722c62886f756908e..38621e3cb3db11ccac0983040edb6962b9c74e21:/src/gr/ebs/gss/server/rest/GroupsHandler.java?ds=sidebyside diff --git a/src/gr/ebs/gss/server/rest/GroupsHandler.java b/src/gr/ebs/gss/server/rest/GroupsHandler.java index 3589e14..76e148c 100644 --- a/src/gr/ebs/gss/server/rest/GroupsHandler.java +++ b/src/gr/ebs/gss/server/rest/GroupsHandler.java @@ -25,11 +25,13 @@ import gr.ebs.gss.client.exceptions.RpcException; import gr.ebs.gss.server.domain.User; import gr.ebs.gss.server.domain.dto.GroupDTO; import gr.ebs.gss.server.domain.dto.UserDTO; +import gr.ebs.gss.server.ejb.TransactionHelper; import java.io.IOException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.List; +import java.util.concurrent.Callable; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -165,17 +167,23 @@ public class GroupsHandler 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 modify the groups owned by " + owner.getUsername()); if (path.equals("/")) { // Request to add group - String group = req.getParameter(GROUP_PARAMETER); + final String group = req.getParameter(GROUP_PARAMETER); if (logger.isDebugEnabled()) logger.debug("Adding group " + group); - getService().createGroup(owner.getId(), group); + new TransactionHelper().tryExecute(new Callable() { + @Override + public Void call() throws Exception { + getService().createGroup(owner.getId(), group); + return null; + } + }); resp.setStatus(HttpServletResponse.SC_CREATED); } else { // Request to add group member @@ -187,19 +195,27 @@ public class GroupsHandler extends RequestHandler { if (logger.isDebugEnabled()) logger.debug("Adding member " + username + " to group " + path); - GroupDTO group = getService().getGroup(owner.getId(), URLDecoder.decode(path,"UTF-8")); - User member = getService().findUser(username); + final GroupDTO group = getService().getGroup(owner.getId(), URLDecoder.decode(path,"UTF-8")); + final User member = getService().findUser(username); if (member == null) { resp.sendError(HttpServletResponse.SC_NOT_FOUND, "User " + username + " not found"); return; } - getService().addUserToGroup(owner.getId(), group.getId(), member.getId()); + new TransactionHelper().tryExecute(new Callable() { + @Override + public Void call() throws Exception { + getService().addUserToGroup(owner.getId(), group.getId(), member.getId()); + return null; + } + }); resp.setStatus(HttpServletResponse.SC_CREATED); } // Workaround for IE's broken caching behavior. resp.setHeader("Expires", "-1"); } catch (ObjectNotFoundException e) { resp.sendError(HttpServletResponse.SC_NOT_FOUND, e.getMessage()); + } catch (IllegalArgumentException e) { + resp.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage()); } catch (DuplicateNameException e) { resp.sendError(HttpServletResponse.SC_CONFLICT, e.getMessage()); } catch (RpcException e) { @@ -207,7 +223,11 @@ public class GroupsHandler extends RequestHandler { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } 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); } + } /** @@ -232,7 +252,7 @@ public class GroupsHandler extends RequestHandler { int slash = path.indexOf('/'); 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 modify the groups owned by " @@ -242,15 +262,27 @@ public class GroupsHandler extends RequestHandler { if (logger.isDebugEnabled()) logger.debug("Removing member " + path.substring(slash + 1) + " from group " + path.substring(0, slash)); - GroupDTO group = getService().getGroup(owner.getId(), URLDecoder.decode(path.substring(0, slash),"UTF-8")); - for (UserDTO u: group.getMembers()) + final GroupDTO group = getService().getGroup(owner.getId(), URLDecoder.decode(path.substring(0, slash),"UTF-8")); + for (final UserDTO u: group.getMembers()) if (u.getUsername().equals(path.substring(slash + 1))) - getService().removeMemberFromGroup(owner.getId(), group.getId(), u.getId()); + new TransactionHelper().tryExecute(new Callable() { + @Override + public Void call() throws Exception { + getService().removeMemberFromGroup(owner.getId(), group.getId(), u.getId()); + return null; + } + }); } else { if (logger.isDebugEnabled()) logger.debug("Removing group " + path); - GroupDTO group = getService().getGroup(owner.getId(), URLDecoder.decode(path,"UTF-8")); - getService().deleteGroup(owner.getId(), group.getId()); + final GroupDTO group = getService().getGroup(owner.getId(), URLDecoder.decode(path,"UTF-8")); + new TransactionHelper().tryExecute(new Callable() { + @Override + public Void call() throws Exception { + getService().deleteGroup(owner.getId(), group.getId()); + return null; + } + }); } resp.setStatus(HttpServletResponse.SC_NO_CONTENT); // Workaround for IE's broken caching behavior. @@ -262,6 +294,9 @@ public class GroupsHandler 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); } } }