@@ -503,27 +503,9 @@ public Collection<Group> findGroupsOfUser(String user) throws Exception {
503503 }
504504
505505 if (user == null ) {
506- // julien : integration bug
507- // need to look at that later
508- //
509- // Caused by: java.lang.IllegalArgumentException: User name cannot be null
510- // at
511- // org.picketlink.idm.impl.api.session.managers.AbstractManager.checkNotNullArgument(AbstractManager.java:267)
512- // at
513- // org.picketlink.idm.impl.api.session.managers.RelationshipManagerImpl.findRelatedGroups(RelationshipManagerImpl.java:753)
514- // at
515- // org.exoplatform.services.organization.idm.GroupDAOImpl.findGroupsOfUser(GroupDAOImpl.java:225)
516- // at
517- // org.exoplatform.organization.webui.component.GroupManagement.isMemberOfGroup(GroupManagement.java:72)
518- // at
519- // org.exoplatform.organization.webui.component.GroupManagement.isAdministrator(GroupManagement.java:125)
520- // at
521- // org.exoplatform.organization.webui.component.UIGroupExplorer.<init>(UIGroupExplorer.java:57)
522-
523506 if (log .isTraceEnabled ()) {
524507 Tools .logMethodOut (log , LogLevel .TRACE , "findGroupsOfUser" , Collections .emptyList ());
525508 }
526-
527509 return Collections .emptyList ();
528510 }
529511
@@ -819,12 +801,10 @@ public Group convertGroup(org.picketlink.idm.api.Group jbidGroup) throws Excepti
819801 Tools .logMethodIn (log , LogLevel .TRACE , "convertGroup" , new Object [] { "jbidGroup" , jbidGroup });
820802 }
821803
822- Map <String , Attribute > attrs = new HashMap <String , Attribute >();
823-
804+ Map <String , Attribute > attrs = new HashMap <>();
824805 try {
825806 attrs = getIdentitySession ().getAttributesManager ().getAttributes (jbidGroup );
826807 } catch (Exception e ) {
827- // TODO:
828808 handleException ("Identity operation error: " , e );
829809 }
830810
@@ -864,15 +844,6 @@ public Group convertGroup(org.picketlink.idm.api.Group jbidGroup) throws Excepti
864844 group .setParentId (id .substring (0 , id .lastIndexOf ("/" )));
865845 }
866846
867- if (attrs .containsKey (NESTED_GROUPS ) && attrs .get (NESTED_GROUPS ).getValue () != null ) {
868- Set <NestedMembership > nestedMemberships = attrs .get (NESTED_GROUPS )
869- .getValues ()
870- .stream ()
871- .map (String ::valueOf )
872- .map (m -> NestedMembership .parseNestedMembership (m , id ))
873- .collect (Collectors .toSet ());
874- group .setNestedMemberships (nestedMemberships );
875- }
876847 if (attrs .containsKey (ENCLOSING_GROUPS ) && attrs .get (ENCLOSING_GROUPS ).getValue () != null ) {
877848 Set <NestedMembership > enclosingMemberships = attrs .get (ENCLOSING_GROUPS )
878849 .getValues ()
@@ -894,6 +865,29 @@ public Group convertGroup(org.picketlink.idm.api.Group jbidGroup) throws Excepti
894865 return result ;
895866 }
896867
868+ @ Override
869+ public Set <NestedMembership > getNestedMemberships (String groupId ) {
870+ try {
871+ org .picketlink .idm .api .Group jbidGroup = orgService .getJBIDMGroup (groupId );
872+ if (jbidGroup != null ) {
873+ Map <String , Attribute > attrs = getIdentitySession ().getAttributesManager ().getAttributes (jbidGroup );
874+ if (attrs != null
875+ && attrs .containsKey (NESTED_GROUPS )
876+ && attrs .get (NESTED_GROUPS ).getValue () != null ) {
877+ return attrs .get (NESTED_GROUPS )
878+ .getValues ()
879+ .stream ()
880+ .map (String ::valueOf )
881+ .map (m -> NestedMembership .parseNestedMembership (m , groupId ))
882+ .collect (Collectors .toSet ());
883+ }
884+ }
885+ } catch (Exception e ) {
886+ handleException ("Identity operation error: " , e );
887+ }
888+ return Collections .emptySet ();
889+ }
890+
897891 /**
898892 * Calculates group id by checking all parents up to the root group or group
899893 * type mapping from the configuration.
@@ -1171,12 +1165,8 @@ public void linkGroups(NestedMembership nestedMembership) throws Exception {
11711165 throw new IllegalStateException ("A circular dependency has been detected between groups '%s' and '%s'" .formatted (enclosingGroupId ,
11721166 nestedGroupId ));
11731167 }
1174- Set <NestedMembership > nestedMemberships = parentGroup .getNestedMemberships ();
1175- if (nestedMemberships == null ) {
1176- nestedMemberships = new HashSet <>();
1177- } else {
1178- nestedMemberships = new HashSet <>(nestedMemberships );
1179- }
1168+ Set <NestedMembership > existingNestedMemberships = getNestedMemberships (enclosingGroupId );
1169+ Set <NestedMembership > nestedMemberships = new HashSet <>(existingNestedMemberships );
11801170 Set <NestedMembership > enclosingMemberships = nestedGroup .getEnclosingMemberships ();
11811171 if (enclosingMemberships == null ) {
11821172 enclosingMemberships = new HashSet <>();
@@ -1218,9 +1208,9 @@ public void unlinkGroups(NestedMembership nestedMembership) throws Exception {
12181208 boolean updated = false ;
12191209 Group parentGroup = findGroupById (nestedMembership .getGroupId ());
12201210 if (parentGroup != null ) {
1221- Set <NestedMembership > nestedMemberships = parentGroup . getNestedMemberships ();
1222- if ( nestedMemberships != null && nestedMemberships . contains ( nestedMembership )) {
1223- nestedMemberships = new HashSet <> (nestedMemberships );
1211+ Set <NestedMembership > existingNestedMemberships = getNestedMemberships (nestedMembership . getGroupId () );
1212+ Set < NestedMembership > nestedMemberships = new HashSet <>( existingNestedMemberships );
1213+ if (nestedMemberships . contains ( nestedMembership )) {
12241214 nestedMemberships .remove (nestedMembership );
12251215 updateEnclosingMembershipAttributes (nestedMembership .getGroupId (), nestedMemberships );
12261216 updated = true ;
@@ -1250,9 +1240,8 @@ public void addDecoratorPlugin(GroupDecoratorPlugin decoratorPlugin) {
12501240
12511241 @ SneakyThrows
12521242 private boolean isNestedIn (String parentGroupId , String memberGroupId ) {
1253- Group group = findGroupById (memberGroupId );
1254- Set <NestedMembership > nestedMemberships = group == null ? null : group .getNestedMemberships ();
1255- if (group == null || CollectionUtils .isEmpty (nestedMemberships )) {
1243+ Set <NestedMembership > nestedMemberships = getNestedMemberships (memberGroupId );
1244+ if (CollectionUtils .isEmpty (nestedMemberships )) {
12561245 return false ;
12571246 } else {
12581247 return nestedMemberships .stream ()
0 commit comments