00001
00025 package org.objectweb.cjdbc.controller.authentication;
00026
00027
import java.util.ArrayList;
00028
import java.util.HashMap;
00029
import java.util.Iterator;
00030
00031
import org.objectweb.cjdbc.common.i18n.Translate;
00032
import org.objectweb.cjdbc.common.users.AdminUser;
00033
import org.objectweb.cjdbc.common.users.DatabaseBackendUser;
00034
import org.objectweb.cjdbc.common.users.VirtualDatabaseUser;
00035
import org.objectweb.cjdbc.common.xml.DatabasesXmlTags;
00036
00047 public class AuthenticationManager
00048 {
00049
00050
00051
00052
00053
00054
00056 private ArrayList
virtualLogins;
00057
00059 private ArrayList
adminUsers;
00060
00061
00068 private HashMap
realLogins;
00069
00070
00071
00072
00073
00077 public AuthenticationManager()
00078 {
00079
virtualLogins =
new ArrayList();
00080
adminUsers =
new ArrayList();
00081
realLogins =
new HashMap();
00082 }
00083
00084
00085
00086
00087
00095 public boolean isValidAdminUser(
AdminUser user)
00096 {
00097
return adminUsers.contains(user);
00098 }
00099
00107 public boolean isValidVirtualUser(
VirtualDatabaseUser vUser)
00108 {
00109
return virtualLogins.contains(vUser);
00110 }
00111
00119 public boolean isValidVirtualLogin(String vLogin)
00120 {
00121 Iterator iter =
virtualLogins.iterator();
00122
VirtualDatabaseUser u;
00123
while (iter.hasNext())
00124 {
00125 u = (
VirtualDatabaseUser) iter.next();
00126
if (u.
getLogin().equals(vLogin))
00127 {
00128
return true;
00129 }
00130 }
00131
return false;
00132 }
00133
00134
00135
00136
00137
00143
00144
00145
00146
00152 public synchronized void addVirtualUser(
VirtualDatabaseUser vUser)
00153 {
00154
virtualLogins.add(vUser);
00155 }
00156
00165 public void addRealUser(String vLogin,
DatabaseBackendUser rUser)
00166
throws AuthenticationManagerException
00167 {
00168 HashMap list = (HashMap)
realLogins.get(vLogin);
00169
if (list == null)
00170 {
00171 list =
new HashMap();
00172 list.put(rUser.getBackendName(), rUser);
00173
realLogins.put(vLogin, list);
00174 }
00175
else
00176 {
00177
DatabaseBackendUser u = (
DatabaseBackendUser) list.get(rUser
00178 .getBackendName());
00179
if (u != null)
00180
throw new AuthenticationManagerException(
00181
Translate.get(
"authentication.failed.add.user.already.exists",
00182
new String[]{rUser.getLogin(), vLogin, rUser.getBackendName(),
00183 u.
getLogin()}));
00184 list.put(rUser.getBackendName(), rUser);
00185 }
00186 }
00187
00197 public DatabaseBackendUser getDatabaseBackendUser(String vLogin,
00198 String backendName)
00199 {
00200 Object list = realLogins.get(vLogin);
00201
if (list == null)
00202
return null;
00203
else
00204
return (
DatabaseBackendUser) ((HashMap) list).get(backendName);
00205 }
00206
00210
00211
00212
00213
00217 public HashMap getRealLogins()
00218 {
00219
return realLogins;
00220 }
00221
00225 public ArrayList getVirtualLogins()
00226 {
00227
return virtualLogins;
00228 }
00229
00230
00231
00232
00238 public String getXml()
00239 {
00240 StringBuffer info =
new StringBuffer();
00241 info.append(
"<" +
DatabasesXmlTags.ELT_AuthenticationManager +
">");
00242 info.append(
"<" +
DatabasesXmlTags.ELT_Admin +
">");
00243
for (
int i = 0; i < adminUsers.size(); i++)
00244 {
00245
AdminUser vu = (
AdminUser) adminUsers.get(i);
00246 info.append(vu.
getXml());
00247 }
00248 info.append(
"</" +
DatabasesXmlTags.ELT_Admin +
">");
00249
00250 info.append(
"<" +
DatabasesXmlTags.ELT_VirtualUsers +
">");
00251
for (
int i = 0; i < virtualLogins.size(); i++)
00252 {
00253
VirtualDatabaseUser vu = (
VirtualDatabaseUser) virtualLogins.get(i);
00254 info.append(vu.
getXml());
00255 }
00256 info.append(
"</" +
DatabasesXmlTags.ELT_VirtualUsers +
">");
00257 info.append(
"</" +
DatabasesXmlTags.ELT_AuthenticationManager +
">");
00258
return info.toString();
00259 }
00260
00266 public void addAdminUser(
AdminUser user)
00267 {
00268 adminUsers.add(user);
00269 }
00270
00277 public boolean removeAdminUser(
AdminUser user)
00278 {
00279
return adminUsers.remove(user);
00280 }
00281
00285 public ArrayList getAdminUsers()
00286 {
00287
return adminUsers;
00288 }
00289
00290 }