import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingEnumeration;
import javax.naming.directory.DirContext;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import com.novell.java.io.NFile;
import com.novell.service.file.nw.NetwareFile;
import com.novell.service.file.nw.NetwareDirectory;
import com.novell.service.file.nw.NetwareVolume;
import com.novell.service.file.nw.naming.FSSchema;
import com.novell.utility.naming.Environment;
public class Schema
{
public static void main(String args[])
{
if (args.length < 1)
{
help();
}
String url = args[0];
StaticAttributeValueInterface sai = new TextualStatic(true);
Hashtable systemProps = new Hashtable();
systemProps.put(
Context.INITIAL_CONTEXT_FACTORY,
Environment.FS_INITIAL_CONTEXT_FACTORY);
systemProps.put(Context.PROVIDER_URL, url);
try
{
System.out.println("Looking up: " + url);
Object obj = new InitialContext(systemProps).lookup("");
if(!(obj instanceof DirContext))
{
System.out.println("This object is NOT a DirContext.");
System.out.println("There is no schema to display.");
System.exit(1);
}
DirContext context = (DirContext) obj;
System.out.println("\nMandatory Attribute and Syntax Definitions\n");
DirContext root = context.getSchema("");
DirContext sctx = context.getSchemaClassDefinition("");
Attributes sas = sctx.getAttributes("");
System.out.println("\t" + FSSchema.MANDATORY_ATTRIBUTE_IDS);
Attribute sattr = (Attribute) sas.get(FSSchema.MANDATORY_ATTRIBUTE_IDS);
if (sattr != null)
{
NamingEnumeration enum = sattr.getAll();
while(enum.hasMore())
{
String attrid = (String) enum.next();
DirContext avsctx = (DirContext) root.lookup(
FSSchema.ATTRIBUTE_DEFINITIONS + "/" +
attrid + FSSchema.SCHEMA_BINDING_SUFFIX);
Attributes avsas = avsctx.getAttributes("");
System.out.println("\t\t\t" + FSSchema.ATTRIBUTE_TYPE);
Attribute avsattr = avsas.get(FSSchema.ATTRIBUTE_TYPE);
String avtype = (String) avsattr.getAll().next();
System.out.println("\t\t\t\t" + avtype);
if (avtype.equals(
"com.novell.service.file.nw.DirectoryEntryInformation"))
sai.handleDirectoryEntryInformation((NetwareFile)context);
if (avtype.equals(
"com.novell.service.file.nw.TrusteeEnumerator"))
sai.handleTrusteeEnumerator((NetwareFile)context);
if (avtype.equals("com.novell.service.file.nw.EAEnumerator"))
sai.handleEAEnumerator((NetwareFile)context);
if (avtype.equals(
"com.novell.service.file.nw.DirectorySpaceInformation"))
sai.handleDirectorySpaceInformation((NetwareDirectory)context);
if (avtype.equals(
"com.novell.service.file.nw.VolumeInformation"))
sai.handleVolumeInformation((NetwareVolume)context);
if (avtype.equals(
"com.novell.service.file.nw.VolumeRestrictionEnumerator"))
sai.handleVolumeRestrictionEnumerator((NetwareVolume)context);
if (avtype.equals(
"com.novell.service.file.nw.VolumeUtilization"))
sai.handleVolumeUtilization(
(NetwareVolume) context,
"admin+1");
System.out.println("\t\t\t" + FSSchema.INTERFACES_IMPLEMENTED);
avsattr = avsas.get(FSSchema.INTERFACES_IMPLEMENTED);
NamingEnumeration avsenum = avsattr.getAll();
while (avsenum.hasMore())
{
System.out.println("\t\t\t\t" + (String) avsenum.next());
}
}
System.out.println("\n");
}
System.out.println("\t" + FSSchema.INTERFACES_IMPLEMENTED);
sattr = (Attribute) sas.get(FSSchema.INTERFACES_IMPLEMENTED);
if (sattr != null)
{
NamingEnumeration enum = sattr.getAll();
while(enum.hasMore())
{
String inter = (String) enum.next();
System.out.println("\t\tvalue: " + inter);
if (inter.equals("com.novell.java.io.NFile"))
sai.handleNFile((NFile)context);
if (inter.equals("com.novell.service.file.nw.NetwareVolume"))
sai.handleNetwareVolume((NetwareVolume)context, "admin+1");
if (inter.equals("com.novell.service.file.nw.NetwareDirectory"))
sai.handleNetwareDirectory((NetwareDirectory)context);
if (inter.equals("com.novell.service.file.nw.NetwareFile"))
sai.handleNetwareFile((NetwareFile)context);
}
System.out.println("\n");
}
}
catch (javax.naming.NamingException e)
{
System.out.println("Exception thrown: " + e);
e.printStackTrace();
System.exit(-1);
}
System.exit(0);
}
private static void help()
{
System.out.println(
"\nTo use this example program enter the following:");
System.out.println("\tjava Schema <url>\n");
System.out.println(
"\t\turl = name of the DirContext to display Schema for");
System.out.println(
"\t\t my_server/my_volume/my_dir");
System.out.println("");
System.exit(-1);
}
}