logplus/ModuleConsole/command/src/SaveAsTemplateCmd.cpp
2026-01-16 17:18:41 +08:00

241 lines
6.2 KiB
C++

/*
* SaveAsTemplateCmd.cpp
*
* Created on: 2012-12-10
* Author: dev
*/
#include "SaveAsTemplateCmd.h"
#include "PaiWorkflowDataModel.h"
#include "PaiWorkflowMaster.h"
#include "WorkflowPluginControl.h"
#include "DeleteTemplateCmd.h"
#include "PaiBalloonTipSettings.h"
#include "PaiBalloonTip.h"
#include "SaveHelper.h"
#include "PaiWorkflowTemplateTree.h"
#include "PaiInputDialog.h"
#include "ConsoleGUIService.h"
#include "WorkflowConst.h"
#include "TimeStampLogger.h"
#include "WellLogWorkflowDataModel.h"
#include "ObjectID.h"
using namespace pai;
using namespace pai::objectmodel;
using namespace pai::gui;
namespace pai
{
SaveAsTemplateCmd::SaveAsTemplateCmd(pai::CPaiWorkflowTemplateTree* pTemplateTree,
pai::objectmodel::PaiWorkflowDataModel *pActiveWorkflow, QUndoCommand *parent)
:QUndoCommand(parent)
,m_bSaveSuccess(true)
{
m_pOldWorkflow = NULL;
m_pSameNameTemplate = NULL;
m_pTemplateTree = pTemplateTree;
m_pActiveWorkflow = pActiveWorkflow;
}
SaveAsTemplateCmd::~SaveAsTemplateCmd()
{
}
void SaveAsTemplateCmd::undo()
{
}
void SaveAsTemplateCmd::redo()
{
pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", true, "Save workflow as template");
m_bSaveSuccess = _HandleSaveAsTemplate();
pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", false, "Save workflow as template");
}
PaiWorkflowDataModel* SaveAsTemplateCmd::_CopyWorkflow()
{
if (m_pOldWorkflow == NULL)
return NULL;
//创建新工作流模型
CWellLogWorkflowDataModel* pNewWorkflow = new CWellLogWorkflowDataModel(GetWindowTypeID_QtMultiWellSection());
pNewWorkflow->SetIgnoreSyncDB(true);
//拷贝当前工作流模型到新工作流模型
pNewWorkflow->Copy(*m_pOldWorkflow);
pNewWorkflow->SetName(m_strNewTtemplateName);
return pNewWorkflow;
}
PaiObject* SaveAsTemplateCmd::_GetOldSameNameWorkflow()
{
QList<pai::objectmodel::PaiObject*> objectList = m_pTemplateTree->GetChildren();
foreach(PaiObject *pObj, objectList)
{
if (pObj->GetName() == m_strNewTtemplateName)
{
return pObj;
}
}
return NULL;
}
bool SaveAsTemplateCmd::_HandleSaveAsTemplate()
{
if(!m_pActiveWorkflow)
{
return false;
}
m_pOldWorkflow = m_pActiveWorkflow;//备份原来的ActiveWorkflow
m_SaveType = OpenSaveAsDialog(m_strNewTtemplateName);
if (m_SaveType == SaveTemplate_DoCancel || m_strNewTtemplateName.isEmpty())
{
return false;
}
m_pSameNameTemplate = _GetOldSameNameWorkflow();//如果要替换同名的工作流,先获得同名工作流
bool bSameWorkflow = m_pSameNameTemplate == m_pOldWorkflow ? true : false;
if (NULL != m_pSameNameTemplate && bSameWorkflow == false)
{
QString errMsg;
if (!m_pSameNameTemplate->TryDelete(errMsg))
{
PaiMessageBox::Critical(NULL,
QObject::tr("Error"), QObject::tr("Cannot save as template \"%1\":\n").arg(m_pSameNameTemplate->GetName()) + errMsg, PaiMessageBox::Ok, PaiMessageBox::Ok);
return false;
}
}
PaiWorkflowDataModel* pNewWorkflow = m_pOldWorkflow;
if (!bSameWorkflow)
{
pNewWorkflow = _CopyWorkflow();
}
if (m_pSameNameTemplate != NULL && !bSameWorkflow)
{
DeleteTemplateCmd deleteTemplateCmd(m_pTemplateTree, m_pSameNameTemplate);
deleteTemplateCmd.redo();
}
//保存新工作流模型
//if (SaveHelper::SaveWorkflow(pNewWorkflow, true))
//{
m_pTemplateTree->AddChild(pNewWorkflow);
//}
// else
// {
// return false;
// }
if (pNewWorkflow->HasFlag(PaiObject::Loaded))
{
QString text = QObject::tr("Workflow template \"") + m_strNewTtemplateName + QObject::tr("\"")
+ " saved." + "<br>&nbsp;&nbsp;&nbsp;&nbsp;Double click to open it or right click to open menu.";
PaiBalloonGuide::GetInstance()->ShowInstantTip(pNewWorkflow->GetID(), text, "PaiBalloonTipType_HandleSaveAsTemplate");
}
return true;
}
int SaveAsTemplateCmd::OpenSaveDialog(QString &strTemplateName)
{
return OpenSaveDialog(true, strTemplateName);
}
int SaveAsTemplateCmd::OpenSaveAsDialog(QString &strTemplateName)
{
return OpenSaveDialog(false, strTemplateName);
}
int SaveAsTemplateCmd::OpenSaveDialog(bool bSave, QString &strTemplateName)
{
if(!m_pActiveWorkflow)
{
return SaveType_DoCancel;
}
PaiWorkflowDataModel *pCurrentWorkflow = m_pActiveWorkflow;
//打开对话框设置工作流模板的名字
PaiInputDialog dlgNameTemplate(NULL);
dlgNameTemplate.SetOkButtonText("&Save");
dlgNameTemplate.SetLabelText("Please enter the workflow template name:");
dlgNameTemplate.SetText(pCurrentWorkflow->GetName().remove("/"));
dlgNameTemplate.UseValidateNameEdit(g_iMaxWorkflowNameLength);
if (bSave)
{
dlgNameTemplate.setWindowTitle(g_szSave);
}
else
{
dlgNameTemplate.setWindowTitle(g_szSaveAs);
}
while (dlgNameTemplate.exec() == QDialog::Accepted)
{
strTemplateName = dlgNameTemplate.TextValue();
if (strTemplateName.contains("/"))
{
QString szContent = QObject::tr("Cannot report '/' character in mame.");
PaiMessageBox::Warning(NULL,"",szContent, PaiMessageBox::Yes, PaiMessageBox::Yes);
return (SaveType_DoCancel);
}
if (strTemplateName.isEmpty())
{
return (SaveType_DoCancel);
}
int findResult = ValidateSaveTemplateName(strTemplateName);
if (findResult & SaveType_DoOpenDialog)
{
dlgNameTemplate.ResetValidateNameEdit();
continue;
}
else
{
return findResult;
}
}
//1.取消操作
return (SaveType_DoCancel);
}
int SaveAsTemplateCmd::ValidateSaveTemplateName(QString strTemplateName)
{
if(!m_pActiveWorkflow)
{
return SaveTemplate_Save;
}
int ret = SaveTemplate_Save;
QList<PaiObject*> lstChildren = m_pTemplateTree->GetChildren();
for (int i = 0; i < lstChildren.count(); ++i)
{
if (lstChildren.at(i)->GetName() == strTemplateName)
{
QWidget* pMainWindow = NULL;
QString title = "π-Frame Workflow";
QString body = QObject::tr("workflow template %1 exists. Do you want to replace it?").arg(strTemplateName);
if (PaiMessageBox::No == PaiMessageBox::Warning(pMainWindow, title, body, PaiMessageBox::Yes | PaiMessageBox::No, PaiMessageBox::Yes))
{
ret = SaveTemplate_DoOpenDialog;
}
break;
}
}
return ret;
}
}