View Javadoc
1   package org.argeo.osgi.useradmin;
2   
3   import java.util.HashMap;
4   import java.util.Map;
5   
6   import javax.naming.directory.Attributes;
7   import javax.naming.ldap.LdapName;
8   import javax.transaction.xa.XAResource;
9   
10  /** {@link XAResource} for a user directory being edited. */
11  class UserDirectoryWorkingCopy {
12  	// private final static Log log = LogFactory
13  	// .getLog(UserDirectoryWorkingCopy.class);
14  
15  	private Map<LdapName, DirectoryUser> newUsers = new HashMap<LdapName, DirectoryUser>();
16  	private Map<LdapName, Attributes> modifiedUsers = new HashMap<LdapName, Attributes>();
17  	private Map<LdapName, DirectoryUser> deletedUsers = new HashMap<LdapName, DirectoryUser>();
18  
19  	void cleanUp() {
20  		// clean collections
21  		newUsers.clear();
22  		newUsers = null;
23  		modifiedUsers.clear();
24  		modifiedUsers = null;
25  		deletedUsers.clear();
26  		deletedUsers = null;
27  	}
28  
29  	public boolean noModifications() {
30  		return newUsers.size() == 0 && modifiedUsers.size() == 0
31  				&& deletedUsers.size() == 0;
32  	}
33  
34  	public Attributes getAttributes(LdapName dn) {
35  		if (modifiedUsers.containsKey(dn))
36  			return modifiedUsers.get(dn);
37  		return null;
38  	}
39  
40  	public void startEditing(DirectoryUser user) {
41  		LdapName dn = user.getDn();
42  		if (modifiedUsers.containsKey(dn))
43  			throw new UserDirectoryException("Already editing " + dn);
44  		modifiedUsers.put(dn, (Attributes) user.getAttributes().clone());
45  	}
46  
47  	public Map<LdapName, DirectoryUser> getNewUsers() {
48  		return newUsers;
49  	}
50  
51  	public Map<LdapName, DirectoryUser> getDeletedUsers() {
52  		return deletedUsers;
53  	}
54  
55  	public Map<LdapName, Attributes> getModifiedUsers() {
56  		return modifiedUsers;
57  	}
58  }