Skip to content
This repository was archived by the owner on Jan 23, 2025. It is now read-only.

Commit f96f2a6

Browse files
committed
revise the logic
1 parent d08d84a commit f96f2a6

File tree

1 file changed

+27
-16
lines changed

1 file changed

+27
-16
lines changed

src/java/main/com/topcoder/direct/services/view/action/contest/launch/GetGroupMemberAction.java

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)