P15GEN2\59518
2024-05-29 d4210c7c4b04abde20037ea8aa0f54ef8a2649aa
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package foundation.dao;
 
import java.util.Iterator;
import java.util.Set;
 
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
 
import foundation.data.entity.Entity;
import foundation.data.object.DataObject;
import foundation.util.ID;
import foundation.util.MapList;
import foundation.util.Util;
 
public class DataPackageMeta implements Iterable<PackageItemMeta> {
 
    protected static Logger logger;
    public static final String PreFix = "pkg_";
    private String id; 
    private String name;
    private String hostName;
    private String remark;
    private MapList<String, PackageItemMeta> items;
    private PackageItemMeta masterMeta;
    private DataObject masterDataObject;
    private HostLimit hostLimit;
    
    static {
        logger = LogManager.getLogger(DataPackageMeta.class);
    }
    
    public DataPackageMeta() {
        items = new MapList<String, PackageItemMeta>();
    }
    
    public DataPackageMeta(DataObject dataObject) {
        //1. package meta
        id = PreFix + ID.newValue();
        name = dataObject.getDataName();
        remark = "系统自动创建";
        items = new MapList<String, PackageItemMeta>();
        
        //2. package master detail meta
        PackageItemMeta itemMeta = new PackageItemMeta(dataObject);
        itemMeta.setType(PackageItemType.Master);
        loadOneDetail(itemMeta);
    }
    
    public DataPackageMeta(PackageItemMeta itemMeta) {
        //1. package meta
        id = PreFix + ID.newValue();
        name = itemMeta.getName();
        remark = "系统自动创建";
        items = new MapList<String, PackageItemMeta>();
        
        //2. package master detail meta
        loadOneDetail(itemMeta);
        
        //3.
        masterMeta = itemMeta;
        masterDataObject = itemMeta.getDataObject();
    }
 
    public static DataPackageMeta getInstance(String dataName) {
        DataPackageMetaContainer container = DataPackageMetaContainer.getInstance();
        return container.get(dataName);
    }
    
    public void load(Entity entity) throws ClassNotFoundException {
        id = entity.getString("id");
        name = entity.getString("name");
        hostName = entity.getString("host_name");
        remark = entity.getString("remark");
        
        if (Util.isEmpty(id)) {
            id = name;
        }
    }
    
    public void loadOneDetail(PackageItemMeta itemMeta) {
        //1. add to items
        String key = itemMeta.getName();
        items.add(key, itemMeta);
        
        //2. set master data object
        PackageItemType type = itemMeta.getType();
        
        if (PackageItemType.Master == type) {
            masterMeta = itemMeta;
            masterDataObject = itemMeta.getDataObject();
        }
    }
    
    @Override
    public Iterator<PackageItemMeta> iterator() {
        return items.iterator();
    }
    
    public PackageItemMeta getItem(String name) {
        return items.get(name);
    }
    
    public String getId() {
        return id;
    }
 
    public String getName() {
        return name;
    }
    
    public String getRemark() {
        return remark;
    }
    
    public DataObject getMasterDataObject() {
        return masterDataObject;
    }
 
    public PackageItemMeta getMasterMeta() {
        return masterMeta;
    }
 
    public String getHostName() {
        return hostName;
    }
    
    public int getItemCount() {
        return items.size();
    }
 
    public void setHostLimit(HostLimit hostLimit) {
        this.hostLimit = hostLimit;
    }
 
    public HostLimit getHostLimit() {
        return hostLimit;
    }
 
    public boolean containsHostItemLimits() {
        return hostLimit != null;
    }
    
    public Set<String> getHostItemLimits(String typeCode, boolean includeReadOnly) {
        if (hostLimit == null) {
            return null;
        }
        
        return hostLimit.itemLimits(typeCode, includeReadOnly);
    }
 
}