Runner   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 88
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 3
Bugs 0 Features 0
Metric Value
wmc 9
eloc 21
c 3
b 0
f 0
dl 0
loc 88
ccs 0
cts 37
cp 0
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getFactory() 0 3 1
A createRunner() 0 11 3
A setupLoggers() 0 15 3
A __construct() 0 3 1
A run() 0 7 1
1
<?php
2
namespace phpbu\App;
3
4
use phpbu\App\Runner\Process;
5
6
/**
7
 * Runner actually executes all backup jobs.
8
 *
9
 * @package    phpbu
10
 * @subpackage App
11
 * @author     Sebastian Feldmann <[email protected]>
12
 * @copyright  Sebastian Feldmann <[email protected]>
13
 * @license    https://opensource.org/licenses/MIT The MIT License (MIT)
14
 * @link       https://phpbu.de/
15
 * @since      Class available since Release 1.0.0
16
 */
17
class Runner
18
{
19
    /**
20
     * phpbu Factory
21
     *
22
     * @var \phpbu\App\Factory
23
     */
24
    protected $factory;
25
26
    /**
27
     * Constructor
28
     *
29
     * @param \phpbu\App\Factory $factory
30
     */
31
    public function __construct(Factory $factory)
32
    {
33
        $this->factory = $factory;
34
    }
35
36
    /**
37
     * Factory getter
38
     *
39
     * @return \phpbu\App\Factory
40
     */
41
    public function getFactory() : Factory
42
    {
43
        return $this->factory;
44
    }
45
46
    /**
47
     * Run phpbu
48
     *
49
     * @param  \phpbu\App\Configuration $configuration
50
     * @return \phpbu\App\Result
51
     * @throws \phpbu\App\Exception
52
     */
53
    public function run(Configuration $configuration) : Result
54
    {
55
        $result = new Result();
56
        $this->setupLoggers($configuration, $result);
57
58
        $runner = $this->createRunner($configuration, $result);
59
        return $runner->run($configuration);
60
    }
61
62
    /**
63
     * Create and register all configured loggers.
64
     *
65
     * @param  \phpbu\App\Configuration $configuration
66
     * @param  \phpbu\App\Result        $result
67
     * @throws \phpbu\App\Exception
68
     */
69
    private function setupLoggers(Configuration $configuration, Result $result) : void
70
    {
71
        foreach ($configuration->getLoggers() as $log) {
72
            // log is a already fully setup Listener so just use it
73
            if ($log instanceof Listener) {
74
                $logger = $log;
75
            } else {
76
                // put some system configuration values into the logger configuration
77
                $system  = ['__simulate__' => $configuration->isSimulation()];
78
                $options = array_merge($log->options, $system);
79
                // log is a configuration blueprint for a logger, so create it
80
                /** @var \phpbu\App\Listener $logger */
81
                $logger = $this->factory->createLogger($log->type, $options);
82
            }
83
            $result->addListener($logger);
84
        }
85
    }
86
87
    /**
88
     * Create a runner executing the requested process.
89
     *
90
     * @param  \phpbu\App\Configuration $configuration
91
     * @param  \phpbu\App\Result        $result
92
     * @return \phpbu\App\Runner\Process
93
     */
94
    private function createRunner(Configuration $configuration, Result $result) : Process
95
    {
96
        if ($configuration->isSimulation()) {
97
            return new Runner\Simulate($this->factory, $result);
98
        }
99
100
        if ($configuration->isRestore()) {
101
            return new Runner\Restore($this->factory, $result);
102
        }
103
104
        return new Runner\Backup($this->factory, $result);
105
    }
106
}
107