Skip to content

Commit

Permalink
Parse all operations correctly for JSON
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@23273 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
sjoelund committed Nov 7, 2014
1 parent 3e37c7d commit 090dde8
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 37 deletions.
74 changes: 49 additions & 25 deletions OMEdit/OMEditGUI/TransformationalDebugger/TransformationsWidget.cpp
Expand Up @@ -284,7 +284,7 @@ void TVariablesTreeModel::insertTVariablesItems(QHashIterator<QString, OMVariabl
{
variables.next();
const OMVariable &variable = variables.value();
if (variable.name.startsWith("$PRE."))
if (variable.name.startsWith("$PRE.") || variable.name.startsWith("$res"))
continue;

QStringList tVariables;
Expand Down Expand Up @@ -751,11 +751,29 @@ TransformationsWidget::TransformationsWidget(QString infoXMLFullFileName, MainWi

static OMOperation* variantToOperationPtr(QVariantMap var)
{
QStringList lst;
lst << var["display"].toString();
OMOperation *op = new OMOperationBeforeAfter(var["op"].toString(),lst);
qDebug() << op->toString();
return op;
QString op = var["op"].toString();
QString display = var["display"].toString();
QStringList dataStrings;
foreach(QVariant v, var["data"].toList()){
QString s = v.toString();
if (s != "") {
dataStrings << v.toString().trimmed();
}
}

if (op == "before-after") {
return new OMOperationBeforeAfter(display != "" ? display : op, dataStrings);
} else if (op == "before-after-assert") {
return new OMOperationBeforeAfter(display != "" ? display : op, dataStrings);
} else if (op == "chain") {
QStringList firstLast;
firstLast << dataStrings.first() << dataStrings.last();
return new OMOperationBeforeAfter(display != "" ? display : op, firstLast);
} else if (op == "info") {
return new OMOperationInfo(display != "" ? display : op, dataStrings.join(", "));
}
// "chain"
return NULL;
}


Expand All @@ -770,15 +788,19 @@ static void variantToSource(QVariantMap var, OMInfo &info, QStringList &types, Q
info.isValid = true;
QVariantList vops = var["operations"].toList();
foreach (QVariant vop, vops) {
ops += variantToOperationPtr(vop.toMap());
OMOperation *op = variantToOperationPtr(vop.toMap());
if (op) {
ops += op;
}
}
}

static OMEquation* getOMEquation(QList<OMEquation*> equations, int index)
{
for (int i = 1 ; i < equations.size() ; i++) {
if (equations[i]->index == index)
if (equations[i]->index == index) {
return equations[i];
}
}
return NULL;
}
Expand All @@ -788,10 +810,16 @@ void TransformationsWidget::loadTransformations()
QFile file(mInfoXMLFullFileName);
mEquations.clear();
mVariables.clear();
hasOperationsEnabled = false;
if (mInfoXMLFullFileName.endsWith(".json")) {
QJson::Parser parser;
bool ok;
QVariantMap result = parser.parse(&file, &ok).toMap();
QVariantMap result;
result = parser.parse(&file, &ok).toMap();
if (!ok) {
QMessageBox::critical(this, QString(Helper::applicationName).append(" - ").append(Helper::parsingFailedJson), Helper::parsingFailedJson + ": " + mInfoXMLFullFileName, Helper::ok);
return;
}
QVariantMap vars = result["variables"].toMap();
QVariantList eqs = result["equations"].toList();
for(QVariantMap::const_iterator iter = vars.begin(); iter != vars.end(); ++iter) {
Expand All @@ -800,8 +828,8 @@ void TransformationsWidget::loadTransformations()
var->name = iter.key();
var->comment = value["comment"].toString();
variantToSource(value["source"].toMap(), var->info, var->types, var->ops);
foreach (OMOperation *op, var->ops) {
qDebug() << "op: " << op->toString();
if (!hasOperationsEnabled && var->ops.size() > 0) {
hasOperationsEnabled = true;
}
mVariables[iter.key()] = *var;
}
Expand All @@ -812,6 +840,7 @@ void TransformationsWidget::loadTransformations()
/* load equations */
parseProfiling(mProfJSONFullFileName);
fetchEquations();
hasOperationsEnabled = mpInfoXMLFileHandler->hasOperationsEnabled;
}
}

Expand Down Expand Up @@ -862,20 +891,17 @@ void TransformationsWidget::fetchOperations(const OMVariable &variable)
/* Clear the operations tree. */
clearTreeWidgetItems(mpVariableOperationsTreeWidget);
/* add operations */
if (mpInfoXMLFileHandler->hasOperationsEnabled)
{
foreach (OMOperation *op, variable.ops)
{
QStringList values;
values << op->toString();
if (hasOperationsEnabled) {
foreach (OMOperation *op, variable.ops) {
QString toolTip = op->toString();
QTreeWidgetItem *pOperationTreeItem = new QTreeWidgetItem(values);
QTreeWidgetItem *pOperationTreeItem = new QTreeWidgetItem();
pOperationTreeItem->setToolTip(0, toolTip);
mpVariableOperationsTreeWidget->addTopLevelItem(pOperationTreeItem);

Label *opText = new Label("<html><div style=\"margin:3px;\">" + op->toHtml() + "</div></html>");
mpVariableOperationsTreeWidget->setItemWidget(pOperationTreeItem, 0, opText);
}
}
else
{
} else {
QString message;
#ifdef Q_OS_MAC
message = GUIMessages::getMessage(GUIMessages::SET_INFO_XML_FLAG).arg(GUIMessages::getMessage(GUIMessages::SET_INFO_XML_FLAG_MSG_MAC));
Expand Down Expand Up @@ -1066,9 +1092,7 @@ void TransformationsWidget::fetchOperations(OMEquation *equation)
mpEquationOperationsTreeWidget->addTopLevelItem(pOperationTreeItem);
mpEquationOperationsTreeWidget->setItemWidget(pOperationTreeItem, 0, opText);
}
}
else
{
} else {
QString message;
#ifdef Q_OS_MAC
message = GUIMessages::getMessage(GUIMessages::SET_INFO_XML_FLAG).arg(GUIMessages::getMessage(GUIMessages::SET_INFO_XML_FLAG_MSG_MAC));
Expand Down Expand Up @@ -1154,7 +1178,7 @@ void TransformationsWidget::fetchVariableData(const QModelIndex &index)
if (!pTVariableTreeItem || pTVariableTreeItem->getChildren().size() != 0)
return;

const OMVariable &variable = mVariables.value(pTVariableTreeItem->getVariableName());
const OMVariable &variable = mVariables[pTVariableTreeItem->getVariableName()];
/* fetch defined in equations */
fetchDefinedInEquations(variable);
/* fetch used in equations */
Expand Down
Expand Up @@ -216,6 +216,7 @@ class TransformationsWidget : public QWidget
QSplitter *mpTransformationsHorizontalSplitter;
QHash<QString,OMVariable> mVariables;
QList<OMEquation*> mEquations;
bool hasOperationsEnabled;

void parseProfiling(QString fileName);
QTreeWidgetItem* makeEquationTreeWidgetItem(int equationIndex, int allowChild);
Expand Down
2 changes: 2 additions & 0 deletions OMEdit/OMEditGUI/Util/Helper.cpp
Expand Up @@ -277,6 +277,7 @@ QString Helper::stepInto;
QString Helper::stepReturn;
QString Helper::attachToRunningProcess;
QString Helper::crashReport;
QString Helper::parsingFailedJson;

void Helper::initHelperVariables()
{
Expand Down Expand Up @@ -442,6 +443,7 @@ void Helper::initHelperVariables()
Helper::stepReturn = tr("Step Return");
Helper::attachToRunningProcess = tr("Attach to Running Process");
Helper::crashReport = tr("Crash Report");
Helper::parsingFailedJson = tr("Parsing of JSON file failed");
}

QString GUIMessages::getMessage(int type)
Expand Down
1 change: 1 addition & 0 deletions OMEdit/OMEditGUI/Util/Helper.h
Expand Up @@ -279,6 +279,7 @@ class Helper : public QObject
static QString stepReturn;
static QString attachToRunningProcess;
static QString crashReport;
static QString parsingFailedJson;
};

class GUIMessages : public QObject
Expand Down
17 changes: 8 additions & 9 deletions OMEdit/OMEditGUI/Util/OMDumpXML.cpp
Expand Up @@ -67,18 +67,18 @@ QString OMOperation::diffHtml(QString &before, QString &after)
return dmp.diff_prettyHtml(diffs);
}

OMOperationJSON::OMOperationJSON(QVariant var) : var(var)
OMOperationInfo::OMOperationInfo(QString name, QString info) : name(name), info(info)
{
}

QString OMOperationJSON::toString()
QString OMOperationInfo::toString()
{
return var.toString();
return name + ": " + info;
}

QString OMOperationJSON::toHtml()
QString OMOperationInfo::toHtml()
{
return var.toString();
return toString();
}

OMOperationBeforeAfter::OMOperationBeforeAfter(QString name, QStringList ops) : name(name)
Expand Down Expand Up @@ -202,8 +202,7 @@ OMVariable::OMVariable(const OMVariable &var)
comment = var.comment;
info = var.info;
types = var.types;
for (int i = 0; i < equationTypeSize ; i++)
{
for (int i = 0; i < equationTypeSize ; i++) {
definedIn[i] = var.definedIn[i];
usedIn[i] = var.usedIn[i];
}
Expand Down Expand Up @@ -231,8 +230,8 @@ OMVariable::OMVariable(const OMVariable &var)
ops.append(new OMOperationDummyDerivative(*dynamic_cast<OMOperationDummyDerivative*>(op)));
else if (dynamic_cast<OMOperationFlattening*>(op))
ops.append(new OMOperationFlattening(*dynamic_cast<OMOperationFlattening*>(op)));
else if (dynamic_cast<OMOperationJSON*>(op))
ops.append(new OMOperationJSON(*dynamic_cast<OMOperationJSON*>(op)));
else if (dynamic_cast<OMOperationInfo*>(op))
ops.append(new OMOperationInfo(*dynamic_cast<OMOperationInfo*>(op)));
else
ops.append(new OMOperation(*op));
}
Expand Down
7 changes: 4 additions & 3 deletions OMEdit/OMEditGUI/Util/OMDumpXML.h
Expand Up @@ -60,10 +60,11 @@ class OMOperation {
QString diffHtml(QString &before, QString &after);
};

class OMOperationJSON : public OMOperation {
class OMOperationInfo : public OMOperation
{
public:
QVariant var;
OMOperationJSON(QVariant var);
QString name,info;
OMOperationInfo(QString name, QString info);
QString toString();
QString toHtml();
};
Expand Down

0 comments on commit 090dde8

Please sign in to comment.