X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.e4%2Fsrc%2Forg%2Fargeo%2Fcms%2Fe4%2Fusers%2FUserAdminWrapper.java;h=16aa78316142a1a37f2340293c7ee15b4437ff9d;hb=b71546ddc74d6ca49d252806aafd491c75dfe1fb;hp=5eecaac215c8ab10c618a5ab760cccd0195167cc;hpb=088c1b517a543e935d8ab65c3b2fd2d0269b551d;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.e4/src/org/argeo/cms/e4/users/UserAdminWrapper.java b/org.argeo.cms.e4/src/org/argeo/cms/e4/users/UserAdminWrapper.java index 5eecaac21..16aa78316 100644 --- a/org.argeo.cms.e4/src/org/argeo/cms/e4/users/UserAdminWrapper.java +++ b/org.argeo.cms.e4/src/org/argeo/cms/e4/users/UserAdminWrapper.java @@ -2,19 +2,17 @@ package org.argeo.cms.e4.users; import java.util.ArrayList; import java.util.Collections; -import java.util.Dictionary; import java.util.HashMap; +import java.util.Hashtable; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.TreeSet; - -import javax.transaction.Status; -import javax.transaction.UserTransaction; +import org.argeo.api.cms.CmsConstants; import org.argeo.cms.CmsException; -import org.argeo.node.NodeConstants; +import org.argeo.osgi.transaction.WorkTransaction; import org.argeo.osgi.useradmin.UserAdminConf; +import org.argeo.osgi.useradmin.UserDirectory; import org.osgi.service.useradmin.UserAdmin; import org.osgi.service.useradmin.UserAdminEvent; import org.osgi.service.useradmin.UserAdminListener; @@ -24,8 +22,10 @@ public class UserAdminWrapper { private UserAdmin userAdmin; // private ServiceReference userAdminServiceReference; - private Set uris; - private UserTransaction userTransaction; +// private Set uris; + private Map> userDirectories = Collections + .synchronizedMap(new LinkedHashMap<>()); + private WorkTransaction userTransaction; // First effort to simplify UX while managing users and groups public final static boolean COMMIT_ON_SAVE = true; @@ -38,10 +38,10 @@ public class UserAdminWrapper { * {@link UserAdminWrapper#commitOrNotifyTransactionStateChange()} once the * security model changes have been performed. */ - public UserTransaction beginTransactionIfNeeded() { + public WorkTransaction beginTransactionIfNeeded() { try { // UserTransaction userTransaction = getUserTransaction(); - if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION) { + if (userTransaction.isNoTransactionStatus()) { userTransaction.begin(); // UiAdminUtils.notifyTransactionStateChange(userTransaction); } @@ -59,7 +59,7 @@ public class UserAdminWrapper { public void commitOrNotifyTransactionStateChange() { try { // UserTransaction userTransaction = getUserTransaction(); - if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION) + if (userTransaction.isNoTransactionStatus()) return; if (UserAdminWrapper.COMMIT_ON_SAVE) @@ -89,21 +89,34 @@ public class UserAdminWrapper { public Map getKnownBaseDns(boolean onlyWritable) { Map dns = new HashMap(); - for (String uri : uris) { - if (!uri.startsWith("/")) - continue; - Dictionary props = UserAdminConf.uriAsProperties(uri); - String readOnly = UserAdminConf.readOnly.getValue(props); - String baseDn = UserAdminConf.baseDn.getValue(props); + for (UserDirectory userDirectory : userDirectories.keySet()) { + Boolean readOnly = userDirectory.isReadOnly(); + String baseDn = userDirectory.getBaseDn().toString(); - if (onlyWritable && "true".equals(readOnly)) + if (onlyWritable && readOnly) continue; - if (baseDn.equalsIgnoreCase(NodeConstants.ROLES_BASEDN)) + if (baseDn.equalsIgnoreCase(CmsConstants.ROLES_BASEDN)) continue; - if (baseDn.equalsIgnoreCase(NodeConstants.TOKENS_BASEDN)) + if (baseDn.equalsIgnoreCase(CmsConstants.TOKENS_BASEDN)) continue; - dns.put(baseDn, uri); + dns.put(baseDn, UserAdminConf.propertiesAsUri(userDirectories.get(userDirectory)).toString()); + } +// for (String uri : uris) { +// if (!uri.startsWith("/")) +// continue; +// Dictionary 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(NodeConstants.ROLES_BASEDN)) +// continue; +// if (baseDn.equalsIgnoreCase(NodeConstants.TOKENS_BASEDN)) +// continue; +// dns.put(baseDn, uri); +// } return dns; } @@ -111,20 +124,28 @@ public class UserAdminWrapper { return userAdmin; } - public UserTransaction getUserTransaction() { + public WorkTransaction getUserTransaction() { return userTransaction; } /* DEPENDENCY INJECTION */ public void setUserAdmin(UserAdmin userAdmin, Map properties) { this.userAdmin = userAdmin; - this.uris = Collections.unmodifiableSortedSet(new TreeSet<>(properties.keySet())); +// this.uris = Collections.unmodifiableSortedSet(new TreeSet<>(properties.keySet())); } - public void setUserTransaction(UserTransaction userTransaction) { + public void setUserTransaction(WorkTransaction userTransaction) { this.userTransaction = userTransaction; } + public void addUserDirectory(UserDirectory userDirectory, Map properties) { + userDirectories.put(userDirectory, new Hashtable<>(properties)); + } + + public void removeUserDirectory(UserDirectory userDirectory, Map properties) { + userDirectories.remove(userDirectory); + } + // public void setUserAdminServiceReference( // ServiceReference userAdminServiceReference) { // this.userAdminServiceReference = userAdminServiceReference;