aboutsummaryrefslogtreecommitdiff
path: root/libjava/javax/naming/InitialContext.java
diff options
context:
space:
mode:
authorAnthony Green <green@redhat.com>2000-11-27 03:16:14 +0000
committerAnthony Green <green@gcc.gnu.org>2000-11-27 03:16:14 +0000
commit18205ca3b63fa0536ce6db35b4f1e264bdda5276 (patch)
treefddd25f01c276e915b483a1138befefd75ad4852 /libjava/javax/naming/InitialContext.java
parent158227a66aac2270747de0be47f1026e6bb13782 (diff)
downloadgcc-18205ca3b63fa0536ce6db35b4f1e264bdda5276.zip
gcc-18205ca3b63fa0536ce6db35b4f1e264bdda5276.tar.gz
gcc-18205ca3b63fa0536ce6db35b4f1e264bdda5276.tar.bz2
Initial jndi check-in
From-SVN: r37770
Diffstat (limited to 'libjava/javax/naming/InitialContext.java')
-rw-r--r--libjava/javax/naming/InitialContext.java197
1 files changed, 197 insertions, 0 deletions
diff --git a/libjava/javax/naming/InitialContext.java b/libjava/javax/naming/InitialContext.java
new file mode 100644
index 0000000..66454a5
--- /dev/null
+++ b/libjava/javax/naming/InitialContext.java
@@ -0,0 +1,197 @@
+/* Copyright (C) 2000 Free Software Foundation
+
+ This file is part of libgcj.
+
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+ details. */
+
+package javax.naming;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Properties;
+import java.applet.Applet;
+import java.util.Hashtable;
+import javax.naming.spi.NamingManager;
+
+
+public class InitialContext implements Context
+{
+ protected Context defaultInitCtx;
+ protected boolean gotDefault = false;
+ protected Hashtable myProps;
+
+ InitialContext (Hashtable environment)
+ {
+ init (environment);
+ }
+
+ protected InitialContext (boolean lazy)
+ {
+ if (! lazy)
+ init (null);
+ }
+
+ InitialContext ()
+ {
+ init (null);
+ }
+
+ protected void init (Hashtable environment)
+ {
+ // FIXME: Is this enough?
+ final String[] properties = {
+ Context.DNS_URL,
+ Context.INITIAL_CONTEXT_FACTORY,
+ Context.OBJECT_FACTORIES,
+ Context.PROVIDER_URL,
+ Context.STATE_FACTORIES,
+ Context.URL_PKG_PREFIXES,
+ };
+
+ // Create myProps, cloning environment if needed.
+ if (environment != null)
+ myProps = (Hashtable) environment.clone ();
+ else
+ myProps = new Hashtable ();
+
+ Applet napplet = (Applet) myProps.get (Context.APPLET);
+
+ for (int i = properties.length - 1; i >= 0; i--)
+ {
+ Object o = myProps.get (properties[i]);
+
+ if (o == null)
+ {
+ if (napplet != null)
+ o = napplet.getParameter (properties[i]);
+ if (o == null)
+ o = System.getProperty (properties[i]);
+ if (o != null)
+ myProps.put (properties[i], o);
+ }
+ }
+
+ try
+ {
+ Enumeration ep = Thread.currentThread().getContextClassLoader().getResources("jndi.naming");
+ while (ep.hasMoreElements ())
+ {
+ URL url = (URL) ep.nextElement ();
+ Properties p = new Properties ();
+
+ try {
+ InputStream is = url.openStream ();
+ p.load (is);
+ is.close ();
+ } catch (IOException e) {}
+
+ merge (myProps, p);
+ }
+ }
+ catch (IOException e) {}
+
+ String home = System.getProperty("java.home");
+ if (home != null)
+ {
+ String fileName = home + File.separator
+ + "lib" + File.separator + "jndi.properties";
+ Properties p = new Properties ();
+
+ try {
+ InputStream is = new FileInputStream (fileName);
+ p.load (is);
+ is.close ();
+ } catch (IOException e) {}
+
+ merge (myProps, p);
+ }
+ }
+
+ // FIXME: Is this enough?
+ private static final String[] colon_list =
+ {
+ Context.OBJECT_FACTORIS,
+ Context.URL_PKG_PREFIXES,
+ Context.STATE_FACTORIES
+ };
+
+ private static void merge (Hashtable h1, Hashtable h2)
+ {
+ Enumeration e2 = h2.keys();
+
+ while (e2.hasMoreElements())
+ {
+ String key2 = (String) e2.nextElement();
+ Object value1 = h1.get(key2);
+ if (value1 == null)
+ h1.put(key2, h2.get(key2));
+ else if (key2.compareTo(colon_list[0]) == 0
+ || key2.compareTo(colon_list[1]) == 0
+ || key2.compareTo(colon_list[2]) == 0
+ || key2.compareTo(colon_list[3]) == 0)
+ {
+ String value2 = (String) h2.get(key2);
+ h1.put(key2, (String) value1 + ":" + value2);
+ }
+ }
+ }
+
+ protected Context getDefaultInitCtx () throws NamingException
+ {
+ if (! gotDefault)
+ {
+ defaultInitCtx = NamingManager.getInitialContext (myProps);
+ gotDefault = true;
+ }
+ return defaultInitCtx;
+ }
+
+
+ protected Context getURLOrDefaultInitCtx (Name name)
+ throws NamingException
+ {
+ if (name.size () > 0)
+ return getURLOrDefaultInitCtx (name.get (0));
+ else
+ return getDefaultInitCtx ();
+ }
+
+ protected Context getURLOrDefaultInitCtx (String name)
+ throws NamingException
+ {
+ String scheme = null;
+
+ if (NamingManager.hasInitialContextFactoryBuilder())
+ return getDefaultInitCtx();
+ int colon = name.indexOf(':');
+ int slash = name.indexOf('/');
+ if (colon > 0 && (slash == -1 || colon < slash))
+ scheme = name.substring(0, colon);
+ if (scheme != null)
+ {
+ Context context =
+ NamingManager.getURLContext(scheme, myProps);
+ if (context != null)
+ return context;
+ }
+
+ return getDefaultInitCtx();
+ }
+
+ public void bind (Name name, Object obj) throws NamingException
+ {
+ getURLOrDefaultInitCtx (name).bind (name, obj);
+ }
+
+ public void bind (String name, Object obj) throws NamingException
+ {
+ getURLOrDefaultInitCtx (name).bind (name, obj);
+ }
+}