Skip to content
Snippets Groups Projects
Commit 2233f5fe authored by Tor-Einar Skog's avatar Tor-Einar Skog
Browse files

Gracefully delete user that owns barkbeetle season trapsites [BN-14]

parent 606616a0
No related branches found
No related tags found
No related merge requests found
...@@ -51,6 +51,8 @@ import no.nibio.vips.logic.entity.VipsLogicRole; ...@@ -51,6 +51,8 @@ import no.nibio.vips.logic.entity.VipsLogicRole;
import no.nibio.vips.logic.entity.VipsLogicUser; import no.nibio.vips.logic.entity.VipsLogicUser;
import no.nibio.vips.logic.entity.misc.UserResources; import no.nibio.vips.logic.entity.misc.UserResources;
import no.nibio.vips.logic.i18n.SessionLocaleUtil; 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.logic.util.Globals;
import no.nibio.vips.util.ServletUtil; import no.nibio.vips.util.ServletUtil;
import no.nibio.web.forms.FormField; import no.nibio.web.forms.FormField;
...@@ -71,6 +73,9 @@ public class UserController extends HttpServlet { ...@@ -71,6 +73,9 @@ public class UserController extends HttpServlet {
@EJB @EJB
UserBean userBean; UserBean userBean;
@EJB
BarkbeetleBean barkbeetleBean;
/** /**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
...@@ -406,9 +411,12 @@ public class UserController extends HttpServlet { ...@@ -406,9 +411,12 @@ public class UserController extends HttpServlet {
Integer userId = Integer.valueOf(request.getParameter("userId")); Integer userId = Integer.valueOf(request.getParameter("userId"));
VipsLogicUser viewUser = em.find(VipsLogicUser.class, userId); VipsLogicUser viewUser = em.find(VipsLogicUser.class, userId);
UserResources userResources = userBean.getUserResources(viewUser); 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 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()); 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 { ...@@ -423,7 +431,9 @@ public class UserController extends HttpServlet {
request.setAttribute("viewUser", viewUser); request.setAttribute("viewUser", viewUser);
request.setAttribute("userResources", userResources); request.setAttribute("userResources", userResources);
java.util.Collections.sort(users);
request.setAttribute("users", users); request.setAttribute("users", users);
request.setAttribute("userBarkbeetleSeasonTrapsites", userSeasonTrapsites);
request.setAttribute("errorMsg", request.getParameter("errorMsg")); request.setAttribute("errorMsg", request.getParameter("errorMsg"));
request.getRequestDispatcher("/userDeleteForm.ftl").forward(request, response); request.getRequestDispatcher("/userDeleteForm.ftl").forward(request, response);
} }
...@@ -450,7 +460,9 @@ public class UserController extends HttpServlet { ...@@ -450,7 +460,9 @@ public class UserController extends HttpServlet {
// Are there resources connected to this user? // Are there resources connected to this user?
UserResources userResources = userBean.getUserResources(viewUser); 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; boolean resourcesTransferred = false;
try try
...@@ -460,6 +472,7 @@ public class UserController extends HttpServlet { ...@@ -460,6 +472,7 @@ public class UserController extends HttpServlet {
if(transferToUser != null) if(transferToUser != null)
{ {
userBean.transferUserResources(viewUser,transferToUser); userBean.transferUserResources(viewUser,transferToUser);
barkbeetleBean.transferSeasonTrapsites(viewUser,transferToUser);
resourcesTransferred = true; resourcesTransferred = true;
} }
} }
......
...@@ -117,6 +117,30 @@ public class BarkbeetleBean { ...@@ -117,6 +117,30 @@ public class BarkbeetleBean {
.getResultList(); .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 * Get the list of trapsites for the given season
* *
......
...@@ -35,7 +35,10 @@ ...@@ -35,7 +35,10 @@
<li>${i18nBundle.weatherStations}: ${userResources.pois?size}</li> <li>${i18nBundle.weatherStations}: ${userResources.pois?size}</li>
<li>${i18nBundle.messages}: ${userResources.messageLocales?size}</li> <li>${i18nBundle.messages}: ${userResources.messageLocales?size}</li>
<li>${i18nBundle.forecasts}: ${userResources.forecastConfigurations?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> </ul>
<h2>${i18nBundle.transferResources}</h2> <h2>${i18nBundle.transferResources}</h2>
<form action="/user?action=deleteUser" method="POST" onsubmit="return confirm('${i18nBundle.confirmDelete}');"/> <form action="/user?action=deleteUser" method="POST" onsubmit="return confirm('${i18nBundle.confirmDelete}');"/>
...@@ -48,7 +51,7 @@ ...@@ -48,7 +51,7 @@
</#if> </#if>
<#list users as user> <#list users as user>
<#if user.userId != viewUser.userId> <#if user.userId != viewUser.userId>
<option value="${user.userId}">${user.firstName!""} ${user.lastName}</option> <option value="${user.userId}">${user.lastName}, ${user.firstName!""}</option>
</#if> </#if>
</#list> </#list>
</select> </select>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment