Completed
Push — master ( c5e677...4df15a )
by Sebastian
02:56
created

Runner::createRunner()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
dl 0
loc 12
ccs 0
cts 10
cp 0
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 6
nc 3
nop 2
crap 12
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()
42
    {
43
        return $this->factory;
44
    }
45
46
    /**
47
     * Run phpbu
48
     *
49
     * @param  \phpbu\App\Configuration $configuration
50
     * @param  \phpbu\App\Factory
51
     * @return \phpbu\App\Result
52
     * @throws \phpbu\App\Exception
53
     */
54
    public function run(Configuration $configuration)
55
    {
56
        $result = new Result();
57
        $this->setupLoggers($configuration, $result);
58
59
        $runner = $this->createRunner($configuration, $result);
60
        return $runner->run($configuration);
61
    }
62
63
    /**
64
     * Create and register all configured loggers.
65
     *
66
     * @param  \phpbu\App\Configuration $configuration
67
     * @param  \phpbu\App\Result        $result
68
     * @throws \phpbu\App\Exception
69
     */
70
    private function setupLoggers(Configuration $configuration, Result $result)
71
    {
72
        foreach ($configuration->getLoggers() as $log) {
73
            // this is a already fully setup Listener so just add it
74
            if ($log instanceof Listener) {
75
                $logger = $log;
76
            } else {
77
                // this is a configuration blueprint for a logger, so create and add it
78
                /** @var \phpbu\App\Configuration\Logger $log */
79
                /** @var \phpbu\App\Listener $logger */
80
                $logger = $this->factory->createLogger($log->type, $log->options);
81
            }
82
            $result->addListener($logger);
83
        }
84
    }
85
86
    /**
87
     * Create a runner executing the requested process.
88
     *
89
     * @param  \phpbu\App\Configuration $configuration
90
     * @param  \phpbu\App\Result        $result
91
     * @return \phpbu\App\Runner\Process
92
     */
93
    private function createRunner(Configuration $configuration, Result $result) : Process
94
    {
95
        if ($configuration->isSimulation()) {
96
            return new Runner\Simulate($this->factory, $result);
97
        }
98
99
        if ($configuration->isRestore()) {
100
            return new Runner\Restore($this->factory, $result);
101
        }
102
103
        return new Runner\Backup($this->factory, $result);
104
    }
105
}
106