Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php declare(strict_types = 1);/** This file is part of PharIo\Manifest.** (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>** For the full copyright and license information, please view the LICENSE* file that was distributed with this source code.*/namespace PharIo\Manifest;use PharIo\Version\Exception as VersionException;use PharIo\Version\Version;use PharIo\Version\VersionConstraintParser;class ManifestDocumentMapper {public function map(ManifestDocument $document): Manifest {try {$contains = $document->getContainsElement();$type = $this->mapType($contains);$copyright = $this->mapCopyright($document->getCopyrightElement());$requirements = $this->mapRequirements($document->getRequiresElement());$bundledComponents = $this->mapBundledComponents($document);return new Manifest(new ApplicationName($contains->getName()),new Version($contains->getVersion()),$type,$copyright,$requirements,$bundledComponents);} catch (VersionException $e) {throw new ManifestDocumentMapperException($e->getMessage(), (int)$e->getCode(), $e);} catch (Exception $e) {throw new ManifestDocumentMapperException($e->getMessage(), (int)$e->getCode(), $e);}}private function mapType(ContainsElement $contains): Type {switch ($contains->getType()) {case 'application':return Type::application();case 'library':return Type::library();case 'extension':return $this->mapExtension($contains->getExtensionElement());}throw new ManifestDocumentMapperException(\sprintf('Unsupported type %s', $contains->getType()));}private function mapCopyright(CopyrightElement $copyright): CopyrightInformation {$authors = new AuthorCollection();foreach ($copyright->getAuthorElements() as $authorElement) {$authors->add(new Author($authorElement->getName(),new Email($authorElement->getEmail())));}$licenseElement = $copyright->getLicenseElement();$license = new License($licenseElement->getType(),new Url($licenseElement->getUrl()));return new CopyrightInformation($authors,$license);}private function mapRequirements(RequiresElement $requires): RequirementCollection {$collection = new RequirementCollection();$phpElement = $requires->getPHPElement();$parser = new VersionConstraintParser;try {$versionConstraint = $parser->parse($phpElement->getVersion());} catch (VersionException $e) {throw new ManifestDocumentMapperException(\sprintf('Unsupported version constraint - %s', $e->getMessage()),(int)$e->getCode(),$e);}$collection->add(new PhpVersionRequirement($versionConstraint));if (!$phpElement->hasExtElements()) {return $collection;}foreach ($phpElement->getExtElements() as $extElement) {$collection->add(new PhpExtensionRequirement($extElement->getName()));}return $collection;}private function mapBundledComponents(ManifestDocument $document): BundledComponentCollection {$collection = new BundledComponentCollection();if (!$document->hasBundlesElement()) {return $collection;}foreach ($document->getBundlesElement()->getComponentElements() as $componentElement) {$collection->add(new BundledComponent($componentElement->getName(),new Version($componentElement->getVersion())));}return $collection;}private function mapExtension(ExtensionElement $extension): Extension {try {$versionConstraint = (new VersionConstraintParser)->parse($extension->getCompatible());return Type::extension(new ApplicationName($extension->getFor()),$versionConstraint);} catch (VersionException $e) {throw new ManifestDocumentMapperException(\sprintf('Unsupported version constraint - %s', $e->getMessage()),(int)$e->getCode(),$e);}}}