annotate vendor/phar-io/manifest/src/ManifestDocumentMapper.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents 5311817fb629
children
rev   line source
Chris@2 1 <?php
Chris@2 2 /*
Chris@2 3 * This file is part of PharIo\Manifest.
Chris@2 4 *
Chris@2 5 * (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
Chris@2 6 *
Chris@2 7 * For the full copyright and license information, please view the LICENSE
Chris@2 8 * file that was distributed with this source code.
Chris@2 9 */
Chris@2 10
Chris@2 11 namespace PharIo\Manifest;
Chris@2 12
Chris@2 13 use PharIo\Version\Version;
Chris@2 14 use PharIo\Version\Exception as VersionException;
Chris@2 15 use PharIo\Version\VersionConstraintParser;
Chris@2 16
Chris@2 17 class ManifestDocumentMapper {
Chris@2 18 /**
Chris@2 19 * @param ManifestDocument $document
Chris@2 20 *
Chris@2 21 * @returns Manifest
Chris@2 22 *
Chris@2 23 * @throws ManifestDocumentMapperException
Chris@2 24 */
Chris@2 25 public function map(ManifestDocument $document) {
Chris@2 26 try {
Chris@2 27 $contains = $document->getContainsElement();
Chris@2 28 $type = $this->mapType($contains);
Chris@2 29 $copyright = $this->mapCopyright($document->getCopyrightElement());
Chris@2 30 $requirements = $this->mapRequirements($document->getRequiresElement());
Chris@2 31 $bundledComponents = $this->mapBundledComponents($document);
Chris@2 32
Chris@2 33 return new Manifest(
Chris@2 34 new ApplicationName($contains->getName()),
Chris@2 35 new Version($contains->getVersion()),
Chris@2 36 $type,
Chris@2 37 $copyright,
Chris@2 38 $requirements,
Chris@2 39 $bundledComponents
Chris@2 40 );
Chris@2 41 } catch (VersionException $e) {
Chris@2 42 throw new ManifestDocumentMapperException($e->getMessage(), $e->getCode(), $e);
Chris@2 43 } catch (Exception $e) {
Chris@2 44 throw new ManifestDocumentMapperException($e->getMessage(), $e->getCode(), $e);
Chris@2 45 }
Chris@2 46 }
Chris@2 47
Chris@2 48 /**
Chris@2 49 * @param ContainsElement $contains
Chris@2 50 *
Chris@2 51 * @return Type
Chris@2 52 *
Chris@2 53 * @throws ManifestDocumentMapperException
Chris@2 54 */
Chris@2 55 private function mapType(ContainsElement $contains) {
Chris@2 56 switch ($contains->getType()) {
Chris@2 57 case 'application':
Chris@2 58 return Type::application();
Chris@2 59 case 'library':
Chris@2 60 return Type::library();
Chris@2 61 case 'extension':
Chris@2 62 return $this->mapExtension($contains->getExtensionElement());
Chris@2 63 }
Chris@2 64
Chris@2 65 throw new ManifestDocumentMapperException(
Chris@2 66 sprintf('Unsupported type %s', $contains->getType())
Chris@2 67 );
Chris@2 68 }
Chris@2 69
Chris@2 70 /**
Chris@2 71 * @param CopyrightElement $copyright
Chris@2 72 *
Chris@2 73 * @return CopyrightInformation
Chris@2 74 *
Chris@2 75 * @throws InvalidUrlException
Chris@2 76 * @throws InvalidEmailException
Chris@2 77 */
Chris@2 78 private function mapCopyright(CopyrightElement $copyright) {
Chris@2 79 $authors = new AuthorCollection();
Chris@2 80
Chris@2 81 foreach($copyright->getAuthorElements() as $authorElement) {
Chris@2 82 $authors->add(
Chris@2 83 new Author(
Chris@2 84 $authorElement->getName(),
Chris@2 85 new Email($authorElement->getEmail())
Chris@2 86 )
Chris@2 87 );
Chris@2 88 }
Chris@2 89
Chris@2 90 $licenseElement = $copyright->getLicenseElement();
Chris@2 91 $license = new License(
Chris@2 92 $licenseElement->getType(),
Chris@2 93 new Url($licenseElement->getUrl())
Chris@2 94 );
Chris@2 95
Chris@2 96 return new CopyrightInformation(
Chris@2 97 $authors,
Chris@2 98 $license
Chris@2 99 );
Chris@2 100 }
Chris@2 101
Chris@2 102 /**
Chris@2 103 * @param RequiresElement $requires
Chris@2 104 *
Chris@2 105 * @return RequirementCollection
Chris@2 106 *
Chris@2 107 * @throws ManifestDocumentMapperException
Chris@2 108 */
Chris@2 109 private function mapRequirements(RequiresElement $requires) {
Chris@2 110 $collection = new RequirementCollection();
Chris@2 111 $phpElement = $requires->getPHPElement();
Chris@2 112 $parser = new VersionConstraintParser;
Chris@2 113
Chris@2 114 try {
Chris@2 115 $versionConstraint = $parser->parse($phpElement->getVersion());
Chris@2 116 } catch (VersionException $e) {
Chris@2 117 throw new ManifestDocumentMapperException(
Chris@2 118 sprintf('Unsupported version constraint - %s', $e->getMessage()),
Chris@2 119 $e->getCode(),
Chris@2 120 $e
Chris@2 121 );
Chris@2 122 }
Chris@2 123
Chris@2 124 $collection->add(
Chris@2 125 new PhpVersionRequirement(
Chris@2 126 $versionConstraint
Chris@2 127 )
Chris@2 128 );
Chris@2 129
Chris@2 130 if (!$phpElement->hasExtElements()) {
Chris@2 131 return $collection;
Chris@2 132 }
Chris@2 133
Chris@2 134 foreach($phpElement->getExtElements() as $extElement) {
Chris@2 135 $collection->add(
Chris@2 136 new PhpExtensionRequirement($extElement->getName())
Chris@2 137 );
Chris@2 138 }
Chris@2 139
Chris@2 140 return $collection;
Chris@2 141 }
Chris@2 142
Chris@2 143 /**
Chris@2 144 * @param ManifestDocument $document
Chris@2 145 *
Chris@2 146 * @return BundledComponentCollection
Chris@2 147 */
Chris@2 148 private function mapBundledComponents(ManifestDocument $document) {
Chris@2 149 $collection = new BundledComponentCollection();
Chris@2 150
Chris@2 151 if (!$document->hasBundlesElement()) {
Chris@2 152 return $collection;
Chris@2 153 }
Chris@2 154
Chris@2 155 foreach($document->getBundlesElement()->getComponentElements() as $componentElement) {
Chris@2 156 $collection->add(
Chris@2 157 new BundledComponent(
Chris@2 158 $componentElement->getName(),
Chris@2 159 new Version(
Chris@2 160 $componentElement->getVersion()
Chris@2 161 )
Chris@2 162 )
Chris@2 163 );
Chris@2 164 }
Chris@2 165
Chris@2 166 return $collection;
Chris@2 167 }
Chris@2 168
Chris@2 169 /**
Chris@2 170 * @param ExtensionElement $extension
Chris@2 171 *
Chris@2 172 * @return Extension
Chris@2 173 *
Chris@2 174 * @throws ManifestDocumentMapperException
Chris@2 175 */
Chris@2 176 private function mapExtension(ExtensionElement $extension) {
Chris@2 177 try {
Chris@2 178 $parser = new VersionConstraintParser;
Chris@2 179 $versionConstraint = $parser->parse($extension->getCompatible());
Chris@2 180
Chris@2 181 return Type::extension(
Chris@2 182 new ApplicationName($extension->getFor()),
Chris@2 183 $versionConstraint
Chris@2 184 );
Chris@2 185 } catch (VersionException $e) {
Chris@2 186 throw new ManifestDocumentMapperException(
Chris@2 187 sprintf('Unsupported version constraint - %s', $e->getMessage()),
Chris@2 188 $e->getCode(),
Chris@2 189 $e
Chris@2 190 );
Chris@2 191 }
Chris@2 192 }
Chris@2 193 }