123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <?php
- /*
- * 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\Version;
- use PharIo\Version\Exception as VersionException;
- use PharIo\Version\VersionConstraintParser;
- class ManifestDocumentMapper {
- /**
- * @param ManifestDocument $document
- *
- * @returns Manifest
- *
- * @throws ManifestDocumentMapperException
- */
- public function map(ManifestDocument $document) {
- 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(), $e->getCode(), $e);
- } catch (Exception $e) {
- throw new ManifestDocumentMapperException($e->getMessage(), $e->getCode(), $e);
- }
- }
- /**
- * @param ContainsElement $contains
- *
- * @return Type
- *
- * @throws ManifestDocumentMapperException
- */
- private function mapType(ContainsElement $contains) {
- 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())
- );
- }
- /**
- * @param CopyrightElement $copyright
- *
- * @return CopyrightInformation
- *
- * @throws InvalidUrlException
- * @throws InvalidEmailException
- */
- private function mapCopyright(CopyrightElement $copyright) {
- $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
- );
- }
- /**
- * @param RequiresElement $requires
- *
- * @return RequirementCollection
- *
- * @throws ManifestDocumentMapperException
- */
- private function mapRequirements(RequiresElement $requires) {
- $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()),
- $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;
- }
- /**
- * @param ManifestDocument $document
- *
- * @return BundledComponentCollection
- */
- private function mapBundledComponents(ManifestDocument $document) {
- $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;
- }
- /**
- * @param ExtensionElement $extension
- *
- * @return Extension
- *
- * @throws ManifestDocumentMapperException
- */
- private function mapExtension(ExtensionElement $extension) {
- try {
- $parser = new VersionConstraintParser;
- $versionConstraint = $parser->parse($extension->getCompatible());
- return Type::extension(
- new ApplicationName($extension->getFor()),
- $versionConstraint
- );
- } catch (VersionException $e) {
- throw new ManifestDocumentMapperException(
- sprintf('Unsupported version constraint - %s', $e->getMessage()),
- $e->getCode(),
- $e
- );
- }
- }
- }
|