Chris@14: , Sebastian Heuer , Sebastian Bergmann Chris@14: * Chris@14: * For the full copyright and license information, please view the LICENSE Chris@14: * file that was distributed with this source code. Chris@14: */ Chris@14: Chris@14: namespace PharIo\Manifest; Chris@14: Chris@14: use DOMElement; Chris@14: use DOMNodeList; Chris@14: Chris@14: class ManifestElement { Chris@14: const XMLNS = 'https://phar.io/xml/manifest/1.0'; Chris@14: Chris@14: /** Chris@14: * @var DOMElement Chris@14: */ Chris@14: private $element; Chris@14: Chris@14: /** Chris@14: * ContainsElement constructor. Chris@14: * Chris@14: * @param DOMElement $element Chris@14: */ Chris@14: public function __construct(DOMElement $element) { Chris@14: $this->element = $element; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @param string $name Chris@14: * Chris@14: * @return string Chris@14: * Chris@14: * @throws ManifestElementException Chris@14: */ Chris@14: protected function getAttributeValue($name) { Chris@14: if (!$this->element->hasAttribute($name)) { Chris@14: throw new ManifestElementException( Chris@14: sprintf( Chris@14: 'Attribute %s not set on element %s', Chris@14: $name, Chris@14: $this->element->localName Chris@14: ) Chris@14: ); Chris@14: } Chris@14: Chris@14: return $this->element->getAttribute($name); Chris@14: } Chris@14: Chris@14: /** Chris@14: * @param $elementName Chris@14: * Chris@14: * @return DOMElement Chris@14: * Chris@14: * @throws ManifestElementException Chris@14: */ Chris@14: protected function getChildByName($elementName) { Chris@14: $element = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->item(0); Chris@14: Chris@14: if (!$element instanceof DOMElement) { Chris@14: throw new ManifestElementException( Chris@14: sprintf('Element %s missing', $elementName) Chris@14: ); Chris@14: } Chris@14: Chris@14: return $element; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @param $elementName Chris@14: * Chris@14: * @return DOMNodeList Chris@14: * Chris@14: * @throws ManifestElementException Chris@14: */ Chris@14: protected function getChildrenByName($elementName) { Chris@14: $elementList = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName); Chris@14: Chris@14: if ($elementList->length === 0) { Chris@14: throw new ManifestElementException( Chris@14: sprintf('Element(s) %s missing', $elementName) Chris@14: ); Chris@14: } Chris@14: Chris@14: return $elementList; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @param string $elementName Chris@14: * Chris@14: * @return bool Chris@14: */ Chris@14: protected function hasChild($elementName) { Chris@14: return $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->length !== 0; Chris@14: } Chris@14: }