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