+ // TODO check value null or empty
+ if (key != null) {
+ if (!userIndexes.containsKey(key))
+ return null;
+ return userIndexes.get(key).get(value);
+ }
+
+ // Try all indexes
+ List<LdifUser> collectedUsers = new ArrayList<LdifUser>(
+ getIndexedUserProperties().size());
+ // try dn
+ LdifUser user = null;
+ try {
+ user = (LdifUser) getRole(value);
+ if (user != null)
+ collectedUsers.add(user);
+ } catch (Exception e) {
+ // silent
+ }
+ for (String attr : userIndexes.keySet()) {
+ user = userIndexes.get(attr).get(value);
+ if (user != null)
+ collectedUsers.add(user);
+ }
+
+ if (collectedUsers.size() == 1)
+ return collectedUsers.get(0);
+ return null;
+ // throw new UnsupportedOperationException();
+ }
+
+ protected void loadMembers(LdifGroup group) {
+ group.directMembers = new ArrayList<Role>();
+ for (LdapName ldapName : group.getMemberNames()) {
+ LdifUser role = null;
+ if (groups.containsKey(ldapName))
+ role = groups.get(ldapName);
+ else if (users.containsKey(ldapName))
+ role = users.get(ldapName);
+ else {
+ if (getExternalRoles() != null)
+ role = (LdifUser) getExternalRoles().getRole(
+ ldapName.toString());
+ if (role == null)
+ throw new ArgeoUserAdminException("No role found for "
+ + ldapName);
+ }
+ role.directMemberOf.add(group);
+ group.directMembers.add(role);
+ }