void startApplication( OperationExpression opExpr, OperationCatalogModel *operationCatalogModel){

    QString result;
    std::future<bool> resultApplication = std::async(runApplication, opExpr,&result) ;

    if(!resultApplication.get()) {
        throw ErrorObject(TR("running %1 failed").arg(opExpr.name()));
    }
    emit operationCatalogModel->updateCatalog(QUrl("ilwis://internalcatalog")); // TODO
}
Пример #2
0
quint64 CommandHandler::findOperationId(const OperationExpression& expr) const {

    QSqlQuery db(kernel()->database());
    QSqlQuery db2(kernel()->database());
    QString query = QString("select * from mastercatalog where resource like '%1%' ").arg(expr.metaUrl().toString());
    if (db.exec(query)) {
        while ( db.next()){
            quint64 itemid = db.value("itemid").toLongLong();
            query = QString("select * from catalogitemproperties where itemid=%1").arg(itemid);
            if (db2.exec(query)) {
                std::map<QString, QString> values;
                while ( db2.next()){
                    QSqlRecord rec = db2.record();
                    values[rec.value("propertyname").toString()] = rec.value("propertyvalue").toString();
                }
                QString parmcount = values["inparameters"];
                if ( !expr.matchesParameterCount(parmcount))
                    continue;
                bool found = true;
                long index;
                if ( (index = parmcount.indexOf('+')) != -1) {
                    index = parmcount.left(index).toUInt();
                } else
                    index = 10000;
                for(long i=0; i < expr.parameterCount(); ++i) {
                    int n = min(i+1, index);
                    QString key = QString("pin_%1_type").arg(n);
                    IlwisTypes tpExpr = expr.parm(i).valuetype();
                    auto iter = values.find(key);
                    if ( iter == values.end()){
                        found = false;
                        break;
                    }
                    IlwisTypes tpMeta = (*iter).second.toULongLong();
                    if ( (tpMeta & tpExpr) == 0 && tpExpr != i64UNDEF) {
                        found = false;
                        break;
                    }

                }
                if ( found)
                    return itemid;
            }
        }
    }
    ERROR2(ERR_NO_INITIALIZED_2,"metadata",expr.name());
    return i64UNDEF;
}