FOSSredder 0.5.0
Loading...
Searching...
No Matches
WorkspaceStore.cpp
Go to the documentation of this file.
1
5
7
8#include <algorithm>
9#include <utility>
10
12
13namespace ui {
14
15namespace {
16
17template<typename Row>
18void removeRowsByIds(std::vector<Row>& rows,
19 const std::vector<std::string>& ids) {
20 if (ids.empty() || rows.empty()) {
21 return;
22 }
23 rows.erase(std::remove_if(rows.begin(), rows.end(),
24 [&](const Row& row) {
25 return std::find(ids.begin(), ids.end(),
26 row.id) != ids.end();
27 }),
28 rows.end());
29}
30
31void removeTransactionsByIds(
32 std::vector<core::ports::workspace::StatementSnapshot>& statements,
33 const std::vector<std::string>& transactionIds) {
34 if (transactionIds.empty()) {
35 return;
36 }
37 for (auto& statement : statements) {
38 auto& ids = statement.transactionIds;
39 ids.erase(std::remove_if(ids.begin(), ids.end(),
40 [&](const std::string& id) {
41 return std::find(transactionIds.begin(),
42 transactionIds.end(),
43 id) != transactionIds.end();
44 }),
45 ids.end());
46 }
47}
48
49} // namespace
50
51WorkspaceStore::WorkspaceStore(QObject* parent) : QObject(parent) {}
52
56 writer_ = writer;
57 reader_ = reader;
58 if (reader_) {
59 loadFromState(reader_->workspaceSnapshot());
60 }
61}
62
65 snapshot_ = snapshot;
66 bumpDataRevision();
67}
68
71 removeRowsByIds(snapshot_.transactions, impact.deletedTransactionIds);
72 removeTransactionsByIds(snapshot_.statements, impact.deletedTransactionIds);
73 removeRowsByIds(snapshot_.statements, impact.deletedStatementIds);
74 removeRowsByIds(snapshot_.properties, impact.deletedPropertyIds);
75 removeRowsByIds(snapshot_.actors, impact.deletedActorIds);
76 removeRowsByIds(snapshot_.contracts, impact.deletedContractIds);
77 removeRowsByIds(snapshot_.analyses, impact.deletedAnalysisIds);
78 removeRowsByIds(snapshot_.annuals, impact.deletedAnnualIds);
79 removeRowsByIds(snapshot_.statementDrafts, impact.deletedStatementDraftIds);
80 removeRowsByIds(snapshot_.importLogs, impact.deletedImportLogIds);
81 removeRowsByIds(snapshot_.exportLogs, impact.deletedExportLogIds);
82
83 for (auto& draft : snapshot_.statementDrafts) {
84 removeRowsByIds(draft.transactions, impact.deletedTransactionDraftIds);
85 auto& ids = draft.transactionIds;
86 ids.erase(std::remove_if(
87 ids.begin(), ids.end(),
88 [&](const std::string& id) {
89 return std::find(impact.deletedTransactionDraftIds.begin(),
90 impact.deletedTransactionDraftIds.end(),
91 id) !=
92 impact.deletedTransactionDraftIds.end();
93 }),
94 ids.end());
95 }
96
97 bumpDataRevision();
98}
99
101 if (reader_) {
102 return QString::fromStdString(reader_->currentPath());
103 }
104 return QString::fromStdString(snapshot_.currentPath);
105}
106
107void WorkspaceStore::bumpDataRevision() {
108 ++dataRevision_;
109 emit dataRevisionChanged();
110}
111
112} // namespace ui
Declares lightweight conversions between common Qt string types and standard strings.
Declares the UI workspace snapshot store.
Write-side workspace boundary for persistence, CRUD, drafts, and logs.
WorkspaceStore(QObject *parent=nullptr)
Creates an empty workspace store.
void setWorkspacePorts(core::ports::workspace::IWorkspaceWriter *writer, core::ports::workspace::IWorkspaceReader *reader)
Binds core workspace ports used by workspace roles.
void applyDeletionImpact(const core::ports::workspace::DeletionImpact &impact)
Applies deletion side effects to the stored snapshot.
void dataRevisionChanged()
const core::ports::workspace::WorkspaceSnapshot & snapshot() const noexcept
Returns the current snapshot.
QString currentPath() const
Returns the current workspace path.
void loadFromState(const core::ports::workspace::WorkspaceSnapshot &snapshot)
Loads a fresh workspace snapshot.
std::vector< std::string > deletedPropertyIds
std::vector< std::string > deletedContractIds
std::vector< std::string > deletedAnnualIds
std::vector< std::string > deletedActorIds
std::vector< std::string > deletedTransactionDraftIds
std::vector< std::string > deletedImportLogIds
std::vector< std::string > deletedStatementIds
std::vector< std::string > deletedAnalysisIds
std::vector< std::string > deletedTransactionIds
std::vector< std::string > deletedExportLogIds
std::vector< std::string > deletedStatementDraftIds