X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FUserDirectoryWorkingCopy.java;fp=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FUserDirectoryWorkingCopy.java;h=0e25bdfa12c441459e4f6bbee26353aa588ec5b2;hb=9f729eeb8255a9d800ad2506735dda8cc215a135;hp=0000000000000000000000000000000000000000;hpb=f9efbe5228615951dd8482a4582aa24e00c10ce5;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.util/src/org/argeo/osgi/useradmin/UserDirectoryWorkingCopy.java b/org.argeo.util/src/org/argeo/osgi/useradmin/UserDirectoryWorkingCopy.java new file mode 100644 index 000000000..0e25bdfa1 --- /dev/null +++ b/org.argeo.util/src/org/argeo/osgi/useradmin/UserDirectoryWorkingCopy.java @@ -0,0 +1,58 @@ +package org.argeo.osgi.useradmin; + +import java.util.HashMap; +import java.util.Map; + +import javax.naming.directory.Attributes; +import javax.naming.ldap.LdapName; +import javax.transaction.xa.XAResource; + +/** {@link XAResource} for a user directory being edited. */ +class UserDirectoryWorkingCopy { + // private final static Log log = LogFactory + // .getLog(UserDirectoryWorkingCopy.class); + + private Map newUsers = new HashMap(); + private Map modifiedUsers = new HashMap(); + private Map deletedUsers = new HashMap(); + + void cleanUp() { + // clean collections + newUsers.clear(); + newUsers = null; + modifiedUsers.clear(); + modifiedUsers = null; + deletedUsers.clear(); + deletedUsers = null; + } + + public boolean noModifications() { + return newUsers.size() == 0 && modifiedUsers.size() == 0 + && deletedUsers.size() == 0; + } + + public Attributes getAttributes(LdapName dn) { + if (modifiedUsers.containsKey(dn)) + return modifiedUsers.get(dn); + return null; + } + + public void startEditing(DirectoryUser user) { + LdapName dn = user.getDn(); + if (modifiedUsers.containsKey(dn)) + throw new UserDirectoryException("Already editing " + dn); + modifiedUsers.put(dn, (Attributes) user.getAttributes().clone()); + } + + public Map getNewUsers() { + return newUsers; + } + + public Map getDeletedUsers() { + return deletedUsers; + } + + public Map getModifiedUsers() { + return modifiedUsers; + } +}