00001
00027 package org.objectweb.jonas.security.realm.factory;
00028
00029
00030 import java.util.Hashtable;
00031
00032
00033 import javax.naming.Context;
00034 import javax.naming.Name;
00035 import javax.naming.RefAddr;
00036 import javax.naming.Reference;
00037
00038 import org.objectweb.jonas.common.JNDIUtils;
00039
00040
00041 import org.objectweb.util.monolog.api.BasicLevel;
00042
00048 public class JResourceMemoryFactory extends JResourceFactory {
00049
00053 private static final String FACTORY_TYPE = "org.objectweb.jonas.security.realm.factory.JResourceMemory";
00054
00073 public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable environment) throws Exception {
00074
00075
00076 Reference ref = (Reference) obj;
00077
00078
00079 String clname = ref.getClassName();
00080
00081
00082 if (!ref.getClassName().equals(FACTORY_TYPE)) {
00083 getLogger().log(BasicLevel.ERROR, "Cannot create object : required type is '" + FACTORY_TYPE
00084 + "', but found type is '" + clname + "'.");
00085 return null;
00086 }
00087
00088 Hashtable users = new Hashtable();
00089 Hashtable groups = new Hashtable();
00090 Hashtable roles = new Hashtable();
00091
00092 String jResName = (String) ref.get("name").getContent();
00093
00094 RefAddr refAddr = null;
00095 refAddr = ref.get("users");
00096 if (refAddr != null) {
00097 users = (Hashtable) JNDIUtils.getObjectFromBytes((byte[]) refAddr.getContent(), getLogger());
00098 }
00099
00100 refAddr = ref.get("groups");
00101 if (refAddr != null) {
00102 groups = (Hashtable) JNDIUtils.getObjectFromBytes((byte[]) refAddr.getContent(), getLogger());
00103 }
00104
00105 refAddr = ref.get("roles");
00106 if (refAddr != null) {
00107 roles = (Hashtable) JNDIUtils.getObjectFromBytes((byte[]) refAddr.getContent(), getLogger());
00108 }
00109
00110
00111 JResourceMemory jResourceMemory = new JResourceMemory();
00112 jResourceMemory.setName(jResName);
00113 jResourceMemory.setUsers(users);
00114 jResourceMemory.setGroups(groups);
00115 jResourceMemory.setRoles(roles);
00116
00117 return jResourceMemory;
00118 }
00119
00120 }