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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
package foundation.data.loader;
 
import foundation.dao.DataPackageMeta;
import foundation.dao.DataPackageMetaContainer;
import foundation.dao.Filter;
import foundation.dao.HostLimit;
import foundation.dao.ItemLimit;
import foundation.dao.OrderBy;
import foundation.dao.PackageItemMeta;
import foundation.data.entity.Entity;
import foundation.data.entity.EntitySet;
import foundation.data.object.DataObject;
import foundation.persist.NamedSQL;
import foundation.server.Initializer;
 
 
public class DataPackageMetaLoader extends Initializer {
 
    @Override
    public void startUp() throws Exception {
        //1. load data package
        loadDataPackages();
        
        //2. load data package detail
        loadDataPackageDetails();
        
        //3. 加载被省略的 package detail(只有一个detail的时候,可以省略定义detail)
        loadDefaultPackageDetails();
        
        //4. load package limit
        loadPackageLimit();
    }
 
    @Override
    public void shutDown() throws Exception {
        
    }
    
    private void loadDataPackages() throws Exception {
        DataPackageMetaContainer packageMetaContainer = DataPackageMetaContainer.getInstance();
 
        //1. 从主表的配置里面加载
        DataObject dataObject = DataObject.getInstance("sys_data_package");
        OrderBy orderBy = new OrderBy("group_code, name");
        EntitySet entitySet = dataObject.getTableEntitySet(orderBy);
        
        for (Entity entity: entitySet) {
            DataPackageMeta packageMeta = new DataPackageMeta();
            packageMeta.load(entity);
            
            packageMetaContainer.add(packageMeta.getName(), packageMeta);
        }
        
        //2. 从明细表里面加载主表里面没有的(没有主记录的)
        NamedSQL namedSQL = NamedSQL.getInstance("getAutoDataPackage");
        entitySet = namedSQL.getEntitySet();
        
        for (Entity entity: entitySet) {
            DataPackageMeta packageMeta = new DataPackageMeta();
            packageMeta.load(entity);
            
            packageMetaContainer.add(packageMeta.getName(), packageMeta);
        }
    }
 
    private void loadDataPackageDetails() throws Exception {
        //1. get entity set
        DataObject dataObject = DataObject.getInstance("sys_data_package_detail");
        OrderBy orderBy = new OrderBy("parent_dataname");
        EntitySet entitySet = dataObject.getTableEntitySet(orderBy);
        
        //2. add to data package
        DataPackageMetaContainer packageMetaContainer = DataPackageMetaContainer.getInstance();
        String parentName; DataPackageMeta packageMeta; PackageItemMeta itemMeta;
        
        for (Entity entity: entitySet) {
            parentName = entity.getString("parent_dataname");
            packageMeta = packageMetaContainer.getCached(parentName);
            
            if (packageMeta == null) {
                logger.error("data package not exists: {}", parentName);
                continue;
            }
            
            itemMeta = new PackageItemMeta();
            itemMeta.load(entity);
            itemMeta.setDataObject();
            packageMeta.loadOneDetail(itemMeta);
        }
    }
    
    private void loadDefaultPackageDetails() throws Exception {
        DataPackageMetaContainer metaContainer = DataPackageMetaContainer.getInstance();
        
        for (DataPackageMeta packageMeta: metaContainer) {
            int count = packageMeta.getItemCount();
            
            if (count > 0) {
                continue;
            }
            
            String dataName = packageMeta.getName();
            
            DataObject dataObject = DataObject.getInstance(dataName);
            if (dataObject == null) {
                continue;
            }
            
            PackageItemMeta itemMeta = new PackageItemMeta();
            itemMeta.load(dataObject);
            packageMeta.loadOneDetail(itemMeta);
        }
    }
    
    private void loadPackageLimit() throws Exception {
        DataPackageMetaContainer container = DataPackageMetaContainer.getInstance();
 
        //1. get entity set
        DataObject dataObject = DataObject.getInstance("sys_data_package_limit");
        OrderBy orderBy = new OrderBy("data_name, type_code");
        EntitySet entitySet = dataObject.getTableEntitySet(orderBy);
        
        for (Entity entity: entitySet) {
            ItemLimit itemLimit = new ItemLimit();
            itemLimit.load(entity);
            
            DataPackageMeta packageMeta = container.get(itemLimit.getDataName());
            
            if (packageMeta == null) {
                continue;
            }
            
            HostLimit hostLimit = packageMeta.getHostLimit();
            
            if (hostLimit == null) {
                hostLimit = new HostLimit();
                packageMeta.setHostLimit(hostLimit);
            }
            
            hostLimit.loadOneItemLimit(itemLimit);
        }
    }
 
    public static DataPackageMeta loadOneDataPackage(String dataName) throws Exception {
        //1. 加载主表
        DataObject dataObject = DataObject.getInstance("sys_data_package");
        Entity entity = dataObject.getTableEntity(new Filter("name", dataName));
        
        if (entity == null) {
            return null;
        }
        
        DataPackageMeta packageMeta = new DataPackageMeta();
        packageMeta.load(entity);
            
        //2. 加载明细表
        dataObject = DataObject.getInstance("sys_data_package_detail");
        EntitySet detailSet = dataObject.getTableEntitySet(new Filter("parent_id", packageMeta.getId()));
        
        for (Entity detailEntity: detailSet) {
            PackageItemMeta itemMeta = new PackageItemMeta();
            itemMeta.load(detailEntity);
            
            DataObject itemObject = DataObject.refresh(itemMeta.getName());
            
            if (itemObject == null) {
                logger.error("can not find data object: {}", itemMeta.getName());
                continue;
            }
            
            itemMeta.setDataObject(itemObject);
            packageMeta.loadOneDetail(itemMeta);
        }
        
        return packageMeta;
    }
    
 
}