From 70c456ab5026563dde3288a6ca9ce4d12ee164f0 Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Wed, 20 Jul 2016 12:13:41 +0000 Subject: [PATCH] fixed possibility to add double join request git-svn-id: https://svn.research-infrastructures.eu/d4science/gcube/trunk/portlets/user/join-vre@130581 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../user/joinvre/server/JoinServiceImpl.java | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/gcube/portlets/user/joinvre/server/JoinServiceImpl.java b/src/main/java/org/gcube/portlets/user/joinvre/server/JoinServiceImpl.java index 23dfadf..b3e861e 100644 --- a/src/main/java/org/gcube/portlets/user/joinvre/server/JoinServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/joinvre/server/JoinServiceImpl.java @@ -168,13 +168,6 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService ASLSession session = getASLSession(); GroupManager gm = new LiferayGroupManager(); LinkedHashMap> toReturn = new LinkedHashMap>(); - //before iterating the actual groups create the virtualGroups in the correct order -// List virtualGroups = gm.getVirtualGroups(); -// for (VirtualGroup vg : virtualGroups) { -// ArrayList toCreate = new ArrayList(); -// VRECategory cat = new VRECategory(1L, vg.getName(), vg.getDescription()); -// toReturn.put(cat, toCreate); -// } long currentSiteGroupId = getSiteFromServletRequest(getThreadLocalRequest()).getGroupId(); List currentSiteVGroups = getVirtualGroups(currentSiteGroupId); @@ -192,6 +185,13 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService _log.error("Cannot find root organziation, please check gcube-data.properties file in $CATALINA_HOME/conf folder, unless your installing the Bundle"); return toReturn; } + CacheRegistryUtil.clear(); + + List currUserGroups = new ArrayList(); + if (session.getUsername().compareTo(TEST_USER) != 0) { + GCubeUser currUser = new LiferayUserManager().getUserByUsername(session.getUsername()); + currUserGroups = gm.listGroupsByUser(currUser.getUserId()); + } //for each root sub organizations (VO) for (GCubeGroup vOrg : rootGroupVO.getChildren()) { @@ -226,8 +226,7 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService if (session.getUsername().compareTo(TEST_USER) != 0) { GCubeUser currUser = new LiferayUserManager().getUserByUsername(session.getUsername()); //check if the user belongs to it - CacheRegistryUtil.clear(); - if (gm.listGroupsByUser(currUser.getUserId()).contains(vreOrganization)) { + if (currUserGroups.contains(vreOrganization)) { toAdd.setUserBelonging(UserBelonging.BELONGING); } else if (checkPending(currUser.getUsername(), vreOrganization.getGroupId())) @@ -353,7 +352,6 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService * @throws UserManagementSystemException */ private static boolean checkPending(String screenName, long groupId) throws UserManagementSystemException, GroupRetrievalFault, UserRetrievalFault { - CacheRegistryUtil.clear(); UserManager um = new LiferayUserManager(); List requests = um.listMembershipRequestsByGroup(groupId); for (GCubeMembershipRequest r : requests) { @@ -369,6 +367,23 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService if (optionalMessage == null || optionalMessage.compareTo("") == 0) optionalMessage = "none"; try { + CacheRegistryUtil.clear(); + GroupManager gm = new LiferayGroupManager(); + long groupId = gm.getGroupIdFromInfrastructureScope(scope); + _log.debug("Look if a request exists already"); + List userGroups = gm.listGroupsByUser(new LiferayUserManager().getUserId(username)); + for (GCubeGroup g : userGroups) { + if (g.getGroupId() == groupId) { + _log.warn("User already belongs to " + scope + " SKIP addMembershipRequest"); + return; + } + } + CacheRegistryUtil.clear(); + if (checkPending(username, groupId)) { + _log.warn("User already asked for " + scope + " REQUEST IS IN PENDING - SKIP addMembershipRequest"); + return; + } + _log.debug("Request does not exist, addMembershipRequest for user " + username); LoginServiceUtil.addMembershipRequest(username, scope, optionalMessage, getThreadLocalRequest()); } catch (Exception e) { e.printStackTrace();