HelpDocument.php 1.65 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
<?php
namespace Consolidation\AnnotatedCommand\Help;

use Consolidation\OutputFormatters\StructuredData\Xml\DomDataInterface;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Descriptor\XmlDescriptor;

class HelpDocument implements DomDataInterface
{
    /** var Command */
    protected $command;

    /** var \DOMDocument */
    protected $dom;

    /**
     * Create a help document from a Symfony Console command
     */
    public function __construct(Command $command)
    {
        $dom = $this->generateBaseHelpDom($command);
        $dom = $this->alterHelpDocument($command, $dom);

        $this->command = $command;
        $this->dom = $dom;
    }

    /**
     * Convert data into a \DomDocument.
     *
     * @return \DomDocument
     */
    public function getDomData()
    {
        return $this->dom;
    }

    /**
     * Create the base help DOM prior to alteration by the Command object.
     * @param Command $command
     * @return \DomDocument
     */
    protected function generateBaseHelpDom(Command $command)
    {
        // Use Symfony to generate xml text. If other formats are
        // requested, convert from xml to the desired form.
        $descriptor = new XmlDescriptor();
        return $descriptor->getCommandDocument($command);
    }

    /**
     * Alter the DOM document per the command object
     * @param Command $command
     * @param \DomDocument $dom
     * @return \DomDocument
     */
    protected function alterHelpDocument(Command $command, \DomDocument $dom)
    {
        if ($command instanceof HelpDocumentAlter) {
            $dom = $command->helpAlter($dom);
        }
        return $dom;
    }
}