@@ -140,26 +140,37 @@ private List<? extends Map<String,String>> getData() throws Exception {
140140 */
141141 private Set <Long > getGroupMembers () throws Exception {
142142 Set <Long > members = new HashSet <Long >();
143+ // this will be increased, for inner groups
143144 LinkedList <Long > gids = new LinkedList <Long >(groupIds );
144- ListIterator <Long > iter = gids .listIterator ();
145- while (iter .hasNext ()) {
146- Long gid = iter .next ();
147- logger .info ("processing gid: " + gid );
148- RestResult <GroupMember > result = getGroupMemberByGid (gid );
149- if (result == null ) {
150- logger .error ("fail to get group members with gid: " + gid );
151- continue ;
152- }
153- for (GroupMember gm : result .getContent ()) {
154- if (gm .isGroup ()) {
155- if (!gids .contains (gm .getMemberId ())) {
156- iter .add (gm .getMemberId ());
145+ Set <Long > gidProcessed = new HashSet <Long >();
146+ boolean finished = false ;
147+ while (!finished ) {
148+ ListIterator <Long > iter = gids .listIterator ();
149+ while (iter .hasNext ()) {
150+ Long gid = iter .next ();
151+ if (!gidProcessed .contains (gid )) {
152+ logger .info ("processing gid: " + gid );
153+ RestResult <GroupMember > result = getGroupMemberByGid (gid );
154+ if (result != null ) {
155+ for (GroupMember gm : result .getContent ()) {
156+ if (gm .isGroup ()) {
157+ if (!gids .contains (gm .getMemberId ())) {
158+ iter .add (gm .getMemberId ());
159+ }
160+ logger .info (" inner group: " + gm .getMemberId ());
161+ } else {
162+ members .add (gm .getMemberId ());
163+ }
164+ }
157165 }
158- logger .info (" inner group: " + gm .getMemberId ());
159- } else {
160- members .add (gm .getMemberId ());
166+
167+ gidProcessed .add (gid );
161168 }
162169 }
170+
171+ if (gids .size () == gidProcessed .size ()) {
172+ finished = true ;
173+ }
163174 }
164175
165176 return members ;
0 commit comments