1 package org
.argeo
.cms
.util
.useradmin
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Dictionary
;
5 import java
.util
.HashMap
;
9 import javax
.transaction
.Status
;
10 import javax
.transaction
.UserTransaction
;
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
;
21 * Base useradmin wrapper. Implementing application might extends to add
22 * business specific behaviour
24 public abstract class UserAdminWrapper
{
25 // private Log log = LogFactory.getLog(UserAdminWrapper.class);
27 private UserAdmin userAdmin
;
28 private ServiceReference
<UserAdmin
> userAdminServiceReference
;
29 private UserTransaction userTransaction
;
31 /* USER ADMIN LISTENER MANAGEMENT */
32 List
<UserAdminListener
> listeners
= new ArrayList
<UserAdminListener
>();
34 // TODO implement safer mechanism
35 public void addListener(UserAdminListener userAdminListener
) {
36 if (!listeners
.contains(userAdminListener
))
37 listeners
.add(userAdminListener
);
41 * Starts a transaction if none already exists and notify the userAdmin
42 * listeners.Must be called from the UI Thread.
44 public UserTransaction
beginTransactionIfNeeded() {
46 if (userTransaction
.getStatus() == Status
.STATUS_NO_TRANSACTION
) {
47 userTransaction
.begin();
49 return userTransaction
;
50 } catch (Exception e
) {
51 throw new ArgeoException("Unable to begin transaction", e
);
56 public void removeListener(UserAdminListener userAdminListener
) {
57 if (listeners
.contains(userAdminListener
))
58 listeners
.remove(userAdminListener
);
61 public void notifyListeners(UserAdminEvent event
) {
62 for (UserAdminListener listener
: listeners
)
63 listener
.roleChanged(event
);
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("/"))
71 Dictionary
<String
, ?
> props
= UserAdminConf
.uriAsProperties(uri
);
72 String readOnly
= UserAdminConf
.readOnly
.getValue(props
);
73 String baseDn
= UserAdminConf
.baseDn
.getValue(props
);
75 if (onlyWritable
&& "true".equals(readOnly
))
77 if (baseDn
.equalsIgnoreCase(AuthConstants
.ROLES_BASEDN
))
84 public UserAdmin
getUserAdmin() {
88 public UserTransaction
getUserTransaction() {
89 return userTransaction
;
92 /* DEPENDENCY INJECTION */
93 public void setUserAdmin(UserAdmin userAdmin
) {
94 this.userAdmin
= userAdmin
;
97 public void setUserTransaction(UserTransaction userTransaction
) {
98 this.userTransaction
= userTransaction
;
101 public void setUserAdminServiceReference(
102 ServiceReference
<UserAdmin
> userAdminServiceReference
) {
103 this.userAdminServiceReference
= userAdminServiceReference
;