]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.util/src/org/argeo/osgi/useradmin/AggregatingAuthorization.java
Experiment with Java preferences.
[lgpl/argeo-commons.git] / org.argeo.util / src / org / argeo / osgi / useradmin / AggregatingAuthorization.java
1 package org.argeo.osgi.useradmin;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.HashSet;
6 import java.util.List;
7 import java.util.Set;
8
9 import javax.security.auth.x500.X500Principal;
10
11 import org.osgi.service.useradmin.Authorization;
12
13 /** An {@link Authorization} which combines roles form various auth sources. */
14 class AggregatingAuthorization implements Authorization {
15 private final String name;
16 private final String displayName;
17 private final Set<String> systemRoles;
18 private final Set<String> roles;
19
20 public AggregatingAuthorization(String name, String displayName, Set<String> systemRoles, String[] roles) {
21 this.name = new X500Principal(name).getName();
22 this.displayName = displayName;
23 this.systemRoles = Collections.unmodifiableSet(new HashSet<>(systemRoles));
24 Set<String> temp = new HashSet<>();
25 for (String role : roles) {
26 if (!temp.contains(role))
27 temp.add(role);
28 }
29 this.roles = Collections.unmodifiableSet(temp);
30 }
31
32 @Override
33 public String getName() {
34 return name;
35 }
36
37 @Override
38 public boolean hasRole(String name) {
39 if (systemRoles.contains(name))
40 return true;
41 if (roles.contains(name))
42 return true;
43 return false;
44 }
45
46 @Override
47 public String[] getRoles() {
48 int size = systemRoles.size() + roles.size();
49 List<String> res = new ArrayList<String>(size);
50 res.addAll(systemRoles);
51 res.addAll(roles);
52 return res.toArray(new String[size]);
53 }
54
55 @Override
56 public int hashCode() {
57 if (name == null)
58 return super.hashCode();
59 return name.hashCode();
60 }
61
62 @Override
63 public boolean equals(Object obj) {
64 if (!(obj instanceof Authorization))
65 return false;
66 Authorization that = (Authorization) obj;
67 if (name == null)
68 return that.getName() == null;
69 return name.equals(that.getName());
70 }
71
72 @Override
73 public String toString() {
74 return displayName;
75 }
76
77 }