package org.jnp.interfaces;
import java.util.Hashtable;
import javax.naming.CompoundName;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.spi.*;
public class NamingContextFactory
implements InitialContextFactory, ObjectFactory
{
public Context getInitialContext(Hashtable env)
throws NamingException
{
String providerURL = (String) env.get(Context.PROVIDER_URL);
Name prefix = null;
int comma = providerURL != null ? providerURL.indexOf(',') : -1;
if( providerURL != null && comma < 0 )
{
Name name = new CompoundName(providerURL, NamingParser.syntax);
String serverInfo = NamingContext.parseNameForScheme(name, env);
if( serverInfo != null )
{
env = (Hashtable) env.clone();
env.put(Context.PROVIDER_URL, serverInfo);
Name parsedName = (Name) env.get(NamingContext.JNP_PARSED_NAME);
if( parsedName != null )
prefix = parsedName;
else
prefix = name;
}
}
return new NamingContext(env, prefix, null);
}
public Object getObjectInstance(Object obj,
Name name,
Context nameCtx,
Hashtable environment)
throws Exception
{
Context ctx = getInitialContext(environment);
Reference ref = (Reference)obj;
return ctx.lookup((String)ref.get("URL").getContent());
}
}