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 }
|