]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/AbstractUserAdminWrapper.java
Continue framework clean up.
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / internal / AbstractUserAdminWrapper.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 /**
21 * Base useradmin wrapper. Implementing application might extends to add
22 * business specific behaviour
23 */
24 public abstract class AbstractUserAdminWrapper {
25 // private Log log = LogFactory.getLog(UserAdminWrapper.class);
26
27 private UserAdmin userAdmin;
28 private ServiceReference<UserAdmin> userAdminServiceReference;
29 private UserTransaction userTransaction;
30
31 /* USER ADMIN LISTENER MANAGEMENT */
32 List<UserAdminListener> listeners = new ArrayList<UserAdminListener>();
33
34 // TODO implement safer mechanism
35 public void addListener(UserAdminListener userAdminListener) {
36 if (!listeners.contains(userAdminListener))
37 listeners.add(userAdminListener);
38 }
39
40 /**
41 * Starts a transaction if none already exists and notify the userAdmin
42 * listeners.Must be called from the UI Thread.
43 */
44 public UserTransaction beginTransactionIfNeeded() {
45 try {
46 if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION) {
47 userTransaction.begin();
48 }
49 return userTransaction;
50 } catch (Exception e) {
51 throw new ArgeoException("Unable to begin transaction", e);
52 }
53 }
54
55 // Expose this?
56 public void removeListener(UserAdminListener userAdminListener) {
57 if (listeners.contains(userAdminListener))
58 listeners.remove(userAdminListener);
59 }
60
61 public void notifyListeners(UserAdminEvent event) {
62 for (UserAdminListener listener : listeners)
63 listener.roleChanged(event);
64 }
65
66 public Map<String, String> getKnownBaseDns(boolean onlyWritable) {
67 Map<String, String> dns = new HashMap<String, String>();
68 for (String uri : userAdminServiceReference.getPropertyKeys()) {
69 if (!uri.startsWith("/"))
70 continue;
71 Dictionary<String, ?> props = UserAdminConf.uriAsProperties(uri);
72 String readOnly = UserAdminConf.readOnly.getValue(props);
73 String baseDn = UserAdminConf.baseDn.getValue(props);
74
75 if (onlyWritable && "true".equals(readOnly))
76 continue;
77 if (baseDn.equalsIgnoreCase(AuthConstants.ROLES_BASEDN))
78 continue;
79 dns.put(baseDn, uri);
80 }
81 return dns;
82 }
83
84 public UserAdmin getUserAdmin() {
85 return userAdmin;
86 }
87
88 public UserTransaction getUserTransaction() {
89 return userTransaction;
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
101 public void setUserAdminServiceReference(
102 ServiceReference<UserAdmin> userAdminServiceReference) {
103 this.userAdminServiceReference = userAdminServiceReference;
104 }
105 }