Factorize userAdmin utils
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / internal / UserAdminWrapper.java
index cfad78007914d6b24f363aaf5ad7a0150a1770c5..43ce58da9fba74bb7f06c0ea9bb7a3b5f8acd551 100644 (file)
@@ -1,42 +1,30 @@
 package org.argeo.security.ui.admin.internal;
 
 import java.util.ArrayList;
-import java.util.Dictionary;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import javax.transaction.Status;
 import javax.transaction.UserTransaction;
 
 import org.argeo.ArgeoException;
-import org.argeo.cms.auth.AuthConstants;
-import org.argeo.osgi.useradmin.UserAdminConf;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.useradmin.UserAdmin;
 import org.osgi.service.useradmin.UserAdminEvent;
 import org.osgi.service.useradmin.UserAdminListener;
 
 /** Centralize interaction with the UserAdmin in this bundle */
-public class UserAdminWrapper {
+public class UserAdminWrapper extends
+               org.argeo.cms.util.useradmin.UserAdminWrapper {
        // private Log log = LogFactory.getLog(UserAdminWrapper.class);
 
-       private UserAdmin userAdmin;
-       private ServiceReference<UserAdmin> userAdminServiceReference;
-       private UserTransaction userTransaction;
-
        // Registered listeners
        List<UserAdminListener> listeners = new ArrayList<UserAdminListener>();
 
-       // TODO implement safer mechanism
-       public void addListener(UserAdminListener userAdminListener) {
-               if (!listeners.contains(userAdminListener))
-                       listeners.add(userAdminListener);
-       }
-
-       /** Must be called from the UI Thread. */
+       /**
+        * Overwrite the normal begin transaction behaviour to also notify the UI.
+        * Must be called from the UI Thread.
+        */
        public UserTransaction beginTransactionIfNeeded() {
                try {
+                       UserTransaction userTransaction = getUserTransaction();
                        if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION) {
                                userTransaction.begin();
                                UiAdminUtils.notifyTransactionStateChange(userTransaction);
@@ -47,6 +35,12 @@ public class UserAdminWrapper {
                }
        }
 
+       // TODO implement safer mechanism
+       public void addListener(UserAdminListener userAdminListener) {
+               if (!listeners.contains(userAdminListener))
+                       listeners.add(userAdminListener);
+       }
+
        // Expose this?
        public void removeListener(UserAdminListener userAdminListener) {
                if (listeners.contains(userAdminListener))
@@ -57,44 +51,4 @@ public class UserAdminWrapper {
                for (UserAdminListener listener : listeners)
                        listener.roleChanged(event);
        }
-
-       public UserAdmin getUserAdmin() {
-               return userAdmin;
-       }
-
-       public UserTransaction getUserTransaction() {
-               return userTransaction;
-       }
-
-       public void setUserAdminServiceReference(
-                       ServiceReference<UserAdmin> userAdminServiceReference) {
-               this.userAdminServiceReference = userAdminServiceReference;
-       }
-
-       public Map<String, String> getKnownBaseDns(boolean onlyWritable) {
-               Map<String, String> dns = new HashMap<String, String>();
-               for (String uri : userAdminServiceReference.getPropertyKeys()) {
-                       if (!uri.startsWith("/"))
-                               continue;
-                       Dictionary<String, ?> props = UserAdminConf.uriAsProperties(uri);
-                       String readOnly = UserAdminConf.readOnly.getValue(props);
-                       String baseDn = UserAdminConf.baseDn.getValue(props);
-
-                       if (onlyWritable && "true".equals(readOnly))
-                               continue;
-                       if (baseDn.equalsIgnoreCase(AuthConstants.ROLES_BASEDN))
-                               continue;
-                       dns.put(baseDn, uri);
-               }
-               return dns;
-       }
-       
-       /* DEPENDENCY INJECTION */
-       public void setUserAdmin(UserAdmin userAdmin) {
-               this.userAdmin = userAdmin;
-       }
-
-       public void setUserTransaction(UserTransaction userTransaction) {
-               this.userTransaction = userTransaction;
-       }
 }
\ No newline at end of file