2000-11-27 04:16:14 +01:00
|
|
|
/* 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
|
2000-11-27 07:50:18 +01:00
|
|
|
{
|
|
|
|
getURLOrDefaultInitCtx (name).bind (name, obj);
|
|
|
|
}
|
2000-11-27 04:16:14 +01:00
|
|
|
|
|
|
|
public void bind (String name, Object obj) throws NamingException
|
2000-11-27 07:50:18 +01:00
|
|
|
{
|
|
|
|
getURLOrDefaultInitCtx (name).bind (name, obj);
|
|
|
|
}
|
2000-11-27 06:57:58 +01:00
|
|
|
|
|
|
|
public Object lookup (Name name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).lookup (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public Object lookup (String name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).lookup (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public void rebind (Name name, Object obj) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
getURLOrDefaultInitCtx (name).rebind (name, obj);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public void rebind (String name, Object obj) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
getURLOrDefaultInitCtx (name).rebind (name, obj);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public void unbind (Name name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
getURLOrDefaultInitCtx (name).unbind (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public void unbind (String name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
getURLOrDefaultInitCtx (name).unbind (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public void rename (Name oldName, Name newName) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
getURLOrDefaultInitCtx (oldName).rename (oldName, newName);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public void rename (String oldName, String newName) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
getURLOrDefaultInitCtx (oldName).rename (oldName, newName);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public NamingEnumeration list (Name name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).list (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public NamingEnumeration list (String name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).list (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public NamingEnumeration listBindings (Name name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).listBindings (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public NamingEnumeration listBindings (String name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).listBindings (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public void destroySubcontext (Name name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).destroySubcontext (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public void destroySubcontext (String name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).destroySubcontext (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public Context createSubcontext (Name name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).createSubcontext (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public Context createSubcontext (String name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).createSubcontext (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public Object lookupLink (Name name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).lookupLink (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public Object lookupLink (String name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).lookupLink (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public NameParser getNameParser (Name name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).getNameParser (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public NameParser getNameParser (String name) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).getNameParser (name);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public Name composeName (Name name, Name prefix) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).composeName (name, prefix);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public String composeName (String name,
|
|
|
|
String prefix) throws NamingException;
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return getURLOrDefaultInitCtx (name).composeName (name, prefix);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public Object addToEnvironment (String propName,
|
|
|
|
Object propVal) throws NamingException;
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
myProps.add (propName, propVal);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public Object removeFromEnvironment (String propName) throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
myProps.remove (propName);
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public Hashtable getEnvironment () throws NamingException
|
|
|
|
{
|
2000-11-27 07:50:18 +01:00
|
|
|
return myProps;
|
2000-11-27 06:57:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public void close () throws NamingException
|
|
|
|
{
|
|
|
|
throw new OperationNotSupportedException ();
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getNameInNamespace () throws NamingException
|
|
|
|
{
|
|
|
|
throw new OperationNotSupportedException ();
|
|
|
|
}
|
2000-11-27 04:16:14 +01:00
|
|
|
}
|