Skip to content

Commit dc8821d

Browse files
committed
Add OperationStatusPool and OperationStatusValidator
1 parent 57a2aad commit dc8821d

File tree

4 files changed

+116
-0
lines changed

4 files changed

+116
-0
lines changed

app/code/Magento/AsynchronousOperations/Model/Operation.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,33 @@
66
namespace Magento\AsynchronousOperations\Model;
77

88
use Magento\AsynchronousOperations\Api\Data\OperationInterface;
9+
use Magento\AsynchronousOperations\Model\OperationStatusValidator;
910
use Magento\Framework\DataObject;
1011

1112
/**
1213
* Class Operation
1314
*/
1415
class Operation extends DataObject implements OperationInterface
1516
{
17+
/**
18+
* @var OperationStatusValidator
19+
*/
20+
protected $operationStatusValidator;
21+
22+
/**
23+
* Operation constructor.
24+
*
25+
* @param array $data
26+
* @param OperationStatusValidator $operationStatusValidator
27+
*/
28+
public function __construct(
29+
array $data = [],
30+
OperationStatusValidator $operationStatusValidator
31+
) {
32+
$this->operationStatusValidator = $operationStatusValidator;
33+
parent::__construct($data);
34+
}
35+
1636
/**
1737
* @inheritDoc
1838
*/
@@ -106,6 +126,7 @@ public function getStatus()
106126
*/
107127
public function setStatus($status)
108128
{
129+
$this->operationStatusValidator->validate($status);
109130
return $this->setData(self::STATUS, $status);
110131
}
111132

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\AsynchronousOperations\Model;
7+
8+
/**
9+
* Class OperationStatusPool
10+
*
11+
* Pool of statuses that require validate
12+
*/
13+
class OperationStatusPool
14+
{
15+
/**
16+
* @var array
17+
*/
18+
protected $statuses;
19+
20+
/**
21+
* @param array $statuses
22+
*/
23+
public function __construct(array $statuses = [])
24+
{
25+
$this->statuses = $statuses;
26+
}
27+
28+
/**
29+
* Retrieve statuses that require validate
30+
*
31+
* @return array
32+
*/
33+
public function getStatuses()
34+
{
35+
return $this->statuses;
36+
}
37+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\AsynchronousOperations\Model;
7+
8+
use Magento\AsynchronousOperations\Model\OperationStatusPool;
9+
use Magento\Framework\Exception\NoSuchEntityException;
10+
use Doctrine\Instantiator\Exception\InvalidArgumentException;
11+
12+
/**
13+
* Class OperationStatusValidator to validate operation status
14+
*/
15+
class OperationStatusValidator
16+
{
17+
/**
18+
* @var OperationStatusPool
19+
*/
20+
protected $operationStatusPool;
21+
22+
/**
23+
* OperationStatusValidator constructor.
24+
*
25+
* @param OperationStatusPool $operationStatusPool
26+
*/
27+
public function __construct(OperationStatusPool $operationStatusPool)
28+
{
29+
$this->operationStatusPool = $operationStatusPool;
30+
}
31+
32+
/**
33+
* Validate method
34+
*
35+
* @param $status
36+
*/
37+
public function validate($status)
38+
{
39+
$statuses = $this->operationStatusPool->getStatuses();
40+
41+
if (!in_array($status, $statuses)) {
42+
throw new \InvalidArgumentException('Invalid Operation Status.');
43+
}
44+
45+
return;
46+
}
47+
}

app/code/Magento/AsynchronousOperations/etc/di.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,17 @@
8080
</argument>
8181
</arguments>
8282
</type>
83+
<type name="Magento\AsynchronousOperations\Model\OperationStatusPool">
84+
<arguments>
85+
<argument name="statuses" xsi:type="array">
86+
<item name="complete" xsi:type="string">1</item>
87+
<item name="retriablyFailed" xsi:type="string">2</item>
88+
<item name="notRetriablyFailed" xsi:type="string">3</item>
89+
<item name="open" xsi:type="string">4</item>
90+
<item name="rejected" xsi:type="string">5</item>
91+
</argument>
92+
</arguments>
93+
</type>
8394
<virtualType
8495
name="Magento\AsynchronousOperations\Ui\Component\DataProvider"
8596
type="Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider"/>

0 commit comments

Comments
 (0)