2002-05-02 David S. Miller <davem@redhat.com>
[official-gcc.git] / libjava / javax / naming / InitialContext.java
blob6ee6a9a8e5458364a694feae93e559ed16a98581
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
7 details. */
9 package javax.naming;
11 import java.io.File;
12 import java.io.FileInputStream;
13 import java.io.IOException;
14 import java.io.InputStream;
15 import java.net.URL;
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)
31 init (environment);
34 protected InitialContext (boolean lazy)
36 if (! lazy)
37 init (null);
40 public InitialContext ()
42 init (null);
45 protected void init (Hashtable environment)
47 // FIXME: Is this enough?
48 final String[] properties = {
49 Context.DNS_URL,
50 Context.INITIAL_CONTEXT_FACTORY,
51 Context.OBJECT_FACTORIES,
52 Context.PROVIDER_URL,
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 ();
60 else
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]);
69 if (o == null)
71 if (napplet != null)
72 o = napplet.getParameter (properties[i]);
73 if (o == null)
74 o = System.getProperty (properties[i]);
75 if (o != null)
76 myProps.put (properties[i], o);
80 try
82 Enumeration ep = Thread.currentThread().getContextClassLoader().getResources("jndi.naming");
83 while (ep.hasMoreElements ())
85 URL url = (URL) ep.nextElement ();
86 Properties p = new Properties ();
88 try {
89 InputStream is = url.openStream ();
90 p.load (is);
91 is.close ();
92 } catch (IOException e) {}
94 merge (myProps, p);
97 catch (IOException e) {}
99 String home = System.getProperty("java.home");
100 if (home != null)
102 String fileName = home + File.separator
103 + "lib" + File.separator + "jndi.properties";
104 Properties p = new Properties ();
106 try {
107 InputStream is = new FileInputStream (fileName);
108 p.load (is);
109 is.close ();
110 } catch (IOException e) {}
112 merge (myProps, p);
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);
132 if (value1 == null)
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
147 if (! gotDefault)
149 defaultInitCtx = NamingManager.getInitialContext (myProps);
150 gotDefault = true;
152 return defaultInitCtx;
156 protected Context getURLOrDefaultInitCtx (Name name)
157 throws NamingException
159 if (name.size () > 0)
160 return getURLOrDefaultInitCtx (name.get (0));
161 else
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);
176 if (scheme != null)
178 Context context =
179 NamingManager.getURLContext(scheme, myProps);
180 if (context != null)
181 return context;
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
321 return myProps;
324 public void close () throws NamingException
326 throw new OperationNotSupportedException ();
329 public String getNameInNamespace () throws NamingException
331 throw new OperationNotSupportedException ();