package com.bagri.tools.vvm.ui; import javax.swing.*; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.*; import com.bagri.tools.vvm.model.*; import static com.bagri.tools.vvm.util.Icons.*; import java.awt.*; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; public class MainTreePanel extends JPanel { private final DefaultMutableTreeNode clusterManagement; private final DefaultMutableTreeNode schemaManagement; private final DefaultMutableTreeNode userManagement; private JTree tree; public MainTreePanel() { super(new GridLayout(1,1)); tree = new JTree(); tree.setCellRenderer(new TreeCellRenderer()); DefaultMutableTreeNode top = new DefaultMutableTreeNode(new BagriManager()); this.clusterManagement = new DefaultMutableTreeNode(new ClusterManagement()); top.add(clusterManagement); this.schemaManagement = new DefaultMutableTreeNode(new SchemaManagement()); top.add(schemaManagement); this.userManagement = new DefaultMutableTreeNode(new UserManagement()); top.add(userManagement); tree.setModel(new DefaultTreeModel(top, false)); tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); for (int i = 0; i < tree.getRowCount(); i++) { tree.expandRow(i); } add(tree); // tree.setSelectionRow(tree.getRowForPath(new TreePath(clusterManagement.getPath()))); // tree.setSelection } public TreePath findTreePath(String s) { Enumeration<DefaultMutableTreeNode> e = ((DefaultMutableTreeNode) tree.getModel().getRoot()).depthFirstEnumeration(); while (e.hasMoreElements()) { DefaultMutableTreeNode node = e.nextElement(); if (node.toString().equalsIgnoreCase(s)) { return new TreePath(node.getPath()); } } return null; } public void setSelectionPath(TreePath path) { tree.setSelectionPath(path); } public int getClosestRowForLocation(int x, int y) { return tree.getClosestRowForLocation(x, y); } public void setSelectionRow(int row) { tree.setSelectionRow(row); } public Object getLastSelectedPathComponent() { return tree.getLastSelectedPathComponent(); } public TreePath getPathForLocation(int x, int y) { return tree.getPathForLocation(x, y); } public Rectangle getPathBounds(TreePath path) { return tree.getUI().getPathBounds(tree, path); } @Override public synchronized void addMouseListener(MouseListener l) { tree.addMouseListener(l); } public void addTreeSelectionListener(TreeSelectionListener listener) { tree.addTreeSelectionListener(listener); } public void setNodes(java.util.List<Node> nodes) { //Enumeration children = clusterManagement.children(); // create cached collection //ArrayList<DefaultMutableTreeNode> cached = new ArrayList<DefaultMutableTreeNode>(); //while (children.hasMoreElements()) { // DefaultMutableTreeNode child = (DefaultMutableTreeNode)children.nextElement(); // cached.add(child); //} //for (DefaultMutableTreeNode node :cached) { // ((DefaultTreeModel) tree.getModel()).removeNodeFromParent(node); //} clusterManagement.removeAllChildren(); Collections.sort(nodes); for (int i=0; i < nodes.size(); i++) { Node node = nodes.get(i); //((DefaultTreeModel) tree.getModel()).insertNodeInto(new DefaultMutableTreeNode(node), clusterManagement, i); clusterManagement.add(new DefaultMutableTreeNode(node)); } for (int i = 0; i < tree.getRowCount(); i++) { tree.expandRow(i); } } public void setSchemas(java.util.List<Schema> schemas) { //Enumeration children = schemaManagement.children(); // create cached collection //ArrayList<DefaultMutableTreeNode> cached = new ArrayList<DefaultMutableTreeNode>(); //while (children.hasMoreElements()) { // DefaultMutableTreeNode child = (DefaultMutableTreeNode) children.nextElement(); // cached.add(child); //} //for (DefaultMutableTreeNode node : cached) { // ((DefaultTreeModel) tree.getModel()).removeNodeFromParent(node); //} schemaManagement.removeAllChildren(); Collections.sort(schemas); for (int i=0; i < schemas.size(); i++) { Schema schema = schemas.get(i); //((DefaultTreeModel) tree.getModel()).insertNodeInto(new DefaultMutableTreeNode(schema), schemaManagement, i); schemaManagement.add(new DefaultMutableTreeNode(schema)); } for (int i = 0; i < tree.getRowCount(); i++) { tree.expandRow(i); } } public void setUsers(java.util.List<User> users) { // add them to the tree too?? //for (String userName: users) { // userManagement.add(new DefaultMutableTreeNode(new User(userName))); //} userManagement.removeAllChildren(); Collections.sort(users); for (int i=0; i < users.size(); i++) { User user = users.get(i); userManagement.add(new DefaultMutableTreeNode(user)); } for (int i = 0; i < tree.getRowCount(); i++) { tree.expandRow(i); } } public void addUser(String user) { DefaultTreeModel model = (DefaultTreeModel) tree.getModel(); model.insertNodeInto(new DefaultMutableTreeNode(new User(user)), userManagement, userManagement.getChildCount()); } public void removeUser(String user) { Enumeration children = userManagement.children(); while (children.hasMoreElements()) { DefaultMutableTreeNode child = (DefaultMutableTreeNode)children.nextElement(); User u = (User) child.getUserObject(); if (user.equals(u.getUserName())) { DefaultTreeModel model = (DefaultTreeModel) tree.getModel(); model.removeNodeFromParent(child); break; } } } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); if (!enabled) { tree.clearSelection(); } } private class TreeCellRenderer extends DefaultTreeCellRenderer { @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); ImageIcon icon = getTreeIcon(value); if (null != icon) { setIcon(icon); } return this; } private ImageIcon getTreeIcon(Object value) { DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)value; Object valueObject = treeNode.getUserObject(); if (valueObject instanceof BagriManager) { return MAIN_ICON; } if (valueObject instanceof ClusterManagement) { return CLUSTER_MANAGEMENT_ICON; } if (valueObject instanceof SchemaManagement) { return SCHEMA_MANAGEMENT_ICON; } if (valueObject instanceof UserManagement) { return USER_MANAGEMENT_ICON; } if (valueObject instanceof Node) { return NODE_ICON; } if (valueObject instanceof Schema) { return SCHEMA_ICON; } if (valueObject instanceof User) { return USER_ICON; } return null; } } }