package foundation.data.meta.property;
|
|
import java.util.Collections;
|
import java.util.Comparator;
|
import java.util.Date;
|
import java.util.Iterator;
|
import java.util.List;
|
|
import foundation.data.meta.template.Indexes;
|
import foundation.util.MapList;
|
|
public abstract class IPropertyMetasSet implements Iterable<Property> {
|
|
protected Indexes indexes;
|
protected String dataName;
|
protected String scene;
|
protected String capacity;
|
protected IPropertyMetasSet master;
|
protected Level level;
|
protected boolean initialized;
|
protected MapList<String, Property> allItems;
|
protected PropertysRuntime listPropertys;
|
protected PropertysRuntime formPropertys;
|
protected PropertysRuntime exportPropertys;
|
protected PropertysRuntime importPropertys;
|
protected Date loadLastTime;
|
|
protected IPropertyMetasSet() {
|
|
}
|
|
public IPropertyMetasSet(Indexes indexes) {
|
this.indexes = indexes;
|
this.allItems = new MapList<String, Property>();
|
this.listPropertys = new PropertysRuntime(indexes.getListIndex());
|
this.formPropertys = new PropertysRuntime(indexes.getFormIndex());
|
}
|
|
public abstract void loadOne(Property property);
|
|
public void build(IPropertyMetasSet master) throws Exception {
|
if (master == null) {
|
return;
|
}
|
|
this.master = master;
|
|
//1. 初始化导入属性
|
initImportPropertys();
|
|
//2. 初始化导出属性
|
initExportPropertys();
|
|
//3. 初始化 List Property
|
initListPropertys();
|
|
//4. 初始化 Form Property
|
initFormPropertys();
|
|
//5.
|
initialized = true;
|
loadLastTime = new Date();
|
}
|
|
// 导入Property整个系统只有一个
|
protected void initImportPropertys() {
|
this.importPropertys = master.importPropertys;
|
}
|
|
// 导出Property,系统默认一套,每个角色可以有自己的
|
protected abstract void initExportPropertys() throws Exception;
|
|
// List Property,系统默认一套,每个角色可以有自己的,每个用户也可以有自己的
|
protected void initListPropertys() throws Exception {
|
doInitPropertys(MetaType.List, this.listPropertys, master.listPropertys, false);
|
}
|
|
// Form Property,系统默认一套,每个角色可以有自己的,每个用户也可以有自己的
|
protected void initFormPropertys() throws Exception {
|
doInitPropertys(MetaType.Form, this.formPropertys, master.formPropertys, false);
|
}
|
|
protected void doInitPropertys(MetaType type, PropertysRuntime propertys, PropertysRuntime masterPropertys, boolean autoAddLocal) throws Exception {
|
//1. 如果本地有,master不存在,删除掉本地且设置刷新标志, 并设置关联关系
|
String fieldName; boolean dirty = false;
|
|
for (Property property: propertys) {
|
fieldName = property.getFieldName();
|
|
Property masterProperty = masterPropertys.get(fieldName);
|
|
if (masterProperty == null) {
|
dirty = true;
|
propertys.remove(fieldName);
|
continue;
|
}
|
|
property.setMaster(masterProperty);
|
}
|
|
//2. 如果master有,本地不存在,添加到本地且设置刷新标志, 并设置关联关系
|
if (autoAddLocal) {
|
for (Property masterProperty: masterPropertys) {
|
fieldName = masterProperty.getFieldName();
|
|
Property property = propertys.get(fieldName);
|
|
if (property == null) {
|
property = new Property();
|
property.setMaster(masterProperty);
|
propertys.add(fieldName, property);
|
|
dirty = true;
|
}
|
}
|
}
|
|
//3. 保存变化
|
if (dirty) {
|
saveChange();
|
}
|
|
//4. 排序
|
List<Property> list = propertys.getItemList();
|
list = orderByIndexNo(list, type);
|
propertys.setList(list);
|
}
|
|
private List<Property> orderByIndexNo(List<Property> list, MetaType type) {
|
final MetaType metaType = type;
|
|
Collections.sort(list, new Comparator<Property>() {
|
@Override
|
public int compare(Property o1, Property o2) {
|
int orderNo1 = 0;
|
int orderNo2 = 0;
|
if (MetaType.List == metaType) {
|
orderNo1 = o1.getListOrderNo();
|
orderNo2 = o2.getListOrderNo();
|
}
|
else if (MetaType.Form == metaType) {
|
orderNo1 = o1.getFormOrderNo();
|
orderNo2 = o2.getFormOrderNo();
|
}
|
else if (MetaType.Export == metaType) {
|
orderNo1 = o1.getExportOrderNo();
|
orderNo2 = o2.getExportOrderNo();
|
}
|
else if (MetaType.Import== metaType) {
|
orderNo1 = o1.getExportOrderNo();
|
orderNo2 = o2.getExportOrderNo();
|
}
|
return orderNo1 - orderNo2;
|
}
|
});
|
|
return list;
|
}
|
|
public abstract void saveChange() throws Exception;
|
|
public void clear() {
|
if (listPropertys != null) { listPropertys.clear(); }
|
if (formPropertys != null) { formPropertys.clear(); }
|
if (exportPropertys != null) { exportPropertys.clear(); }
|
if (importPropertys != null) { importPropertys.clear(); }
|
}
|
|
public PropertysRuntime getPropertys(MetaType type) {
|
if (MetaType.List == type) {
|
return listPropertys;
|
}
|
else if (MetaType.Form == type) {
|
return formPropertys;
|
}
|
else if (MetaType.Export == type) {
|
return exportPropertys;
|
}
|
else if (MetaType.Import == type) {
|
return importPropertys;
|
}
|
|
return null;
|
}
|
|
public Level getLevel() {
|
return level;
|
}
|
|
public boolean isInitialized(Date latestTime) {
|
if (initialized && latestTime == null) {
|
return true;
|
}
|
|
if (!initialized) {
|
return false;
|
}
|
|
if (loadLastTime == null) {
|
return false;
|
}
|
|
return loadLastTime.getTime() >= latestTime.getTime();
|
}
|
|
public String getDataName() {
|
return dataName;
|
}
|
|
public String getScene() {
|
return scene;
|
}
|
|
public String getCapacity() {
|
return capacity;
|
}
|
|
@Override
|
public Iterator<Property> iterator() {
|
return allItems.iterator();
|
}
|
}
|