From 37d3856a3be0ecbf06a4a47bd6e24827024d2a5b Mon Sep 17 00:00:00 2001 From: Robin Krahnen Date: Mon, 13 Mar 2017 16:59:04 +0100 Subject: [PATCH] update project; fit neos/flow 4 --- .../Command/SequenceCommandController.php | 17 ++--- .../DigiComp/Sequence/Domain/Model/Insert.php | 38 +++++------ .../DigiComp/Sequence/Service/Exception.php | 7 +- .../Sequence/Service/SequenceGenerator.php | 66 ++++++++++++------- Configuration/Testing/Settings.yaml | 4 +- Migrations/Mysql/Version20140505093853.php | 2 +- Migrations/Mysql/Version20160624203903.php | 2 +- Tests/Functional/SequenceTest.php | 23 ++++--- composer.json | 2 +- 9 files changed, 84 insertions(+), 77 deletions(-) diff --git a/Classes/DigiComp/Sequence/Command/SequenceCommandController.php b/Classes/DigiComp/Sequence/Command/SequenceCommandController.php index 4f55521..ebea1f6 100644 --- a/Classes/DigiComp/Sequence/Command/SequenceCommandController.php +++ b/Classes/DigiComp/Sequence/Command/SequenceCommandController.php @@ -1,13 +1,9 @@ sequenceGenerator->advanceTo($to, $type); } - //TODO: make clean up job to delete all but the biggest number to save resources + // TODO: make clean up job to delete all but the biggest number to save resources } diff --git a/Classes/DigiComp/Sequence/Domain/Model/Insert.php b/Classes/DigiComp/Sequence/Domain/Model/Insert.php index 2ebdc0a..31a9b6a 100644 --- a/Classes/DigiComp/Sequence/Domain/Model/Insert.php +++ b/Classes/DigiComp/Sequence/Domain/Model/Insert.php @@ -1,13 +1,8 @@ setType($type); $this->setNumber($number); + $this->setType($type); + } + + /** + * @return int + */ + public function getNumber() + { + return $this->number; } /** @@ -53,11 +55,11 @@ class Insert } /** - * @return int + * @return string */ - public function getNumber() + public function getType() { - return $this->number; + return $this->type; } /** @@ -70,12 +72,4 @@ class Insert } $this->type = $type; } - - /** - * @return string - */ - public function getType() - { - return $this->type; - } } diff --git a/Classes/DigiComp/Sequence/Service/Exception.php b/Classes/DigiComp/Sequence/Service/Exception.php index 6b21953..0a46197 100644 --- a/Classes/DigiComp/Sequence/Service/Exception.php +++ b/Classes/DigiComp/Sequence/Service/Exception.php @@ -1,12 +1,7 @@ 1 we could return new keys immediately for this * request, as we "reserved" the space between. * @@ -20,21 +19,20 @@ use TYPO3\Flow\Annotations as Flow; */ class SequenceGenerator { - /** - * @var \Doctrine\Common\Persistence\ObjectManager + * @var ObjectManager * @Flow\Inject */ protected $entityManager; /** - * @var \TYPO3\Flow\Reflection\ReflectionService + * @var ReflectionService * @Flow\Inject */ protected $reflectionService; /** - * @var \TYPO3\Flow\Log\SystemLoggerInterface + * @var SystemLoggerInterface * @Flow\Inject */ protected $systemLogger; @@ -42,7 +40,8 @@ class SequenceGenerator /** * @param string|object $type * - * @throws \DigiComp\Sequence\Service\Exception + * @throws Exception + * * @return int */ public function getNextNumberFor($type) @@ -50,18 +49,25 @@ class SequenceGenerator $type = $this->inferTypeFromSource($type); $count = $this->getLastNumberFor($type); - //TODO: Check for maximal tries, or similar - //TODO: Let increment be configurable per type + // TODO: Check for maximal tries, or similar + // TODO: Let increment be configurable per type do { - $count = $count + 1; - } while (!$this->validateFreeNumber($count, $type)); + $count++; + } while (! $this->validateFreeNumber($count, $type)); + return $count; } + /** + * @param int $count + * @param string|object $type + * + * @return bool + */ protected function validateFreeNumber($count, $type) { + /** @var $em EntityManager */ $em = $this->entityManager; - /** @var $em \Doctrine\ORM\EntityManager */ try { $em->getConnection()->insert( 'digicomp_sequence_domain_model_insert', @@ -73,18 +79,27 @@ class SequenceGenerator } catch (DBALException $e) { if ($e->getPrevious() && $e->getPrevious() instanceof \PDOException) { // Do nothing, new Doctrine handling hides the above error - } else { + } + else { $this->systemLogger->logException($e); } } catch (\Exception $e) { $this->systemLogger->logException($e); } + return false; } + /** + * @param int $to + * @param string|object $type + * + * @return bool + */ public function advanceTo($to, $type) { $type = $this->inferTypeFromSource($type); + return ($this->validateFreeNumber($to, $type)); } @@ -95,16 +110,16 @@ class SequenceGenerator */ public function getLastNumberFor($type) { - $type = $this->inferTypeFromSource($type); - /** @var $em \Doctrine\ORM\EntityManager */ + /** @var $em EntityManager */ $em = $this->entityManager; $result = $em->getConnection()->executeQuery( 'SELECT MAX(number) AS count FROM digicomp_sequence_domain_model_insert WHERE type=:type', - ['type' => $type] + ['type' => $this->inferTypeFromSource($type)] ); $count = $result->fetchAll(); $count = $count[0]['count']; + return $count; } @@ -112,15 +127,18 @@ class SequenceGenerator * @param string|object $stringOrObject * * @throws Exception + * * @return string */ - protected function inferTypeFromSource($stringOrObject) { + protected function inferTypeFromSource($stringOrObject) + { if (is_object($stringOrObject)) { - $stringOrObject = $this->reflectionService->getClassNameByObject($stringOrObject); + $stringOrObject = TypeHandling::getTypeForValue($stringOrObject); } - if (!$stringOrObject) { + if (! $stringOrObject) { throw new Exception('No Type given'); } + return $stringOrObject; } } diff --git a/Configuration/Testing/Settings.yaml b/Configuration/Testing/Settings.yaml index b72d1a0..54d2680 100644 --- a/Configuration/Testing/Settings.yaml +++ b/Configuration/Testing/Settings.yaml @@ -1,6 +1,6 @@ -TYPO3: +Neos: Flow: persistence: backendOptions: driver: 'pdo_sqlite' - path: %FLOW_PATH_DATA%/Temporary/testing.db \ No newline at end of file + path: '%FLOW_PATH_DATA%/Temporary/testing.db' diff --git a/Migrations/Mysql/Version20140505093853.php b/Migrations/Mysql/Version20140505093853.php index ad24715..d003d3a 100644 --- a/Migrations/Mysql/Version20140505093853.php +++ b/Migrations/Mysql/Version20140505093853.php @@ -1,5 +1,5 @@ assertEquals(0, $number); $this->assertEquals(1, $sequenceGenerator->getNextNumberFor($sequenceGenerator)); - $pids = []; + $pIds = []; for ($i = 0; $i < 10; $i++) { - $pid = pcntl_fork(); - if ($pid) { - $pids[] = $pid; - } else { + $pId = pcntl_fork(); + if ($pId) { + $pIds[] = $pId; + } + else { for ($j = 0; $j < 10; $j++) { $sequenceGenerator->getNextNumberFor($sequenceGenerator); } @@ -33,10 +36,12 @@ class SequenceTest extends FunctionalTestCase exit; } } - foreach ($pids as $pid) { + + foreach ($pIds as $pId) { $status = 0; - pcntl_waitpid($pid, $status); + pcntl_waitpid($pId, $status); } + $this->assertEquals(101, $sequenceGenerator->getLastNumberFor($sequenceGenerator)); } diff --git a/composer.json b/composer.json index 18901b5..2064416 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "digicomp/sequence", - "type": "typo3-flow-package", + "type": "neos-package", "description": "Sequence is a very simple database agnostic but database based sequence generator", "keywords": ["flow", "neos", "doctrine", "sequence"], "authors": [