package policy.rule;
|
|
import foundation.dao.preload.Bucket;
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.data.meta.MetaMonitor;
|
import foundation.data.meta.ReloadCheckResult;
|
import foundation.persist.NamedSQL;
|
import foundation.persist.SQLRunner;
|
|
public class RuleBucket extends Bucket<RuleMetas> {
|
|
private static RuleBucket instance;
|
private MetaMonitor monitor;
|
|
|
private RuleBucket() {
|
monitor = new MetaMonitor("getOrderSettingLastUpdateTime");
|
}
|
|
public static synchronized RuleBucket getInstance() {
|
if (instance != null) {
|
return instance;
|
}
|
|
instance = new RuleBucket();
|
return instance;
|
}
|
|
public static RuleRuntimes getRuleRuntimes(String buId) {
|
getInstance();
|
|
RuleMetas metas = instance.get(buId);
|
RuleRuntimes result = metas.getCheckRuntimes();
|
|
return result;
|
}
|
|
@Override
|
public RuleMetas get(String buId) {
|
try {
|
monitor.setParam("parentId", buId);
|
ReloadCheckResult checkResult = monitor.getReloadCheckResult(true);
|
|
if (checkResult.isNeedReload()) {
|
synchronized (this) {
|
RuleMetas metas = super.get(buId);
|
|
metas = loadOneBUCheckers(buId, metas);
|
loadOne(buId, metas);
|
|
return metas;
|
}
|
}
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
return null;
|
}
|
|
private RuleMetas loadOneBUCheckers(String buId, RuleMetas metas) throws Exception {
|
if (metas == null) {
|
metas = new RuleMetas(buId);
|
}
|
else {
|
metas.clear();
|
}
|
|
NamedSQL namedSQL = NamedSQL.getInstance("getOneBUCheckRules");
|
namedSQL.setParam("buId", buId);
|
EntitySet entitySet = SQLRunner.getEntitySet(namedSQL);
|
|
RuleMeta meta;
|
for (Entity entity: entitySet) {
|
meta = new RuleMeta();
|
meta.load(entity);
|
|
metas.loadOne(meta);
|
}
|
|
return metas;
|
}
|
}
|