27dd18cf73
2004-04-21 Dalibor Topic <robilad@kaffe.org> * javax/naming/AuthenticationException.java, javax/naming/AuthenticationNotSupportedException.java, javax/naming/CannotProceedException.java, javax/naming/CommunicationException.java, javax/naming/CompoundName.java, javax/naming/ConfigurationException.java, javax/naming/ContextNotEmptyException.java, javax/naming/InitialContext.java, javax/naming/InsufficientResourcesException.java, javax/naming/InterruptedNamingException.java, javax/naming/LimitExceededException.java, javax/naming/LinkException.java, javax/naming/LinkLoopException.java, javax/naming/LinkRef.java, javax/naming/MalformedLinkException.java, javax/naming/Name.java, javax/naming/NameAlreadyBoundException.java, javax/naming/NameNotFoundException.java, javax/naming/NamingSecurityException.java, javax/naming/NoInitialContextException.java, javax/naming/NoPermissionException.java, javax/naming/NotContextException.java, javax/naming/PartialResultException.java, javax/naming/ReferralException.java, javax/naming/ServiceUnavailableException.java, javax/naming/SizeLimitExceededException.java, javax/naming/TimeLimitExceededException.java, javax/naming/directory/Attribute.java, javax/naming/directory/Attributes.java, javax/naming/directory/SearchResult.java, javax/naming/event/NamingExceptionEvent.java, javax/naming/spi/ResolveResult.java: Cleaned up imports. From-SVN: r80947
394 lines
9.9 KiB
Java
394 lines
9.9 KiB
Java
/* InitialContext.java --
|
|
Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
|
|
|
|
This file is part of GNU Classpath.
|
|
|
|
GNU Classpath is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2, or (at your option)
|
|
any later version.
|
|
|
|
GNU Classpath is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
02111-1307 USA.
|
|
|
|
Linking this library statically or dynamically with other modules is
|
|
making a combined work based on this library. Thus, the terms and
|
|
conditions of the GNU General Public License cover the whole
|
|
combination.
|
|
|
|
As a special exception, the copyright holders of this library give you
|
|
permission to link this library with independent modules to produce an
|
|
executable, regardless of the license terms of these independent
|
|
modules, and to copy and distribute the resulting executable under
|
|
terms of your choice, provided that you also meet, for each linked
|
|
independent module, the terms and conditions of the license of that
|
|
module. An independent module is a module which is not derived from
|
|
or based on this library. If you modify this library, you may extend
|
|
this exception to your version of the library, but you are not
|
|
obligated to do so. If you do not wish to do so, delete this
|
|
exception statement from your version. */
|
|
|
|
|
|
package javax.naming;
|
|
|
|
import java.applet.Applet;
|
|
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 javax.naming.spi.NamingManager;
|
|
|
|
public class InitialContext implements Context
|
|
{
|
|
protected Context defaultInitCtx;
|
|
protected boolean gotDefault = false;
|
|
protected Hashtable myProps;
|
|
|
|
public InitialContext (Hashtable environment)
|
|
throws NamingException
|
|
{
|
|
init (environment);
|
|
}
|
|
|
|
protected InitialContext (boolean lazy)
|
|
throws NamingException
|
|
{
|
|
if (! lazy)
|
|
init (null);
|
|
}
|
|
|
|
public InitialContext ()
|
|
throws NamingException
|
|
{
|
|
init (null);
|
|
}
|
|
|
|
/** @since 1.3 */
|
|
protected void init (Hashtable environment)
|
|
throws NamingException
|
|
{
|
|
// 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("gnu.classpath.home.url");
|
|
if (home != null)
|
|
{
|
|
String url = home + "/jndi.properties";
|
|
Properties p = new Properties ();
|
|
|
|
try
|
|
{
|
|
InputStream is = new URL(url).openStream();
|
|
p.load (is);
|
|
is.close ();
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
// Ignore.
|
|
}
|
|
|
|
merge (myProps, p);
|
|
}
|
|
}
|
|
|
|
// FIXME: Is this enough?
|
|
private static final String[] colon_list =
|
|
{
|
|
Context.OBJECT_FACTORIES,
|
|
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);
|
|
}
|
|
|
|
public Object lookup (Name name) throws NamingException
|
|
{
|
|
try
|
|
{
|
|
return getURLOrDefaultInitCtx (name).lookup (name);
|
|
}
|
|
catch (CannotProceedException cpe)
|
|
{
|
|
Context ctx = NamingManager.getContinuationContext (cpe);
|
|
return ctx.lookup (cpe.getRemainingName());
|
|
}
|
|
}
|
|
|
|
public Object lookup (String name) throws NamingException
|
|
{
|
|
try
|
|
{
|
|
return getURLOrDefaultInitCtx (name).lookup (name);
|
|
}
|
|
catch (CannotProceedException cpe)
|
|
{
|
|
Context ctx = NamingManager.getContinuationContext (cpe);
|
|
return ctx.lookup (cpe.getRemainingName());
|
|
}
|
|
}
|
|
|
|
public void rebind (Name name, Object obj) throws NamingException
|
|
{
|
|
getURLOrDefaultInitCtx (name).rebind (name, obj);
|
|
}
|
|
|
|
public void rebind (String name, Object obj) throws NamingException
|
|
{
|
|
getURLOrDefaultInitCtx (name).rebind (name, obj);
|
|
}
|
|
|
|
public void unbind (Name name) throws NamingException
|
|
{
|
|
getURLOrDefaultInitCtx (name).unbind (name);
|
|
}
|
|
|
|
public void unbind (String name) throws NamingException
|
|
{
|
|
getURLOrDefaultInitCtx (name).unbind (name);
|
|
}
|
|
|
|
public void rename (Name oldName, Name newName) throws NamingException
|
|
{
|
|
getURLOrDefaultInitCtx (oldName).rename (oldName, newName);
|
|
}
|
|
|
|
public void rename (String oldName, String newName) throws NamingException
|
|
{
|
|
getURLOrDefaultInitCtx (oldName).rename (oldName, newName);
|
|
}
|
|
|
|
public NamingEnumeration list (Name name) throws NamingException
|
|
{
|
|
return getURLOrDefaultInitCtx (name).list (name);
|
|
}
|
|
|
|
public NamingEnumeration list (String name) throws NamingException
|
|
{
|
|
return getURLOrDefaultInitCtx (name).list (name);
|
|
}
|
|
|
|
public NamingEnumeration listBindings (Name name) throws NamingException
|
|
{
|
|
return getURLOrDefaultInitCtx (name).listBindings (name);
|
|
}
|
|
|
|
public NamingEnumeration listBindings (String name) throws NamingException
|
|
{
|
|
return getURLOrDefaultInitCtx (name).listBindings (name);
|
|
}
|
|
|
|
public void destroySubcontext (Name name) throws NamingException
|
|
{
|
|
getURLOrDefaultInitCtx (name).destroySubcontext (name);
|
|
}
|
|
|
|
public void destroySubcontext (String name) throws NamingException
|
|
{
|
|
getURLOrDefaultInitCtx (name).destroySubcontext (name);
|
|
}
|
|
|
|
public Context createSubcontext (Name name) throws NamingException
|
|
{
|
|
return getURLOrDefaultInitCtx (name).createSubcontext (name);
|
|
}
|
|
|
|
public Context createSubcontext (String name) throws NamingException
|
|
{
|
|
return getURLOrDefaultInitCtx (name).createSubcontext (name);
|
|
}
|
|
|
|
public Object lookupLink (Name name) throws NamingException
|
|
{
|
|
return getURLOrDefaultInitCtx (name).lookupLink (name);
|
|
}
|
|
|
|
public Object lookupLink (String name) throws NamingException
|
|
{
|
|
return getURLOrDefaultInitCtx (name).lookupLink (name);
|
|
}
|
|
|
|
public NameParser getNameParser (Name name) throws NamingException
|
|
{
|
|
return getURLOrDefaultInitCtx (name).getNameParser (name);
|
|
}
|
|
|
|
public NameParser getNameParser (String name) throws NamingException
|
|
{
|
|
return getURLOrDefaultInitCtx (name).getNameParser (name);
|
|
}
|
|
|
|
public Name composeName (Name name, Name prefix) throws NamingException
|
|
{
|
|
return getURLOrDefaultInitCtx (name).composeName (name, prefix);
|
|
}
|
|
|
|
public String composeName (String name,
|
|
String prefix) throws NamingException
|
|
{
|
|
return getURLOrDefaultInitCtx (name).composeName (name, prefix);
|
|
}
|
|
|
|
public Object addToEnvironment (String propName,
|
|
Object propVal) throws NamingException
|
|
{
|
|
return myProps.put (propName, propVal);
|
|
}
|
|
|
|
public Object removeFromEnvironment (String propName) throws NamingException
|
|
{
|
|
return myProps.remove (propName);
|
|
}
|
|
|
|
public Hashtable getEnvironment () throws NamingException
|
|
{
|
|
return myProps;
|
|
}
|
|
|
|
public void close () throws NamingException
|
|
{
|
|
myProps = null;
|
|
defaultInitCtx = null;
|
|
}
|
|
|
|
public String getNameInNamespace () throws NamingException
|
|
{
|
|
throw new OperationNotSupportedException ();
|
|
}
|
|
}
|