1 package de.webman.acl.resolver; 2 3 import java.util.Enumeration ; 4 import java.util.Hashtable ; 5 import com.teamkonzept.lib.ConfigurationManager; 6 import com.teamkonzept.lib.TKException; 7 import de.webman.acl.Login; 8 9 21 public class ResolverFactory 22 { 23 24 26 28 31 private static ResolverFactory SINGLETON = null; 32 33 34 36 39 private Hashtable sequentials = null; 40 41 44 private Hashtable generics = null; 45 46 47 49 52 private ResolverFactory () 53 { 54 this.sequentials = new Hashtable (); 56 this.generics = new Hashtable (); 57 } 58 59 60 62 67 public static synchronized final ResolverFactory getInstance () 68 { 69 if (SINGLETON == null) 70 { 71 SINGLETON = new ResolverFactory(); 72 } 73 74 return SINGLETON; 75 } 76 77 78 80 87 public final Resolver getResolver (Login login) 88 throws TKException 89 { 90 Resolver resolver = (Resolver) sequentials.get(login.getID()); 92 93 if (resolver == null) 94 { 95 resolver = new SequentialResolver(login); 97 98 resolver.configurationChanged(); 100 101 register(resolver); 103 104 sequentials.put(login.getID(), resolver); 106 } 107 108 return resolver; 109 } 110 111 113 120 protected final Resolver getResolver (Resolver requester) 121 throws TKException 122 { 123 Resolver resolver = (Resolver) generics.get(requester.getLogin().getID()); 125 126 if (resolver == null) 127 { 128 resolver = new GenericResolver(requester.getLogin()); 130 131 resolver.configurationChanged(); 133 134 register(resolver); 136 137 generics.put(requester.getLogin().getID(), resolver); 139 } 140 141 return resolver; 142 } 143 144 145 152 public final Checker getChecker (Login login) 153 throws TKException 154 { 155 return (Checker) getResolver(login); 156 } 157 158 163 public final void removeResolver (Login login) 164 { 165 deregister((Resolver) sequentials.remove(login.getID())); 167 168 deregister((Resolver) generics.remove(login.getID())); 170 } 171 172 175 public final void removeResolvers () 176 { 177 Enumeration iterator = sequentials.elements(); 179 180 while (iterator.hasMoreElements()) 182 { 183 deregister((Resolver) iterator.nextElement()); 184 } 185 186 sequentials.clear(); 188 189 iterator = generics.elements(); 191 192 while (iterator.hasMoreElements()) 194 { 195 deregister((Resolver) iterator.nextElement()); 196 } 197 198 generics.clear(); 200 } 201 202 203 205 210 private void register (Resolver resolver) 211 { 212 ConfigurationManager.getInstance() 213 .registerConfigurationListener(resolver, 214 Resolver.PROPERTY_GROUP_NAME); 215 } 216 217 222 private void deregister (Resolver resolver) 223 { 224 ConfigurationManager.getInstance() 225 .deregisterConfigurationListener(resolver, 226 Resolver.PROPERTY_GROUP_NAME); 227 } 228 229 } 230 | Popular Tags |