FOSSredder 0.5.0
Loading...
Searching...
No Matches
ExportAdapter.cpp
Go to the documentation of this file.
1
5
7
11
12#include <QVariantList>
13
14#include <utility>
15
16namespace ui::adapters {
17namespace exportKeys = ui::payload::keys::exportSelection;
18
19namespace {
20
21inline constexpr auto kRunnerUnavailableCode = "runnerUnavailable";
22inline constexpr auto kRunnerUnavailableMessage = "Export runner unavailable.";
23
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"))
35}
36
37} // namespace
38
40 std::shared_ptr<core::ports::exporting::IExportRunner> runner)
41 : runner_(std::move(runner)) {}
42
47 "ExportAdapter::runExport", "Export runner invoked",
49 {"objectCount", std::to_string(request.objectRequests.size())}});
50 if (!runner_) {
51 return {false,
53 request.format,
54 request.outputPath,
55 std::string(kRunnerUnavailableCode),
56 std::string(kRunnerUnavailableMessage)};
57 }
58
59 return runner_->runExport(workspace, std::move(request));
60}
61
63ExportAdapter::exportFormatFromQmlIndex(int formatIndex) const {
64 switch (static_cast<ui::qml::contracts::ExportFormat>(formatIndex)) {
69 }
71}
72
73void ExportAdapter::applySelectionPayload(
75 const QVariantMap& selectionPayload) const {
76 if (selectionPayload.isEmpty()) {
77 return;
78 }
79
80 const int packageFormatIndex =
81 selectionPayload.value(exportKeys::kPackageFormatIndex).toInt();
82 request.packageFormat = packageFormatIndex == 1
85
86 const QVariantList items =
87 selectionPayload.value(exportKeys::kItems).toList();
88 request.objectRequests.clear();
89 request.objectRequests.reserve(static_cast<std::size_t>(items.size()));
90 for (const QVariant& value : items) {
91 const QVariantMap item = value.toMap();
92 if (item.isEmpty()) {
93 continue;
94 }
95 const QString objectId = item.value(exportKeys::kObjectId).toString();
96 if (objectId.isEmpty()) {
97 continue;
98 }
99
100 core::ports::exporting::ExportObjectRequest objectRequest;
101 objectRequest.objectId = objectId.toStdString();
102 objectRequest.name =
103 item.value(exportKeys::kObjectName).toString().toStdString();
104 objectRequest.annualId =
105 item.value(exportKeys::kAnnualId).toString().toStdString();
106
107 const QString objectType =
108 item.value(exportKeys::kObjectType).toString().trimmed().toLower();
109 objectRequest.type =
110 objectType == exportKeys::kAnnual
113 objectRequest.format = analysisExportFormatFromString(
114 item.value(exportKeys::kExportType).toString());
115 request.objectRequests.push_back(std::move(objectRequest));
116 }
117}
118
119core::ports::exporting::ExportRequest
120ExportAdapter::buildExportRequest(int formatIndex, const QString& path,
121 bool includeFormulas, const QString& locale,
122 const QVariantMap& selectionPayload) const {
124 request.format = exportFormatFromQmlIndex(formatIndex);
125 request.outputPath = path.toStdString();
126 request.includeFormulas = includeFormulas;
127 request.locale = locale.toStdString();
128 applySelectionPayload(request, selectionPayload);
129 return request;
130}
131
132} // namespace ui::adapters
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.
constexpr auto kPath
Definition Trace.h:35
void traceAdapter(const char *origin, std::string message, core::errors::ErrorContext context={})
Emits an adapter trace event.
Definition Trace.h:75
Describes one export run against a workspace snapshot.
std::vector< ExportObjectRequest > objectRequests