WsWuInfo::WsWuInfo(const char *wuid_, const char *qset, const char *qname, const char *user, const char *pw) : wuid(wuid_), qsetname(qset), queryname(qname), username(user), password(pw) { Owned<IWorkUnitFactory> wf = getWorkUnitFactory(); if (!wuid.length() && qsetname.length() && queryname.length()) { Owned<IPropertyTree> qstree = getQueryRegistry(qsetname.sget(), true); if (qstree) { VStringBuffer xpath("Query[@id=\"%s\"]", queryname.sget()); IPropertyTree *query = qstree->queryPropTree(xpath.str()); if (query) wuid.set(query->queryProp("@wuid")); else throw MakeStringException(-1, "Query %s not found in QuerySet %s", queryname.sget(), qsetname.sget()); } else throw MakeStringException(-1, "QuerySet %s not found", qsetname.sget()); } if (wuid.length()) { wu.setown(wf->openWorkUnit(wuid.sget(), false)); if (!wu) throw MakeStringException(-1, "Could not open workunit: %s", wuid.sget()); } else throw MakeStringException(-1, "Workunit not specified"); }
const char *WsEclWuInfo::ensureWuid() { if (wuid.length()) return wuid.get(); if (qsetname.length() && queryname.length()) { Owned<IPropertyTree> qstree = getQueryRegistry(qsetname, true); if (!qstree) throw MakeStringException(-1, "QuerySet %s not found", qsetname.get()); Owned<IPropertyTree> query = resolveQueryAlias(qstree, queryname); if (!query) throw MakeStringException(-1, "Query %s/%s not found", qsetname.get(), queryname.get()); if (query->getPropBool("@suspended")) throw MakeStringException(-1, "Query %s/%s is currently suspended", qsetname.get(), queryname.get()); wuid.set(query->queryProp("@wuid")); } if (!wuid.length()) throw MakeStringException(-1, "Workunit not specified"); return wuid.get(); }