Factory   A
last analyzed

Complexity

Total Complexity 23

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 54
dl 0
loc 82
rs 10
c 1
b 0
f 0
ccs 53
cts 53
cp 1
wmc 23

1 Method

Rating   Name   Duplication   Size   Complexity  
D getClass() 0 72 23
1
<?php
2
3
namespace kalanis\kw_files_mapper\Access;
4
5
6
use kalanis\kw_files\Access as original_access;
7
use kalanis\kw_files\FilesException;
8
use kalanis\kw_files\Processing as original_processing;
9
use kalanis\kw_files\Traits\TLang;
10
use kalanis\kw_files_mapper\Processing;
11
use kalanis\kw_files_mapper\Support\Process;
12
use kalanis\kw_mapper\Records\ARecord;
13
use kalanis\kw_paths\PathsException;
14
use kalanis\kw_storage\Interfaces\IStorage;
15
16
17
/**
18
 * Class Factory
19
 * @package kalanis\kw_files_mapper\Access
20
 * Create Composite access to storage
21
 */
22
class Factory extends original_access\Factory
23
{
24
    use TLang;
25
26
    /**
27
     * @param string|array<string|int, string|int|float|bool|object>|object $param
28
     * @throws PathsException
29
     * @throws FilesException
30
     * @return original_access\CompositeAdapter
31
     */
32 22
    public function getClass($param): original_access\CompositeAdapter
33
    {
34 22
        if (is_string($param)) {
35 2
            return new original_access\CompositeAdapter(
36 2
                new original_processing\Volume\ProcessNode($param, $this->getFlLang()),
37 2
                new original_processing\Volume\ProcessDir($param, $this->getFlLang()),
38 2
                new original_processing\Volume\ProcessFile($param, $this->getFlLang()),
39 2
                new original_processing\Volume\ProcessFile($param, $this->getFlLang())
40
            );
41
42 20
        } elseif (is_array($param)) {
43 13
            if (isset($param['path']) && is_string($param['path'])) {
44 1
                return new original_access\CompositeAdapter(
45 1
                    new original_processing\Volume\ProcessNode($param['path'], $this->getFlLang()),
46 1
                    new original_processing\Volume\ProcessDir($param['path'], $this->getFlLang()),
47 1
                    new original_processing\Volume\ProcessFile($param['path'], $this->getFlLang()),
48 1
                    new original_processing\Volume\ProcessFile($param['path'], $this->getFlLang())
49
                );
50
51 12
            } elseif (isset($param['source']) && is_object($param['source']) && ($param['source'] instanceof original_access\CompositeAdapter)) {
52 1
                return $param['source'];
53
54 11
            } elseif (isset($param['source']) && is_object($param['source']) && ($param['source'] instanceof IStorage)) {
55 2
                return new original_access\CompositeAdapter(
56 2
                    new original_processing\Storage\ProcessNode($param['source'], $this->getFlLang()),
57 2
                    new original_processing\Storage\ProcessDir($param['source'], $this->getFlLang()),
58 2
                    new original_processing\Storage\ProcessFile($param['source'], $this->getFlLang()),
59 2
                    new original_processing\Storage\ProcessFileStream($param['source'], $this->getFlLang())
60
                );
61
62 9
            } elseif (isset($param['source']) && is_string($param['source'])) {
63 1
                return new original_access\CompositeAdapter(
64 1
                    new original_processing\Volume\ProcessNode($param['source'], $this->getFlLang()),
65 1
                    new original_processing\Volume\ProcessDir($param['source'], $this->getFlLang()),
66 1
                    new original_processing\Volume\ProcessFile($param['source'], $this->getFlLang()),
67 1
                    new original_processing\Volume\ProcessFile($param['source'], $this->getFlLang())
68
                );
69
70 8
            } elseif (isset($param['source']) && is_object($param['source']) && ($param['source'] instanceof ARecord)) {
71 1
                $trans = (isset($param['translate']) && is_object($param['translate']) && ($param['translate'] instanceof Process\Translate))
72 1
                    ? $param['translate']
73 1
                    : null
74
                ;
75 1
                return new original_access\CompositeAdapter(
76 1
                    new Processing\Mapper\ProcessNode($param['source'], $trans, $this->getFlLang()),
77 1
                    new Processing\Mapper\ProcessDir($param['source'], $trans, $this->getFlLang()),
78 1
                    new Processing\Mapper\ProcessFile($param['source'], $trans, $this->getFlLang()),
79 8
                    new Processing\Mapper\ProcessStream($param['source'], $trans, $this->getFlLang())
80
                );
81
            }
82
83 7
        } elseif (is_object($param)) {
84 4
            if ($param instanceof original_access\CompositeAdapter) {
85 1
                return $param;
86 3
            } elseif ($param instanceof IStorage) {
87 1
                return new original_access\CompositeAdapter(
88 1
                    new original_processing\Storage\ProcessNode($param, $this->getFlLang()),
89 1
                    new original_processing\Storage\ProcessDir($param, $this->getFlLang()),
90 1
                    new original_processing\Storage\ProcessFile($param, $this->getFlLang()),
91 1
                    new original_processing\Storage\ProcessFileStream($param, $this->getFlLang())
92
                );
93 2
            } elseif ($param instanceof ARecord) {
94 1
                return new original_access\CompositeAdapter(
95 1
                    new Processing\Mapper\ProcessNode($param, null, $this->getFlLang()),
96 1
                    new Processing\Mapper\ProcessDir($param, null, $this->getFlLang()),
97 1
                    new Processing\Mapper\ProcessFile($param, null, $this->getFlLang()),
98 1
                    new Processing\Mapper\ProcessStream($param, null, $this->getFlLang())
99
                );
100
            }
101
        }
102
103 11
        throw new FilesException($this->getFlLang()->flNoAvailableClasses());
104
    }
105
}
106