It's all about the answers!

Ask a question

How to get the real-time roles and team information with the latest changes in RTC server?


0
3
Jian Wang (314) | asked Dec 07 '12, 10:55 p.m.
edited Dec 07 '12, 11:06 p.m.
With Plain Java API, I am trying to use the following code to query a user's role in a team and which sub-team he/she belongs to. However, once the RTC connection is setup, even his/her role was changed or add/removed from some sub-team at the RTC server side, the code still gets the old roles and team information.

How to get the real-time roles and team information with the latest changes in RTC server?

I tried to clear TeamData by calling "teamArea.getTeamData().clear()", but it does not work.

I also tried to relogin, but it still does not work. Seems once the TeamPlatform is startup (TeamPlatform.startup();), it will cache the connection information and the TeamRepositoryService.

public List<String> queryRoles(String user, String team) throws RTCException {
    IContributor contributor = getContributor(user);
    ITeamArea teamArea = getTeamArea(team);
    // query user's role
    // init RolePersistentce object
    new RolePersistence(clientProcess.getRoles(teamArea, null));
    String roleData = RolePersistence.getPersistentRoleData(teamArea.getTeamData(), contributor);
    if (roleData != null) {
        StringTokenizer tokenizer = new StringTokenizer(roleData, "|"); //$NON-NLS-1$
        while (tokenizer.hasMoreTokens()) {
            String roleId = tokenizer.nextToken();
            roles.add(roleId);
        }
    }
    if (roles.size() > 0) {
        roles.add("Default");
    }       
    // query which sub-team the user belongs to
    for (String subTeam : TEAMS) {
          ITeamArea subTeamArea = getTeamArea(subTeam);
          if (subTeamArea.hasMember(contributor)) {
                 roles.add(subTeam);
          }
    }
    return roles;
}

private ITeamArea getTeamArea(String team) throws RTCException {
    List<TeamAreaHandle> teamAreas = projectArea.getTeamAreas();
    for (TeamAreaHandle teamAreaHandle : teamAreas) {
        ITeamArea teamArea = resolveAuditable(teamAreaHandle, ItemProfile.TEAM_AREA_DEFAULT);
        if (!teamArea.isArchived() && teamArea.getName().equals(team)) {
            return teamArea;
        }
    }
    throw new RTCException(TEAM_AREA_NOT_FOUND);
}

Accepted answer


permanent link
Ralph Schoon (56.2k23642) | answered Dec 09 '12, 6:13 a.m.
FORUM ADMINISTRATOR / FORUM MODERATOR / JAZZ DEVELOPER
Please find some example code here: http://rsjazz.wordpress.com/2012/12/09/analyzing-a-aroject-areas-members-and-roles-using-the-plain-java-client-libraries/
Jian Wang selected this answer as the correct answer

Comments
Ralph Schoon commented Dec 09 '12, 6:21 a.m.
FORUM ADMINISTRATOR / FORUM MODERATOR / JAZZ DEVELOPER

And be aware of the cashing. You can use

IItemManager.REFRESH

to force refreshing


Jian Wang commented Dec 09 '12, 10:12 p.m.

IITemManager.REFRESH works!

Thanks Ralph Schoon! You really helped me a lot.

Your answer


Register or to post your answer.