annotate vendor/symfony/translation/Catalogue/AbstractOperation.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the Symfony package.
Chris@0 5 *
Chris@0 6 * (c) Fabien Potencier <fabien@symfony.com>
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Symfony\Component\Translation\Catalogue;
Chris@0 13
Chris@17 14 use Symfony\Component\Translation\Exception\InvalidArgumentException;
Chris@17 15 use Symfony\Component\Translation\Exception\LogicException;
Chris@0 16 use Symfony\Component\Translation\MessageCatalogue;
Chris@0 17 use Symfony\Component\Translation\MessageCatalogueInterface;
Chris@0 18
Chris@0 19 /**
Chris@0 20 * Base catalogues binary operation class.
Chris@0 21 *
Chris@0 22 * A catalogue binary operation performs operation on
Chris@0 23 * source (the left argument) and target (the right argument) catalogues.
Chris@0 24 *
Chris@0 25 * @author Jean-François Simon <contact@jfsimon.fr>
Chris@0 26 */
Chris@0 27 abstract class AbstractOperation implements OperationInterface
Chris@0 28 {
Chris@0 29 protected $source;
Chris@0 30 protected $target;
Chris@0 31 protected $result;
Chris@0 32
Chris@0 33 /**
Chris@17 34 * @var array|null The domains affected by this operation
Chris@0 35 */
Chris@0 36 private $domains;
Chris@0 37
Chris@0 38 /**
Chris@0 39 * This array stores 'all', 'new' and 'obsolete' messages for all valid domains.
Chris@0 40 *
Chris@0 41 * The data structure of this array is as follows:
Chris@17 42 *
Chris@17 43 * [
Chris@17 44 * 'domain 1' => [
Chris@17 45 * 'all' => [...],
Chris@17 46 * 'new' => [...],
Chris@17 47 * 'obsolete' => [...]
Chris@17 48 * ],
Chris@17 49 * 'domain 2' => [
Chris@17 50 * 'all' => [...],
Chris@17 51 * 'new' => [...],
Chris@17 52 * 'obsolete' => [...]
Chris@17 53 * ],
Chris@17 54 * ...
Chris@17 55 * ]
Chris@0 56 *
Chris@0 57 * @var array The array that stores 'all', 'new' and 'obsolete' messages
Chris@0 58 */
Chris@0 59 protected $messages;
Chris@0 60
Chris@0 61 /**
Chris@0 62 * @throws LogicException
Chris@0 63 */
Chris@0 64 public function __construct(MessageCatalogueInterface $source, MessageCatalogueInterface $target)
Chris@0 65 {
Chris@0 66 if ($source->getLocale() !== $target->getLocale()) {
Chris@0 67 throw new LogicException('Operated catalogues must belong to the same locale.');
Chris@0 68 }
Chris@0 69
Chris@0 70 $this->source = $source;
Chris@0 71 $this->target = $target;
Chris@0 72 $this->result = new MessageCatalogue($source->getLocale());
Chris@17 73 $this->messages = [];
Chris@0 74 }
Chris@0 75
Chris@0 76 /**
Chris@0 77 * {@inheritdoc}
Chris@0 78 */
Chris@0 79 public function getDomains()
Chris@0 80 {
Chris@0 81 if (null === $this->domains) {
Chris@0 82 $this->domains = array_values(array_unique(array_merge($this->source->getDomains(), $this->target->getDomains())));
Chris@0 83 }
Chris@0 84
Chris@0 85 return $this->domains;
Chris@0 86 }
Chris@0 87
Chris@0 88 /**
Chris@0 89 * {@inheritdoc}
Chris@0 90 */
Chris@0 91 public function getMessages($domain)
Chris@0 92 {
Chris@17 93 if (!\in_array($domain, $this->getDomains())) {
Chris@0 94 throw new InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
Chris@0 95 }
Chris@0 96
Chris@0 97 if (!isset($this->messages[$domain]['all'])) {
Chris@0 98 $this->processDomain($domain);
Chris@0 99 }
Chris@0 100
Chris@0 101 return $this->messages[$domain]['all'];
Chris@0 102 }
Chris@0 103
Chris@0 104 /**
Chris@0 105 * {@inheritdoc}
Chris@0 106 */
Chris@0 107 public function getNewMessages($domain)
Chris@0 108 {
Chris@17 109 if (!\in_array($domain, $this->getDomains())) {
Chris@0 110 throw new InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
Chris@0 111 }
Chris@0 112
Chris@0 113 if (!isset($this->messages[$domain]['new'])) {
Chris@0 114 $this->processDomain($domain);
Chris@0 115 }
Chris@0 116
Chris@0 117 return $this->messages[$domain]['new'];
Chris@0 118 }
Chris@0 119
Chris@0 120 /**
Chris@0 121 * {@inheritdoc}
Chris@0 122 */
Chris@0 123 public function getObsoleteMessages($domain)
Chris@0 124 {
Chris@17 125 if (!\in_array($domain, $this->getDomains())) {
Chris@0 126 throw new InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
Chris@0 127 }
Chris@0 128
Chris@0 129 if (!isset($this->messages[$domain]['obsolete'])) {
Chris@0 130 $this->processDomain($domain);
Chris@0 131 }
Chris@0 132
Chris@0 133 return $this->messages[$domain]['obsolete'];
Chris@0 134 }
Chris@0 135
Chris@0 136 /**
Chris@0 137 * {@inheritdoc}
Chris@0 138 */
Chris@0 139 public function getResult()
Chris@0 140 {
Chris@0 141 foreach ($this->getDomains() as $domain) {
Chris@0 142 if (!isset($this->messages[$domain])) {
Chris@0 143 $this->processDomain($domain);
Chris@0 144 }
Chris@0 145 }
Chris@0 146
Chris@0 147 return $this->result;
Chris@0 148 }
Chris@0 149
Chris@0 150 /**
Chris@0 151 * Performs operation on source and target catalogues for the given domain and
Chris@0 152 * stores the results.
Chris@0 153 *
Chris@0 154 * @param string $domain The domain which the operation will be performed for
Chris@0 155 */
Chris@0 156 abstract protected function processDomain($domain);
Chris@0 157 }