/* * SubmitWorkflowCmd.cpp * * Created on: 2012-10-19 * Author: shenpenglin */ #include #include #include "SubmitWorkflowCmd.h" #include "PAIConst.h" #include "error.h" #include "Log.h" #include "Utils.h" #include "ConsoleGUIService.h" #include "SaveHelper.h" #include "PaiWorkflowDataModel.h" #include "PaiProject.h" #include "PaiWorkflowSubmitter.h" #include "SaveWorkflowCmd.h" #include "PaiSurvey.h" #include "PaiJobMaster.h" #include "WorkflowConst.h" #include "TimeStampLogger.h" #include "WorkflowWidget.h" #include "SubmitWorkflowDialog.h" #include "WorkFlowFile.h" using namespace pai::gui; using namespace pai::objectmodel; namespace pai { SubmitWorkflowCmd::SubmitWorkflowCmd(QObject *invoker, PaiObject* actionSender,QUuid viewID, pai::objectmodel::PaiWorkflowDataModel *pActiveWorkflow, QUndoCommand *parent) : QUndoCommand(parent), m_pCmdInvoker(invoker), m_pActionSender(actionSender), m_ViewID(viewID), m_pActiveWorkflow(pActiveWorkflow) { } SubmitWorkflowCmd::~SubmitWorkflowCmd() { } void SubmitWorkflowCmd::undo() { } void SubmitWorkflowCmd::redo() { SubmitWorkflowHelper(); } void SubmitWorkflowCmd::SubmitWorkflowHelper() { PaiWorkflowDataModel* pWorkflow = m_pActiveWorkflow; PaiWorkflowDataModel* pTreeWorkflow = dynamic_cast (m_pActionSender); if (pTreeWorkflow != NULL) { pWorkflow = pTreeWorkflow; } if (NULL == pWorkflow) { GetConsoleGUIService()->GetStatusBarService()->EndProcessMessage(""); return; } //如果工作流未保存 if (pWorkflow->HasDataModified()) { if (PaiMessageBox::Cancel == PaiMessageBox::Information(NULL, "π-Frame Workflow", QObject::tr("Please save the modification for workflow ") + pWorkflow->GetName() + " before submitting!", PaiMessageBox::Ok | PaiMessageBox::Cancel, PaiMessageBox::Ok)) { GetConsoleGUIService()->GetStatusBarService()->EndProcessMessage(""); return; } SaveWorkflowCmd saveWorkflowCmd(m_ViewID,m_pActiveWorkflow); saveWorkflowCmd.redo(); if (saveWorkflowCmd.GetSaveResult() == false) { GetConsoleGUIService()->GetStatusBarService()->EndProcessMessage(""); return; } pWorkflow = m_pActiveWorkflow; // Need to get active workflow after save } //获取数据树上对应的工作流 PaiObject *pDataTreeWorkflow = GetObjectModelService()->GetObject(pWorkflow->GetDBID()); if(!pDataTreeWorkflow) { GetConsoleGUIService()->GetStatusBarService()->EndProcessMessage(""); return; } //获取工作流所在的项目 PaiProject *pProject = pDataTreeWorkflow->GetForebear (); if(!pProject) { GetConsoleGUIService()->GetStatusBarService()->EndProcessMessage(""); return; } bool bShouldPromptDialog = true; pai::ios::job::JobPriority priority; QString queueName = ""; QString strNewJobName = pWorkflow->GetName(); while(bShouldPromptDialog) { if (GetSubmitInformation( pProject->GetDBID(), strNewJobName, priority, queueName)) { if (!strNewJobName.isEmpty()) { //重新设置workflowfile队列名称 if(pWorkflow->GetWorkflowFile()) { pWorkflow->GetWorkflowFile()->SetQueueName(queueName.toStdString()); } //重名处理 strNewJobName = QString::fromStdString( pWorkflow->GetWorkflowPtr()->GetJobNameToGUI(strNewJobName.toStdString())); GetConsoleGUIService()->GetStatusBarService()->EndProcessMessage(""); //建立提交状态通知 QObject::connect(pWorkflow->GetSubmitter(), SIGNAL(SubmitSuccessFinished(pai::objectmodel::PaiWorkflowDataModel*, const QString&)), m_pCmdInvoker, SLOT(slotOnJobSubmitFinished(pai::objectmodel::PaiWorkflowDataModel*, const QString&)), Qt::UniqueConnection); QObject::connect(pWorkflow->GetSubmitter(), SIGNAL(SubmitErrorMsg(QString)), m_pCmdInvoker, SLOT(ShowMsg(QString)), Qt::UniqueConnection); //状态栏提示正在提交中。。。 GetConsoleGUIService()->GetStatusBarService()->BeginProcessMessage(strNewJobName + " is submitting..."); QApplication::processEvents(); //记录用户输入的用户名 pWorkflow->GetSubmitter()->SetNewJobName(strNewJobName); //作业提交的优先级 pWorkflow->GetSubmitter()->SetJobPriority(priority); //作业提交到的队列 pWorkflow->GetSubmitter()->SetQueueName(queueName); //真正提交作业 pWorkflow->Submit(); // 刷新JobMaster PaiSurvey *pSurvey = SaveHelper::GetSurveyByWfDBID(pWorkflow->GetDBID()); if(pSurvey) { PaiBaseMaster *pJobMaster = pSurvey->GetMaster(PaiJobMaster::GetTypeIDString()); if(pJobMaster) { GetObjectModelService()->SyncDB(pJobMaster->GetDBID(), pai::Force | pai::Children); } } } else { GetConsoleGUIService()->GetStatusBarService()->EndProcessMessage(""); QString strMessage = "Submit failed for a empty job name."; PaiMessageBox::Warning(NULL, PAI_NAME, strMessage); pai::log::Error(_FLF(QObject::tr("QUndoCommand::ShowMessage ").toStdString()+strMessage.toStdString())); } } else { GetConsoleGUIService()->GetStatusBarService()->EndProcessMessage(""); } bShouldPromptDialog = false; } } bool SubmitWorkflowCmd::GetSubmitInformation(long long projectID, QString& jobName, pai::ios::job::JobPriority& priority, QString& queueName) { return true; } }