wangting
2024-09-27 a3e87f78ee262ca9bb7d9b0c997639d5f3295890
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
106
107
108
109
110
111
112
113
114
115
package com.vci.client.uif.engine.client.compare.dialog.treenode;
 
import java.util.HashMap;
import java.util.Map;
 
import com.vci.client.bof.ClientBusinessObject;
import com.vci.client.bof.ClientLinkObject;
import com.vci.client.uif.engine.client.compare.dataloader.DataLoader;
import com.vci.client.uif.engine.client.compare.enumeration.CompareState;
 
/**
 * 树节点对象工厂类
 * @author VCI-STGK006
 *
 */
public class BusinessTreeNodeObjectFactory implements TreeNodeObjectFactory {
    
    /**
     * 节点对象列表
     */
    private Map<String, BusinessTreeNodeObject> objectMap = new HashMap<String, BusinessTreeNodeObject>();
 
    /**
     * 主对象列表
     */
    private Map<String, BusinessTreeNodeObject.MainObject> mianMap = new HashMap<String, BusinessTreeNodeObject.MainObject>();
 
    /**
     * 数据加载器
     */
    private DataLoader<ClientBusinessObject, ClientLinkObject> dataloader = null;
    
    /**
     * 构造器
     * @param dataloader
     */
    public BusinessTreeNodeObjectFactory(DataLoader dataloader) {
        this.dataloader = dataloader;
    }
    
    @Override
    public TreeNodeObject getTreeNodeObject(TreeNodeObject parent,
            Object relationObject, Object mainObject, boolean isRoot) {
        String mainKey = "";
        String relationKey = "";
        if(mainObject != null) {
            mainKey = this.dataloader.getKey(mainObject);
        }
        if(relationObject != null) {
            relationKey = this.dataloader.getKey(relationObject);
        }
        if(isRoot) {
            if(mainObject == null) {
                throw new IllegalArgumentException("根节点主对象为空!");
            }
            return getRoot(mainKey, (ClientBusinessObject) mainObject);
        } else {
            //如果父节点为空节点,返回一个空节点
            if(parent.getCompareState() == CompareState.ISNULL) {
                return getNullNodeObject();
            }
            //如果主对象不存在
            if(mainKey.equals("")) {
                //构建返回空节点
                return getNullNodeObject();
            }
            //判断节点对象是否存在
            if(this.objectMap.containsKey(relationKey + "##" + mainKey)) {
                return this.objectMap.get(relationKey + "##" + mainKey);
            } else {
                BusinessTreeNodeObject btno = new BusinessTreeNodeObject();
                //判断主对象是否存在
                if(this.mianMap.containsKey(mainKey)) {
                    btno.setMo(this.mianMap.get(mainKey));
                } else {
                    BusinessTreeNodeObject.MainObject mo = btno.getMo();
                    mo.setKey(mainKey);
                    mo.setCbo((ClientBusinessObject)mainObject);
                    mo.setOwnedNodeObject(btno);
                    this.mianMap.put(mainKey, mo);
                }
                //设置关系属性
                BusinessTreeNodeObject.RelationObject ro = btno.getRo();
                ro.setKey(relationKey);
                ro.setClo((ClientLinkObject)relationObject);
                this.objectMap.put(relationKey + "##" + mainKey, btno);
                return btno;
            }
        }
    }
    
    /**
     * 得到根节点
     * @param key
     * @param cbo
     * @return
     */
    private TreeNodeObject getRoot(String key, ClientBusinessObject cbo) {
        BusinessTreeNodeObject btno = new BusinessTreeNodeObject();
        btno.setIsRoot(true);
        btno.setMainKey(key);
        btno.setMainCbo(cbo);
        return btno;
    }
    
    /**
     * 创建空节点
     * @return
     */
    private TreeNodeObject getNullNodeObject() {
        BusinessTreeNodeObject btno = new BusinessTreeNodeObject();
        btno.setCompareState(CompareState.ISNULL);
        return btno;
    }
}