@@ -140,26 +140,37 @@ private List<? extends Map<String,String>> getData() throws Exception {
140
140
*/
141
141
private Set <Long > getGroupMembers () throws Exception {
142
142
Set <Long > members = new HashSet <Long >();
143
+ // this will be increased, for inner groups
143
144
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
+ }
157
165
}
158
- logger .info (" inner group: " + gm .getMemberId ());
159
- } else {
160
- members .add (gm .getMemberId ());
166
+
167
+ gidProcessed .add (gid );
161
168
}
162
169
}
170
+
171
+ if (gids .size () == gidProcessed .size ()) {
172
+ finished = true ;
173
+ }
163
174
}
164
175
165
176
return members ;
0 commit comments