DirectoryManager.java [plain text]
package javax.naming.spi;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.StringTokenizer;
import javax.naming.CannotProceedException;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NamingException;
import javax.naming.RefAddr;
import javax.naming.Reference;
import javax.naming.Referenceable;
import javax.naming.StringRefAddr;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
public class DirectoryManager extends NamingManager
{
DirectoryManager ()
{
}
public static DirContext getContinuationDirContext (CannotProceedException c)
throws NamingException
{
return (DirContext) getContinuationContext (c);
}
private static Object tryCreateObject (ObjectFactory factory,
Object refInfo,
Name name,
Context nameCtx,
Hashtable environment,
Attributes attrs)
throws Exception
{
if (factory instanceof DirObjectFactory)
{
DirObjectFactory dof = (DirObjectFactory) factory;
return dof.getObjectInstance (refInfo, name, nameCtx,
environment, attrs);
}
else
return factory.getObjectInstance (refInfo, name, nameCtx,
environment);
}
public static Object getObjectInstance (Object refInfo, Name name,
Context nameCtx,
Hashtable environment,
Attributes attrs)
throws Exception
{
ObjectFactory factory = null;
if (ofb != null)
factory = ofb.createObjectFactory (refInfo, environment);
else
{
Object ref2 = refInfo;
if (refInfo instanceof Referenceable)
ref2 = ((Referenceable) refInfo).getReference ();
if (ref2 instanceof Reference)
{
Reference ref = (Reference) ref2;
String fClass = ref.getFactoryClassName ();
if (fClass != null)
{
Class k = Class.forName (fClass);
factory = (ObjectFactory) k.newInstance ();
}
else
{
Enumeration e = ref.getAll ();
while (e.hasMoreElements ())
{
RefAddr ra = (RefAddr) e.nextElement ();
if (ra instanceof StringRefAddr
&& "URL".equals (ra.getType ()))
{
factory
= (ObjectFactory) getURLContext (refInfo,
name,
nameCtx,
(String) ra.getContent (),
environment);
Object obj = tryCreateObject (factory,
refInfo,
name,
nameCtx,
environment,
attrs);
if (obj != null)
return obj;
}
}
factory = null;
}
}
if (factory == null)
{
StringTokenizer tokens = getPlusPath (Context.OBJECT_FACTORIES,
environment, nameCtx);
while (tokens.hasMoreTokens ())
{
String klassName = tokens.nextToken ();
Class k = Class.forName (klassName);
factory = (ObjectFactory) k.newInstance ();
Object obj = tryCreateObject (factory, refInfo, name,
nameCtx, environment, attrs);
if (obj != null)
return obj;
}
return refInfo;
}
}
if (factory == null)
return refInfo;
Object obj = tryCreateObject (factory, refInfo, name,
nameCtx, environment, attrs);
return obj == null ? refInfo : obj;
}
public static DirStateFactory.Result getStateToBind (Object obj,
Name name,
Context nameCtx,
Hashtable environment,
Attributes attrs)
throws NamingException
{
StringTokenizer tokens = getPlusPath (Context.STATE_FACTORIES,
environment, nameCtx);
while (tokens.hasMoreTokens ())
{
String klassName = tokens.nextToken ();
try
{
Class k = Class.forName (klassName);
StateFactory factory = (StateFactory) k.newInstance ();
DirStateFactory.Result result = null;
if (factory instanceof DirStateFactory)
{
DirStateFactory dsf = (DirStateFactory) factory;
result = dsf.getStateToBind (obj, name, nameCtx, environment,
attrs);
}
else
{
Object o = factory.getStateToBind (obj, name, nameCtx,
environment);
if (o != null)
result = new DirStateFactory.Result (o, attrs);
}
if (result != null)
return result;
}
catch (ClassNotFoundException _1)
{
}
catch (ClassCastException _2)
{
}
catch (InstantiationException _3)
{
}
catch (IllegalAccessException _4)
{
}
}
return new DirStateFactory.Result (obj, attrs);
}
}