diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java index d68d09454..3ee45c223 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java @@ -246,6 +246,7 @@ public class OrderCRUDController extends GenericForwardComposer { .getFellowIfAny("orderElementAuthorizations"); orderAuthorizationController = (OrderAuthorizationController) orderElementAuthorizations .getVariable("orderAuthorizationController", true); + orderAuthorizationController.setMessagesForUserComponent(messagesForUser); } public List getOrders() { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/OrderAuthorizationController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/OrderAuthorizationController.java index 2983bf428..0f9e22a80 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/OrderAuthorizationController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/OrderAuthorizationController.java @@ -20,6 +20,8 @@ package org.navalplanner.web.users; +import static org.navalplanner.web.I18nHelper._; + import java.util.ArrayList; import java.util.List; @@ -30,6 +32,8 @@ import org.navalplanner.business.users.entities.Profile; import org.navalplanner.business.users.entities.ProfileOrderAuthorization; import org.navalplanner.business.users.entities.User; import org.navalplanner.business.users.entities.UserOrderAuthorization; +import org.navalplanner.web.common.IMessagesForUser; +import org.navalplanner.web.common.Level; import org.navalplanner.web.common.Util; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.util.GenericForwardComposer; @@ -47,6 +51,8 @@ public class OrderAuthorizationController extends GenericForwardComposer{ private IOrderAuthorizationModel orderAuthorizationModel; + private IMessagesForUser messagesForUser; + @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); @@ -88,12 +94,26 @@ public class OrderAuthorizationController extends GenericForwardComposer{ authorizations.add(OrderAuthorizationType.WRITE_AUTHORIZATION); } if (comboItem.getValue() instanceof User) { - orderAuthorizationModel.addUserOrderAuthorization( - (User)comboItem.getValue(), authorizations); + List result = + orderAuthorizationModel.addUserOrderAuthorization( + (User)comboItem.getValue(), authorizations); + if(result != null) { + messagesForUser.showMessage(Level.WARNING, + _("Cannot add some authorizations for user {0}. " + + "Probably they are already present.", + ((User)comboItem.getValue()).getLoginName())); + } } else if (comboItem.getValue() instanceof Profile) { - orderAuthorizationModel.addProfileOrderAuthorization( - (Profile)comboItem.getValue(), authorizations); + List result = + orderAuthorizationModel.addProfileOrderAuthorization( + (Profile)comboItem.getValue(), authorizations); + if(result != null) { + messagesForUser.showMessage(Level.WARNING, + _("Cannot add some authorizations for profile {0}. " + + "Probably they are already present.", + ((Profile)comboItem.getValue()).getProfileName())); + } } } Util.reloadBindings(window); @@ -103,4 +123,8 @@ public class OrderAuthorizationController extends GenericForwardComposer{ orderAuthorizationModel.removeOrderAuthorization(orderAuthorization); Util.reloadBindings(window); } + + public void setMessagesForUserComponent(IMessagesForUser component) { + messagesForUser = component; + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/OrderAuthorizationModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/OrderAuthorizationModel.java index ad8db6755..56cdca829 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/users/OrderAuthorizationModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/users/OrderAuthorizationModel.java @@ -47,25 +47,43 @@ public class OrderAuthorizationModel implements IOrderAuthorizationModel { @Override public List addProfileOrderAuthorization( Profile profile, List authorizations) { + List duplicated = + new ArrayList(); + List existingAuthorizations = + listAuthorizationsByProfile(profile); for(OrderAuthorizationType type : authorizations) { - ProfileOrderAuthorization orderAuthorization = - createProfileOrderAuthorization(order, profile); - orderAuthorization.setAuthorizationType(type); - profileOrderAuthorizationList.add(orderAuthorization); + if(listContainsAuthorizationType(existingAuthorizations, type)) { + duplicated.add(type); + } + else { + ProfileOrderAuthorization orderAuthorization = + createProfileOrderAuthorization(order, profile); + orderAuthorization.setAuthorizationType(type); + profileOrderAuthorizationList.add(orderAuthorization); + } } - return null; + return duplicated.isEmpty()? null : duplicated; } @Override public List addUserOrderAuthorization( User user, List authorizations) { + List duplicated = + new ArrayList(); + List existingAuthorizations = + listAuthorizationsByUser(user); for(OrderAuthorizationType type : authorizations) { - UserOrderAuthorization orderAuthorization = - createUserOrderAuthorization(order, user); - orderAuthorization.setAuthorizationType(type); - userOrderAuthorizationList.add(orderAuthorization); + if(listContainsAuthorizationType(existingAuthorizations, type)) { + duplicated.add(type); + } + else { + UserOrderAuthorization orderAuthorization = + createUserOrderAuthorization(order, user); + orderAuthorization.setAuthorizationType(type); + userOrderAuthorizationList.add(orderAuthorization); + } } - return null; + return duplicated.isEmpty()? null : duplicated; } @Override @@ -184,4 +202,33 @@ public class OrderAuthorizationModel implements IOrderAuthorizationModel { this.order = newOrder; } + private List listAuthorizationsByUser(User user) { + List list = new ArrayList(); + for(UserOrderAuthorization authorization : userOrderAuthorizationList) { + if(authorization.getUser().getId().equals(user.getId())) { + list.add(authorization); + } + } + return list; + } + + private List listAuthorizationsByProfile(Profile profile){ + List list = new ArrayList(); + for(ProfileOrderAuthorization authorization : profileOrderAuthorizationList) { + if(authorization.getProfile().getId().equals(profile.getId())) { + list.add(authorization); + } + } + return list; + } + + private boolean listContainsAuthorizationType(List list, + OrderAuthorizationType authorizationType) { + for(OrderAuthorization authorization : list) { + if(authorization.getAuthorizationType().equals(authorizationType)) { + return true; + } + } + return false; + } }