vendor/doctrine/lib/Doctrine/ORM/Tools/EntityGenerator.php
author cavaliet
Mon, 20 Feb 2012 11:55:52 +0100
changeset 69 7c3b7896e4d2
parent 0 7f95f8617b0b
permissions -rwxr-xr-x
merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * This software consists of voluntary contributions made by many individuals
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * and is licensed under the LGPL. For more information, see
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 * <http://www.doctrine-project.org>.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
namespace Doctrine\ORM\Tools;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
use Doctrine\ORM\Mapping\ClassMetadataInfo,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
    Doctrine\ORM\Mapping\AssociationMapping,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
    Doctrine\Common\Util\Inflector;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
/**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
 * Generic class used to generate PHP5 entity classes from ClassMetadataInfo instances
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
 *     [php]
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
 *     $classes = $em->getClassMetadataFactory()->getAllMetadata();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
 *     $generator = new \Doctrine\ORM\Tools\EntityGenerator();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
 *     $generator->setGenerateAnnotations(true);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
 *     $generator->setGenerateStubMethods(true);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
 *     $generator->setRegenerateEntityIfExists(false);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
 *     $generator->setUpdateEntityIfExists(true);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
 *     $generator->generate($classes, '/path/to/generate/entities');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
 * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
 * @link    www.doctrine-project.org
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
 * @since   2.0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
 * @version $Revision$
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
 * @author  Benjamin Eberlei <kontakt@beberlei.de>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
 * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
 * @author  Jonathan Wage <jonwage@gmail.com>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
 * @author  Roman Borschel <roman@code-factory.org>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
class EntityGenerator
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
     * @var bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
    private $_backupExisting = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
    /** The extension to use for written php files */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    private $_extension = '.php';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
    /** Whether or not the current ClassMetadataInfo instance is new or old */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
    private $_isNew = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    private $_staticReflection = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    /** Number of spaces to use for indention in generated code */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    private $_numSpaces = 4;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    /** The actual spaces to use for indention */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    private $_spaces = '    ';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    /** The class all generated entities should extend */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    private $_classToExtend;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
    /** Whether or not to generation annotations */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
    private $_generateAnnotations = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
     * @var string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    private $_annotationsPrefix = '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    /** Whether or not to generated sub methods */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
    private $_generateEntityStubMethods = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    /** Whether or not to update the entity class if it exists already */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    private $_updateEntityIfExists = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
    /** Whether or not to re-generate entity class if it exists already */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
    private $_regenerateEntityIfExists = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
    private static $_classTemplate =
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
'<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
<namespace>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
use Doctrine\ORM\Mapping as ORM;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
<entityAnnotation>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
<entityClassName>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
<entityBody>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
}';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
    private static $_getMethodTemplate =
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
'/**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
 * <description>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
 * @return <variableType>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
public function <methodName>()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
<spaces>return $this-><fieldName>;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
}';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
    private static $_setMethodTemplate =
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
'/**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
 * <description>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
 * @param <variableType>$<variableName>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
public function <methodName>(<methodTypeHint>$<variableName>)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
<spaces>$this-><fieldName> = $<variableName>;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
}';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
    private static $_addMethodTemplate =
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
'/**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
 * <description>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
 * @param <variableType>$<variableName>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
public function <methodName>(<methodTypeHint>$<variableName>)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
<spaces>$this-><fieldName>[] = $<variableName>;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
}';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
    private static $_lifecycleCallbackMethodTemplate =
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
'/**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
 * @<name>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
public function <methodName>()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
<spaces>// Add your code here
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
}';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
    private static $_constructorMethodTemplate =
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
'public function __construct()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
<spaces><collections>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
    public function __construct()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
        if (version_compare(\Doctrine\Common\Version::VERSION, '3.0.0-DEV', '>=')) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
            $this->_annotationsPrefix = 'ORM\\';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
     * Generate and write entity classes for the given array of ClassMetadataInfo instances
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
     * @param array $metadatas
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
     * @param string $outputDirectory
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
    public function generate(array $metadatas, $outputDirectory)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
        foreach ($metadatas as $metadata) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
            $this->writeEntityClass($metadata, $outputDirectory);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
     * Generated and write entity class to disk for the given ClassMetadataInfo instance
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
     * @param ClassMetadataInfo $metadata
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
     * @param string $outputDirectory
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
    public function writeEntityClass(ClassMetadataInfo $metadata, $outputDirectory)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
        $path = $outputDirectory . '/' . str_replace('\\', DIRECTORY_SEPARATOR, $metadata->name) . $this->_extension;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
        $dir = dirname($path);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
        if ( ! is_dir($dir)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
            mkdir($dir, 0777, true);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
        $this->_isNew = !file_exists($path) || (file_exists($path) && $this->_regenerateEntityIfExists);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
        if ( ! $this->_isNew) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
            $this->_parseTokensInEntityFile(file_get_contents($path));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
        if ($this->_backupExisting && file_exists($path)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
            $backupPath = dirname($path) . DIRECTORY_SEPARATOR . basename($path) . "~";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
            if (!copy($path, $backupPath)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
                throw new \RuntimeException("Attempt to backup overwritten entitiy file but copy operation failed.");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
        // If entity doesn't exist or we're re-generating the entities entirely
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
        if ($this->_isNew) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
            file_put_contents($path, $this->generateEntityClass($metadata));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
        // If entity exists and we're allowed to update the entity class
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
        } else if ( ! $this->_isNew && $this->_updateEntityIfExists) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
            file_put_contents($path, $this->generateUpdatedEntityClass($metadata, $path));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
     * Generate a PHP5 Doctrine 2 entity class from the given ClassMetadataInfo instance
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
     * @param ClassMetadataInfo $metadata
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
     * @return string $code
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
    public function generateEntityClass(ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
        $placeHolders = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
            '<namespace>',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
            '<entityAnnotation>',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
            '<entityClassName>',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
            '<entityBody>'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
        );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
        $replacements = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
            $this->_generateEntityNamespace($metadata),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
            $this->_generateEntityDocBlock($metadata),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
            $this->_generateEntityClassName($metadata),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
            $this->_generateEntityBody($metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
        );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
        $code = str_replace($placeHolders, $replacements, self::$_classTemplate);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
        return str_replace('<spaces>', $this->_spaces, $code);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
     * Generate the updated code for the given ClassMetadataInfo and entity at path
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
     * @param ClassMetadataInfo $metadata
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
     * @param string $path
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
     * @return string $code;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
    public function generateUpdatedEntityClass(ClassMetadataInfo $metadata, $path)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
        $currentCode = file_get_contents($path);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
        $body = $this->_generateEntityBody($metadata);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
        $body = str_replace('<spaces>', $this->_spaces, $body);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
        $last = strrpos($currentCode, '}');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
        return substr($currentCode, 0, $last) . $body . (strlen($body) > 0 ? "\n" : ''). "}";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
     * Set the number of spaces the exported class should have
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
     * @param integer $numSpaces
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
    public function setNumSpaces($numSpaces)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
        $this->_spaces = str_repeat(' ', $numSpaces);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
        $this->_numSpaces = $numSpaces;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
     * Set the extension to use when writing php files to disk
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
     * @param string $extension
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
    public function setExtension($extension)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
        $this->_extension = $extension;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
     * Set the name of the class the generated classes should extend from
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
    public function setClassToExtend($classToExtend)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
        $this->_classToExtend = $classToExtend;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
     * Set whether or not to generate annotations for the entity
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
     * @param bool $bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
    public function setGenerateAnnotations($bool)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
        $this->_generateAnnotations = $bool;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
     * Set an annotation prefix.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
     * @param string $prefix
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
    public function setAnnotationPrefix($prefix)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
        if (version_compare(\Doctrine\Common\Version::VERSION, '3.0.0-DEV', '>=')) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
            return;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
        $this->_annotationsPrefix = $prefix;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
     * Set whether or not to try and update the entity if it already exists
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
     * @param bool $bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
    public function setUpdateEntityIfExists($bool)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
        $this->_updateEntityIfExists = $bool;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
     * Set whether or not to regenerate the entity if it exists
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
     * @param bool $bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
    public function setRegenerateEntityIfExists($bool)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
        $this->_regenerateEntityIfExists = $bool;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
     * Set whether or not to generate stub methods for the entity
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
     * @param bool $bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
    public function setGenerateStubMethods($bool)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
        $this->_generateEntityStubMethods = $bool;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
     * Should an existing entity be backed up if it already exists?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
    public function setBackupExisting($bool)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
        $this->_backupExisting = $bool;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
    private function _generateEntityNamespace(ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
        if ($this->_hasNamespace($metadata)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
            return 'namespace ' . $this->_getNamespace($metadata) .';';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
    private function _generateEntityClassName(ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
        return 'class ' . $this->_getClassName($metadata) .
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
            ($this->_extendsClass() ? ' extends ' . $this->_getClassToExtendName() : null);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
    private function _generateEntityBody(ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
        $fieldMappingProperties = $this->_generateEntityFieldMappingProperties($metadata);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
        $associationMappingProperties = $this->_generateEntityAssociationMappingProperties($metadata);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
        $stubMethods = $this->_generateEntityStubMethods ? $this->_generateEntityStubMethods($metadata) : null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
        $lifecycleCallbackMethods = $this->_generateEntityLifecycleCallbackMethods($metadata);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
        $code = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
        if ($fieldMappingProperties) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
            $code[] = $fieldMappingProperties;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
        if ($associationMappingProperties) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
            $code[] = $associationMappingProperties;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
        $code[] = $this->_generateEntityConstructor($metadata);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
        if ($stubMethods) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
            $code[] = $stubMethods;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
        if ($lifecycleCallbackMethods) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
            $code[] = $lifecycleCallbackMethods;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
        return implode("\n", $code);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
    private function _generateEntityConstructor(ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
        if ($this->_hasMethod('__construct', $metadata)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
            return '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
        $collections = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
        foreach ($metadata->associationMappings AS $mapping) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
            if ($mapping['type'] & ClassMetadataInfo::TO_MANY) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
                $collections[] = '$this->'.$mapping['fieldName'].' = new \Doctrine\Common\Collections\ArrayCollection();';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
        if ($collections) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
            return $this->_prefixCodeWithSpaces(str_replace("<collections>", implode("\n", $collections), self::$_constructorMethodTemplate));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
        return '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
     * @todo this won't work if there is a namespace in brackets and a class outside of it.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
     * @param string $src
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
    private function _parseTokensInEntityFile($src)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
        $tokens = token_get_all($src);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
        $lastSeenNamespace = "";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
        $lastSeenClass = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
        $inNamespace = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
        $inClass = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
        for ($i = 0; $i < count($tokens); $i++) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
            $token = $tokens[$i];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
            if (in_array($token[0], array(T_WHITESPACE, T_COMMENT, T_DOC_COMMENT))) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
                continue;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
            if ($inNamespace) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
                if ($token[0] == T_NS_SEPARATOR || $token[0] == T_STRING) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
                    $lastSeenNamespace .= $token[1];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
                } else if (is_string($token) && in_array($token, array(';', '{'))) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
                    $inNamespace = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
            if ($inClass) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
                $inClass = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
                $lastSeenClass = $lastSeenNamespace . ($lastSeenNamespace ? '\\' : '') . $token[1];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
                $this->_staticReflection[$lastSeenClass]['properties'] = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
                $this->_staticReflection[$lastSeenClass]['methods'] = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
            if ($token[0] == T_NAMESPACE) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
                $lastSeenNamespace = "";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
                $inNamespace = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
            } else if ($token[0] == T_CLASS) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
                $inClass = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
            } else if ($token[0] == T_FUNCTION) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
                if ($tokens[$i+2][0] == T_STRING) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
                    $this->_staticReflection[$lastSeenClass]['methods'][] = $tokens[$i+2][1];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
                } else if ($tokens[$i+2] == "&" && $tokens[$i+3][0] == T_STRING) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
                    $this->_staticReflection[$lastSeenClass]['methods'][] = $tokens[$i+3][1];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
            } else if (in_array($token[0], array(T_VAR, T_PUBLIC, T_PRIVATE, T_PROTECTED)) && $tokens[$i+2][0] != T_FUNCTION) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
                $this->_staticReflection[$lastSeenClass]['properties'][] = substr($tokens[$i+2][1], 1);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
    private function _hasProperty($property, ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
        if ($this->_extendsClass()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
            // don't generate property if its already on the base class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
            $reflClass = new \ReflectionClass($this->_getClassToExtend());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
            if ($reflClass->hasProperty($property)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
                return true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
        return (
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
            isset($this->_staticReflection[$metadata->name]) &&
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
            in_array($property, $this->_staticReflection[$metadata->name]['properties'])
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
        );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
    private function _hasMethod($method, ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
        if ($this->_extendsClass()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
            // don't generate method if its already on the base class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
            $reflClass = new \ReflectionClass($this->_getClassToExtend());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
            if ($reflClass->hasMethod($method)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
                return true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
        return (
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
            isset($this->_staticReflection[$metadata->name]) &&
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
            in_array($method, $this->_staticReflection[$metadata->name]['methods'])
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
        );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
    private function _hasNamespace(ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
        return strpos($metadata->name, '\\') ? true : false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
    private function _extendsClass()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
        return $this->_classToExtend ? true : false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
    private function _getClassToExtend()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
        return $this->_classToExtend;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
    private function _getClassToExtendName()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
        $refl = new \ReflectionClass($this->_getClassToExtend());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
        return '\\' . $refl->getName();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
    private function _getClassName(ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
        return ($pos = strrpos($metadata->name, '\\'))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
            ? substr($metadata->name, $pos + 1, strlen($metadata->name)) : $metadata->name;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
    private function _getNamespace(ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
        return substr($metadata->name, 0, strrpos($metadata->name, '\\'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
    private function _generateEntityDocBlock(ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
        $lines = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
        $lines[] = '/**';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
        $lines[] = ' * '.$metadata->name;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
        if ($this->_generateAnnotations) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
            $lines[] = ' *';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
            $methods = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
                '_generateTableAnnotation',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
                '_generateInheritanceAnnotation',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
                '_generateDiscriminatorColumnAnnotation',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
                '_generateDiscriminatorMapAnnotation'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
            );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
            foreach ($methods as $method) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
                if ($code = $this->$method($metadata)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
                    $lines[] = ' * ' . $code;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
            if ($metadata->isMappedSuperclass) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
                $lines[] = ' * @' . $this->_annotationsPrefix . 'MappedSuperClass';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
            } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
                $lines[] = ' * @' . $this->_annotationsPrefix . 'Entity';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
            if ($metadata->customRepositoryClassName) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
                $lines[count($lines) - 1] .= '(repositoryClass="' . $metadata->customRepositoryClassName . '")';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
            if (isset($metadata->lifecycleCallbacks) && $metadata->lifecycleCallbacks) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
                $lines[] = ' * @' . $this->_annotationsPrefix . 'HasLifecycleCallbacks';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
        $lines[] = ' */';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
        return implode("\n", $lines);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
    private function _generateTableAnnotation($metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
        $table = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
        if ($metadata->table['name']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
            $table[] = 'name="' . $metadata->table['name'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
        return '@' . $this->_annotationsPrefix . 'Table(' . implode(', ', $table) . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
    private function _generateInheritanceAnnotation($metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
        if ($metadata->inheritanceType != ClassMetadataInfo::INHERITANCE_TYPE_NONE) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
            return '@' . $this->_annotationsPrefix . 'InheritanceType("'.$this->_getInheritanceTypeString($metadata->inheritanceType).'")';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
    private function _generateDiscriminatorColumnAnnotation($metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
        if ($metadata->inheritanceType != ClassMetadataInfo::INHERITANCE_TYPE_NONE) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
            $discrColumn = $metadata->discriminatorValue;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
            $columnDefinition = 'name="' . $discrColumn['name']
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
                . '", type="' . $discrColumn['type']
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
                . '", length=' . $discrColumn['length'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
            return '@' . $this->_annotationsPrefix . 'DiscriminatorColumn(' . $columnDefinition . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
    private function _generateDiscriminatorMapAnnotation($metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
        if ($metadata->inheritanceType != ClassMetadataInfo::INHERITANCE_TYPE_NONE) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
            $inheritanceClassMap = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
            foreach ($metadata->discriminatorMap as $type => $class) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
                $inheritanceClassMap[] .= '"' . $type . '" = "' . $class . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
            return '@' . $this->_annotationsPrefix . 'DiscriminatorMap({' . implode(', ', $inheritanceClassMap) . '})';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
    private function _generateEntityStubMethods(ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
        $methods = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
        foreach ($metadata->fieldMappings as $fieldMapping) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
            if ( ! isset($fieldMapping['id']) || ! $fieldMapping['id'] || $metadata->generatorType == ClassMetadataInfo::GENERATOR_TYPE_NONE) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
                if ($code = $this->_generateEntityStubMethod($metadata, 'set', $fieldMapping['fieldName'], $fieldMapping['type'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
                    $methods[] = $code;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
            if ($code = $this->_generateEntityStubMethod($metadata, 'get', $fieldMapping['fieldName'], $fieldMapping['type'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
                $methods[] = $code;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
        foreach ($metadata->associationMappings as $associationMapping) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
            if ($associationMapping['type'] & ClassMetadataInfo::TO_ONE) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
                if ($code = $this->_generateEntityStubMethod($metadata, 'set', $associationMapping['fieldName'], $associationMapping['targetEntity'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
                    $methods[] = $code;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
                if ($code = $this->_generateEntityStubMethod($metadata, 'get', $associationMapping['fieldName'], $associationMapping['targetEntity'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
                    $methods[] = $code;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
            } else if ($associationMapping['type'] & ClassMetadataInfo::TO_MANY) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
                if ($code = $this->_generateEntityStubMethod($metadata, 'add', $associationMapping['fieldName'], $associationMapping['targetEntity'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
                    $methods[] = $code;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
                if ($code = $this->_generateEntityStubMethod($metadata, 'get', $associationMapping['fieldName'], 'Doctrine\Common\Collections\Collection')) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
                    $methods[] = $code;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
        return implode("\n\n", $methods);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
    private function _generateEntityLifecycleCallbackMethods(ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
        if (isset($metadata->lifecycleCallbacks) && $metadata->lifecycleCallbacks) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
            $methods = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
            foreach ($metadata->lifecycleCallbacks as $name => $callbacks) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
                foreach ($callbacks as $callback) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
                    if ($code = $this->_generateLifecycleCallbackMethod($name, $callback, $metadata)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
                        $methods[] = $code;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
                    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
            return implode("\n\n", $methods);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
        return "";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
    private function _generateEntityAssociationMappingProperties(ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
        $lines = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
        foreach ($metadata->associationMappings as $associationMapping) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
            if ($this->_hasProperty($associationMapping['fieldName'], $metadata)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
                continue;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
            $lines[] = $this->_generateAssociationMappingPropertyDocBlock($associationMapping, $metadata);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
            $lines[] = $this->_spaces . 'private $' . $associationMapping['fieldName']
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
                     . ($associationMapping['type'] == 'manyToMany' ? ' = array()' : null) . ";\n";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
        return implode("\n", $lines);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
    private function _generateEntityFieldMappingProperties(ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
        $lines = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
        foreach ($metadata->fieldMappings as $fieldMapping) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
            if ($this->_hasProperty($fieldMapping['fieldName'], $metadata) ||
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
                $metadata->isInheritedField($fieldMapping['fieldName'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
                continue;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
            $lines[] = $this->_generateFieldMappingPropertyDocBlock($fieldMapping, $metadata);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
            $lines[] = $this->_spaces . 'private $' . $fieldMapping['fieldName']
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
                     . (isset($fieldMapping['default']) ? ' = ' . var_export($fieldMapping['default'], true) : null) . ";\n";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
        return implode("\n", $lines);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
    private function _generateEntityStubMethod(ClassMetadataInfo $metadata, $type, $fieldName, $typeHint = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
        if ($type == "add") {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
            $addMethod = explode("\\", $typeHint);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
            $addMethod = end($addMethod);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
            $methodName = $type . $addMethod;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
            $methodName = $type . Inflector::classify($fieldName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
        if ($this->_hasMethod($methodName, $metadata)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
            return;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
        $this->_staticReflection[$metadata->name]['methods'][] = $methodName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
        $var = sprintf('_%sMethodTemplate', $type);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
        $template = self::$$var;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
        $variableType = $typeHint ? $typeHint . ' ' : null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
        $types = \Doctrine\DBAL\Types\Type::getTypesMap();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
        $methodTypeHint = $typeHint && ! isset($types[$typeHint]) ? '\\' . $typeHint . ' ' : null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
        $replacements = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
          '<description>'       => ucfirst($type) . ' ' . $fieldName,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
          '<methodTypeHint>'    => $methodTypeHint,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
          '<variableType>'      => $variableType,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
          '<variableName>'      => Inflector::camelize($fieldName),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
          '<methodName>'        => $methodName,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
          '<fieldName>'         => $fieldName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
        );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
        $method = str_replace(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
            array_keys($replacements),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
            array_values($replacements),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
            $template
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
        );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
        return $this->_prefixCodeWithSpaces($method);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
    private function _generateLifecycleCallbackMethod($name, $methodName, $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
        if ($this->_hasMethod($methodName, $metadata)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
            return;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
        $this->_staticReflection[$metadata->name]['methods'][] = $methodName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
        $replacements = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
            '<name>'        => $this->_annotationsPrefix . $name,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
            '<methodName>'  => $methodName,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
        );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
        $method = str_replace(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
            array_keys($replacements),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
            array_values($replacements),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
            self::$_lifecycleCallbackMethodTemplate
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
        );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
        return $this->_prefixCodeWithSpaces($method);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
    private function _generateJoinColumnAnnotation(array $joinColumn)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
        $joinColumnAnnot = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
        if (isset($joinColumn['name'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
            $joinColumnAnnot[] = 'name="' . $joinColumn['name'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
        if (isset($joinColumn['referencedColumnName'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
            $joinColumnAnnot[] = 'referencedColumnName="' . $joinColumn['referencedColumnName'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
        if (isset($joinColumn['unique']) && $joinColumn['unique']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
            $joinColumnAnnot[] = 'unique=' . ($joinColumn['unique'] ? 'true' : 'false');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
        if (isset($joinColumn['nullable'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
            $joinColumnAnnot[] = 'nullable=' . ($joinColumn['nullable'] ? 'true' : 'false');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
        if (isset($joinColumn['onDelete'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
            $joinColumnAnnot[] = 'onDelete=' . ($joinColumn['onDelete'] ? 'true' : 'false');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
        if (isset($joinColumn['onUpdate'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
            $joinColumnAnnot[] = 'onUpdate=' . ($joinColumn['onUpdate'] ? 'true' : 'false');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
        if (isset($joinColumn['columnDefinition'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
            $joinColumnAnnot[] = 'columnDefinition="' . $joinColumn['columnDefinition'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
        return '@' . $this->_annotationsPrefix . 'JoinColumn(' . implode(', ', $joinColumnAnnot) . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
    private function _generateAssociationMappingPropertyDocBlock(array $associationMapping, ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
        $lines = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
        $lines[] = $this->_spaces . '/**';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
        $lines[] = $this->_spaces . ' * @var ' . $associationMapping['targetEntity'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
        if ($this->_generateAnnotations) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
            $lines[] = $this->_spaces . ' *';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
            $type = null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
            switch ($associationMapping['type']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
                case ClassMetadataInfo::ONE_TO_ONE:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
                    $type = 'OneToOne';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
                    break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
                case ClassMetadataInfo::MANY_TO_ONE:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
                    $type = 'ManyToOne';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
                    break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
                case ClassMetadataInfo::ONE_TO_MANY:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
                    $type = 'OneToMany';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
                    break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
                case ClassMetadataInfo::MANY_TO_MANY:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
                    $type = 'ManyToMany';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
                    break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
            $typeOptions = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
            if (isset($associationMapping['targetEntity'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
                $typeOptions[] = 'targetEntity="' . $associationMapping['targetEntity'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
            if (isset($associationMapping['inversedBy'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
                $typeOptions[] = 'inversedBy="' . $associationMapping['inversedBy'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
            if (isset($associationMapping['mappedBy'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
                $typeOptions[] = 'mappedBy="' . $associationMapping['mappedBy'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
            if ($associationMapping['cascade']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
                $cascades = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
                if ($associationMapping['isCascadePersist']) $cascades[] = '"persist"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
                if ($associationMapping['isCascadeRemove']) $cascades[] = '"remove"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
                if ($associationMapping['isCascadeDetach']) $cascades[] = '"detach"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
                if ($associationMapping['isCascadeMerge']) $cascades[] = '"merge"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
                if ($associationMapping['isCascadeRefresh']) $cascades[] = '"refresh"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
                $typeOptions[] = 'cascade={' . implode(',', $cascades) . '}';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
            if (isset($associationMapping['orphanRemoval']) && $associationMapping['orphanRemoval']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
                $typeOptions[] = 'orphanRemoval=' . ($associationMapping['orphanRemoval'] ? 'true' : 'false');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
            $lines[] = $this->_spaces . ' * @' . $this->_annotationsPrefix . '' . $type . '(' . implode(', ', $typeOptions) . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
            if (isset($associationMapping['joinColumns']) && $associationMapping['joinColumns']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
                $lines[] = $this->_spaces . ' * @' . $this->_annotationsPrefix . 'JoinColumns({';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
                $joinColumnsLines = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
                foreach ($associationMapping['joinColumns'] as $joinColumn) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
                    if ($joinColumnAnnot = $this->_generateJoinColumnAnnotation($joinColumn)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
                        $joinColumnsLines[] = $this->_spaces . ' *   ' . $joinColumnAnnot;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
                    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
                $lines[] = implode(",\n", $joinColumnsLines);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
                $lines[] = $this->_spaces . ' * })';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
            if (isset($associationMapping['joinTable']) && $associationMapping['joinTable']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
                $joinTable = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
                $joinTable[] = 'name="' . $associationMapping['joinTable']['name'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
                if (isset($associationMapping['joinTable']['schema'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
                    $joinTable[] = 'schema="' . $associationMapping['joinTable']['schema'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
                $lines[] = $this->_spaces . ' * @' . $this->_annotationsPrefix . 'JoinTable(' . implode(', ', $joinTable) . ',';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
                $lines[] = $this->_spaces . ' *   joinColumns={';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
                foreach ($associationMapping['joinTable']['joinColumns'] as $joinColumn) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
                    $lines[] = $this->_spaces . ' *     ' . $this->_generateJoinColumnAnnotation($joinColumn);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
                $lines[] = $this->_spaces . ' *   },';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
                $lines[] = $this->_spaces . ' *   inverseJoinColumns={';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
                foreach ($associationMapping['joinTable']['inverseJoinColumns'] as $joinColumn) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
                    $lines[] = $this->_spaces . ' *     ' . $this->_generateJoinColumnAnnotation($joinColumn);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
                $lines[] = $this->_spaces . ' *   }';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
                $lines[] = $this->_spaces . ' * )';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
            if (isset($associationMapping['orderBy'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
                $lines[] = $this->_spaces . ' * @' . $this->_annotationsPrefix . 'OrderBy({';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
                foreach ($associationMapping['orderBy'] as $name => $direction) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
                    $lines[] = $this->_spaces . ' *     "' . $name . '"="' . $direction . '",';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
                $lines[count($lines) - 1] = substr($lines[count($lines) - 1], 0, strlen($lines[count($lines) - 1]) - 1);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
                $lines[] = $this->_spaces . ' * })';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
        $lines[] = $this->_spaces . ' */';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
        return implode("\n", $lines);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
    private function _generateFieldMappingPropertyDocBlock(array $fieldMapping, ClassMetadataInfo $metadata)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
        $lines = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
        $lines[] = $this->_spaces . '/**';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
        $lines[] = $this->_spaces . ' * @var ' . $fieldMapping['type'] . ' $' . $fieldMapping['fieldName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
        if ($this->_generateAnnotations) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
            $lines[] = $this->_spaces . ' *';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
            $column = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
            if (isset($fieldMapping['columnName'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
                $column[] = 'name="' . $fieldMapping['columnName'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
            if (isset($fieldMapping['type'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
                $column[] = 'type="' . $fieldMapping['type'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
            if (isset($fieldMapping['length'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
                $column[] = 'length=' . $fieldMapping['length'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
            if (isset($fieldMapping['precision'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
                $column[] = 'precision=' .  $fieldMapping['precision'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
            if (isset($fieldMapping['scale'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
                $column[] = 'scale=' . $fieldMapping['scale'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
            if (isset($fieldMapping['nullable'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
                $column[] = 'nullable=' .  var_export($fieldMapping['nullable'], true);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
            if (isset($fieldMapping['columnDefinition'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
                $column[] = 'columnDefinition="' . $fieldMapping['columnDefinition'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
            if (isset($fieldMapping['unique'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
                $column[] = 'unique=' . var_export($fieldMapping['unique'], true);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
            $lines[] = $this->_spaces . ' * @' . $this->_annotationsPrefix . 'Column(' . implode(', ', $column) . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
            if (isset($fieldMapping['id']) && $fieldMapping['id']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
                $lines[] = $this->_spaces . ' * @' . $this->_annotationsPrefix . 'Id';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
                if ($generatorType = $this->_getIdGeneratorTypeString($metadata->generatorType)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
                    $lines[] = $this->_spaces.' * @' . $this->_annotationsPrefix . 'GeneratedValue(strategy="' . $generatorType . '")';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
                if ($metadata->sequenceGeneratorDefinition) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
                    $sequenceGenerator = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
                    if (isset($metadata->sequenceGeneratorDefinition['sequenceName'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
                        $sequenceGenerator[] = 'sequenceName="' . $metadata->sequenceGeneratorDefinition['sequenceName'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
                    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
                    if (isset($metadata->sequenceGeneratorDefinition['allocationSize'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
                        $sequenceGenerator[] = 'allocationSize="' . $metadata->sequenceGeneratorDefinition['allocationSize'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
                    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
                    if (isset($metadata->sequenceGeneratorDefinition['initialValue'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
                        $sequenceGenerator[] = 'initialValue="' . $metadata->sequenceGeneratorDefinition['initialValue'] . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
                    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
                    $lines[] = $this->_spaces . ' * @' . $this->_annotationsPrefix . 'SequenceGenerator(' . implode(', ', $sequenceGenerator) . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
            if (isset($fieldMapping['version']) && $fieldMapping['version']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
                $lines[] = $this->_spaces . ' * @' . $this->_annotationsPrefix . 'Version';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
        $lines[] = $this->_spaces . ' */';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
        return implode("\n", $lines);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
    private function _prefixCodeWithSpaces($code, $num = 1)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
        $lines = explode("\n", $code);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
        foreach ($lines as $key => $value) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
            $lines[$key] = str_repeat($this->_spaces, $num) . $lines[$key];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
        return implode("\n", $lines);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
    private function _getInheritanceTypeString($type)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
        switch ($type) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
            case ClassMetadataInfo::INHERITANCE_TYPE_NONE:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
                return 'NONE';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
            case ClassMetadataInfo::INHERITANCE_TYPE_JOINED:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
                return 'JOINED';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
            case ClassMetadataInfo::INHERITANCE_TYPE_SINGLE_TABLE:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
                return 'SINGLE_TABLE';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
            case ClassMetadataInfo::INHERITANCE_TYPE_TABLE_PER_CLASS:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
                return 'PER_CLASS';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
            default:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
                throw new \InvalidArgumentException('Invalid provided InheritanceType: ' . $type);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
    private function _getChangeTrackingPolicyString($policy)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
        switch ($policy) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
            case ClassMetadataInfo::CHANGETRACKING_DEFERRED_IMPLICIT:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
                return 'DEFERRED_IMPLICIT';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
            case ClassMetadataInfo::CHANGETRACKING_DEFERRED_EXPLICIT:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
                return 'DEFERRED_EXPLICIT';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
            case ClassMetadataInfo::CHANGETRACKING_NOTIFY:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
                return 'NOTIFY';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
            default:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
                throw new \InvalidArgumentException('Invalid provided ChangeTrackingPolicy: ' . $policy);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
    private function _getIdGeneratorTypeString($type)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
        switch ($type) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
            case ClassMetadataInfo::GENERATOR_TYPE_AUTO:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
                return 'AUTO';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
            case ClassMetadataInfo::GENERATOR_TYPE_SEQUENCE:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
                return 'SEQUENCE';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
            case ClassMetadataInfo::GENERATOR_TYPE_TABLE:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
                return 'TABLE';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
            case ClassMetadataInfo::GENERATOR_TYPE_IDENTITY:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
                return 'IDENTITY';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
            case ClassMetadataInfo::GENERATOR_TYPE_NONE:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
                return 'NONE';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
            default:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
                throw new \InvalidArgumentException('Invalid provided IdGeneratorType: ' . $type);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
}