2025-06-11 15:43:53 +02:00
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
//
|
|
|
|
|
// Copyright (C) 2025 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.
|
|
|
|
|
//
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
#include "RimGenericJob.h"
|
|
|
|
|
|
2026-10-21 18:14:13 +02:00
|
|
|
#include "RiaTimer.h"
|
|
|
|
|
|
2025-06-11 15:43:53 +02:00
|
|
|
#include "cafCmdFeatureMenuBuilder.h"
|
|
|
|
|
|
|
|
|
|
CAF_PDM_XML_ABSTRACT_SOURCE_INIT( RimGenericJob, "GenericJob" ); // Do not use. Abstract class
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
RimGenericJob::RimGenericJob()
|
2026-09-17 14:03:54 +02:00
|
|
|
: m_jobState( JobState::Idle )
|
2026-10-21 18:14:13 +02:00
|
|
|
, m_refreshTimer( std::make_unique<RiaTimer>() )
|
|
|
|
|
|
2025-06-11 15:43:53 +02:00
|
|
|
{
|
|
|
|
|
CAF_PDM_InitObject( "Generic Job" );
|
2026-10-21 18:14:13 +02:00
|
|
|
|
|
|
|
|
CAF_PDM_InitField( &m_isChildJob, "IsChildJob", false, "Is Child Job" );
|
|
|
|
|
m_isChildJob.uiCapability()->setUiHidden( true );
|
|
|
|
|
|
|
|
|
|
m_refreshTimer->tick.connect( this, &RimGenericJob::onRefreshTimer );
|
2025-06-11 15:43:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
RimGenericJob::~RimGenericJob()
|
|
|
|
|
{
|
2026-10-21 18:14:13 +02:00
|
|
|
m_refreshTimer->stop();
|
2025-06-11 15:43:53 +02:00
|
|
|
}
|
|
|
|
|
|
2025-10-18 02:42:11 +02:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
bool RimGenericJob::isRunning() const
|
|
|
|
|
{
|
2026-04-17 19:55:50 +02:00
|
|
|
return ( m_jobState == JobState::Queued ) || ( m_jobState == JobState::Running );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
RimGenericJob::JobState RimGenericJob::state() const
|
|
|
|
|
{
|
|
|
|
|
return m_jobState;
|
2025-10-18 02:42:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2026-09-17 14:03:54 +02:00
|
|
|
void RimGenericJob::setState( RimGenericJob::JobState state )
|
2025-10-18 02:42:11 +02:00
|
|
|
{
|
2026-09-17 14:03:54 +02:00
|
|
|
m_jobState = state;
|
2025-10-18 02:42:11 +02:00
|
|
|
}
|
|
|
|
|
|
2025-06-11 15:43:53 +02:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2026-09-17 14:03:54 +02:00
|
|
|
void RimGenericJob::appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const
|
2025-06-11 15:43:53 +02:00
|
|
|
{
|
2026-09-17 14:03:54 +02:00
|
|
|
if ( isRunning() )
|
2025-10-18 02:42:11 +02:00
|
|
|
{
|
2026-09-17 14:03:54 +02:00
|
|
|
menuBuilder << "RicStopJobFeature";
|
2025-06-11 15:43:53 +02:00
|
|
|
}
|
2026-09-17 14:03:54 +02:00
|
|
|
else
|
2025-06-11 15:43:53 +02:00
|
|
|
{
|
2026-09-17 14:03:54 +02:00
|
|
|
menuBuilder << "RicRunJobFeature";
|
2025-06-11 15:43:53 +02:00
|
|
|
}
|
2026-09-17 14:03:54 +02:00
|
|
|
menuBuilder << "RicDuplicateJobFeature";
|
|
|
|
|
menuBuilder << "RicViewJobLogFeature";
|
2025-10-18 02:42:11 +02:00
|
|
|
}
|
2026-10-21 18:14:13 +02:00
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
void RimGenericJob::setStarted()
|
|
|
|
|
{
|
|
|
|
|
m_startTime = QDateTime::currentDateTime();
|
|
|
|
|
m_stopTime = QDateTime();
|
|
|
|
|
m_refreshTimer->start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
double RimGenericJob::runTimeSeconds()
|
|
|
|
|
{
|
|
|
|
|
if ( m_startTime.isValid() )
|
|
|
|
|
{
|
|
|
|
|
if ( isRunning() )
|
|
|
|
|
{
|
|
|
|
|
return m_startTime.secsTo( QDateTime::currentDateTime() );
|
|
|
|
|
}
|
|
|
|
|
else if ( m_stopTime.isValid() )
|
|
|
|
|
{
|
|
|
|
|
return m_startTime.secsTo( m_stopTime );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0.0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
void RimGenericJob::setFinished( bool runOk )
|
|
|
|
|
{
|
|
|
|
|
m_refreshTimer->stop();
|
|
|
|
|
m_stopTime = QDateTime::currentDateTime();
|
|
|
|
|
if ( runOk )
|
|
|
|
|
{
|
|
|
|
|
setState( RimGenericJob::Completed );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
setState( RimGenericJob::Failed );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
QString RimGenericJob::runTimeString()
|
|
|
|
|
{
|
|
|
|
|
double seconds = runTimeSeconds();
|
|
|
|
|
int h = static_cast<int>( seconds / 3600 );
|
|
|
|
|
int m = static_cast<int>( ( seconds - h * 3600 ) / 60 );
|
|
|
|
|
int s = static_cast<int>( seconds - h * 3600 - m * 60 );
|
|
|
|
|
|
|
|
|
|
return QString( "%1:%2:%3" ).arg( h, 2, 10, QChar( '0' ) ).arg( m, 2, 10, QChar( '0' ) ).arg( s, 2, 10, QChar( '0' ) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
bool RimGenericJob::isChildJob() const
|
|
|
|
|
{
|
|
|
|
|
return m_isChildJob();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
void RimGenericJob::setIsChildJob( bool isChildJob )
|
|
|
|
|
{
|
|
|
|
|
m_isChildJob = isChildJob;
|
|
|
|
|
if ( isChildJob ) setDeletable( false );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
void RimGenericJob::onRefreshTimer( const SignalEmitter* emitter )
|
|
|
|
|
{
|
|
|
|
|
if ( isRunning() ) updateConnectedEditors();
|
|
|
|
|
}
|