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;
|
}
|
|
|
}
|