package com.vci.client.omd.btm.ui; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeSelectionModel; import com.vci.client.common.providers.ServiceProvider; import com.vci.client.omd.btm.wrapper.BtmItemWrapper; import com.vci.client.omd.ui.OmdTreeCellRenderer; import com.vci.corba.omd.btm.BtmItem; public class ResourceTree extends JTree { /** * */ private static final long serialVersionUID = 4957161428498834276L; private BtmItem[] btmArray; private HashMap> btmListMap; private static DefaultMutableTreeNode btmRootNode = new DefaultMutableTreeNode("业务类型树");; public ResourceTree() { super(btmRootNode, false); this.setAutoscrolls(true); this.setCellRenderer(new OmdTreeCellRenderer()); // 设置单选模式 this.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); initOrUpdate(); this.setOpaque(false); } @SuppressWarnings("rawtypes") public void initOrUpdate() { try { btmArray = ServiceProvider.getOMDService().getBTMService().getAllBtmItem(""); btmListMap = new HashMap>(); BtmItem btItem = null; btmRootNode = (DefaultMutableTreeNode) this.getModel().getRoot(); if (!btmRootNode.isLeaf()) { btmRootNode.removeAllChildren(); } for (int i = 0; i < btmArray.length; i++) { btItem = btmArray[i]; if (btItem.fName.equals("")) { btmRootNode.add(new DefaultMutableTreeNode(new BtmItemWrapper(btItem))); } else { if (btmListMap.get(btItem.fName) == null) { ArrayList btList = new ArrayList(); btList.add(btItem); btmListMap.put(btItem.fName, btList); } else { btmListMap.get(btItem.fName).add(btItem); } } } for (Enumeration e = btmRootNode.children(); e.hasMoreElements();) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.nextElement(); if (node.isLeaf()) { addBtmNodeToTree(node); } } this.updateUI(); } catch (Throwable e) { e.printStackTrace(); } } /** * 由叶子节点去btmListMap中查找子节点 * * @param node */ private void addBtmNodeToTree(DefaultMutableTreeNode node) { BtmItem btmItem = ((BtmItemWrapper) node.getUserObject()).btmItem; if (btmListMap.get(btmItem.name) == null) { return; } else { ArrayList btmList = null; BtmItem btmItem_ = null; DefaultMutableTreeNode node_ = null; btmList = btmListMap.get(btmItem.name); for (int i = 0; i < btmList.size(); i++) { btmItem_ = btmList.get(i); node_ = new DefaultMutableTreeNode(new BtmItemWrapper(btmItem_)); node.add(node_); addBtmNodeToTree(node_); } } } }