LocaleNameToIdLocaleStep   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 6
eloc 23
dl 0
loc 82
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A resolveIdLocale() 0 12 2
A execute() 0 17 3
1
<?php
2
3
/**
4
 * This file is part of the Spryker Commerce OS.
5
 * For full license information, please view the LICENSE file that was distributed with this source code.
6
 */
7
8
declare(strict_types = 1);
9
10
namespace Pyz\Zed\DataImport\Business\Model\Locale;
11
12
use Orm\Zed\Locale\Persistence\SpyLocaleQuery;
13
use Pyz\Zed\DataImport\Business\Exception\EntityNotFoundException;
14
use Spryker\Zed\DataImport\Business\Exception\DataKeyNotFoundInDataSetException;
15
use Spryker\Zed\DataImport\Business\Model\DataImportStep\DataImportStepInterface;
16
use Spryker\Zed\DataImport\Business\Model\DataSet\DataSetInterface;
17
18
class LocaleNameToIdLocaleStep implements DataImportStepInterface
19
{
20
    /**
21
     * @var string
22
     */
23
    public const KEY_SOURCE = 'localeName';
24
25
    /**
26
     * @var string
27
     */
28
    public const KEY_TARGET = 'idLocale';
29
30
    /**
31
     * @var string
32
     */
33
    protected $source;
34
35
    /**
36
     * @var string
37
     */
38
    protected $target;
39
40
    /**
41
     * @var array<string, int>
42
     */
43
    protected $resolved = [];
44
45
    /**
46
     * @param string $source
47
     * @param string $target
48
     */
49
    public function __construct(string $source = self::KEY_SOURCE, string $target = self::KEY_TARGET)
50
    {
51
        $this->source = $source;
52
        $this->target = $target;
53
    }
54
55
    /**
56
     * @param \Spryker\Zed\DataImport\Business\Model\DataSet\DataSetInterface $dataSet
57
     *
58
     * @throws \Spryker\Zed\DataImport\Business\Exception\DataKeyNotFoundInDataSetException
59
     *
60
     * @return void
61
     */
62
    public function execute(DataSetInterface $dataSet): void
63
    {
64
        if (!isset($dataSet[$this->source])) {
65
            throw new DataKeyNotFoundInDataSetException(sprintf(
66
                'Expected a key "%s" in current data set. Available keys: "%s"',
67
                $this->source,
68
                implode(', ', array_keys($dataSet->getArrayCopy())),
69
            ));
70
        }
71
72
        /** @var string $localeName */
73
        $localeName = $dataSet[$this->source];
74
        if (!isset($this->resolved[$localeName])) {
75
            $this->resolved[$localeName] = $this->resolveIdLocale($localeName);
76
        }
77
78
        $dataSet[$this->target] = $this->resolved[$localeName];
79
    }
80
81
    /**
82
     * @param string $localeName
83
     *
84
     * @throws \Pyz\Zed\DataImport\Business\Exception\EntityNotFoundException
85
     *
86
     * @return int
87
     */
88
    protected function resolveIdLocale(string $localeName): int
89
    {
90
        $query = SpyLocaleQuery::create();
91
        $localeEntity = $query->filterByLocaleName($localeName)->findOne();
92
93
        if (!$localeEntity) {
94
            throw new EntityNotFoundException(sprintf('Locale by name "%s" not found.', $localeName));
95
        }
96
97
        $localeEntity->save();
98
99
        return $localeEntity->getIdLocale();
100
    }
101
}
102