void suiKnowBase::loadSources(const QStringList &sourceDirs) { // load knowledge base from sources QString sDir; foreach(sDir, sourceDirs) loadSourceDirectory(sDir, true); // find all keynodes ScHelperInterface *helper = suiRoot::getInstance()->scHelper(); KeynodesMap::iterator it; for (it = mKeynodesMap.begin(); it != mKeynodesMap.end(); ++it) { // skip keynodes, that already found if (helper->hasKeynode(it.value())) continue; // try to find keynodes by main identifier ScUri uri = helper->findElementByMainIdentifier(it.key()); if (uri.isEmpty()) SuiExcept(SuiExceptionItemNotFound, QString("Can't find keynode '%1'").arg(it.key()), "void suiKnowBase::initialize(const QStringList &sourceDirs)"); } ScUri content_keynode = helper->keynode("/etc/content*"); // trying to search all loaded sources ScMemoryInterface *mem = suiRoot::getInstance()->scMemory(); ScSafeIterator scIt(mem, ScTemplate() << helper->keynode("/etc/source") << ScElementType(ScArcMain) << ScElementType(ScNode | ScConst)); while (!scIt.is_over()) { ScUriVector res; // trying to find content of source if (helper->searchOneShot(ScTemplate() << scIt.value(2) << ScElementType(ScArcCommon | ScConst | ScPositive) << ScElementType(0) // fix to link << ScElementType(ScArcMain) << content_keynode, res)) { suiRoot::getInstance()->translateDataToSc(res[2]); }else SuiExcept(SuiExceptionInternalError, "Can't find knowledge base source content", "void suiKnowBase::initialize(const QStringList &sourceDirs)"); scIt.next(); } }