From 55f8d95e10c34e66f07e0b48d90f170f469defc2 Mon Sep 17 00:00:00 2001 From: Cristina Alvarino Date: Fri, 8 Jul 2011 09:17:53 +0200 Subject: [PATCH] Option to delete a user pending in the interface of user list FEA: ItEr75S04BugFixing --- .../business/users/daos/IUserDAO.java | 2 ++ .../business/users/daos/UserDAO.java | 9 +++++ .../navalplanner/web/users/IUserModel.java | 3 ++ .../web/users/UserCRUDController.java | 36 +++++++++++++++++++ .../org/navalplanner/web/users/UserModel.java | 24 ++++++++++++- .../src/main/webapp/users/_listUsers.zul | 5 +++ 6 files changed, 78 insertions(+), 1 deletion(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/users/daos/IUserDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/users/daos/IUserDAO.java index ec97745f7..d3f59f810 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/users/daos/IUserDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/users/daos/IUserDAO.java @@ -26,6 +26,7 @@ import java.util.List; import org.navalplanner.business.common.daos.IGenericDAO; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.scenarios.entities.Scenario; +import org.navalplanner.business.users.entities.OrderAuthorization; import org.navalplanner.business.users.entities.User; /** @@ -80,4 +81,5 @@ public interface IUserDAO extends IGenericDAO{ public List findByLastConnectedScenario(Scenario scenario); + List getOrderAuthorizationsByUser(User user); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/users/daos/UserDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/users/daos/UserDAO.java index 5d188e3ed..50d0296f3 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/users/daos/UserDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/users/daos/UserDAO.java @@ -28,7 +28,9 @@ import org.hibernate.criterion.Restrictions; import org.navalplanner.business.common.daos.GenericDAOHibernate; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.scenarios.entities.Scenario; +import org.navalplanner.business.users.entities.OrderAuthorization; import org.navalplanner.business.users.entities.User; +import org.navalplanner.business.users.entities.UserOrderAuthorization; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -117,4 +119,11 @@ public class UserDAO extends GenericDAOHibernate return c.list(); } + @Override + public List getOrderAuthorizationsByUser(User user) { + List orderAuthorizations = getSession() + .createCriteria(UserOrderAuthorization.class) + .add(Restrictions.eq("user", user)).list(); + return orderAuthorizations; + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/IUserModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/IUserModel.java index eb30d6fd9..8958dcbe1 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/IUserModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/IUserModel.java @@ -23,6 +23,7 @@ package org.navalplanner.web.users; import java.util.List; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.users.entities.Profile; import org.navalplanner.business.users.entities.User; @@ -125,4 +126,6 @@ public interface IUserModel { boolean hasChangedDefaultPasswordOrDisabled(MandatoryUser admin); + void confirmRemove(User user) throws InstanceNotFoundException; + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserCRUDController.java index 0236466cf..791c2ccf3 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserCRUDController.java @@ -25,6 +25,8 @@ import static org.navalplanner.web.I18nHelper._; import java.util.List; +import org.apache.commons.logging.LogFactory; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.users.entities.Profile; import org.navalplanner.business.users.entities.User; @@ -46,6 +48,7 @@ import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Combobox; import org.zkoss.zul.Comboitem; import org.zkoss.zul.Constraint; +import org.zkoss.zul.Messagebox; import org.zkoss.zul.Textbox; import org.zkoss.zul.api.Window; @@ -58,6 +61,8 @@ import org.zkoss.zul.api.Window; public class UserCRUDController extends GenericForwardComposer implements IUserCRUDController { + private static final org.apache.commons.logging.Log LOG = LogFactory.getLog(UserCRUDController.class); + private Window createWindow; private Window listWindow; @@ -277,4 +282,35 @@ public class UserCRUDController extends GenericForwardComposer implements listWindow) : visibility; } + + public void confirmRemove(User user) { + int result = showConfirmDeleteUser(user); + if (result == Messagebox.OK) { + try { + userModel.confirmRemove(user); + goToList(); + } catch (InstanceNotFoundException e) { + messagesForUser + .showMessage( + Level.ERROR, + _("Cannot delete user: it does not exist anymore")); + LOG.error(_("Error removing element: ", user.getId()), e); + } + } + } + + private int showConfirmDeleteUser(User user) { + try { + return Messagebox.show( + _("Confirm deleting this User. Are you sure?"), + _("Delete"), Messagebox.OK | Messagebox.CANCEL, + Messagebox.QUESTION); + } catch (InterruptedException e) { + LOG.error( + _("Error on showing removing element: ", user.getId()), + e); + } + return Messagebox.CANCEL; + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserModel.java index 80b44a147..8b6ea8466 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/UserModel.java @@ -26,10 +26,11 @@ import java.util.List; import org.apache.commons.lang.Validate; import org.navalplanner.business.common.Configuration; -import org.navalplanner.business.common.Registry; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.business.users.daos.IOrderAuthorizationDAO; import org.navalplanner.business.users.daos.IUserDAO; +import org.navalplanner.business.users.entities.OrderAuthorization; import org.navalplanner.business.users.entities.Profile; import org.navalplanner.business.users.entities.User; import org.navalplanner.business.users.entities.UserRole; @@ -55,6 +56,9 @@ public class UserModel extends PasswordUtil implements IUserModel { @Autowired private IUserDAO userDAO; + @Autowired + private IOrderAuthorizationDAO orderAuthorizationDAO; + @Autowired private IDBPasswordEncoderService dbPasswordEncoderService; @@ -221,4 +225,22 @@ public class UserModel extends PasswordUtil implements IUserModel { return user.hasChangedDefaultPasswordOrDisabled(); } + @Override + @Transactional + public void confirmRemove(User user) + throws InstanceNotFoundException { + List orderAuthorizations = getReferencedByOtherEntities(user); + if (!orderAuthorizations.isEmpty()) { + for (OrderAuthorization orderAuthorization : orderAuthorizations) { + orderAuthorizationDAO.remove(orderAuthorization.getId()); + } + } + userDAO.remove(user.getId()); + } + + @Transactional(readOnly = true) + public List getReferencedByOtherEntities(User user){ + return userDAO.getOrderAuthorizationsByUser(user); + } + } diff --git a/navalplanner-webapp/src/main/webapp/users/_listUsers.zul b/navalplanner-webapp/src/main/webapp/users/_listUsers.zul index d7d5098ce..91e2da6cc 100644 --- a/navalplanner-webapp/src/main/webapp/users/_listUsers.zul +++ b/navalplanner-webapp/src/main/webapp/users/_listUsers.zul @@ -39,6 +39,11 @@ tooltiptext="${i18n:_('Edit')}" onClick="controller.goToEditForm(self.parent.parent.value);"> +