]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminWrapper.java
Work on security Admin UI, batch processing, specific admin abilities, some code...
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / internal / UserAdminWrapper.java
index 794230ff6d8d08f18a72fa140ad83bcc0449ecbe..2cd3eab213d620bb6527354216b3c6aa488a2736 100644 (file)
@@ -1,20 +1,26 @@
 package org.argeo.security.ui.admin.internal;
 
 import java.util.ArrayList;
+import java.util.Dictionary;
 import java.util.List;
 
 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;
 
-/** Simplifies the interaction with the UserAdmin in this bundle */
+/** Centralize interaction with the UserAdmin in this bundle */
 public class UserAdminWrapper {
+       // private Log log = LogFactory.getLog(UserAdminWrapper.class);
 
        private UserAdmin userAdmin;
+       private ServiceReference<UserAdmin> userAdminServiceReference;
        private UserTransaction userTransaction;
 
        // Registered listeners
@@ -27,12 +33,13 @@ public class UserAdminWrapper {
        }
 
        /** Must be called from the UI Thread. */
-       public void beginTransactionIfNeeded() {
+       public UserTransaction beginTransactionIfNeeded() {
                try {
                        if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION) {
                                userTransaction.begin();
                                UiAdminUtils.notifyTransactionStateChange(userTransaction);
                        }
+                       return userTransaction;
                } catch (Exception e) {
                        throw new ArgeoException("Unable to begin transaction", e);
                }
@@ -57,6 +64,29 @@ public class UserAdminWrapper {
                return userTransaction;
        }
 
+       public void setUserAdminServiceReference(
+                       ServiceReference<UserAdmin> userAdminServiceReference) {
+               this.userAdminServiceReference = userAdminServiceReference;
+       }
+
+       public List<String> getKnownBaseDns(boolean onlyWritable) {
+               List<String> dns = new ArrayList<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.add(baseDn);
+               }
+               return dns;
+       }
+
        /* DEPENDENCY INJECTION */
        public void setUserAdmin(UserAdmin userAdmin) {
                this.userAdmin = userAdmin;
@@ -65,5 +95,4 @@ public class UserAdminWrapper {
        public void setUserTransaction(UserTransaction userTransaction) {
                this.userTransaction = userTransaction;
        }
-
-}
+}
\ No newline at end of file