/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.dataprocess.gui.util.sqleditor.components; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.JTree; import javax.swing.event.TreeModelListener; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; /** * */ public class DatabaseJTree extends JTree { public DatabaseJTree() { configureDragNDrop(); } public void setData(List<String> metaDataList) { DatabaseTreeModel model = new DatabaseTreeModel(); for (String metaData : metaDataList) { String table = metaData.substring(0, metaData.indexOf('.')); String column = metaData.substring(metaData.indexOf('.') + 1); if (!model.getTableNamesList().contains(table)) { model.getTableNamesList().add(table); model.getColumnListByTable().put(table, new ArrayList<String>()); } List<String> columnList = model.getColumnListByTable().get(table); if (!columnList.contains(column)) { columnList.add(column); } } setModel(model); } private void configureDragNDrop() { setDragEnabled(true); setTransferHandler(new TreeTransferHandler()); } static class DatabaseTreeModel implements TreeModel { private List<String> tableNamesList; private Map<String, List<String>> columnListByTable; private String root = "Database"; DatabaseTreeModel() { tableNamesList = new ArrayList<String>(); columnListByTable = new HashMap<String, List<String>>(); } public Map<String, List<String>> getColumnListByTable() { return columnListByTable; } public List<String> getTableNamesList() { return tableNamesList; } public void addTreeModelListener(TreeModelListener listener) { } public Object getChild(Object parent, int index) { if (parent == root) { return tableNamesList.get(index); } List<String> list = columnListByTable.get(parent.toString()); return list.get(index); } public int getChildCount(Object parent) { if (parent == root) { return tableNamesList.size(); } List<String> list = columnListByTable.get(parent.toString()); return list.size(); } public int getIndexOfChild(Object parent, Object child) { if (parent == root) { return tableNamesList.lastIndexOf(child.toString()); } List<String> list = columnListByTable.get(parent.toString()); return list.lastIndexOf(child.toString()); } public Object getRoot() { return root; } public boolean isLeaf(Object node) { return node != root && !tableNamesList.contains(node.toString()); } public void removeTreeModelListener(TreeModelListener listener) { } public void valueForPathChanged(TreePath path, Object newValue) { } } }