6#include <icomp/CComponentBase.h>
7#include <idoc/IDocumentManager.h>
8#include <idoc/IUndoManager.h>
11#include <imtbase/IObjectCollection.h>
12#include <imtgql/CGqlRequest.h>
13#include <imtdoc/CCollectionDocumentManagerBase.h>
14#include <imtbasesdl/SDL/1.0/CPP/DocumentManager.h>
15#include <imtbasesdl/SDL/1.0/CPP/UndoManager.h>
22namespace CDM = sdl::imtbase::DocumentManager;
23namespace UM = sdl::imtbase::UndoManager;
26template<
class Base,
class ColorCollectionDocumentManagerDefs>
27class TCollectionDocumentManagerCompBase :
public Base,
public imtdoc::CCollectionDocumentManagerBase
30 typedef Base BaseClass;
31 typedef imtdoc::CCollectionDocumentManagerBase BaseClass2;
32 typedef ColorCollectionDocumentManagerDefs Defs;
34 I_BEGIN_BASE_COMPONENT(TCollectionDocumentManagerCompBase)
35 I_ASSIGN(m_collectionIdAttrPtr,
"CollectionId",
"Collection ID",
true,
"CollectiondId");
36 I_ASSIGN_MULTI_0(m_objectTypeIdAttrPtr,
"ObjectTypeId",
"Object type ID",
false);
37 I_ASSIGN(m_collectionCompPtr,
"Collection",
"Collection",
false,
"");
38 I_ASSIGN(m_undoManagerFactPtr,
"UndoManager",
"Undo manager",
false,
"UndoManager");
39 I_ASSIGN_MULTI_0(m_objectFactPtr,
"ObjectFactory",
"Object factory",
false);
43 void OnComponentCreated()
override;
47 CDM::CDocumentList OnGetOpenedDocumentList(
48 const typename Defs::GetOpenedDocumentListGqlRequest& getDocumentListRequest,
49 const ::imtgql::CGqlRequest& gqlRequest,
50 QString& errorMessage)
const override;
51 CDM::CDocumentInfo OnCreateNewDocument(
52 const typename Defs::CreateNewDocumentGqlRequest& createDocumentRequest,
53 const ::imtgql::CGqlRequest& gqlRequest,
54 QString& errorMessage)
const override;
55 CDM::CDocumentInfo OnOpenDocument(
56 const typename Defs::OpenDocumentGqlRequest& openDocumentRequest,
57 const ::imtgql::CGqlRequest& gqlRequest,
58 QString& errorMessage)
const override;
59 CDM::CDocumentOperationStatus OnSaveDocument(
60 const typename Defs::SaveDocumentGqlRequest& saveDocumentRequest,
61 const ::imtgql::CGqlRequest& gqlRequest,
62 QString& errorMessage)
const override;
63 CDM::CDocumentOperationStatus OnCloseDocument(
64 const typename Defs::CloseDocumentGqlRequest& closeDocumentRequest,
65 const ::imtgql::CGqlRequest& gqlRequest,
66 QString& errorMessage)
const override;
67 UM::CUndoInfo OnGetUndoInfo(
68 const typename Defs::GetUndoInfoGqlRequest& getUndoInfoRequest,
69 const ::imtgql::CGqlRequest& gqlRequest,
70 QString& errorMessage)
const override;
71 UM::CUndoStatus OnDoUndo(
72 const typename Defs::DoUndoGqlRequest& doUndoRequest,
73 const ::imtgql::CGqlRequest& gqlRequest,
74 QString& errorMessage)
const override;
75 UM::CUndoStatus OnDoRedo(
76 const typename Defs::DoRedoGqlRequest& doRedoRequest,
77 const ::imtgql::CGqlRequest& gqlRequest,
78 QString& errorMessage)
const override;
79 UM::CUndoStatus OnResetUndo(
80 const typename Defs::ResetUndoGqlRequest& resetUndoRequest,
81 const ::imtgql::CGqlRequest& gqlRequest,
82 QString& errorMessage)
const override;
84 imtdoc::CCollectionDocumentManagerBase* GetNonConstThis()
const;
85 int GetObjectFactoryIndex(
const QByteArray& typeId)
const;
86 QByteArray GetUserId(const ::imtgql::CGqlRequest& gqlRequest)
const;
90 virtual istd::IChangeableSharedPtr CreateObject(
const QByteArray& typeId)
const override;
91 virtual idoc::IUndoManagerSharedPtr CreateUndoManager()
const override;
94 bool IsRequestSupported(
const imtgql::CGqlRequest& gqlRequest)
const override;
97 I_ATTR(QByteArray, m_collectionIdAttrPtr);
98 I_MULTIATTR(QByteArray, m_objectTypeIdAttrPtr);
100 I_FACT(idoc::IUndoManager, m_undoManagerFactPtr);
101 I_MULTIFACT(istd::IChangeable, m_objectFactPtr);
109template<
class Base,
class ColorCollectionDocumentManagerDefs>
110inline void TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::OnComponentCreated()
112 BaseClass::OnComponentCreated();
114 Q_ASSERT(!(*m_collectionIdAttrPtr).isEmpty());
115 Q_ASSERT(m_collectionCompPtr.IsValid());
116 Q_ASSERT(m_undoManagerFactPtr.IsValid());
122template<
class Base,
class ColorCollectionDocumentManagerDefs>
123inline imtdoc::CCollectionDocumentManagerBase* TCollectionDocumentManagerCompBase<
125 ColorCollectionDocumentManagerDefs>::GetNonConstThis()
const
127 return const_cast<imtdoc::CCollectionDocumentManagerBase*
>(
dynamic_cast<const imtdoc::CCollectionDocumentManagerBase*
>(
this));
131template<
class Base,
class ColorCollectionDocumentManagerDefs>
132inline int TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::GetObjectFactoryIndex(
133 const QByteArray& typeId)
const
135 int count = qMin(m_objectTypeIdAttrPtr.GetCount(), m_objectFactPtr.GetCount());
136 for (
int i = 0; i < count; i++) {
137 if (m_objectTypeIdAttrPtr[i] == typeId) {
146template<
class Base,
class ColorCollectionDocumentManagerDefs>
147inline QByteArray TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::GetUserId(
148 const ::imtgql::CGqlRequest& gqlRequest)
const
151 if (contextPtr !=
nullptr) {
153 if (userInfoPtr !=
nullptr) {
154 return userInfoPtr->
GetId();
164template<
class Base,
class ColorCollectionDocumentManagerDefs>
166 GetCollection()
const
168 if (m_collectionCompPtr.IsValid()) {
169 return m_collectionCompPtr.GetPtr();
176template<
class Base,
class ColorCollectionDocumentManagerDefs>
177inline istd::IChangeableSharedPtr TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::
178 CreateObject(
const QByteArray& typeId)
const
180 int index = GetObjectFactoryIndex(typeId);
183 return m_objectFactPtr.CreateInstance(index);
190template<
class Base,
class ColorCollectionDocumentManagerDefs>
191inline idoc::IUndoManagerSharedPtr TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::
192 CreateUndoManager()
const
194 return m_undoManagerFactPtr.CreateInstance();
200template<
class Base,
class ColorCollectionDocumentManagerDefs>
201inline bool TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::IsRequestSupported(
202 const imtgql::CGqlRequest& gqlRequest)
const
204 bool isSupported = BaseClass::IsRequestSupported(gqlRequest);
206 const imtgql::CGqlParamObject* collectionIdParamPtr = gqlRequest.GetParamObject(
"collectionId");
207 if (collectionIdParamPtr ==
nullptr) {
211 QByteArray collectionId = collectionIdParamPtr->GetParamArgumentValue(
"collectionId").toByteArray();
213 return collectionId == *m_collectionIdAttrPtr;
222template<
class Base,
class ColorCollectionDocumentManagerDefs>
223inline CDM::CDocumentList TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::
224 OnGetOpenedDocumentList(
225 const typename Defs::GetOpenedDocumentListGqlRequest& getOpenedDocumentListRequest,
226 const ::imtgql::CGqlRequest& gqlRequest,
227 QString& errorMessage)
const
229 CDM::CDocumentList retVal;
230 retVal.Version_1_0.emplace();
231 retVal.Version_1_0->documentList.emplace();
233 QByteArray userId = GetUserId(gqlRequest);
235 if (!userId.isEmpty()) {
236 DocumentList list = BaseClass2::GetOpenedDocumentList(userId);
237 for (
const DocumentInfo& info : list) {
238 CDM::CDocumentInfo sdlInfo;
239 sdlInfo.Version_1_0.emplace();
241 sdlInfo.Version_1_0->documentId = info.documentId;
242 sdlInfo.Version_1_0->objectId = info.objectId;
243 sdlInfo.Version_1_0->hasChanges = info.hasChanges;
245 retVal.Version_1_0->documentList->append(sdlInfo.Version_1_0);
252template<
class Base,
class ColorCollectionDocumentManagerDefs>
253inline CDM::CDocumentInfo TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::
255 const typename Defs::CreateNewDocumentGqlRequest& createDocumentRequest,
256 const ::imtgql::CGqlRequest& gqlRequest,
257 QString& errorMessage)
const
259 CDM::CDocumentInfo retVal;
261 const auto& arguments = createDocumentRequest.GetRequestedArguments();
262 const auto& info = createDocumentRequest.GetRequestInfo();
264 auto documentTypeId = arguments.input.Version_1_0;
265 if (!documentTypeId || documentTypeId->typeId) {
266 errorMessage =
"Invalid GQL request params";
271 QByteArray userId = GetUserId(gqlRequest);
272 if (userId.isEmpty()) {
273 errorMessage =
"Unable to get user ID from context";
278 QByteArray documentId = GetNonConstThis()->CreateNewDocument(userId, *documentTypeId->typeId);
279 if (documentId.isEmpty()) {
280 errorMessage =
"Unable to create document or undo manager";
285 retVal.Version_1_0.emplace();
286 retVal.Version_1_0->documentId = documentId;
287 retVal.Version_1_0->objectTypeId = *documentTypeId->typeId;
288 retVal.Version_1_0->objectId = QByteArray();
289 retVal.Version_1_0->isDirty =
false;
290 retVal.Version_1_0->hasNameProvider =
false;
291 retVal.Version_1_0->isLoading =
false;
293 DocumentList list = BaseClass2::GetOpenedDocumentList(userId);
294 for (
const DocumentListItem& docInfo : list) {
295 if (docInfo.documentId == documentId) {
296 retVal.Version_1_0->documentName = docInfo.name;
297 retVal.Version_1_0->hasNameProvider = docInfo.hasNameProvider;
306template<
class Base,
class ColorCollectionDocumentManagerDefs>
307inline CDM::CDocumentInfo TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::OnOpenDocument(
308 const typename Defs::OpenDocumentGqlRequest& openDocumentRequest,
309 const ::imtgql::CGqlRequest& gqlRequest,
310 QString& errorMessage)
const
312 CDM::CDocumentInfo retVal;
314 const auto& arguments = openDocumentRequest.GetRequestedArguments();
315 const auto& info = openDocumentRequest.GetRequestInfo();
317 auto objectId = arguments.input.Version_1_0;
318 if (!objectId || objectId->id) {
319 errorMessage =
"Invalid GQL request params";
324 QByteArray userId = GetUserId(gqlRequest);
325 if (userId.isEmpty()) {
326 errorMessage =
"Unable to get user ID from context";
331 QByteArray documentId = GetNonConstThis()->OpenDocument(userId, *objectId->id);
332 if (documentId.isEmpty()) {
333 errorMessage =
"Unable to open document or create undo manager";
338 retVal.Version_1_0.emplace();
339 retVal.Version_1_0->documentId = documentId;
340 retVal.Version_1_0->objectId = *objectId->id;
341 retVal.Version_1_0->isDirty =
false;
342 retVal.Version_1_0->hasNameProvider =
false;
343 retVal.Version_1_0->isLoading =
true;
345 DocumentList list = BaseClass2::GetOpenedDocumentList(userId);
346 for (
const DocumentListItem& docInfo : list) {
347 if (docInfo.documentId == documentId) {
348 retVal.Version_1_0->documentName = docInfo.name;
349 retVal.Version_1_0->objectTypeId = docInfo.typeId;
350 retVal.Version_1_0->hasNameProvider = docInfo.hasNameProvider;
351 retVal.Version_1_0->isLoading = docInfo.isLoading;
359template<
class Base,
class ColorCollectionDocumentManagerDefs>
360inline CDM::CDocumentOperationStatus TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::
362 const typename Defs::SaveDocumentGqlRequest& saveDocumentRequest,
363 const ::imtgql::CGqlRequest& gqlRequest,
364 QString& errorMessage)
const
366 CDM::CDocumentOperationStatus retVal;
368 const auto& arguments = saveDocumentRequest.GetRequestedArguments();
369 const auto& info = saveDocumentRequest.GetRequestInfo();
371 auto documentId = arguments.input.Version_1_0;
372 if (!documentId || !documentId->id) {
373 errorMessage =
"Invalid GQL request params";
378 QByteArray userId = GetUserId(gqlRequest);
379 if (userId.isEmpty()) {
380 errorMessage =
"Unable to get user ID from context";
385 retVal.Version_1_0.emplace();
387 QString saveErrorMessage;
388 OperationStatus status = GetNonConstThis()->SaveDocument(
394 case imtdoc::ICollectionDocumentManager::OS_OK:
395 retVal.Version_1_0->status = CDM::EDocumentOperationStatus::Success;
397 QString resolvedName;
398 if (GetNonConstThis()->GetDocumentName(userId, *documentId->id, resolvedName) == OperationStatus::OS_OK){
399 retVal.Version_1_0->documentName = resolvedName;
403 case imtdoc::ICollectionDocumentManager::OS_INVALID_USER_ID:
404 retVal.Version_1_0->status = CDM::EDocumentOperationStatus::InvalidUserId;
406 case imtdoc::ICollectionDocumentManager::OS_INVALID_DOCUMENT_ID:
407 retVal.Version_1_0->status = CDM::EDocumentOperationStatus::InvalidDocumentId;
409 case imtdoc::ICollectionDocumentManager::OS_INVALID_DOCUMENT_DATA:
410 retVal.Version_1_0->status = CDM::EDocumentOperationStatus::InvalidDocumentData;
412 case imtdoc::ICollectionDocumentManager::OS_FAILED:
413 retVal.Version_1_0->status = CDM::EDocumentOperationStatus::Failed;
419 if (status != OperationStatus::OS_OK) {
420 QString responseMessage;
422 case imtdoc::ICollectionDocumentManager::OS_INVALID_USER_ID:
423 responseMessage =
"Invalid user ID";
425 case imtdoc::ICollectionDocumentManager::OS_INVALID_DOCUMENT_ID:
426 responseMessage =
"Invalid document ID";
428 case imtdoc::ICollectionDocumentManager::OS_INVALID_DOCUMENT_DATA:
429 responseMessage = saveErrorMessage.isEmpty() ?
"Document data is invalid" : saveErrorMessage;
431 case imtdoc::ICollectionDocumentManager::OS_FAILED:
432 responseMessage =
"Failed to save document";
437 if (!responseMessage.isEmpty()) {
438 retVal.Version_1_0->message = responseMessage;
439 errorMessage = responseMessage;
447template<
class Base,
class ColorCollectionDocumentManagerDefs>
448inline CDM::CDocumentOperationStatus TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::
450 const typename Defs::CloseDocumentGqlRequest& closeDocumentRequest,
451 const ::imtgql::CGqlRequest& gqlRequest,
452 QString& errorMessage)
const
454 CDM::CDocumentOperationStatus retVal;
456 const auto& arguments = closeDocumentRequest.GetRequestedArguments();
457 const auto& info = closeDocumentRequest.GetRequestInfo();
459 auto documentId = arguments.input.Version_1_0;
460 if (!documentId || !documentId->id) {
461 errorMessage =
"Invalid GQL request params";
466 QByteArray userId = GetUserId(gqlRequest);
467 if (userId.isEmpty()) {
468 errorMessage =
"Unable to get user ID from context";
473 retVal.Version_1_0.emplace();
475 OperationStatus status = GetNonConstThis()->CloseDocument(userId, *documentId->id);
477 case imtdoc::ICollectionDocumentManager::OS_OK:
478 retVal.Version_1_0->status = CDM::EDocumentOperationStatus::Success;
480 case imtdoc::ICollectionDocumentManager::OS_INVALID_USER_ID:
481 retVal.Version_1_0->status = CDM::EDocumentOperationStatus::InvalidUserId;
483 case imtdoc::ICollectionDocumentManager::OS_INVALID_DOCUMENT_ID:
484 retVal.Version_1_0->status = CDM::EDocumentOperationStatus::InvalidDocumentId;
486 case imtdoc::ICollectionDocumentManager::OS_FAILED:
487 retVal.Version_1_0->status = CDM::EDocumentOperationStatus::Failed;
497template<
class Base,
class ColorCollectionDocumentManagerDefs>
498inline UM::CUndoInfo TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::OnGetUndoInfo(
499 const typename Defs::GetUndoInfoGqlRequest& getUndoInfoRequest,
500 const ::imtgql::CGqlRequest& gqlRequest,
501 QString& errorMessage)
const
503 UM::CUndoInfo retVal;
504 retVal.Version_1_0.emplace();
505 retVal.Version_1_0->status.emplace();
507 const auto& arguments = getUndoInfoRequest.GetRequestedArguments();
508 const auto& info = getUndoInfoRequest.GetRequestInfo();
510 auto documentId = arguments.input.Version_1_0;
511 if (!documentId || !documentId->id) {
512 errorMessage =
"Invalid GQL request params";
514 retVal.Version_1_0->status->status = UM::EUndoStatus::InvalidDocumentId;
519 QByteArray userId = GetUserId(gqlRequest);
520 if (userId.isEmpty()) {
521 errorMessage =
"Unable to get user ID from context";
523 retVal.Version_1_0->status->status = UM::EUndoStatus::InvalidUserId;
528 QMutexLocker locker(&m_mutex);
529 if (!m_userDocuments.contains(userId) || !m_userDocuments[userId].contains(*documentId->id)) {
530 idoc::IUndoManager* undoManagerPtr = m_userDocuments[userId][*documentId->id].undoManagerPtr.GetPtr();
532 int count = undoManagerPtr->GetAvailableUndoSteps();
533 retVal.Version_1_0->availableUndoSteps = count;
534 retVal.Version_1_0->undoLevelDescriptions.emplace();
535 for (
int i = 0; i < count; i++) {
536 QString description = undoManagerPtr->GetUndoLevelDescription(i);
537 retVal.Version_1_0->undoLevelDescriptions->append(description);
540 count = undoManagerPtr->GetAvailableRedoSteps();
541 retVal.Version_1_0->availableRedoSteps = count;
542 retVal.Version_1_0->redoLevelDescriptions.emplace();
543 for (
int i = 0; i < count; i++) {
544 QString description = undoManagerPtr->GetRedoLevelDescription(i);
545 retVal.Version_1_0->redoLevelDescriptions->append(description);
549 retVal.Version_1_0->status->status = UM::EUndoStatus::Success;
555template<
class Base,
class ColorCollectionDocumentManagerDefs>
556inline UM::CUndoStatus TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::OnDoUndo(
557 const typename Defs::DoUndoGqlRequest& doUndoRequest,
558 const ::imtgql::CGqlRequest& gqlRequest,
559 QString& errorMessage)
const
561 UM::CUndoStatus retVal;
562 retVal.Version_1_0.emplace();
563 retVal.Version_1_0->status.emplace();
565 const auto& arguments = doUndoRequest.GetRequestedArguments();
566 const auto& info = doUndoRequest.GetRequestInfo();
568 istd::TSharedNullable<UM::CUndoRedoInput::V1_0> undoRedoInput = arguments.input.Version_1_0;
569 if (!undoRedoInput || !undoRedoInput->documentId || !undoRedoInput->steps) {
570 errorMessage =
"Invalid GQL request params";
572 retVal.Version_1_0->status = UM::EUndoStatus::InvalidDocumentId;
577 QByteArray documentId = *undoRedoInput->documentId;
578 QByteArray userId = GetUserId(gqlRequest);
580 if (userId.isEmpty()) {
581 errorMessage =
"Unable to get user ID from context";
583 retVal.Version_1_0->status = UM::EUndoStatus::InvalidUserId;
588 QMutexLocker locker(&m_mutex);
590 idoc::IUndoManager* undoManagerPtr =
nullptr;
591 if (!m_userDocuments.contains(userId) || !m_userDocuments[userId].contains(documentId)) {
592 errorMessage =
"Undo operation failed";
594 retVal.Version_1_0->status = UM::EUndoStatus::Failed;
599 undoManagerPtr = m_userDocuments[userId][documentId].undoManagerPtr.GetPtr();
601 if (undoManagerPtr->GetAvailableUndoSteps() < *undoRedoInput->steps) {
602 errorMessage =
"The number of available undo steps is less than requested";
604 retVal.Version_1_0->status = UM::EUndoStatus::InvalidStepCount;
609 if (!undoManagerPtr->DoUndo(*undoRedoInput->steps)) {
610 errorMessage =
"Undo operation failed";
612 retVal.Version_1_0->status = UM::EUndoStatus::Failed;
617 retVal.Version_1_0->status = UM::EUndoStatus::Success;
623template<
class Base,
class ColorCollectionDocumentManagerDefs>
624inline UM::CUndoStatus TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::OnDoRedo(
625 const typename Defs::DoRedoGqlRequest& doRedoRequest,
626 const ::imtgql::CGqlRequest& gqlRequest,
627 QString& errorMessage)
const
629 UM::CUndoStatus retVal;
630 retVal.Version_1_0.emplace();
631 retVal.Version_1_0->status.emplace();
633 const auto& arguments = doRedoRequest.GetRequestedArguments();
634 const auto& info = doRedoRequest.GetRequestInfo();
636 istd::TSharedNullable<UM::CUndoRedoInput::V1_0> undoRedoInput = arguments.input.Version_1_0;
637 if (!undoRedoInput || !undoRedoInput->documentId || !undoRedoInput->steps) {
638 errorMessage =
"Invalid GQL request params";
640 retVal.Version_1_0->status = UM::EUndoStatus::InvalidDocumentId;
645 QByteArray documentId = *undoRedoInput->documentId;
646 QByteArray userId = GetUserId(gqlRequest);
648 if (userId.isEmpty()) {
649 errorMessage =
"Unable to get user ID from context";
651 retVal.Version_1_0->status = UM::EUndoStatus::InvalidUserId;
656 QMutexLocker locker(&m_mutex);
658 idoc::IUndoManager* undoManagerPtr =
nullptr;
659 if (!m_userDocuments.contains(userId) || !m_userDocuments[userId].contains(documentId)) {
660 errorMessage =
"Redo operation failed";
662 retVal.Version_1_0->status = UM::EUndoStatus::Failed;
667 undoManagerPtr = m_userDocuments[userId][documentId].undoManagerPtr.GetPtr();
669 if (undoManagerPtr->GetAvailableRedoSteps() < *undoRedoInput->steps) {
670 errorMessage =
"The number of available redo steps is less than requested";
672 retVal.Version_1_0->status = UM::EUndoStatus::InvalidStepCount;
677 if (!undoManagerPtr->DoRedo(*undoRedoInput->steps)) {
678 errorMessage =
"Redo operation failed";
680 retVal.Version_1_0->status = UM::EUndoStatus::Failed;
685 retVal.Version_1_0->status = UM::EUndoStatus::Success;
691template<
class Base,
class ColorCollectionDocumentManagerDefs>
692inline UM::CUndoStatus TCollectionDocumentManagerCompBase<Base, ColorCollectionDocumentManagerDefs>::OnResetUndo(
693 const typename Defs::ResetUndoGqlRequest& resetUndoRequest,
694 const ::imtgql::CGqlRequest& gqlRequest,
695 QString& errorMessage)
const
697 UM::CUndoStatus retVal;
698 retVal.Version_1_0.emplace();
699 retVal.Version_1_0->status.emplace();
701 const auto& arguments = resetUndoRequest.GetRequestedArguments();
702 const auto& info = resetUndoRequest.GetRequestInfo();
704 auto documentId = arguments.input.Version_1_0;
705 if (!documentId || !documentId->id) {
706 errorMessage =
"Invalid GQL request params";
708 retVal.Version_1_0->status = UM::EUndoStatus::InvalidDocumentId;
713 QByteArray userId = GetUserId(gqlRequest);
715 if (userId.isEmpty()) {
716 errorMessage =
"Unable to get user ID from context";
718 retVal.Version_1_0->status = UM::EUndoStatus::InvalidUserId;
723 QMutexLocker locker(&m_mutex);
725 idoc::IUndoManager* undoManagerPtr =
nullptr;
726 if (!m_userDocuments.contains(userId) || !m_userDocuments[userId].contains(*documentId->id)) {
727 errorMessage =
"Reset undo operation failed";
729 retVal.Version_1_0->status = UM::EUndoStatus::Failed;
734 undoManagerPtr = m_userDocuments[userId][*documentId->id].undoManagerPtr.GetPtr();
735 undoManagerPtr->ResetUndo();
737 retVal.Version_1_0->status = UM::EUndoStatus::Success;
virtual QByteArray GetId() const =0