1 /* Copyright (C) 2000 Free Software Foundation
3 This file is part of libgcj.
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
12 import java
.io
.FileInputStream
;
13 import java
.io
.IOException
;
14 import java
.io
.InputStream
;
16 import java
.util
.Enumeration
;
17 import java
.util
.Hashtable
;
18 import java
.util
.Properties
;
19 import java
.applet
.Applet
;
20 import java
.util
.Hashtable
;
21 import javax
.naming
.spi
.NamingManager
;
23 public class InitialContext
implements Context
25 protected Context defaultInitCtx
;
26 protected boolean gotDefault
= false;
27 protected Hashtable myProps
;
29 public InitialContext (Hashtable environment
)
34 protected InitialContext (boolean lazy
)
40 public InitialContext ()
45 protected void init (Hashtable environment
)
47 // FIXME: Is this enough?
48 final String
[] properties
= {
50 Context
.INITIAL_CONTEXT_FACTORY
,
51 Context
.OBJECT_FACTORIES
,
53 Context
.STATE_FACTORIES
,
54 Context
.URL_PKG_PREFIXES
,
57 // Create myProps, cloning environment if needed.
58 if (environment
!= null)
59 myProps
= (Hashtable
) environment
.clone ();
61 myProps
= new Hashtable ();
63 Applet napplet
= (Applet
) myProps
.get (Context
.APPLET
);
65 for (int i
= properties
.length
- 1; i
>= 0; i
--)
67 Object o
= myProps
.get (properties
[i
]);
72 o
= napplet
.getParameter (properties
[i
]);
74 o
= System
.getProperty (properties
[i
]);
76 myProps
.put (properties
[i
], o
);
82 Enumeration ep
= Thread
.currentThread().getContextClassLoader().getResources("jndi.naming");
83 while (ep
.hasMoreElements ())
85 URL url
= (URL
) ep
.nextElement ();
86 Properties p
= new Properties ();
89 InputStream is
= url
.openStream ();
92 } catch (IOException e
) {}
97 catch (IOException e
) {}
99 String home
= System
.getProperty("java.home");
102 String fileName
= home
+ File
.separator
103 + "lib" + File
.separator
+ "jndi.properties";
104 Properties p
= new Properties ();
107 InputStream is
= new FileInputStream (fileName
);
110 } catch (IOException e
) {}
116 // FIXME: Is this enough?
117 private static final String
[] colon_list
=
119 Context
.OBJECT_FACTORIES
,
120 Context
.URL_PKG_PREFIXES
,
121 Context
.STATE_FACTORIES
124 private static void merge (Hashtable h1
, Hashtable h2
)
126 Enumeration e2
= h2
.keys();
128 while (e2
.hasMoreElements())
130 String key2
= (String
) e2
.nextElement();
131 Object value1
= h1
.get(key2
);
133 h1
.put(key2
, h2
.get(key2
));
134 else if (key2
.compareTo(colon_list
[0]) == 0
135 || key2
.compareTo(colon_list
[1]) == 0
136 || key2
.compareTo(colon_list
[2]) == 0
137 || key2
.compareTo(colon_list
[3]) == 0)
139 String value2
= (String
) h2
.get(key2
);
140 h1
.put(key2
, (String
) value1
+ ":" + value2
);
145 protected Context
getDefaultInitCtx () throws NamingException
149 defaultInitCtx
= NamingManager
.getInitialContext (myProps
);
152 return defaultInitCtx
;
156 protected Context
getURLOrDefaultInitCtx (Name name
)
157 throws NamingException
159 if (name
.size () > 0)
160 return getURLOrDefaultInitCtx (name
.get (0));
162 return getDefaultInitCtx ();
165 protected Context
getURLOrDefaultInitCtx (String name
)
166 throws NamingException
168 String scheme
= null;
170 if (NamingManager
.hasInitialContextFactoryBuilder())
171 return getDefaultInitCtx();
172 int colon
= name
.indexOf(':');
173 int slash
= name
.indexOf('/');
174 if (colon
> 0 && (slash
== -1 || colon
< slash
))
175 scheme
= name
.substring(0, colon
);
179 NamingManager
.getURLContext(scheme
, myProps
);
184 return getDefaultInitCtx();
187 public void bind (Name name
, Object obj
) throws NamingException
189 getURLOrDefaultInitCtx (name
).bind (name
, obj
);
192 public void bind (String name
, Object obj
) throws NamingException
194 getURLOrDefaultInitCtx (name
).bind (name
, obj
);
197 public Object
lookup (Name name
) throws NamingException
199 return getURLOrDefaultInitCtx (name
).lookup (name
);
202 public Object
lookup (String name
) throws NamingException
204 return getURLOrDefaultInitCtx (name
).lookup (name
);
207 public void rebind (Name name
, Object obj
) throws NamingException
209 getURLOrDefaultInitCtx (name
).rebind (name
, obj
);
212 public void rebind (String name
, Object obj
) throws NamingException
214 getURLOrDefaultInitCtx (name
).rebind (name
, obj
);
217 public void unbind (Name name
) throws NamingException
219 getURLOrDefaultInitCtx (name
).unbind (name
);
222 public void unbind (String name
) throws NamingException
224 getURLOrDefaultInitCtx (name
).unbind (name
);
227 public void rename (Name oldName
, Name newName
) throws NamingException
229 getURLOrDefaultInitCtx (oldName
).rename (oldName
, newName
);
232 public void rename (String oldName
, String newName
) throws NamingException
234 getURLOrDefaultInitCtx (oldName
).rename (oldName
, newName
);
237 public NamingEnumeration
list (Name name
) throws NamingException
239 return getURLOrDefaultInitCtx (name
).list (name
);
242 public NamingEnumeration
list (String name
) throws NamingException
244 return getURLOrDefaultInitCtx (name
).list (name
);
247 public NamingEnumeration
listBindings (Name name
) throws NamingException
249 return getURLOrDefaultInitCtx (name
).listBindings (name
);
252 public NamingEnumeration
listBindings (String name
) throws NamingException
254 return getURLOrDefaultInitCtx (name
).listBindings (name
);
257 public void destroySubcontext (Name name
) throws NamingException
259 getURLOrDefaultInitCtx (name
).destroySubcontext (name
);
262 public void destroySubcontext (String name
) throws NamingException
264 getURLOrDefaultInitCtx (name
).destroySubcontext (name
);
267 public Context
createSubcontext (Name name
) throws NamingException
269 return getURLOrDefaultInitCtx (name
).createSubcontext (name
);
272 public Context
createSubcontext (String name
) throws NamingException
274 return getURLOrDefaultInitCtx (name
).createSubcontext (name
);
277 public Object
lookupLink (Name name
) throws NamingException
279 return getURLOrDefaultInitCtx (name
).lookupLink (name
);
282 public Object
lookupLink (String name
) throws NamingException
284 return getURLOrDefaultInitCtx (name
).lookupLink (name
);
287 public NameParser
getNameParser (Name name
) throws NamingException
289 return getURLOrDefaultInitCtx (name
).getNameParser (name
);
292 public NameParser
getNameParser (String name
) throws NamingException
294 return getURLOrDefaultInitCtx (name
).getNameParser (name
);
297 public Name
composeName (Name name
, Name prefix
) throws NamingException
299 return getURLOrDefaultInitCtx (name
).composeName (name
, prefix
);
302 public String
composeName (String name
,
303 String prefix
) throws NamingException
305 return getURLOrDefaultInitCtx (name
).composeName (name
, prefix
);
308 public Object
addToEnvironment (String propName
,
309 Object propVal
) throws NamingException
311 return myProps
.put (propName
, propVal
);
314 public Object
removeFromEnvironment (String propName
) throws NamingException
316 return myProps
.remove (propName
);
319 public Hashtable
getEnvironment () throws NamingException
324 public void close () throws NamingException
326 throw new OperationNotSupportedException ();
329 public String
getNameInNamespace () throws NamingException
331 throw new OperationNotSupportedException ();