vendor/mondator/src/Mandango/Mondator/Dumper.php
author cavaliet
Fri, 24 Jan 2014 17:50:24 +0100
changeset 106 c1477ecf55e3
parent 18 c85b9d1ddf19
permissions -rw-r--r--
too much copy paste
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
/*
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * This file is part of Mandango.
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * (c) Pablo Díez <pablodip@gmail.com>
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * This source file is subject to the MIT license that is bundled
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * with this source code in the file LICENSE.
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 */
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
namespace Mandango\Mondator;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
use Mandango\Mondator\Definition\Definition as BaseDefinition;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
/**
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 * The Mondator Dumper.
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
 * @author Pablo Díez <pablodip@gmail.com>
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
 *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
 * @api
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
 */
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
class Dumper
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
{
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
    private $definition;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
    /**
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
     * Constructor.
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
     *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
     * @param Mandango\Mondator\Definition\Definition $definition The definition.
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
     *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
     * @api
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
     */
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    public function __construct(BaseDefinition $definition)
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        $this->setDefinition($definition);
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
    /**
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
     * Set the definition.
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
     *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
     * @param Mandango\Mondator\Definition\Definition $definition The definition.
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
     *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
     * @api
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
     */
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
    public function setDefinition(BaseDefinition $definition)
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
        $this->definition = $definition;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
    /**
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
     * Returns the definition
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
     *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
     * @return Mandango\Mondator\Definition\Definition The definition.
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
     *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
     * @api
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
     */
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
    public function getDefinition()
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
    {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
        return $this->definition;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    /**
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
     * Dump the definition.
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
     *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
     * @return string The PHP code of the definition.
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
     *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
     * @api
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
     */
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    public function dump()
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
        return
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
            $this->startFile().
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
            $this->addNamespace().
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
            $this->startClass().
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
            $this->addProperties().
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
            $this->addMethods().
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
            $this->endClass()
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
        ;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
    /**
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
     * Export an array.
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
     *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
     * Based on Symfony\Component\DependencyInjection\Dumper\PhpDumper::exportParameters
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
     * http://github.com/symfony/symfony
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
     *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
     * @param array $array  The array.
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
     * @param int   $indent The indent.
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
     *
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
     * @return string The array exported.
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
     */
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
    static public function exportArray(array $array, $indent)
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
        $code = array();
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
        foreach ($array as $key => $value) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
            if (is_array($value)) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
                $value = self::exportArray($value, $indent + 4);
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
            } else {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
                $value = null === $value ? 'null' : var_export($value, true);
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
            }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
            $code[] = sprintf('%s%s => %s,', str_repeat(' ', $indent), var_export($key, true), $value);
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
        }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
        return sprintf("array(\n%s\n%s)", implode("\n", $code), str_repeat(' ', $indent - 4));
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
    }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    private function startFile()
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
    {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
        return <<<EOF
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
<?php
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
EOF;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
    }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
    private function addNamespace()
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
    {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
        if (!$namespace = $this->definition->getNamespace()) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
            return '';
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
        }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
        return <<<EOF
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
namespace $namespace;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
EOF;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
    }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
    private function startClass()
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
    {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
        $code = "\n";
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
        // doc comment
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
        if ($docComment = $this->definition->getDocComment()) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
            $code .= $docComment."\n";
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
        }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
        /*
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
         * declaration
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
         */
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
        $declaration = '';
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
        // abstract
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
        if ($this->definition->isAbstract()) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
            $declaration .= 'abstract ';
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
        }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
        // class
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
        $declaration .= 'class '.$this->definition->getClassName();
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
        // parent class
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
        if ($parentClass = $this->definition->getParentClass()) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
            $declaration .= ' extends '.$parentClass;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
        }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
        // interfaces
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
        if ($interfaces = $this->definition->getInterfaces()) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
            $declaration .= ' implements '.implode(', ', $interfaces);
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
        }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
        $code .= <<<EOF
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
$declaration
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
{
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
EOF;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
        return $code;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
    }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
    private function addProperties()
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
    {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
        $code = '';
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
        $properties = $this->definition->getProperties();
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
        foreach ($properties as $property) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
            $code .= "\n";
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
            if ($docComment = $property->getDocComment()) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
                $code .= $docComment."\n";
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
            }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
            $isStatic = $property->isStatic() ? 'static ' : '';
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
            $value = $property->getValue();
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
            if (null === $value) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
                $code .= <<<EOF
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
    $isStatic{$property->getVisibility()} \${$property->getName()};
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
EOF;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
            } else {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
                $value = is_array($property->getValue()) ? self::exportArray($property->getValue(), 8) : var_export($property->getValue(), true);
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
                $code .= <<<EOF
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
    $isStatic{$property->getVisibility()} \${$property->getName()} = $value;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
EOF;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
            }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
        }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
        if ($properties) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
            $code .= "\n";
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
        }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
        return $code;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
    }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
    private function addMethods()
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
    {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
        $code = '';
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
        foreach ($this->definition->getMethods() as $method) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
            $code .= "\n";
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
            // doc comment
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
            if ($docComment = $method->getDocComment()) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
                $code .= $docComment."\n";
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
            }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
            // isFinal
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
            $isFinal = $method->isFinal() ? 'final ' : '';
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
            // isStatic
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
            $isStatic = $method->isStatic() ? 'static ' : '';
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
            // abstract
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
            if ($method->isAbstract()) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
                $code .= <<<EOF
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
    abstract $isStatic{$method->getVisibility()} function {$method->getName()}({$method->getArguments()});
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
EOF;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
            } else {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
                $methodCode = trim($method->getCode());
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
                if ($methodCode) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
                    $methodCode = '    '.$methodCode."\n    ";
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
                }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
                $code .= <<<EOF
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
    $isFinal$isStatic{$method->getVisibility()} function {$method->getName()}({$method->getArguments()})
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
    {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
    $methodCode}
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
EOF;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
            }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
            $code .= "\n";
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
        }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
        return $code;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
    }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
    private function endClass()
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
    {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
        $code = '';
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
        if (!$this->definition->getProperties() && !$this->definition->getMethods()) {
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
            $code .= "\n";
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
        }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
        $code .= <<<EOF
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
}
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
EOF;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
        return $code;
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
    }
c85b9d1ddf19 first implementation of dynamic fields
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
}