void PlanTJScheduler::slotMessage( int type, const QString &msg, TJ::CoreAttributes *object ) { // debugPlan<<"PlanTJScheduler::slotMessage:"<<msg; Schedule::Log log; if ( object && object->getType() == CA_Task && m_taskmap.contains( static_cast<TJ::Task*>( object ) ) ) { log = Schedule::Log( static_cast<Node*>( m_taskmap[ static_cast<TJ::Task*>( object ) ] ), type, msg ); } else if ( object && object->getType() == CA_Resource && m_resourcemap.contains( static_cast<TJ::Resource*>( object ) ) ) { log = Schedule::Log( 0, m_resourcemap[ static_cast<TJ::Resource*>( object ) ], type, msg ); } else if ( object && ! object->getName().isEmpty() ) { log = Schedule::Log( static_cast<Node*>( m_project ), type, QString( "%1: %2" ).arg(object->getName() ).arg( msg ) ); } else { log = Schedule::Log( static_cast<Node*>( m_project ), type, msg ); } slotAddLog( log ); }
void KPlatoScheduler::run() { if ( m_haltScheduling ) { deleteLater(); return; } if ( m_stopScheduling ) { return; } { // mutex --> m_projectMutex.lock(); m_managerMutex.lock(); m_project = new Project(); loadProject( m_project, m_pdoc ); m_project->setName( "Schedule: " + m_project->name() ); //Debug m_manager = m_project->scheduleManager( m_mainmanagerId ); Q_ASSERT( m_manager ); Q_ASSERT( m_manager->expected() ); Q_ASSERT( m_manager != m_mainmanager ); Q_ASSERT( m_manager->scheduleId() == m_mainmanager->scheduleId() ); Q_ASSERT( m_manager->expected() != m_mainmanager->expected() ); m_manager->setName( "Schedule: " + m_manager->name() ); //Debug m_managerMutex.unlock(); m_projectMutex.unlock(); } // <--- mutex connect(m_project, SIGNAL(maxProgress(int)), this, SLOT(setMaxProgress(int))); connect(m_project, SIGNAL(sigProgress(int)), this, SLOT(setProgress(int))); bool x = connect(m_manager, SIGNAL(sigLogAdded(Schedule::Log)), this, SLOT(slotAddLog(Schedule::Log))); Q_ASSERT( x ); Q_UNUSED( x ); m_project->calculate( *m_manager ); if ( m_haltScheduling ) { deleteLater(); } }
void PlanTJScheduler::run() { if ( m_haltScheduling ) { deleteLater(); return; } if ( m_stopScheduling ) { return; } setMaxProgress( PROGRESS_MAX_VALUE ); { // mutex --> m_projectMutex.lock(); m_managerMutex.lock(); m_project = new Project(); loadProject( m_project, m_pdoc ); m_project->setName( "Schedule: " + m_project->name() ); //Debug m_project->stopcalculation = false; m_manager = m_project->scheduleManager( m_mainmanagerId ); Q_CHECK_PTR( m_manager ); Q_ASSERT( m_manager->expected() ); Q_ASSERT( m_manager != m_mainmanager ); Q_ASSERT( m_manager->scheduleId() == m_mainmanager->scheduleId() ); Q_ASSERT( m_manager->expected() != m_mainmanager->expected() ); m_manager->setName( "Schedule: " + m_manager->name() ); //Debug m_schedule = m_manager->expected(); bool x = connect(m_manager, SIGNAL(sigLogAdded(Schedule::Log)), this, SLOT(slotAddLog(Schedule::Log))); Q_ASSERT( x ); Q_UNUSED( x ); m_project->initiateCalculation( *m_schedule ); m_project->initiateCalculationLists( *m_schedule ); m_usePert = m_manager->usePert(); m_recalculate = m_manager->recalculate(); if ( m_recalculate ) { m_backward = false; } else { m_backward = m_manager->schedulingDirection(); } m_project->setCurrentSchedule( m_manager->expected()->id() ); m_schedule->setPhaseName( 0, xi18nc( "@info/plain" , "Init" ) ); QLocale locale; KFormat format(locale); if ( ! m_backward ) { logDebug( m_project, 0, QString( "Schedule project using TJ Scheduler, starting at %1, granularity %2" ).arg( QDateTime::currentDateTime().toString() ).arg( format.formatDuration( m_granularity ) ), 0 ); if ( m_recalculate ) { logInfo( m_project, 0, xi18nc( "@info/plain" , "Re-calculate project from start time: %1", locale.toString(m_project->constraintStartTime(), QLocale::ShortFormat) ), 0 ); } else { logInfo( m_project, 0, xi18nc( "@info/plain" , "Schedule project from start time: %1", locale.toString(m_project->constraintStartTime(), QLocale::ShortFormat) ), 0 ); } logInfo( m_project, 0, xi18nc( "@info/plain" , "Project target finish time: %1", locale.toString(m_project->constraintEndTime(), QLocale::ShortFormat) ), 0 ); } else { logDebug( m_project, 0, QString( "Schedule project backward using TJ Scheduler, starting at %1, granularity %2" ).arg( locale.toString(QDateTime::currentDateTime(), QLocale::ShortFormat) ).arg( format.formatDuration( m_granularity ) ), 0 ); logInfo( m_project, 0, xi18nc( "@info/plain" , "Schedule project from end time: %1", locale.toString(m_project->constraintEndTime(), QLocale::ShortFormat) ), 0 ); } m_managerMutex.unlock(); m_projectMutex.unlock(); } // <--- mutex setProgress( 2 ); if ( ! kplatoToTJ() ) { result = 1; setProgress( PROGRESS_MAX_VALUE ); return; } setMaxProgress( PROGRESS_MAX_VALUE ); connect(m_tjProject, SIGNAL(updateProgressBar(int,int)), this, SLOT(setProgress(int))); m_schedule->setPhaseName( 1, xi18nc( "@info/plain" , "Schedule" ) ); logInfo( m_project, 0, "Start scheduling", 1 ); bool r = solve(); if ( ! r ) { debugPlan<<"Scheduling failed"; result = 2; logError( m_project, 0, xi18nc( "@info/plain" , "Failed to schedule project" ) ); setProgress( PROGRESS_MAX_VALUE ); return; } if ( m_haltScheduling ) { debugPlan<<"Scheduling halted"; logInfo( m_project, 0, "Scheduling halted" ); deleteLater(); return; } m_schedule->setPhaseName( 2, xi18nc( "@info/plain" , "Update" ) ); logInfo( m_project, 0, "Scheduling finished, update project", 2 ); if ( ! kplatoFromTJ() ) { logError( m_project, 0, "Project update failed" ); } setProgress( PROGRESS_MAX_VALUE ); m_schedule->setPhaseName( 3, xi18nc( "@info/plain" , "Finish" ) ); }