* @brief Updates an existing register. Unspecified fields retain their value. */
| 586 | * @brief Updates an existing register. Unspecified fields retain their value. |
| 587 | */ |
| 588 | API::CommandResponse API::Handlers::DataTablesHandler::registerUpdate(const QString& id, |
| 589 | const QJsonObject& params) |
| 590 | { |
| 591 | QString table; |
| 592 | QString name; |
| 593 | if (!requireString(params, QStringLiteral("table"), table)) |
| 594 | return CommandResponse::makeError( |
| 595 | id, ErrorCode::MissingParam, QStringLiteral("Missing required parameter: table")); |
| 596 | |
| 597 | if (!requireString(params, QStringLiteral("name"), name)) |
| 598 | return CommandResponse::makeError( |
| 599 | id, ErrorCode::MissingParam, QStringLiteral("Missing required parameter: name")); |
| 600 | |
| 601 | const auto& tables = DataModel::ProjectModel::instance().tables(); |
| 602 | const auto tit = |
| 603 | std::find_if(tables.begin(), tables.end(), [&table](const auto& t) { return t.name == table; }); |
| 604 | |
| 605 | if (tit == tables.end()) |
| 606 | return CommandResponse::makeError( |
| 607 | id, ErrorCode::InvalidParam, QStringLiteral("Table not found: %1").arg(table)); |
| 608 | |
| 609 | const auto rit = std::find_if(tit->registers.begin(), |
| 610 | tit->registers.end(), |
| 611 | [&name](const auto& r) { return r.name == name; }); |
| 612 | |
| 613 | if (rit == tit->registers.end()) |
| 614 | return CommandResponse::makeError( |
| 615 | id, ErrorCode::InvalidParam, QStringLiteral("Register not found: %1/%2").arg(table, name)); |
| 616 | |
| 617 | const QString newName = params.contains(QStringLiteral("newName")) |
| 618 | ? params.value(QStringLiteral("newName")).toString() |
| 619 | : rit->name; |
| 620 | |
| 621 | const bool computed = params.contains(QStringLiteral("computed")) |
| 622 | ? params.value(QStringLiteral("computed")).toBool() |
| 623 | : (rit->type == DataModel::RegisterType::Computed); |
| 624 | |
| 625 | QVariant defaultValue = rit->defaultValue; |
| 626 | if (params.contains(QStringLiteral("defaultValue"))) |
| 627 | defaultValue = jsonToVariant(params.value(QStringLiteral("defaultValue"))); |
| 628 | else if (params.contains(QStringLiteral("value"))) |
| 629 | defaultValue = jsonToVariant(params.value(QStringLiteral("value"))); |
| 630 | |
| 631 | (void)DataModel::ProjectModel::instance().updateRegister( |
| 632 | table, name, newName, computed, defaultValue); |
| 633 | |
| 634 | QJsonObject result; |
| 635 | result[QStringLiteral("table")] = table; |
| 636 | result[QStringLiteral("name")] = newName; |
| 637 | result[QStringLiteral("computed")] = computed; |
| 638 | result[QStringLiteral("updated")] = true; |
| 639 | return CommandResponse::makeSuccess(id, result); |
| 640 | } |
| 641 | |
| 642 | //-------------------------------------------------------------------------------------------------- |
| 643 | // Runtime register values (FrameBuilder data-table store) |
nothing calls this directly
no test coverage detected