Files
ResInsight/ApplicationLibCode/ProjectDataModel/Workflow/RimWorkflowJob.h
T
Kristian Bendiksen 61c2db898f Workflows: Support taskmaestro map and collect in the editor
Collect: list and dict inputs accept several connections of their item
type. Members are labelled with their position or key, and can be
reordered or renamed from the connection context menu.

Map: Map Over / Edit Map / Remove Map on tasks. A mapped task is drawn
as a stack with a "map over" subtitle, its items are edited in the
property view (JSON, or selected cases, well paths or views), and
per-item progress is shown during a run.

Workflows using map or collect are no longer read-only. The run status
no longer shows "Completed" after a successful run.
2026-10-21 11:20:02 +02:00

88 lines
3.6 KiB
C++

/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2026 Equinor ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "RimWorkflowTaskInput.h"
#include "cafPdmChildArrayField.h"
#include "cafPdmField.h"
#include "cafPdmObject.h"
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonValue>
#include <QMap>
#include <QPointer>
class RiuWorkflowJobRunner;
class RimWorkflowJob : public caf::PdmObject
{
CAF_PDM_HEADER_INIT;
public:
RimWorkflowJob();
~RimWorkflowJob() override;
void setJobName( const QString& name );
std::vector<RimWorkflowTaskInput*> taskInputs() const;
RimWorkflowTaskInput* taskInput( const QString& taskName ) const;
void setTaskInputs( std::vector<RimWorkflowTaskInput*> inputs );
void syncTaskInputs( const QJsonArray& graphTasks, const QMap<QString, QString>& renames = {} );
QJsonObject inputValues() const;
QJsonObject literalInputValues() const;
QString writeInputYaml( const QString& path ) const;
void runJob();
void cancelJob();
bool isRunning() const;
QMap<QString, QString> taskStates() const;
QMap<QString, QString> taskErrors() const;
QString runStatus() const;
void updateTaskState( const QString& runId, const QString& taskName, const QString& state, const QString& error );
// States and errors of the items of mapped tasks, by task and item key
QMap<QString, QMap<QString, QString>> itemStates() const;
QMap<QString, QMap<QString, QString>> itemErrors() const;
void updateItemState( const QString& runId, const QString& taskName, const QString& item, const QString& state, const QString& error );
void finishRun( const QString& runId, bool succeeded, bool cancelled );
protected:
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void initAfterRead() override;
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override;
void appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const override;
private:
caf::PdmField<QString> m_name;
caf::PdmChildArrayField<RimWorkflowTaskInput*> m_taskInputs;
QPointer<RiuWorkflowJobRunner> m_runner;
QMap<QString, QJsonValue> m_detachedValues;
QMap<QString, QString> m_taskStates;
QMap<QString, QString> m_taskErrors;
QMap<QString, QMap<QString, QString>> m_itemStates;
QMap<QString, QMap<QString, QString>> m_itemErrors;
QString m_runStatus;
QString m_activeTask;
QString m_runId;
};