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: 204: 205: 206: 
<?php

use Net\Bazzline\Propel\Behavior\EntityInstantiator\Manager;
use Net\Bazzline\Propel\Behavior\EntityInstantiator\ObjectEntity;
use Net\Bazzline\Propel\Behavior\EntityInstantiator\QueryEntity;

//@todo do we need this if dependencies are managed via composer and composer autoloader?
$pathToClasses = __DIR__ . '/';

require_once($pathToClasses . 'AbstractEntity.php');
require_once($pathToClasses . 'Configuration.php');
require_once($pathToClasses . 'EntityCollection.php');
require_once($pathToClasses . 'FileContentGenerator.php');
require_once($pathToClasses . 'Manager.php');
require_once($pathToClasses . 'ObjectEntity.php');
require_once($pathToClasses . 'QueryEntity.php');

/**
 * @author stev leibelt <artodeto@bazzline.net>
 * @since 2015-08-02
 * @todo make parameters optional (only set them when they are set) - this would enable it to define everything in the database scope and the rest in the table scope without overwriting database scoped things
 */
class AddToEntityInstantiatorBehavior extends Behavior
{
    const PARAMETER_ENTITY_INSTANTIATOR_ADD_IT_TO_ENTITY_INSTANTIATOR   = 'entity_instantiator_add_to_entity_instantiator';
    const PARAMETER_ENTITY_INSTANTIATOR_DEFAULT_CONNECTION_MODE         = 'entity_instantiator_default_connection_mode';
    const PARAMETER_ENTITY_INSTANTIATOR_DEFAULT_CONNECTION_NAME         = 'entity_instantiator_default_connection_name';
    const PARAMETER_ENTITY_INSTANTIATOR_CLASS_NAME                      = 'entity_instantiator_class_name';
    const PARAMETER_ENTITY_INSTANTIATOR_EXTENDS                         = 'entity_instantiator_extends';
    const PARAMETER_ENTITY_INSTANTIATOR_INDENTION                       = 'entity_instantiator_indention';
    const PARAMETER_ENTITY_INSTANTIATOR_METHOD_NAME_PREFIX              = 'entity_instantiator_method_name_prefix';
    const PARAMETER_ENTITY_INSTANTIATOR_NAMESPACE                       = 'entity_instantiator_namespace';
    const PARAMETER_ENTITY_INSTANTIATOR_PATH_TO_OUTPUT                  = 'entity_instantiator_path_to_output';
    const PARAMETER_ENTITY_INSTANTIATOR_USE_FULLY_QUALIFIED_NAME        = 'entity_instantiator_use_fully_qualified_name';

    /** @var array */
    protected $parameters = [
        self::PARAMETER_ENTITY_INSTANTIATOR_ADD_IT_TO_ENTITY_INSTANTIATOR   => 'true',
        self::PARAMETER_ENTITY_INSTANTIATOR_DEFAULT_CONNECTION_MODE         => null,
        self::PARAMETER_ENTITY_INSTANTIATOR_DEFAULT_CONNECTION_NAME         => null,
        self::PARAMETER_ENTITY_INSTANTIATOR_CLASS_NAME                      => 'DatabaseEntityInstantiator',
        self::PARAMETER_ENTITY_INSTANTIATOR_INDENTION                       => '    ',
        self::PARAMETER_ENTITY_INSTANTIATOR_METHOD_NAME_PREFIX              => null,
        self::PARAMETER_ENTITY_INSTANTIATOR_NAMESPACE                       => null,
        self::PARAMETER_ENTITY_INSTANTIATOR_PATH_TO_OUTPUT                  => 'data',
        self::PARAMETER_ENTITY_INSTANTIATOR_USE_FULLY_QUALIFIED_NAME        => 'false'
    ];



    /**
     * @param DataModelBuilder $builder
     * @return string
     * @throws InvalidArgumentException
     */
    public function queryMethods(
        $builder
    ) {
        $this->addQueryToGenerator($builder);

        return '';
    }



    /**
     * @param DataModelBuilder $builder
     * @return string
     * @throws InvalidArgumentException
     */
    public function objectMethods(
        $builder
    ) {
        $this->addObjectToGenerator($builder);

        return '';
    }

    /**
     * @param DataModelBuilder $builder
     * @throws InvalidArgumentException
     */
    public function addObjectToGenerator(
        DataModelBuilder $builder
    ) {
        if ($this->addIt()) {
            $manager    = $this->getManager();
            $entity     = $this->buildEntityFromObject($builder);
            $manager->add($entity);
        }
    }

    /**
     * @param DataModelBuilder $builder
     * @throws InvalidArgumentException
     */
    public function addQueryToGenerator(
        DataModelBuilder $builder
    ) {
        if ($this->addIt()) {
            $manager    = $this->getManager();
            $entity     = $this->buildEntityFromQuery($builder);
            $manager->add($entity);
        }
    }

    /**
     * @param DataModelBuilder $builder
     * @return ObjectEntity
     */
    private function buildEntityFromObject(
        DataModelBuilder $builder
    ) {
        $methodNamePrefix = $this->returnDatabaseNameIfMethodNamePrefixIsNotProvided($builder);

        return new ObjectEntity(
            $builder->getStubObjectBuilder()->getClassname(),
            $builder->getDatabase()->getName(),
            $builder->getStubObjectBuilder()->getFullyQualifiedClassname(),
            $methodNamePrefix
        );
    }

    /**
     * @param DataModelBuilder $builder
     * @return QueryEntity
     */
    private function buildEntityFromQuery(
        DataModelBuilder $builder
    ) {
        $methodNamePrefix = $this->returnDatabaseNameIfMethodNamePrefixIsNotProvided($builder);

        return new QueryEntity(
            $builder->getStubQueryBuilder()->getClassname(),
            $builder->getDatabase()->getName(),
            $builder->getStubQueryBuilder()->getFullyQualifiedClassname(),
            $methodNamePrefix
        );
    }

    /**
     * @param DataModelBuilder $builder
     * @return string
     */
    private function returnDatabaseNameIfMethodNamePrefixIsNotProvided(
        DataModelBuilder $builder
    ) {
        $methodNamePrefix = (is_null($this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_METHOD_NAME_PREFIX]))
            ? 'create' . ucfirst($builder->getDatabase()->getName())
            : $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_METHOD_NAME_PREFIX];

        return $methodNamePrefix;
    }

    /**
     * @return Manager
     * @throws InvalidArgumentException
     */
    private function getManager()
    {
        $manager = Manager::getInstance();

        if ($manager->isNotConfigured()) {
            $pathToOutput   = $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_PATH_TO_OUTPUT];
            $isAbsolutePath = (strncmp($pathToOutput, DIRECTORY_SEPARATOR, strlen(DIRECTORY_SEPARATOR)) === 0);    //like /foo/bar
            $isResource     = (strpos($pathToOutput, '://') !== false);  //like vfs://

            $isAbsolutePathOrResource   = ($isAbsolutePath || $isResource);

            $absolutePathToOutput   = ($isAbsolutePathOrResource)
                ? $pathToOutput
                : getcwd() . (str_repeat(DIRECTORY_SEPARATOR . '..', 4)) . DIRECTORY_SEPARATOR . $pathToOutput;
            $className              = $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_CLASS_NAME];
            $defaultConnectionMode  = $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_DEFAULT_CONNECTION_MODE];
            $defaultConnectionName  = $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_DEFAULT_CONNECTION_NAME];
            $extends                = $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_EXTENDS];
            $indention              = $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_INDENTION];
            $namespace              = $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_NAMESPACE];
            $useFullyQualifiedName  = ($this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_USE_FULLY_QUALIFIED_NAME] === 'true');

            $manager->configure(
                $className,
                $indention,
                $absolutePathToOutput,
                $namespace,
                $extends,
                $defaultConnectionMode,
                $defaultConnectionName,
                $useFullyQualifiedName
            );
        }

        return $manager;
    }

    /**
     * @return bool
     */
    private function addIt()
    {
        return (isset($this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_ADD_IT_TO_ENTITY_INSTANTIATOR]))
            ? ($this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_ADD_IT_TO_ENTITY_INSTANTIATOR] === 'true')
            : false;
    }
}
PHP EntityInstantiator Propel Behavior by bazzline.net API documentation generated by ApiGen