diff --git a/src/main/java/com/baloise/azure/Graph.java b/src/main/java/com/baloise/azure/Graph.java index 7be578d..12b43dc 100644 --- a/src/main/java/com/baloise/azure/Graph.java +++ b/src/main/java/com/baloise/azure/Graph.java @@ -4,9 +4,7 @@ import static java.util.Arrays.asList; import static java.util.Arrays.stream; import static java.util.Map.of; -import static java.util.function.Function.identity; import static java.util.stream.Collectors.joining; -import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toMap; import static java.util.stream.Collectors.toSet; @@ -17,6 +15,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeMap; import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -76,33 +75,31 @@ public StringTree getOrg() { private String notNull(String mayBeNull) {return mayBeNull == null? "" :mayBeNull;} public Map loadTeam(String teamId, String ... roleNames) { - return expandRoles(roleNames).stream().collect(toMap(identity(), (roleName)-> { + Map> mail2member = new TreeMap<>(); + expandRoles(roleNames).stream().forEach(roleName-> { final String tagId = getTagId(teamId, roleName); - return tagId == null ? - Collections.emptyList() : - map(graphClient.teams().byTeamId(teamId).tags().byTeamworkTagId(tagId).members().get() - .getValue()); - })); + if(tagId != null) { + map(graphClient.teams().byTeamId(teamId).tags().byTeamworkTagId(tagId).members().get().getValue()).forEach(member->{ + Map mappedMember = mail2member.computeIfAbsent(member.getMail(), (ignored)-> new TreeMap<>()); + mappedMember.put("displayName",notNull(member.getDisplayName())); + mappedMember.put("mail",notNull(member.getMail())); + mappedMember.put("officeLocation",notNull(member.getOfficeLocation())); + mappedMember.put("preferredLanguage",notNull(member.getPreferredLanguage())); + ((Set) mappedMember.computeIfAbsent("roles",(ignored)-> new TreeSet<>())).add(roleName); + }); + } + }); + return new TreeMap<>(of("members", mail2member.values())); } - private List> map(List members) { + private List map(List members) { return graphClient.users().get((requestConfiguration)->{ requestConfiguration.queryParameters.filter = format( "id in (%s)", members.stream().map(TeamworkTagMember::getUserId).collect(joining("', '", "'", "'")) ); requestConfiguration.queryParameters.select = new String []{"displayName", "mail", "officeLocation","preferredLanguage"}; - }).getValue().stream().map(this::mapMember).collect(toList()); - } - - private Map mapMember(User u) { - return of( - "displayName", notNull(u.getDisplayName()), - "mail", notNull(u.getMail()), - "officeLocation", notNull(u.getOfficeLocation()), - "preferredLanguage", notNull(u.getPreferredLanguage()) - ); - + }).getValue(); } private String getTagId(String teamId, String tagName) {