Example #1
0
void MainWindow::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{
    QJsonValue jsonObj = current->data(0, Qt::UserRole).toJsonValue();

    QJsonValue::Type jsonType = jsonObj.type();

    switch(jsonType)
    {
    case QJsonValue::Bool:
        ui->boolButton->setChecked(jsonObj.toBool());
        break;
    case QJsonValue::Double:
        ui->doubleValue->setValue(jsonObj.toDouble());
        break;
    case QJsonValue::String:
        ui->stringEdit->document()->setPlainText(jsonObj.toString());
        break;
    case QJsonValue::Array:
        {
            QJsonArray arr = jsonObj.toArray();
            int count = arr.count();

            ui->arrayList->clear();

            for(int i = 0; i < count; ++i)
            {
                QString label = renderJsonValue(arr.at(i));
                ui->arrayList->addItem(label);
            }
        }
        break;
    case QJsonValue::Object:
        {
            QJsonObject obj = jsonObj.toObject();
            ui->objectTable->setRowCount(obj.count());
            int row = 0;
            for(QJsonObject::ConstIterator i = obj.begin(); i != obj.end(); ++i, ++row)
            {
                QTableWidgetItem *keyItem = new QTableWidgetItem(i.key());
                QJsonValue val = i.value();
                QTableWidgetItem *valItem = new QTableWidgetItem(renderJsonValue(val));
                ui->objectTable->setItem(row, 0, keyItem);
                ui->objectTable->setItem(row, 1, valItem);
            }
        }
        break;
    default:
        break;
    }

    ui->typeSelector->setCurrentIndex(jsonObj.type() - 1);
}
Example #2
0
void MainWindow::buildJsonTree(QTreeWidgetItem *parent, QJsonValue &obj, QString key = "")
{
    QTreeWidgetItem *toAdd = NULL;
    switch(obj.type())
    {
    case QJsonValue::Bool:
    case QJsonValue::Double:
    case QJsonValue::String:
    case QJsonValue::Undefined:
    case QJsonValue::Null:
        toAdd = createJsonTreeLeaf(parent, obj, key);
        break;
    case QJsonValue::Array:
    {
        toAdd = new QTreeWidgetItem(parent);
        QJsonArray array = obj.toArray();
        int count = array.count();
        toAdd->setText(0, key+"["+QString::number(count)+"]");

        for(int i = 0; i < count; ++i)
        {
            QJsonValue val = array.at(i);
            buildJsonTree(toAdd, val, QString::number(i)+" : ");
        }
        break;
    }
    case QJsonValue::Object:
    {
        toAdd = new QTreeWidgetItem(parent);
        QJsonObject object = obj.toObject();
        int count = object.count();
        toAdd->setText(0, key+"{"+QString::number(count)+"}");

        for(QJsonObject::ConstIterator i = object.begin(); i != object.end(); ++i)
        {
            QJsonValue val = i.value();
            buildJsonTree(toAdd, val, i.key()+" : ");
        }
        break;
    }
    default:
        break;
    }

    toAdd->setData(0, Qt::UserRole, QVariant(obj));
    parent->addChild(toAdd);
}
ProductRule *JsonParser::getProductRuleFromText(QString text){
    int majorVersion = -1;
    int minorVersion = -1;
    QString product = "";
    QList<QString> *groupList = NULL;
    QMap<QString, QList<QString> > *groupRegexMap = NULL;
    QMap<QString, QList<QString> > *groupHighlightMap = NULL;
    QList<QString> *layerList = NULL;
    QMap<QString, QList<QString> > *layerMap = NULL;

    bool success = false;
    QString failReason = "";
    do{
        // convert qstring to json object
        QJsonObject root = QJsonDocument::fromJson(text.toUtf8()).object();
        if(root.count() == 0){
            failReason = QString("json syntax might be wrong.");
            break;
        }

        // root level
        if(!root.contains(KEY_MAJOR_VERSION)) {
            failReason = QString("KEY %1 doesn't exist on root level.").arg(KEY_MAJOR_VERSION);
            break;
        }
        bool majorOK;
        majorVersion = root.value(KEY_MAJOR_VERSION).toString().toInt(&majorOK);
        if(!majorOK){
            failReason = "major version isn't Integer value";
            break;
        }

        if(!root.contains(KEY_MINOR_VERSION)){
            failReason = QString("KEY %1 doesn't exist on root level.").arg(KEY_MINOR_VERSION);
            break;
        }
        bool minorOK;
        minorVersion = root.value(KEY_MINOR_VERSION).toString().toInt(&minorOK);
        if(!minorOK){
            failReason = "minor version isn't Integer value";
            break;
        }

        if(!root.contains(KEY_PRODUCT)) {
            failReason = QString("KEY %1 doesn't exist on root level.").arg(KEY_PRODUCT);
            break;
        }
        product = root.value(KEY_PRODUCT).toString();

        // group
        if(!root.contains(KEY_GROUP)) {
            failReason = QString("KEY %1 doesn't exist on root level.").arg(KEY_GROUP);
            break;
        }
        QJsonArray groupArray = root.value(KEY_GROUP).toArray();
        groupList = getGroupList(groupArray);
        if(groupList == NULL){
            failReason = "Iteration fail on getGroupList()";
            break;
        }
        groupRegexMap = getGroupRegexMap(groupArray);
        if(groupRegexMap == NULL){
            failReason = "Iteration fail on getGroupRegexMap()";
            break;
        }

        groupHighlightMap = getGroupHighlightMap(groupArray);
        if(groupHighlightMap == NULL){
            failReason = "Iteration fail on getGroupHighlightMap()";
            break;
        }

        // layer
        if(!root.contains(KEY_LAYER)) {
            failReason = QString("KEY %1 doesn't exist on root level.").arg(KEY_LAYER);
            break;
        }
        QJsonArray layerArray = root.value(KEY_LAYER).toArray();
        layerList = getLayerList(layerArray);
        if(layerList == NULL){
            failReason = "Iteration fail on getLayerList()";
            break;
        }
        layerMap = getLayerMap(layerArray);
        if(layerMap == NULL){
            failReason = "Iteration fail on getLayerMap()";
            break;
        }

        // all OK.
        success = true;

    }while(false);


    if(success){
        return new ProductRule(majorVersion, minorVersion, product, groupList,
                              groupRegexMap, groupHighlightMap, layerList, layerMap);
    }else{
        qDebug() << failReason;
        return NULL;
    }
}
Example #4
0
void MainWindow::LoadJSON(QString fileName)
{
    QFile jsonFile(fileName);

    if(!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        ui->statusBar->showMessage("Could not open file: " + fileName);
        return;
    }

    QByteArray rawJson = jsonFile.readAll();

    ui->textEdit->setText(QString(rawJson));

    QJsonParseError error;

    doc = new QJsonDocument(QJsonDocument::fromJson(rawJson, &error));

    if(error.error != QJsonParseError::NoError)
    {
        ui->statusBar->showMessage("Failed to parse file: " + error.errorString());
        delete doc;
        doc = NULL;
        return;
    }

    /*
    QJsonObject root = doc->object();
    for(QJsonObject::ConstIterator i = root.begin(); i != root.end(); ++i)
    {
        QTreeWidgetItem *toAdd = new QTreeWidgetItem();
        toAdd->setText(0, i.key());
        ui->treeWidget->addTopLevelItem(toAdd);
    }
    */

    QTreeWidgetItem *root = new QTreeWidgetItem();
    QString rootId = "root";
    QJsonValue rootVal;

    if(doc->isArray())
    {
        QJsonArray array = doc->array();
        rootVal = QJsonValue(array);
        int count = array.count();
        rootId += "["+QString::number(count)+"]";

        for(int i = 0; i < count; ++i)
        {
            QJsonValue val = array.at(i);
            buildJsonTree(root, val, QString::number(i)+" : ");
        }
    }
    else if(doc->isObject())
    {
        QJsonObject object = doc->object();
        rootVal = QJsonValue(object);
        rootId += "{"+QString::number(object.count())+"}";

        for(QJsonObject::ConstIterator i = object.begin(); i != object.end(); ++i)
        {
            QJsonValue val = i.value();
            buildJsonTree(root, val, i.key()+" : ");
        }
    }
    else
    {
        rootId = "Null or Undefined root object";
        return;
    }

    root->setText(0, rootId);
    root->setData(0, Qt::UserRole, QVariant(rootVal));
    ui->treeWidget->addTopLevelItem(root);
    ui->treeWidget->setCurrentItem(root);
}