annotate vendor/consolidation/output-formatters/src/Formatters/XmlFormatter.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 7a779792577d
children
rev   line source
Chris@0 1 <?php
Chris@0 2 namespace Consolidation\OutputFormatters\Formatters;
Chris@0 3
Chris@0 4 use Symfony\Component\Console\Output\OutputInterface;
Chris@0 5 use Symfony\Component\Console\Helper\Table;
Chris@0 6 use Symfony\Component\Console\Helper\TableStyle;
Chris@0 7
Chris@0 8 use Consolidation\OutputFormatters\Validate\ValidDataTypesInterface;
Chris@0 9 use Consolidation\OutputFormatters\Options\FormatterOptions;
Chris@0 10 use Consolidation\OutputFormatters\Validate\ValidDataTypesTrait;
Chris@0 11 use Consolidation\OutputFormatters\StructuredData\TableDataInterface;
Chris@0 12 use Consolidation\OutputFormatters\Transformations\ReorderFields;
Chris@0 13 use Consolidation\OutputFormatters\Exception\IncompatibleDataException;
Chris@0 14 use Consolidation\OutputFormatters\StructuredData\Xml\DomDataInterface;
Chris@0 15
Chris@0 16 /**
Chris@0 17 * Display a table of data with the Symfony Table class.
Chris@0 18 *
Chris@0 19 * This formatter takes data of either the RowsOfFields or
Chris@0 20 * PropertyList data type. Tables can be rendered with the
Chris@0 21 * rows running either vertically (the normal orientation) or
Chris@0 22 * horizontally. By default, associative lists will be displayed
Chris@0 23 * as two columns, with the key in the first column and the
Chris@0 24 * value in the second column.
Chris@0 25 */
Chris@0 26 class XmlFormatter implements FormatterInterface, ValidDataTypesInterface
Chris@0 27 {
Chris@0 28 use ValidDataTypesTrait;
Chris@0 29
Chris@0 30 public function __construct()
Chris@0 31 {
Chris@0 32 }
Chris@0 33
Chris@0 34 public function validDataTypes()
Chris@0 35 {
Chris@0 36 return
Chris@0 37 [
Chris@0 38 new \ReflectionClass('\DOMDocument'),
Chris@0 39 new \ReflectionClass('\ArrayObject'),
Chris@0 40 ];
Chris@0 41 }
Chris@0 42
Chris@0 43 /**
Chris@0 44 * @inheritdoc
Chris@0 45 */
Chris@0 46 public function validate($structuredData)
Chris@0 47 {
Chris@0 48 if ($structuredData instanceof \DOMDocument) {
Chris@0 49 return $structuredData;
Chris@0 50 }
Chris@0 51 if ($structuredData instanceof DomDataInterface) {
Chris@0 52 return $structuredData->getDomData();
Chris@0 53 }
Chris@12 54 if ($structuredData instanceof \ArrayObject) {
Chris@12 55 return $structuredData->getArrayCopy();
Chris@12 56 }
Chris@0 57 if (!is_array($structuredData)) {
Chris@0 58 throw new IncompatibleDataException(
Chris@0 59 $this,
Chris@0 60 $structuredData,
Chris@0 61 $this->validDataTypes()
Chris@0 62 );
Chris@0 63 }
Chris@0 64 return $structuredData;
Chris@0 65 }
Chris@0 66
Chris@0 67 /**
Chris@0 68 * @inheritdoc
Chris@0 69 */
Chris@0 70 public function write(OutputInterface $output, $dom, FormatterOptions $options)
Chris@0 71 {
Chris@0 72 if (is_array($dom)) {
Chris@0 73 $schema = $options->getXmlSchema();
Chris@0 74 $dom = $schema->arrayToXML($dom);
Chris@0 75 }
Chris@0 76 $dom->formatOutput = true;
Chris@0 77 $output->writeln($dom->saveXML());
Chris@0 78 }
Chris@0 79 }