import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.Binding;
import javax.naming.NamingEnumeration;
import javax.naming.NameClassPair;
import javax.naming.directory.DirContext;
import javax.naming.directory.SearchResult;
import com.novell.utility.naming.Environment;
import com.novell.service.file.nw.DirectoryEntryInformation;
public class Search
{
public static void doSearch(String url, String search, String filter)
{
Hashtable systemProps = new Hashtable();
systemProps.put(
Context.INITIAL_CONTEXT_FACTORY,
Environment.FS_INITIAL_CONTEXT_FACTORY);
systemProps.put(Context.PROVIDER_URL, url);
try
{
DirContext context =
(DirContext) new InitialContext(systemProps).lookup("");
System.out.println("\nSearhing at: " + url + " with search: " + search +
" filter: " + filter + "\n");
NamingEnumeration sEnum = null;
if(filter != null)
{
Object[] dei = new Object[1];
dei[0] = new DirectoryEntryInformation();
((DirectoryEntryInformation) dei[0]).setCompareString(filter);
sEnum = context.search("", search, dei, null);
}
else
sEnum = context.search("", search, null);
int count = 0;
while (sEnum.hasMore())
{
SearchResult sr = (SearchResult)sEnum.next();
System.out.println(sr.getName() + " matched the search\n");
++count;
}
System.out.println(count + " matches found");
}
catch (javax.naming.NamingException e)
{
System.out.println("\nException thrown: " + e);
e.printStackTrace();
System.exit(-1);
}
}
public static void main(String args[])
{
if(args.length < 2)
help();
String filter = null;
if(args.length > 2)
filter = args[2];
doSearch(args[0], args[1], filter);
System.exit(0);
}
private static void help()
{
System.out.println(
"\nTo use this example program enter the following:\n");
System.out.println(
"\tjava Search <url> <search> [filter]\n");
System.out.println(
"\t\turl = name of the File System DirContext to search on");
System.out.println("\t\t my_server/my_volume/my_dir\n");
System.out.println(
"\t\tsearch = search string for JNDI level");
System.out.println("\t\t \"(Entry Information=tfile.txt)\" name search");
System.out.println("\t\t \"(Entry Information={0})\" replacement\n");
System.out.println(
"\t\tfilter = optional compare filter if using replacement object");
System.out.println(
"\t\t (&(EntryName=tfile.txt)(SpaceAlloc<=1024))");
System.out.println("");
System.out.println(
"The search and filter parameters should follow the RFC 2254 format\n\n" +
"If the name search format is used for the search parameter\n" +
"(first example), dont supply the filter parameter\n\n" +
"If the replacement format is used for the search parameter\n" +
"(second example), the filter parameter is used\n\n" +
"See the javadoc for the various Attribute values to find\n" +
"valid id's for use in both the search and filter.\n");
System.exit(-1);
}
}