KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > webman > sync > ldap > worker > RemoveUnknownUsers


1 package de.webman.sync.ldap.worker;
2
3 import de.webman.sync.Worker;
4 import de.webman.sync.ACLAdaptor;
5 import de.webman.sync.SyncException;
6 import de.webman.sync.ldap.LDAPAdaptor;
7 import java.util.List JavaDoc;
8 import java.util.Iterator JavaDoc;
9 import java.util.Enumeration JavaDoc;
10 import java.util.HashSet JavaDoc;
11 import org.apache.log4j.Category;
12 import de.webman.acl.UserFactory;
13 import com.teamkonzept.lib.TKException;
14 import com.teamkonzept.lib.TKVector;
15 import de.webman.acl.Login;
16 import de.webman.acl.LoginFactory;
17
18 /**
19  * Removes users from webman which are not found in the ldap system. This
20  * worker implements the "garbage collection" for usecase 2 (caatoosee
21  * specific ldap connection).
22  *
23  * @author <a HREF="mailto:gregor@webman.de">Gregor Klinke</a>
24  * @version $Revision: 1.2 $
25  **/

26 public class RemoveUnknownUsers
27     implements Worker
28 {
29     /* $Id: RemoveUnknownUsers.java,v 1.2 2002/04/12 14:56:02 gregor Exp $ */
30     /**
31      * logging facility
32      **/

33     public static Category cat = Category.getInstance(RemoveUnknownUsers.class);
34
35     /**
36      * the main start method for this worker
37      * @param adaptor the access control adaptor to use
38      * @throws SyncException during the run an fatal error occured
39      **/

40     public void run(ACLAdaptor adaptor)
41         throws SyncException
42     {
43         cat.debug("synchronize for removed users");
44         
45         List JavaDoc ldap_users = adaptor.getAllUsers();
46         HashSet JavaDoc ldusers = new HashSet JavaDoc(ldap_users.size());
47         
48         for (Iterator JavaDoc it = ldap_users.iterator(); it.hasNext(); ) {
49             de.webman.sync.User ldu = (de.webman.sync.User)it.next();
50             
51             ldusers.add(ldu.getWebmanName());
52         }
53         
54         int users_to_remove = 0; // statistics
55
int removed_users = 0; // statistics
56
int ignored_users = 0; // statistics
57
TKVector webman_users = null;
58         
59         /* request a list of known webman users */
60         try {
61             webman_users = UserFactory.getInstance().getUsers();
62             
63             /* cycle through the list of known webman user. users not
64                matched against ldusers, have to be removed from the webman
65                system. */

66             for (Enumeration JavaDoc en = webman_users.elements(); en.hasMoreElements(); ) {
67                 de.webman.acl.User wmu = (de.webman.acl.User)en.nextElement();
68                 
69                 if (ldusers.contains(wmu.getLogin()))
70                     cat.debug("webman user found in ldap");
71                 else {
72                     users_to_remove ++;
73
74                     /* ignore webman users, if they are listed */
75                     if ((adaptor instanceof LDAPAdaptor) &&
76                         ((LDAPAdaptor)adaptor).ignoreUsers().contains(wmu.getLogin())) {
77                         ignored_users ++;
78                     }
79                     else if (removeUser(wmu))
80                         removed_users ++;
81                 }
82             }
83         }
84         catch (TKException te) {
85             throw new SyncException(te);
86         }
87         
88
89
90         cat.info("synchronize for removed users successfully; STATISTICS:\n" +
91                  ldap_users.size() + " found in LDAP system,\n" +
92                  webman_users.size() + " found in webman,\n" +
93                  users_to_remove + " to be removed,\n" +
94                  removed_users + " removed successfully\n" +
95                  ignored_users + " users ignored");
96     }
97     
98
99     /**
100      * removed a user from the underlying webman system
101      * @param user the ldap user representation
102      * @return <code>true</code> if the user could be removed successfully
103      **/

104     private boolean removeUser(de.webman.acl.User user) {
105         cat.info ("REMOVE USER: '" + user.getLogin() + "'");
106         try {
107             Login l = LoginFactory.getInstance().getLogin(user.getLogin());
108             if (l != null) {
109                 LoginFactory.getInstance().deleteLogin(l);
110                 return true;
111             }
112         }
113         catch (TKException tke) {
114             cat.error("can't remove user: '" + user.getLogin() + "' (" + tke + ")");
115         }
116         return false;
117     }
118 }
119
Popular Tags