12#include <QVariantList>
17namespace exportKeys = ui::payload::keys::exportSelection;
21inline constexpr auto kRunnerUnavailableCode =
"runnerUnavailable";
22inline constexpr auto kRunnerUnavailableMessage =
"Export runner unavailable.";
25analysisExportFormatFromString(
const QString& value) {
26 const QString normalized = value.trimmed().toLower();
27 if (normalized == QStringLiteral(
"xlsx"))
29 if (normalized == QStringLiteral(
"jpg") ||
30 normalized == QStringLiteral(
"jpeg"))
32 if (normalized == QStringLiteral(
"png"))
40 std::shared_ptr<core::ports::exporting::IExportRunner> runner)
41 : runner_(std::move(runner)) {}
47 "ExportAdapter::runExport",
"Export runner invoked",
55 std::string(kRunnerUnavailableCode),
56 std::string(kRunnerUnavailableMessage)};
59 return runner_->runExport(workspace, std::move(request));
63ExportAdapter::exportFormatFromQmlIndex(
int formatIndex)
const {
73void ExportAdapter::applySelectionPayload(
75 const QVariantMap& selectionPayload)
const {
76 if (selectionPayload.isEmpty()) {
80 const int packageFormatIndex =
81 selectionPayload.value(exportKeys::kPackageFormatIndex).toInt();
86 const QVariantList items =
87 selectionPayload.value(exportKeys::kItems).toList();
89 request.
objectRequests.reserve(
static_cast<std::size_t
>(items.size()));
90 for (
const QVariant& value : items) {
91 const QVariantMap item = value.toMap();
95 const QString objectId = item.value(exportKeys::kObjectId).toString();
96 if (objectId.isEmpty()) {
100 core::ports::exporting::ExportObjectRequest objectRequest;
101 objectRequest.
objectId = objectId.toStdString();
103 item.value(exportKeys::kObjectName).toString().toStdString();
105 item.value(exportKeys::kAnnualId).toString().toStdString();
107 const QString objectType =
108 item.value(exportKeys::kObjectType).toString().trimmed().toLower();
110 objectType == exportKeys::kAnnual
113 objectRequest.
format = analysisExportFormatFromString(
114 item.value(exportKeys::kExportType).toString());
119core::ports::exporting::ExportRequest
121 bool includeFormulas,
const QString& locale,
122 const QVariantMap& selectionPayload)
const {
124 request.
format = exportFormatFromQmlIndex(formatIndex);
127 request.
locale = locale.toStdString();
128 applySelectionPayload(request, selectionPayload);
Declares the export adapter used by UI workflows.
Declarations for the UI PayloadKeys component.
QML registration and context property name constants used by the UI.
Declarations for the UI Trace component.
core::ports::exporting::ExportResult runExport(const core::ports::workspace::WorkspaceSnapshot &workspace, core::ports::exporting::ExportRequest request) const
Runs an export through the core runner.
core::ports::exporting::ExportRequest buildExportRequest(int formatIndex, const QString &path, bool includeFormulas, const QString &locale, const QVariantMap &selectionPayload) const
Builds an export request from QML-facing fields.
ExportAdapter(std::shared_ptr< core::ports::exporting::IExportRunner > runner)
Creates an export adapter backed by a core runner.
void traceAdapter(const char *origin, std::string message, core::errors::ErrorContext context={})
Emits an adapter trace event.
AnalysisExportFormat format
Describes one export run against a workspace snapshot.
PackageFormat packageFormat
std::vector< ExportObjectRequest > objectRequests