ludc
2025-01-16 986aa62ed00bee39363bab41b4eeb8259d446efd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package com.vci.client.omd.btm.ui;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
 
import com.vci.corba.omd.btm.BtmItem;
import com.vci.client.omd.btm.wrapper.BtmItemWrapper;
import com.vci.client.omd.ui.OmdTreeCellRenderer;
import com.vci.corba.common.VCIError;
import com.vci.omd.utils.BTComparator;
 
public class BtmTree extends JTree{
 
    /**
     * 
     */
    private static final long serialVersionUID = 4957161428498834276L;
    private BtmItem[] btmArray;
    private HashMap<String, ArrayList<BtmItem>> btmListMap;
    private DefaultMutableTreeNode btmRootNode = new DefaultMutableTreeNode("业务类型");
    
    public BtmTree(){
        super();
        DefaultTreeModel dtm = new DefaultTreeModel(btmRootNode);
        this.setModel(dtm);
        setAutoscrolls(true);
        
        //设置单选模式
        getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        setOpaque(true);
        initOrUpdate();
        setCellRenderer(new OmdTreeCellRenderer());
    }
    
    public void initOrUpdate(){
        try {
            btmArray = BtmClient.getService().getAllBtmItem("");
            btmListMap = new HashMap<String, ArrayList<BtmItem>>();
            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<BtmItem> btList = new ArrayList<BtmItem>();
                        btList.add(btItem);
                        btmListMap.put(btItem.fName, btList);
                    }else{
                        btmListMap.get(btItem.fName).add(btItem);
                    }
                }
            }
            //也许这段可以加到上面的if中
            for(Enumeration e = btmRootNode.children(); e.hasMoreElements();){
                DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.nextElement();
                if(node.isLeaf()){
                    addBtmNodeToTree(node);
                }
            }
            
            this.updateUI();
            
            this.expandPath(new TreePath(btmRootNode));
        } catch (VCIError e) {
            e.printStackTrace();
        }catch(Exception 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<BtmItem> btmList = null;
            BtmItem btmItem_ = null;
            DefaultMutableTreeNode node_ = null;
            btmList = btmListMap.get(btmItem.name);
            Collections.sort(btmList, new BTComparator());
            for(int i = 0; i < btmList.size(); i++){
                btmItem_ = btmList.get(i);
                node_ = new DefaultMutableTreeNode(new BtmItemWrapper(btmItem_));
                node.add(node_);
                addBtmNodeToTree(node_);
            }
        }
    }
}