// System.out.println("!!!");
String fn = (fullname == null) ? "" : fullname;
String gl_name = space + "." + fn;
boolean db = true;
boolean cache = false;
IDependentParam p = null;
// TODO надо оптимизировать!!
Map<String, Object> prm = info.getPrmsBySpace(space);
Object o = prm.get(fn);
boolean log = true;
if (o != null && o instanceof IDependentParam) {
p = (IDependentParam) o;
db = !p.isNonDB();
cache = p.isCache();
log = p.getLog();
}
WaitValue v = null;
Object result = null;
// Проверить кэшируемость параметра
if (cache) {
synchronized (sync_eval) {
result = prms_eval.get(gl_name);
// Если расчёт не производился, получить новый буфер для расчёта
//System.out.println("101 ::: " + fullname);
if (result == null) {
v = new WaitValue(gl_name, log);
prms_eval.put(gl_name, v);
//System.out.println("102 ::: " + fullname);
}
}
if (result != null) {
if (result instanceof WaitValue) {
result = ((WaitValue) result).getValueWait(timeout);
//System.out.println("103 ::: (" + timeout + ") " + fullname);
}
if (log)
Context.this.log(false, "SYNC:", gl_name, "(CACHE)=", result);
// System.out.println(Context.this.ta.getAlias() + " : " +
// Context.this.id_task + " : SYNC:" + gl_name + "(CACHE)=" + result);
return result;
} else {
//System.out.println("104 ::: " + fullname);
}
}
// Если не запрещено из базы
if (db && "prm".equals(space)) {
result = ta.getParam(id_task, fn);
if (!Null.equ(result)) {
if (log)
Context.this.log(false, "SYNC:", gl_name, "(DB)=", result);
if (v != null) // Кэшируемый параметр
v.retValue(result);
// System.out.println(Context.this.ta.getAlias() + " : " +
// Context.this.id_task + " : SYNC:" + gl_name + "(DB)=" + result);
//System.out.println("105 ::: " + fullname);
return result;
}
}
if (p != null) {
try {
TimeList tl = getTimeList(gl_name, p);
result = p.calculate(tl, this);
//System.out.println("106 ::: " + fullname);
if (p.getTrace())
tl.printTrace();
} catch (CalculateException e) {
if (v != null)
v.retException(e);
throw e;
}
p.executeCopyTo(this, result);
}
if (log)
Context.this.log(false, "SYNC:", gl_name, "=", result);
if (v != null)
v.retValue(result);