]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminWrapper.java
cfad78007914d6b24f363aaf5ad7a0150a1770c5
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / internal / UserAdminWrapper.java
1 package org.argeo.security.ui.admin.internal;
2
3 import java.util.ArrayList;
4 import java.util.Dictionary;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8
9 import javax.transaction.Status;
10 import javax.transaction.UserTransaction;
11
12 import org.argeo.ArgeoException;
13 import org.argeo.cms.auth.AuthConstants;
14 import org.argeo.osgi.useradmin.UserAdminConf;
15 import org.osgi.framework.ServiceReference;
16 import org.osgi.service.useradmin.UserAdmin;
17 import org.osgi.service.useradmin.UserAdminEvent;
18 import org.osgi.service.useradmin.UserAdminListener;
19
20 /** Centralize interaction with the UserAdmin in this bundle */
21 public class UserAdminWrapper {
22 // private Log log = LogFactory.getLog(UserAdminWrapper.class);
23
24 private UserAdmin userAdmin;
25 private ServiceReference<UserAdmin> userAdminServiceReference;
26 private UserTransaction userTransaction;
27
28 // Registered listeners
29 List<UserAdminListener> listeners = new ArrayList<UserAdminListener>();
30
31 // TODO implement safer mechanism
32 public void addListener(UserAdminListener userAdminListener) {
33 if (!listeners.contains(userAdminListener))
34 listeners.add(userAdminListener);
35 }
36
37 /** Must be called from the UI Thread. */
38 public UserTransaction beginTransactionIfNeeded() {
39 try {
40 if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION) {
41 userTransaction.begin();
42 UiAdminUtils.notifyTransactionStateChange(userTransaction);
43 }
44 return userTransaction;
45 } catch (Exception e) {
46 throw new ArgeoException("Unable to begin transaction", e);
47 }
48 }
49
50 // Expose this?
51 public void removeListener(UserAdminListener userAdminListener) {
52 if (listeners.contains(userAdminListener))
53 listeners.remove(userAdminListener);
54 }
55
56 public void notifyListeners(UserAdminEvent event) {
57 for (UserAdminListener listener : listeners)
58 listener.roleChanged(event);
59 }
60
61 public UserAdmin getUserAdmin() {
62 return userAdmin;
63 }
64
65 public UserTransaction getUserTransaction() {
66 return userTransaction;
67 }
68
69 public void setUserAdminServiceReference(
70 ServiceReference<UserAdmin> userAdminServiceReference) {
71 this.userAdminServiceReference = userAdminServiceReference;
72 }
73
74 public Map<String, String> getKnownBaseDns(boolean onlyWritable) {
75 Map<String, String> dns = new HashMap<String, String>();
76 for (String uri : userAdminServiceReference.getPropertyKeys()) {
77 if (!uri.startsWith("/"))
78 continue;
79 Dictionary<String, ?> props = UserAdminConf.uriAsProperties(uri);
80 String readOnly = UserAdminConf.readOnly.getValue(props);
81 String baseDn = UserAdminConf.baseDn.getValue(props);
82
83 if (onlyWritable && "true".equals(readOnly))
84 continue;
85 if (baseDn.equalsIgnoreCase(AuthConstants.ROLES_BASEDN))
86 continue;
87 dns.put(baseDn, uri);
88 }
89 return dns;
90 }
91
92 /* DEPENDENCY INJECTION */
93 public void setUserAdmin(UserAdmin userAdmin) {
94 this.userAdmin = userAdmin;
95 }
96
97 public void setUserTransaction(UserTransaction userTransaction) {
98 this.userTransaction = userTransaction;
99 }
100 }