Make username and user role more consistent.
[lgpl/argeo-commons.git] / org.argeo.enterprise / src / org / argeo / osgi / useradmin / AggregatingAuthorization.java
index b450b729e6129364e4bd8197253e8392e917455a..05ba94889d403e5d681a3744db1d6d5fde14cf9e 100644 (file)
@@ -1,28 +1,32 @@
 package org.argeo.osgi.useradmin;
 
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.security.auth.x500.X500Principal;
 
 import org.osgi.service.useradmin.Authorization;
 
+/** An {@link Authorization} which combines roles form various auth sources. */
 class AggregatingAuthorization implements Authorization {
        private final String name;
        private final String displayName;
-       private final List<String> systemRoles;
-       private final List<String> roles;
+       private final Set<String> systemRoles;
+       private final Set<String> roles;
 
-       public AggregatingAuthorization(String name, String displayName,
-                       Collection<String> systemRoles, String[] roles) {
-               this.name = name;
+       public AggregatingAuthorization(String name, String displayName, Set<String> systemRoles, String[] roles) {
+               this.name = new X500Principal(name).getName();
                this.displayName = displayName;
-               this.systemRoles = Collections.unmodifiableList(new ArrayList<String>(
-                               systemRoles));
-               this.roles = Collections.unmodifiableList(Arrays.asList(roles));
+               this.systemRoles = Collections.unmodifiableSet(new HashSet<>(systemRoles));
+               Set<String> temp = new HashSet<>();
+               for (String role : roles) {
+                       if (!temp.contains(role))
+                               temp.add(role);
+               }
+               this.roles = Collections.unmodifiableSet(temp);
        }
 
        @Override