/
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.awt.Container;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
/**
*
* @author
*/
public class Search {
private DirContext dc = null;
private JFrame jframe = null;
private Hashtable existNodes = new Hashtable();
private String url = "";
private String loginName = "";
private String password = "";
private String base = "";
private String filter = "";
public Search(String url, String loginName, String password, String base,
String filter) {
this.url = url;
this.loginName = loginName;
this.password = password;
this.base = base;
this.filter = filter;
display();
}
//连接LDAP
public void getConnection() {
try {
Hashtable env = new Hashtable();
env.put(Context.SECURITY_PRINCIPAL, loginName);
env.put(Context.SECURITY_CREDENTIALS, password);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, url);
dc = new InitialDirContext(env);
} catch (Exception ex) {
ex.printStackTrace();
}
}
//取得每一个Entry的DN
public ArrayList getDN() {
ArrayList list = new ArrayList();
try {
getConnection();
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration results = dc.search(base, filter, constraints);
while (results != null && results.hasMore()) {
SearchResult si = (SearchResult) results.next();
list.add(si.getNameInNamespace());
}
} catch (NamingException ex) {
}
return list;
}
private String getCreatedDn(String[] str, int i, int j) {
if (i < 0 | i > str.length | j > str.length | j < 0 | i > j) {
return null;
}
String ret = str[i];
int k = i + 1;
while (k < j - 1) {
ret += "," + str[k];
k++;
}
return ret;
}
//建树
public JTree buildTree() {
JTree jtree = null;
ArrayList dnList = getDN();
Iterator it = dnList.iterator();
DefaultMutableTreeNode root = new DefaultMutableTreeNode(base);
int baseLenth = base.split(",").length + 1;
System.out.println(baseLenth);
while (it.hasNext()) {
String dnStr = (String) it.next();
String[] nodes = dnStr.split(",");
int j = nodes.length;
int k = j - baseLenth;
DefaultMutableTreeNode a = root;
for (int i = k; i >= 0; i--) {
String nodeDN = getCreatedDn(nodes, i, k);
//System.out.println(nodeDN);
if (existNodes.containsKey(new String(nodeDN))) {
a = (DefaultMutableTreeNode) existNodes.get(new String(
nodeDN));
continue;
}
DefaultMutableTreeNode b = new DefaultMutableTreeNode(nodes[i]);
existNodes.put(new String(nodeDN), b);
a.add(b);
a = b;
}
a = null;
}
existNodes = null;
jtree = new JTree(root);
return jtree;
}
//显示
public void display() {
jframe = new JFrame("buildTree");
Container container = jframe.getContentPane();
JTree jtree = buildTree();
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(jtree);
container.add(scrollPane);
jframe.pack();
jframe.setVisible(true);
jframe.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
new Search("ldap://localhost:389", "User DN",
"Password", "Base DN",
"(ObjectClass=*)");
}
}