diff --git a/src/main/java/no/nibio/vips/logic/controller/servlet/UserController.java b/src/main/java/no/nibio/vips/logic/controller/servlet/UserController.java index 7fd46c594c2039e42bd93b8683919e89f56bf0fa..8f984d62eac24826a3def60eb4760d0be1f3b210 100755 --- a/src/main/java/no/nibio/vips/logic/controller/servlet/UserController.java +++ b/src/main/java/no/nibio/vips/logic/controller/servlet/UserController.java @@ -51,6 +51,8 @@ import no.nibio.vips.logic.entity.VipsLogicRole; import no.nibio.vips.logic.entity.VipsLogicUser; import no.nibio.vips.logic.entity.misc.UserResources; import no.nibio.vips.logic.i18n.SessionLocaleUtil; +import no.nibio.vips.logic.modules.barkbeetle.BarkbeetleBean; +import no.nibio.vips.logic.modules.barkbeetle.SeasonTrapsite; import no.nibio.vips.logic.util.Globals; import no.nibio.vips.util.ServletUtil; import no.nibio.web.forms.FormField; @@ -71,6 +73,9 @@ public class UserController extends HttpServlet { @EJB UserBean userBean; + + @EJB + BarkbeetleBean barkbeetleBean; /** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> @@ -406,9 +411,12 @@ public class UserController extends HttpServlet { Integer userId = Integer.valueOf(request.getParameter("userId")); VipsLogicUser viewUser = em.find(VipsLogicUser.class, userId); UserResources userResources = userBean.getUserResources(viewUser); + + // Barkbeetle module dependencies + List<SeasonTrapsite> userSeasonTrapsites = barkbeetleBean.getSeasonTrapsites(viewUser); // If some resources connected, render form, otherwise, route to user delete - if(userResources.isEmpty()) + if(userResources.isEmpty() && userSeasonTrapsites.isEmpty()) { response.sendRedirect(new StringBuilder(Globals.PROTOCOL + "://").append(ServletUtil.getServerName(request)).append("/user").append("?action=deleteUser&userId=").append(userId).toString()); } @@ -423,7 +431,9 @@ public class UserController extends HttpServlet { request.setAttribute("viewUser", viewUser); request.setAttribute("userResources", userResources); + java.util.Collections.sort(users); request.setAttribute("users", users); + request.setAttribute("userBarkbeetleSeasonTrapsites", userSeasonTrapsites); request.setAttribute("errorMsg", request.getParameter("errorMsg")); request.getRequestDispatcher("/userDeleteForm.ftl").forward(request, response); } @@ -450,7 +460,9 @@ public class UserController extends HttpServlet { // Are there resources connected to this user? UserResources userResources = userBean.getUserResources(viewUser); - if(! userResources.isEmpty()) + // Barkbeetle module dependencies + List<SeasonTrapsite> userSeasonTrapsites = barkbeetleBean.getSeasonTrapsites(viewUser); + if(! userResources.isEmpty() || ! userSeasonTrapsites.isEmpty()) { boolean resourcesTransferred = false; try @@ -460,6 +472,7 @@ public class UserController extends HttpServlet { if(transferToUser != null) { userBean.transferUserResources(viewUser,transferToUser); + barkbeetleBean.transferSeasonTrapsites(viewUser,transferToUser); resourcesTransferred = true; } } diff --git a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java index 2a0ee7e8998b57b5e656761ad98823f8488e0f79..a6e3a4afa3e0e38a5c62e771e4b48d7b16c7838d 100644 --- a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java +++ b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java @@ -117,6 +117,30 @@ public class BarkbeetleBean { .getResultList(); } + /** + * Get all trapsites belonging to a specific user + * @param user + * @return + */ + public List<SeasonTrapsite> getSeasonTrapsites(VipsLogicUser user) + { + return em.createNamedQuery("SeasonTrapsite.findByUserId") + .setParameter("userId", user) + .getResultList(); + } + + /** + * Transferring ownership of all season trapsites for all seasons belonging to a user + * to another user + * @param fromUser the current owner of the sites + * @param toUser the new owner of the sites + */ + public void transferSeasonTrapsites(VipsLogicUser fromUser, VipsLogicUser toUser){ + em.createNativeQuery("UPDATE barkbeetle.season_trapsite SET user_id=:toUserId WHERE user_id=:fromUserId") + .setParameter("fromUserId", fromUser.getUserId()) + .setParameter("toUserId", toUser.getUserId()) + .executeUpdate(); + } /** * Get the list of trapsites for the given season * diff --git a/src/main/webapp/templates/userDeleteForm.ftl b/src/main/webapp/templates/userDeleteForm.ftl index c258a807a962d6286321e93abf7167d29adaa6a5..913557fc25ee0407df06f537b47d5536dc7e0dee 100755 --- a/src/main/webapp/templates/userDeleteForm.ftl +++ b/src/main/webapp/templates/userDeleteForm.ftl @@ -35,7 +35,10 @@ <li>${i18nBundle.weatherStations}: ${userResources.pois?size}</li> <li>${i18nBundle.messages}: ${userResources.messageLocales?size}</li> <li>${i18nBundle.forecasts}: ${userResources.forecastConfigurations?size}</li> - <li>${i18nBundle.observations}: ${userResources.observations?size}</li> + <li>${i18nBundle.observations}: ${userResources.observations?size}</li> + <#if userBarkbeetleSeasonTrapsites?size gt 0 > + <li>Barkbillefellelokaliteter: ${userBarkbeetleSeasonTrapsites?size}</li> + </#if> </ul> <h2>${i18nBundle.transferResources}</h2> <form action="/user?action=deleteUser" method="POST" onsubmit="return confirm('${i18nBundle.confirmDelete}');"/> @@ -48,7 +51,7 @@ </#if> <#list users as user> <#if user.userId != viewUser.userId> - <option value="${user.userId}">${user.firstName!""} ${user.lastName}</option> + <option value="${user.userId}">${user.lastName}, ${user.firstName!""}</option> </#if> </#list> </select>