SWMMVis  6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
extensionstateregistry.h
Go to the documentation of this file.
1
12#pragma once
13#include "sdk/IViewEvents.hpp"
15#include <QPointer>
16#include <memory>
17
18namespace openswmmvis
19{
22 QUuid instanceId;
23 QString title;
24 QString inputPath;
25 QString projectPath;
26 bool dirty = false;
27 quint64 modelRevision = 0;
28};
29
31class ExtensionStateRegistry final : public QObject
32{
33 Q_OBJECT
34public:
37 explicit ExtensionStateRegistry(QObject *parent = nullptr);
48 QUuid registerSession(QObject *owner, const SessionMetadata &metadata);
52 QUuid sessionForOwner(QObject *owner) const;
56 QObject *ownerForSession(const QUuid &sessionId) const;
63 OpenSWMM::Sdk::ModelSessionState session(const QUuid &sessionId) const;
67 OpenSWMM::Sdk::ViewSnapshot viewSnapshot(const QUuid &sessionId) const;
72 void refreshViews(const QUuid &sessionId, OpenSWMM::Sdk::ViewSnapshot snapshot);
77 void publishView(const QUuid &sessionId, OpenSWMM::Sdk::ViewSnapshot snapshot,
82 bool isDeliverable(const OpenSWMM::Sdk::ViewEvent &event) const;
88 const QUuid &windowId) const;
92 OpenSWMM::Sdk::ProcessState operation(const QUuid &operationId) const;
100 void startOperation(const QUuid &operationId, const QDateTime &startedAt = {});
105 void progressOperation(const QUuid &operationId, double fraction, const QString &stage = {});
109 bool requestOperationCancel(const QUuid &operationId);
116 void finishOperation(const QUuid &operationId, OpenSWMM::Sdk::ProcessPhase outcome,
117 const QString &error = {}, int errorCode = 0,
118 const QDateTime &finishedAt = {});
121 void retireOperation(const QUuid &operationId);
125 void refreshActivityUi(const QUuid &ownerId, OpenSWMM::Sdk::UiActivityState state);
130 void publishActivityUi(const QUuid &ownerId, OpenSWMM::Sdk::UiActivityState state,
134 void forgetActivityOwner(const QUuid &ownerId);
138 bool isDeliverable(const OpenSWMM::Sdk::ActivityEvent &event) const;
144 void updateSession(const QUuid &sessionId, const SessionMetadata &metadata,
145 OpenSWMM::Sdk::StateChanges changes = OpenSWMM::Sdk::StateChange::Metadata);
149 quint64 beginLoad(const QUuid &sessionId);
155 void finishLoad(const QUuid &sessionId, quint64 generation, bool ok, const QString &error = {});
158 void beginClosing(const QUuid &sessionId);
161 void retireSession(const QUuid &sessionId);
165 bool isDeliverable(const OpenSWMM::Sdk::StateEvent &event) const;
170 bool isCurrent(const QUuid &sessionId, QObject *expectedOwner) const;
174 bool isCurrent(const OpenSWMM::Sdk::SaveRequest &request) const;
182 QUuid beginSave(const QList<QUuid> &sessionIds, OpenSWMM::Sdk::SaveKind kind,
183 const QString &targetPath, bool joinExisting, QString *error = nullptr);
187 bool isSaving(const QUuid &sessionId) const;
191 QUuid operationFor(const QUuid &sessionId) const;
196 void updateSaveTarget(const QUuid &operationId, const QString &targetPath);
201 void endSave(const QUuid &operationId, bool ok, const QString &error = {});
202
203signals:
207 void sessionRegistered(QObject *owner, const QUuid &sessionId);
220
221private:
223 struct Data;
224 std::unique_ptr<Data> mData;
227 void enqueueActivity(OpenSWMM::Sdk::ActivityEvent event);
234 OpenSWMM::Sdk::StateChanges changes = {},
235 const OpenSWMM::Sdk::SaveState &save = {});
237 void scheduleDrain();
239 void drain();
240};
241
244{
245public:
253 ExtensionSaveOperation(ExtensionStateRegistry *registry, const QList<QUuid> &sessions,
254 OpenSWMM::Sdk::SaveKind kind, const QString &targetPath,
255 QString *error = nullptr, bool joinExisting = false);
267 bool valid() const;
270 bool ownsOperation() const;
273 QUuid operationId() const;
277 void setTargetPath(const QString &targetPath);
279 void succeed();
280
281private:
282 QPointer<ExtensionStateRegistry> mRegistry;
283 QUuid mOperation;
284 QString *mError = nullptr;
285 bool mOwner = false;
286 bool mSucceeded = false;
287};
288}
Versioned process attempts and scoped UI lifecycle observations.
Versioned model, layer and attached-results observations and copied view metadata.
Native RAII save scope; nested joined scopes leave completion to their owner.
Definition extensionstateregistry.h:244
QUuid operationId() const
Read the shared save correlation identity.
Definition extensionstateregistry.cpp:873
ExtensionSaveOperation & operator=(const ExtensionSaveOperation &other)=delete
Forbid assigning a terminal-outcome responsibility.
bool valid() const
Check whether construction accepted an operation.
Definition extensionstateregistry.cpp:865
ExtensionSaveOperation(const ExtensionSaveOperation &other)=delete
Forbid copying a terminal-outcome responsibility.
void succeed()
Record successful native commit; outer destruction publishes the outcome.
Definition extensionstateregistry.cpp:882
bool ownsOperation() const
Inspect terminal-outcome ownership.
Definition extensionstateregistry.cpp:869
~ExtensionSaveOperation()
End an owned operation with success or a captured/fallback failure diagnostic.
Definition extensionstateregistry.cpp:860
void setTargetPath(const QString &targetPath)
Set a newly determined final destination on an owned outer operation.
Definition extensionstateregistry.cpp:877
GUI-thread session registry shared by every plugin host in the application.
Definition extensionstateregistry.h:32
quint64 beginLoad(const QUuid &sessionId)
Start a new accepted load generation.
Definition extensionstateregistry.cpp:571
OpenSWMM::Sdk::StateSnapshot snapshot() const
Copy all live states and the committed-publication watermark.
Definition extensionstateregistry.cpp:178
void publishActivityUi(const QUuid &ownerId, OpenSWMM::Sdk::UiActivityState state, OpenSWMM::Sdk::ActivityEvent event)
Commit copied scoped UI metadata and queue its invalidation.
Definition extensionstateregistry.cpp:356
QObject * ownerForSession(const QUuid &sessionId) const
Resolve the native owner of a live session.
Definition extensionstateregistry.cpp:172
OpenSWMM::Sdk::ProcessState operation(const QUuid &operationId) const
Copy a retained attempt without creating state.
Definition extensionstateregistry.cpp:208
bool requestOperationCancel(const QUuid &operationId)
Record an idempotent cancellation request before settlement.
Definition extensionstateregistry.cpp:282
bool isDeliverable(const OpenSWMM::Sdk::ViewEvent &event) const
Recheck a queued domain observation per receiving host.
Definition extensionstateregistry.cpp:524
static ExtensionStateRegistry * instance()
Resolve the application-owned registry without recreating it during teardown.
Definition extensionstateregistry.cpp:126
OpenSWMM::Sdk::ModelSessionState session(const QUuid &sessionId) const
Copy one live state without creating it.
Definition extensionstateregistry.cpp:187
bool isSaving(const QUuid &sessionId) const
Inspect whether a scope still owns this session's save.
Definition extensionstateregistry.cpp:742
void stateEventReady(const OpenSWMM::Sdk::StateEvent &event)
Deliver a copied transition from the ordered GUI-thread drain.
void updateSession(const QUuid &sessionId, const SessionMetadata &metadata, OpenSWMM::Sdk::StateChanges changes=OpenSWMM::Sdk::StateChange::Metadata)
Update copied native metadata and record a broad invalidation.
Definition extensionstateregistry.cpp:550
void endSave(const QUuid &operationId, bool ok, const QString &error={})
Commit one terminal save outcome and release affected sessions.
Definition extensionstateregistry.cpp:759
void refreshActivityUi(const QUuid &ownerId, OpenSWMM::Sdk::UiActivityState state)
Copy scoped UI state at an explicit registration/backfill boundary.
Definition extensionstateregistry.cpp:350
OpenSWMM::Sdk::ViewSnapshot viewSnapshot(const QUuid &sessionId) const
Copy tracked view metadata without touching native objects.
Definition extensionstateregistry.cpp:429
QUuid beginOperation(OpenSWMM::Sdk::ProcessState state)
Accept a new uniquely identified attempt in Queued state.
Definition extensionstateregistry.cpp:213
QUuid sessionForOwner(QObject *owner) const
Resolve an already registered owner without creating state.
Definition extensionstateregistry.cpp:167
~ExtensionStateRegistry() override
Discard queued observations and retained operation metadata.
QUuid operationFor(const QUuid &sessionId) const
Resolve a session's active save correlation identity.
Definition extensionstateregistry.cpp:747
void updateSaveTarget(const QUuid &operationId, const QString &targetPath)
Resolve an outer save destination selected after preparation began.
Definition extensionstateregistry.cpp:752
void publishView(const QUuid &sessionId, OpenSWMM::Sdk::ViewSnapshot snapshot, OpenSWMM::Sdk::ViewEvent event)
Commit one domain invalidation and its latest copied view state.
Definition extensionstateregistry.cpp:450
void finishOperation(const QUuid &operationId, OpenSWMM::Sdk::ProcessPhase outcome, const QString &error={}, int errorCode=0, const QDateTime &finishedAt={})
Commit exactly one immutable terminal outcome.
Definition extensionstateregistry.cpp:300
void refreshViews(const QUuid &sessionId, OpenSWMM::Sdk::ViewSnapshot snapshot)
Refresh copied view state at a native construction/restoration boundary.
Definition extensionstateregistry.cpp:440
void forgetActivityOwner(const QUuid &ownerId)
Discard a stopped host's private snapshots and completed job metadata.
Definition extensionstateregistry.cpp:367
QUuid beginSave(const QList< QUuid > &sessionIds, OpenSWMM::Sdk::SaveKind kind, const QString &targetPath, bool joinExisting, QString *error=nullptr)
Begin a scoped save or join a compatible outer operation.
Definition extensionstateregistry.cpp:667
void beforeSave(const OpenSWMM::Sdk::SaveRequest &request)
Synchronously collect extension state before native persistence starts.
void finishLoad(const QUuid &sessionId, quint64 generation, bool ok, const QString &error={})
Commit a settled readiness/failure outcome only for the current attempt.
Definition extensionstateregistry.cpp:584
QUuid registerSession(QObject *owner, const SessionMetadata &metadata)
Register one open lifetime, idempotently for an existing owner.
Definition extensionstateregistry.cpp:138
OpenSWMM::Sdk::ActivitySnapshot activitySnapshot(const QUuid &ownerId, const QUuid &windowId) const
Copy retained window runs, private owner jobs and scoped UI metadata.
Definition extensionstateregistry.cpp:193
void progressOperation(const QUuid &operationId, double fraction, const QString &stage={})
Commit coalesced normalized progress without accepting nonfinite values.
Definition extensionstateregistry.cpp:262
bool isCurrent(const QUuid &sessionId, QObject *expectedOwner) const
Check native owner availability after reentrant callbacks.
Definition extensionstateregistry.cpp:649
void activityEventReady(const OpenSWMM::Sdk::ActivityEvent &event)
Deliver process/UI metadata from the ordered session/view/activity drain.
void viewEventReady(const OpenSWMM::Sdk::ViewEvent &event)
Deliver domain metadata in the same globally ordered session/view drain.
void beginClosing(const QUuid &sessionId)
Commit close and make the session unavailable for resolution.
Definition extensionstateregistry.cpp:597
void sessionRegistered(QObject *owner, const QUuid &sessionId)
Synchronously attach native facades after authoritative state is available.
void retireSession(const QUuid &sessionId)
Remove live state before queuing its terminal close record.
Definition extensionstateregistry.cpp:607
void startOperation(const QUuid &operationId, const QDateTime &startedAt={})
Record native runner/worker start once for a live attempt.
Definition extensionstateregistry.cpp:246
void retireOperation(const QUuid &operationId)
Retire completed metadata while preserving its queued outcome history.
Definition extensionstateregistry.cpp:335
bool ok
Definition importplanning.cpp:143
std::vector< int > owner
containing cell per pixel (-1 = outside)
Definition mesh2dresultsexport.cpp:766
const char * outcome
Definition meshenginesync.cpp:44
@ Metadata
Identity, title, path or dirty metadata changed.
ProcessPhase
Accepted scheduling/preparation, worker availability and distinct terminal outcomes.
Definition IActivityEvents.hpp:32
SaveKind
Meaning of a persisted save destination.
Definition ISessionEvents.hpp:96
StateEventKind
Lifecycle or save transition recorded by the shared application registry.
Definition ISessionEvents.hpp:83
Definition aquiferprovider.h:24
int parent
Definition planning.cpp:199
TokenKind kind
Definition queryparser.cpp:53
Owning deferred process transition or scoped UI invalidation.
Definition IActivityEvents.hpp:154
Pure copied retained process/UI metadata at the shared session/view/activity watermark.
Definition IActivityEvents.hpp:127
Owning metadata for one open lifetime, distinct from its persistent project identity.
Definition ISessionEvents.hpp:56
Owning metadata for one unique accepted attempt, independent of row IDs/titles.
Definition IActivityEvents.hpp:45
Synchronous, non-vetoing opportunity to collect state before a save writes.
Definition ISessionEvents.hpp:151
Copied outcome and destination for one uniquely identified save operation.
Definition ISessionEvents.hpp:110
Immutable transition record delivered later on the GUI thread.
Definition ISessionEvents.hpp:124
Atomic GUI-thread copy of live session metadata and its event watermark.
Definition ISessionEvents.hpp:76
Copied UI metadata scoped to one main window and the calling extension's contributions.
Definition IActivityEvents.hpp:115
Owning deferred observation identifying state to query again.
Definition IViewEvents.hpp:113
Pure copied current metadata at the shared registry watermark.
Definition IViewEvents.hpp:98
Private authoritative records retained independently of plugin facades.
Definition extensionstateregistry.cpp:27
Native-controller metadata copied into an authoritative session record.
Definition extensionstateregistry.h:21
bool dirty
Native model/project dirty state.
Definition extensionstateregistry.h:26
QString inputPath
Current model input path, empty while unsaved.
Definition extensionstateregistry.h:24
quint64 modelRevision
Native model edit revision.
Definition extensionstateregistry.h:27
QString title
Current model-window caption.
Definition extensionstateregistry.h:23
QString projectPath
Current/inferred project-sidecar path.
Definition extensionstateregistry.h:25
QUuid instanceId
Persistent model identity; distinct sessions may share it.
Definition extensionstateregistry.h:22
double error
Definition terrainerrorfield.cpp:42