1e711e6e4SAxel Dörfler /* 2e711e6e4SAxel Dörfler * Copyright 2011-2015, Haiku, Inc. 3e711e6e4SAxel Dörfler * Distributed under the terms of the MIT License. 4e711e6e4SAxel Dörfler */ 5e711e6e4SAxel Dörfler #ifndef _SUPPORT_JOB_H_ 6e711e6e4SAxel Dörfler #define _SUPPORT_JOB_H_ 7e711e6e4SAxel Dörfler 8e711e6e4SAxel Dörfler 9e711e6e4SAxel Dörfler #include <ObjectList.h> 10e711e6e4SAxel Dörfler #include <String.h> 11e711e6e4SAxel Dörfler 12e711e6e4SAxel Dörfler 13e711e6e4SAxel Dörfler namespace BSupportKit { 14e711e6e4SAxel Dörfler 15e711e6e4SAxel Dörfler 16e711e6e4SAxel Dörfler class BJob; 17e711e6e4SAxel Dörfler 18e711e6e4SAxel Dörfler 19e711e6e4SAxel Dörfler struct BJobStateListener { 20e711e6e4SAxel Dörfler virtual ~BJobStateListener(); 21e711e6e4SAxel Dörfler 22e711e6e4SAxel Dörfler // these default implementations do nothing 23e711e6e4SAxel Dörfler virtual void JobStarted(BJob* job); 24e711e6e4SAxel Dörfler virtual void JobProgress(BJob* job); 25e711e6e4SAxel Dörfler virtual void JobSucceeded(BJob* job); 26e711e6e4SAxel Dörfler virtual void JobFailed(BJob* job); 27e711e6e4SAxel Dörfler virtual void JobAborted(BJob* job); 28e711e6e4SAxel Dörfler }; 29e711e6e4SAxel Dörfler 30e711e6e4SAxel Dörfler 31e711e6e4SAxel Dörfler enum BJobState { 32e711e6e4SAxel Dörfler B_JOB_STATE_WAITING_TO_RUN, 33e711e6e4SAxel Dörfler B_JOB_STATE_STARTED, 34e711e6e4SAxel Dörfler B_JOB_STATE_IN_PROGRESS, 35e711e6e4SAxel Dörfler B_JOB_STATE_SUCCEEDED, 36e711e6e4SAxel Dörfler B_JOB_STATE_FAILED, 37e711e6e4SAxel Dörfler B_JOB_STATE_ABORTED, 38e711e6e4SAxel Dörfler }; 39e711e6e4SAxel Dörfler 40e711e6e4SAxel Dörfler 41e711e6e4SAxel Dörfler class BJob { 42e711e6e4SAxel Dörfler public: 43e711e6e4SAxel Dörfler BJob(const BString& title); 44e711e6e4SAxel Dörfler virtual ~BJob(); 45e711e6e4SAxel Dörfler 46e711e6e4SAxel Dörfler status_t InitCheck() const; 47e711e6e4SAxel Dörfler 48e711e6e4SAxel Dörfler virtual status_t Run(); 49e711e6e4SAxel Dörfler 50e711e6e4SAxel Dörfler const BString& Title() const; 51e711e6e4SAxel Dörfler BJobState State() const; 52e711e6e4SAxel Dörfler status_t Result() const; 53e711e6e4SAxel Dörfler const BString& ErrorString() const; 54e711e6e4SAxel Dörfler 55e711e6e4SAxel Dörfler uint32 TicketNumber() const; 56e711e6e4SAxel Dörfler 57e711e6e4SAxel Dörfler status_t AddStateListener(BJobStateListener* listener); 58e711e6e4SAxel Dörfler status_t RemoveStateListener( 59e711e6e4SAxel Dörfler BJobStateListener* listener); 60e711e6e4SAxel Dörfler 61e711e6e4SAxel Dörfler bool IsRunnable() const; 62e711e6e4SAxel Dörfler status_t AddDependency(BJob* job); 63e711e6e4SAxel Dörfler status_t RemoveDependency(BJob* job); 64e711e6e4SAxel Dörfler int32 CountDependencies() const; 65e711e6e4SAxel Dörfler 66e711e6e4SAxel Dörfler BJob* DependantJobAt(int32 index) const; 67e711e6e4SAxel Dörfler 68e711e6e4SAxel Dörfler class Private; 69e711e6e4SAxel Dörfler 70e711e6e4SAxel Dörfler protected: 71e711e6e4SAxel Dörfler virtual status_t Execute() = 0; 72e711e6e4SAxel Dörfler virtual void Cleanup(status_t jobResult); 73e711e6e4SAxel Dörfler 74*5ab2b145SAxel Dörfler void SetState(BJobState state); 75e711e6e4SAxel Dörfler void SetErrorString(const BString&); 76e711e6e4SAxel Dörfler 77e711e6e4SAxel Dörfler void NotifyStateListeners(); 78e711e6e4SAxel Dörfler 79e711e6e4SAxel Dörfler private: 80e711e6e4SAxel Dörfler friend class Private; 81e711e6e4SAxel Dörfler 82e711e6e4SAxel Dörfler void _SetTicketNumber(uint32 ticketNumber); 83e711e6e4SAxel Dörfler void _ClearTicketNumber(); 84e711e6e4SAxel Dörfler 85e711e6e4SAxel Dörfler private: 86e711e6e4SAxel Dörfler status_t fInitStatus; 87e711e6e4SAxel Dörfler BString fTitle; 88e711e6e4SAxel Dörfler 89e711e6e4SAxel Dörfler BJobState fState; 90e711e6e4SAxel Dörfler status_t fResult; 91e711e6e4SAxel Dörfler BString fErrorString; 92e711e6e4SAxel Dörfler 93e711e6e4SAxel Dörfler uint32 fTicketNumber; 94e711e6e4SAxel Dörfler 95e711e6e4SAxel Dörfler typedef BObjectList<BJob> JobList; 96e711e6e4SAxel Dörfler JobList fDependencies; 97e711e6e4SAxel Dörfler JobList fDependantJobs; 98e711e6e4SAxel Dörfler 99e711e6e4SAxel Dörfler typedef BObjectList<BJobStateListener> StateListenerList; 100e711e6e4SAxel Dörfler StateListenerList fStateListeners; 101e711e6e4SAxel Dörfler }; 102e711e6e4SAxel Dörfler 103e711e6e4SAxel Dörfler 104e711e6e4SAxel Dörfler } // namespace BSupportKit 105e711e6e4SAxel Dörfler 106e711e6e4SAxel Dörfler 107e711e6e4SAxel Dörfler #endif // _SUPPORT_JOB_H_ 108