source: branches/1.2/workflow/inc/local/classes/class.JobBase.php @ 1349

Revision 1349, 5.3 KB checked in by niltonneto, 15 years ago (diff)

Ticket #561 - Inclusão do módulo Workflow faltante nessa versão.

Line 
1<?php
2/**************************************************************************\
3* eGroupWare                                                               *
4* http://www.egroupware.org                                                *
5* --------------------------------------------                             *
6*  This program is free software; you can redistribute it and/or modify it *
7*  under the terms of the GNU General Public License as published by the   *
8*  Free Software Foundation; either version 2 of the License, or (at your  *
9*  option) any later version.                                              *
10\**************************************************************************/
11
12/**
13 * Classe base dos Jobs
14 * @author Sidnei Augusto Drovetto Junior - drovetto@gmail.com
15 * @version 1.0
16 * @abstract
17 * @license http://www.gnu.org/copyleft/gpl.html GPL
18 * @package Workflow
19 * @subpackage Job
20 */
21abstract class JobBase
22{
23        /**
24         * @var int $jobID O ID do Job
25         * @access private
26         */
27        private $jobID;
28
29        /**
30         * @var int $processID O ID do Processo
31         * @access private
32         */
33        private $processID;
34
35        /**
36         * @var string $currentDate Uma string cujo conteúdo é um data e horário devidamente formatados
37         * @access private
38         */
39        private $currentDate;
40
41        /**
42         * @var object $jobManager Objeto da classe JobManager
43         * @access private
44         */
45        private $jobManager;
46
47        /**
48         * @var bool $userLog Indica se o usuário gravou algum log (true) ou não (false)
49         * @access private
50         */
51        private $userLog;
52
53        /**
54         * @var float $maximumExecutionTime O tempo máximo de execução do Job
55         * @access private
56         */
57        private $maximumExecutionTime;
58
59        /**
60         * @var float $timeStart Início do Job (em microsegundos)
61         * @access private
62         */
63        private $timeStart;
64
65        /**
66         * @var bool $testMode Indica se o job está sendo executado em modo de teste (true) ou não (false)
67         * @access protected
68         */
69        protected $testMode;
70
71        /**
72         * @var array $environment Contém algumas variáveis/objetos relevantes para a execução de alguns Jobs
73         * @access protected
74         */
75        protected $environment;
76
77        /**
78         * Construtor da classe JobBase
79         * @param int $jobID O ID do Job que será atualizado
80         * @param int $processID O ID do processo a qual o Job pertence
81         * @param string $currentDate Uma string cujo conteúdo é um data e horário devidamente formatados
82         * @param bool $testMode Indica se o job está sendo executado em modo de teste (true) ou não (false)
83         * @param float $maximumExecutionTime O tempo máximo de execução do Job (em segundos)
84         * @return object Objeto da classe JobBase
85         * @final
86         * @access public
87         */
88        final public function JobBase($jobID, $processID, $currentDate, $testMode, $maximumExecutionTime)
89        {
90                require_once 'common.inc.php';
91                $GLOBALS['workflow']['factory']->getInstance('WorkflowMacro')->prepareEnvironment();
92                $this->jobID = $jobID;
93                $this->processID = $processID;
94                $this->currentDate = $currentDate;
95                $this->jobManager = &$GLOBALS['workflow']['factory']->getInstance('WorkflowJobManager');
96                $this->testMode = $testMode;
97                $this->maximumExecutionTime = $maximumExecutionTime;
98                $this->timeStart = microtime(true);
99                $this->userLog = false;
100
101                $this->prepareEnvironment();
102        }
103
104        /**
105         * Indica que a execução do Job falhou
106         * @param string $message A mensagem que será armazenada
107         * @return void
108         * @final
109         * @access public
110         */
111        final public function fail($message)
112        {
113                $this->jobManager->writeLog($this->jobID, $this->currentDate, $message, JobManager::STATUS_JOB_FAIL);
114                $this->userLog = true;
115        }
116
117        /**
118         * Indica que a execução do Job foi bem sucedida
119         * @param string $message A mensagem que será armazenada
120         * @return void
121         * @final
122         * @access public
123         */
124        final public function success($message)
125        {
126                $this->jobManager->writeLog($this->jobID, $this->currentDate, $message, JobManager::STATUS_JOB_SUCCESS);
127                $this->userLog = true;
128        }
129
130        /**
131         * Grava uma mensagem de log padrão (caso o desenvolvedor não chame os métodos "fail" ou "success")
132         * @return void
133         * @final
134         * @access private
135         */
136        final private function defaultLog()
137        {
138                $this->jobManager->writeLog($this->jobID, $this->currentDate, 'Job executado', JobManager::STATUS_UNKNOWN);
139                $this->userLog = true;
140        }
141
142        /**
143         * Prepara o ambiente para a execução do Job
144         * @return void
145         * @final
146         * @access private
147         */
148        final private function prepareEnvironment()
149        {
150                $GLOBALS['workflow']['factory']->getInstance('WorkflowMacro')->prepareProcessEnvironment($this->processID);
151
152                require_once PHPGW_SERVER_ROOT . '/workflow/inc/class.process_factory.inc.php';
153
154                $this->environment = array();
155                $this->environment['factory']  = &new ProcessFactory();
156        }
157
158        /**
159         * Procedimentos que são executados na finalização do Job
160         * @return void
161         * @final
162         * @access private
163         */
164        final public function finalize()
165        {
166                if (!$this->userLog)
167                        $this->defaultLog();
168        }
169
170        /**
171         * Pega o tempo de execução do Job (até o momento)
172         * @return float O tempo de execução do Job
173         * @final
174         * @access public
175         */
176        final public function getExecutionTime()
177        {
178                return microtime(true) - $this->timeStart;
179        }
180
181        /**
182         * Pega o tempo máximo de execução do Job
183         * @return float O tempo máximo de execução do Job
184         * @final
185         * @access public
186         */
187        final public function getMaximumExectuionTime()
188        {
189                return $this->maximumExecutionTime;
190        }
191
192        /**
193         * É o método que contém o código do Job que será executado
194         * @return void
195         * @abstract
196         * @access public
197         */
198        abstract public function run();
199}
200?>
Note: See TracBrowser for help on using the repository browser.