185 lines
6.1 KiB
C++
185 lines
6.1 KiB
C++
/*
|
|
* SubmitWorkflowCmd.cpp
|
|
*
|
|
* Created on: 2012-10-19
|
|
* Author: shenpenglin
|
|
*/
|
|
#include <QApplication>
|
|
#include <QtDebug>
|
|
|
|
#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<PaiWorkflowDataModel*> (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<PaiProject> ();
|
|
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;
|
|
}
|
|
|
|
}
|