package foundation.dao; import foundation.data.entity.Entity; import foundation.data.loader.DataPackageMetaLoader; import foundation.data.object.DataObject; import foundation.data.object.DataObjectContainer; import foundation.server.Container; import foundation.util.Util; public class DataPackageMetaContainer extends Container { private static DataPackageMetaContainer instance; private DataPackageMetaContainer() { } public synchronized static DataPackageMetaContainer getInstance() { if (instance == null) { instance = new DataPackageMetaContainer(); } return instance; } @Override public DataPackageMeta get(String name) { DataPackageMeta result = super.get(name); if (result == null) { DataObject dataObject = DataObject.getInstance(name); if (dataObject == null) { return null; } //如果有dataObject,但是没有定义DataPackage,那么创建默认的DataPackageMeta try { synchronized (this) { result = new DataPackageMeta(dataObject); add(name, result); } } catch (Exception e) { e.printStackTrace(); } } return result; } public synchronized DataPackageMeta refresh(String dataName) throws Exception { //1. 加载新的 data package 定义 DataPackageMeta result = DataPackageMetaLoader.loadOneDataPackage(dataName); //2. 将新的 data package 放到 container中 add(result.getName(), result); //3. 返回结果 return result; } public void createByName(String name) throws Exception { if (Util.isEmpty(name)) { return; } DataObject packageDataObject = DataObject.getInstance("sys_data_package"); Entity packageEntity = packageDataObject.createTableEntity(true); String packageId = DataPackageMeta.PreFix + name; packageEntity.set("id", packageId); packageEntity.set("name", name); packageEntity.set("remark", name); DataObject packageDetailDataObject = DataObject.getInstance("sys_data_package_detail"); Entity packageDetailEntity = packageDetailDataObject.createTableEmptyEntity(); packageDetailEntity.set("id", name); packageDetailEntity.set("parent_id", packageId); packageDetailEntity.set("name", name); packageDetailEntity.set("data_object", name); packageDetailEntity.set("type_code", "Master"); packageDataObject.saveEntity(packageEntity); packageDetailDataObject.saveEntity(packageDetailEntity); DataObjectContainer.getInstance().createOne(name); //2 DataPackageMeta packageMeta = new DataPackageMeta(); packageMeta.load(packageEntity); PackageItemMeta itemMeta = new PackageItemMeta(); itemMeta.load(packageDetailEntity); itemMeta.setDataObject(); packageMeta.loadOneDetail(itemMeta); DataPackageMetaContainer.getInstance().add(packageMeta.getName(), packageMeta); } }