Overview

Namespaces

  • Net
    • Bazzline
      • Propel
        • Behavior
          • EntityInstantiator
  • None

Classes

  • AddToEntityInstantiatorBehavior
  • Net\Bazzline\Propel\Behavior\EntityInstantiator\AbstractEntity
  • Net\Bazzline\Propel\Behavior\EntityInstantiator\Configuration
  • Net\Bazzline\Propel\Behavior\EntityInstantiator\EntityCollection
  • Net\Bazzline\Propel\Behavior\EntityInstantiator\FileContentGenerator
  • Net\Bazzline\Propel\Behavior\EntityInstantiator\Manager
  • Net\Bazzline\Propel\Behavior\EntityInstantiator\ObjectEntity
  • Net\Bazzline\Propel\Behavior\EntityInstantiator\QueryEntity
  • Overview
  • Namespace
  • Class
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 
<?php
/**
 * @author stev leibelt <artodeto@bazzline.net>
 * @since 2015-09-19
 */
namespace Net\Bazzline\Propel\Behavior\EntityInstantiator;

class FileContentGenerator
{
    /**
     * @param EntityCollection $collection
     * @param Configuration $configuration
     * @return string
     */
    public function generate(
        EntityCollection $collection,
        Configuration $configuration
    ) {
        $useStatements = $this->generateUseStatements(
            $configuration->doNotUseFullyQualifiedNames(),
            $configuration->getNamespace(),
            $collection
        );

        $content = $this->generateFileHeader(
            $configuration->getNamespace(),
            $useStatements
        );

        $content .= $this->generateClassHeader(
            $configuration->getClassName(),
            $configuration->getExtends()
        );

        $content .= $this->generateGetConnectionMethod(
            $configuration->getIndention(),
            $configuration->getDefaultConnectionMode(),
            $configuration->getDefaultConnectionName()
        );

        foreach ($collection as $entity) {
            $content .= $this->generateObjectEntityOrQueryEntityGetMethod(
                $entity,
                $configuration->getIndention(),
                $configuration->useFullyQualifiedNames()
            );
        }

        $content .= '}';

        return $content;
    }

    /**
     * @param string $className
     * @param null|string $extends
     * @return string
     * @todo find a better way to have it indented and readable
     */
    private function generateClassHeader(
        $className,
        $extends
    ) {
        $extends = ($this->isValidString($extends)) ? ' extends ' . $extends : '';

    return '
/**
 * Class ' . $className . '
 *
 * @author ' . __CLASS__ . '
 * @since ' . date('Y-m-d') . '
 * @link http://www.bazzline.net
 */
class ' . $className . $extends . '
{' . PHP_EOL;
    }

    /**
     * @param AbstractEntity $entity
     * @param string $indention
     * @param boolean $useFullyQualifiedName
     * @return string
     */
    private function generateObjectEntityOrQueryEntityGetMethod(
        AbstractEntity $entity,
        $indention,
        $useFullyQualifiedName
    ) {
        $methodName = lcfirst($entity->methodNamePrefix() . ucfirst($entity->className()));
        $className  = ($useFullyQualifiedName)
            ? '\\' . $entity->fullQualifiedClassName()
            : $entity->className();

        $content = PHP_EOL .
            $indention . '/**' . PHP_EOL .
            $indention . ' * @return ' . $className . PHP_EOL .
            $indention . ' */' . PHP_EOL .
            $indention . 'public function ' . $methodName . '()' . PHP_EOL .
            $indention . '{' . PHP_EOL;

        if ($entity instanceof ObjectEntity) {
            $content .= $indention . $indention . 'return new ' . $className . '();' . PHP_EOL;
        } else if ($entity instanceof QueryEntity) {
            $content .= $indention . $indention . 'return ' . $className . '::create();' . PHP_EOL;
        }

        $content .= $indention . '}' . PHP_EOL;

        return $content;
    }

    /**
     * @param null|string $namespace
     * @param array $uses
     * @return string
     */
    private function generateFileHeader(
        $namespace,
        $uses
    ) {
        $content = '<?php';
        $content .= ($this->isValidString($namespace))
            ? str_repeat(PHP_EOL, 2) . 'namespace ' . $namespace . ';' . PHP_EOL
            : PHP_EOL;

        $thereAreUseStatements = (!empty($uses));

        if ($thereAreUseStatements) {
            $content .= PHP_EOL;
            $content .= implode(PHP_EOL, $uses);
            $content .= PHP_EOL;
        }

        return $content;
    }

    /**
     * @param string $indention
     * @param null|string $defaultConnectionMode
     * @param null|string $defaultConnectionName
     * @return string
     * @todo find a better way to have it indented and readable
     * @todo move default values out
     */
    private function generateGetConnectionMethod(
        $indention,
        $defaultConnectionMode = null,
        $defaultConnectionName = null
    ) {

return $indention . '/**
' . $indention . ' * @param null|string $name - The data source name that is used to look up the DSN from the runtime configuration file.
' . $indention . ' * @param string $mode The connection mode (this applies to replication systems).
' . $indention . ' * @return PDO
' . $indention . ' * @throws PropelException
' . $indention . ' */
' . $indention . 'public function getConnection($name = ' . $defaultConnectionName . ', $mode = ' . $defaultConnectionMode . ')
' . $indention . '{
' . (str_repeat($indention, 2)) . 'return Propel::getConnection($name, $mode);
' . $indention . '}' . PHP_EOL;
    }

    /**
     * @param boolean $includeCollection
     * @param null|string $namespace
     * @param EntityCollection $collection
     * @return array
     */
    private function generateUseStatements(
        $includeCollection,
        $namespace,
        EntityCollection $collection
    ) {
        $uses = [];

        if ($this->isValidString($namespace)) {
            $uses[] = 'use Propel;';
            $uses[] = 'use PropelException;';
            $uses[] = 'use PDO;';
        }

        if ($includeCollection) {
            foreach ($collection as $entity) {
                $uses[] = 'use ' . $entity->fullQualifiedClassName() . ';';
            }
        }

        natsort($uses);

        return $uses;
    }

    /**
     * @param null|string $namespace
     * @return bool
     */
    private function isValidString($namespace)
    {
        return ((is_string($namespace))
            && (strlen($namespace) > 0));
    }
}
PHP EntityInstantiator Propel Behavior by bazzline.net API documentation generated by ApiGen