sintonia/airtime_mvc/library/propel/generator/lib/builder/DataModelBuilder.php

608 lines
15 KiB
PHP

<?php
/**
* This file is part of the Propel package.
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* @license MIT License
*/
/**
* This is the base class for any builder class that is using the data model.
*
* This could be extended by classes that build SQL DDL, PHP classes, configuration
* files, input forms, etc.
*
* The GeneratorConfig needs to be set on this class in order for the builders
* to be able to access the propel generator build properties. You should be
* safe if you always use the GeneratorConfig to get a configured builder class
* anyway.
*
* @author Hans Lellelid <hans@xmpl.org>
* @package propel.generator.builder
*/
abstract class DataModelBuilder
{
/**
* The current table.
* @var Table
*/
private $table;
/**
* The generator config object holding build properties, etc.
*
* @var GeneratorConfig
*/
private $generatorConfig;
/**
* An array of warning messages that can be retrieved for display (e.g. as part of phing build process).
* @var array string[]
*/
private $warnings = array();
/**
* Peer builder class for current table.
* @var DataModelBuilder
*/
private $peerBuilder;
/**
* Stub Peer builder class for current table.
* @var DataModelBuilder
*/
private $stubPeerBuilder;
/**
* Object builder class for current table.
* @var DataModelBuilder
*/
private $objectBuilder;
/**
* Stub Object builder class for current table.
* @var DataModelBuilder
*/
private $stubObjectBuilder;
/**
* Query builder class for current table.
* @var DataModelBuilder
*/
private $queryBuilder;
/**
* Stub Query builder class for current table.
* @var DataModelBuilder
*/
private $stubQueryBuilder;
/**
* TableMap builder class for current table.
* @var DataModelBuilder
*/
protected $tablemapBuilder;
/**
* Stub Interface builder class for current table.
* @var DataModelBuilder
*/
private $interfaceBuilder;
/**
* Stub child object for current table.
* @var DataModelBuilder
*/
private $multiExtendObjectBuilder;
/**
* Node object builder for current table.
* @var DataModelBuilder
*/
private $nodeBuilder;
/**
* Node peer builder for current table.
* @var DataModelBuilder
*/
private $nodePeerBuilder;
/**
* Stub node object builder for current table.
* @var DataModelBuilder
*/
private $stubNodeBuilder;
/**
* Stub node peer builder for current table.
* @var DataModelBuilder
*/
private $stubNodePeerBuilder;
/**
* NestedSet object builder for current table.
* @var DataModelBuilder
*/
private $nestedSetBuilder;
/**
* NestedSet peer builder for current table.
* @var DataModelBuilder
*/
private $nestedSetPeerBuilder;
/**
* The DDL builder for current table.
* @var DDLBuilder
*/
private $ddlBuilder;
/**
* The Data-SQL builder for current table.
* @var DataSQLBuilder
*/
private $dataSqlBuilder;
/**
* The Pluralizer class to use.
* @var Pluralizer
*/
private $pluralizer;
/**
* Creates new instance of DataModelBuilder subclass.
* @param Table $table The Table which we are using to build [OM, DDL, etc.].
*/
public function __construct(Table $table)
{
$this->table = $table;
}
/**
* Returns new or existing Peer builder class for this table.
* @return PeerBuilder
*/
public function getPeerBuilder()
{
if (!isset($this->peerBuilder)) {
$this->peerBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'peer');
}
return $this->peerBuilder;
}
/**
* Returns new or existing Pluralizer class.
* @return Pluralizer
*/
public function getPluralizer()
{
if (!isset($this->pluralizer)) {
$this->pluralizer = $this->getGeneratorConfig()->getConfiguredPluralizer();
}
return $this->pluralizer;
}
/**
* Returns new or existing stub Peer builder class for this table.
* @return PeerBuilder
*/
public function getStubPeerBuilder()
{
if (!isset($this->stubPeerBuilder)) {
$this->stubPeerBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'peerstub');
}
return $this->stubPeerBuilder;
}
/**
* Returns new or existing Object builder class for this table.
* @return ObjectBuilder
*/
public function getObjectBuilder()
{
if (!isset($this->objectBuilder)) {
$this->objectBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'object');
}
return $this->objectBuilder;
}
/**
* Returns new or existing stub Object builder class for this table.
* @return ObjectBuilder
*/
public function getStubObjectBuilder()
{
if (!isset($this->stubObjectBuilder)) {
$this->stubObjectBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'objectstub');
}
return $this->stubObjectBuilder;
}
/**
* Returns new or existing Query builder class for this table.
* @return ObjectBuilder
*/
public function getQueryBuilder()
{
if (!isset($this->queryBuilder)) {
$this->queryBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'query');
}
return $this->queryBuilder;
}
/**
* Returns new or existing stub Query builder class for this table.
* @return ObjectBuilder
*/
public function getStubQueryBuilder()
{
if (!isset($this->stubQueryBuilder)) {
$this->stubQueryBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'querystub');
}
return $this->stubQueryBuilder;
}
/**
* Returns new or existing Object builder class for this table.
* @return ObjectBuilder
*/
public function getTableMapBuilder()
{
if (!isset($this->tablemapBuilder)) {
$this->tablemapBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'tablemap');
}
return $this->tablemapBuilder;
}
/**
* Returns new or existing stub Interface builder class for this table.
* @return ObjectBuilder
*/
public function getInterfaceBuilder()
{
if (!isset($this->interfaceBuilder)) {
$this->interfaceBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'interface');
}
return $this->interfaceBuilder;
}
/**
* Returns new or existing stub child object builder class for this table.
* @return ObjectBuilder
*/
public function getMultiExtendObjectBuilder()
{
if (!isset($this->multiExtendObjectBuilder)) {
$this->multiExtendObjectBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'objectmultiextend');
}
return $this->multiExtendObjectBuilder;
}
/**
* Returns new or existing node Object builder class for this table.
* @return ObjectBuilder
*/
public function getNodeBuilder()
{
if (!isset($this->nodeBuilder)) {
$this->nodeBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'node');
}
return $this->nodeBuilder;
}
/**
* Returns new or existing node Peer builder class for this table.
* @return PeerBuilder
*/
public function getNodePeerBuilder()
{
if (!isset($this->nodePeerBuilder)) {
$this->nodePeerBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'nodepeer');
}
return $this->nodePeerBuilder;
}
/**
* Returns new or existing stub node Object builder class for this table.
* @return ObjectBuilder
*/
public function getStubNodeBuilder()
{
if (!isset($this->stubNodeBuilder)) {
$this->stubNodeBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'nodestub');
}
return $this->stubNodeBuilder;
}
/**
* Returns new or existing stub node Peer builder class for this table.
* @return PeerBuilder
*/
public function getStubNodePeerBuilder()
{
if (!isset($this->stubNodePeerBuilder)) {
$this->stubNodePeerBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'nodepeerstub');
}
return $this->stubNodePeerBuilder;
}
/**
* Returns new or existing nested set object builder class for this table.
* @return ObjectBuilder
*/
public function getNestedSetBuilder()
{
if (!isset($this->nestedSetBuilder)) {
$this->nestedSetBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'nestedset');
}
return $this->nestedSetBuilder;
}
/**
* Returns new or existing nested set Peer builder class for this table.
* @return PeerBuilder
*/
public function getNestedSetPeerBuilder()
{
if (!isset($this->nestedSetPeerBuilder)) {
$this->nestedSetPeerBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'nestedsetpeer');
}
return $this->nestedSetPeerBuilder;
}
/**
* Returns new or existing ddl builder class for this table.
* @return DDLBuilder
*/
public function getDDLBuilder()
{
if (!isset($this->ddlBuilder)) {
$this->ddlBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'ddl');
}
return $this->ddlBuilder;
}
/**
* Returns new or existing data sql builder class for this table.
* @return DataSQLBuilder
*/
public function getDataSQLBuilder()
{
if (!isset($this->dataSqlBuilder)) {
$this->dataSqlBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'datasql');
}
return $this->dataSqlBuilder;
}
/**
* Convenience method to return a NEW Peer class builder instance.
*
* This is used very frequently from the peer and object builders to get
* a peer builder for a RELATED table.
*
* @param Table $table
* @return PeerBuilder
*/
public function getNewPeerBuilder(Table $table)
{
return $this->getGeneratorConfig()->getConfiguredBuilder($table, 'peer');
}
/**
* Convenience method to return a NEW Peer stub class builder instance.
*
* This is used from the peer and object builders to get
* a peer builder for a RELATED table.
*
* @param Table $table
* @return PeerBuilder
*/
public function getNewStubPeerBuilder(Table $table)
{
return $this->getGeneratorConfig()->getConfiguredBuilder($table, 'peerstub');
}
/**
* Convenience method to return a NEW Object class builder instance.
*
* This is used very frequently from the peer and object builders to get
* an object builder for a RELATED table.
*
* @param Table $table
* @return ObjectBuilder
*/
public function getNewObjectBuilder(Table $table)
{
return $this->getGeneratorConfig()->getConfiguredBuilder($table, 'object');
}
/**
* Convenience method to return a NEW Object stub class builder instance.
*
* This is used from the query builders to get
* an object builder for a RELATED table.
*
* @param Table $table
* @return ObjectBuilder
*/
public function getNewStubObjectBuilder(Table $table)
{
return $this->getGeneratorConfig()->getConfiguredBuilder($table, 'objectstub');
}
/**
* Convenience method to return a NEW query class builder instance.
*
* This is used from the query builders to get
* a query builder for a RELATED table.
*
* @param Table $table
* @return QueryBuilder
*/
public function getNewQueryBuilder(Table $table)
{
return $this->getGeneratorConfig()->getConfiguredBuilder($table, 'query');
}
/**
* Convenience method to return a NEW query stub class builder instance.
*
* This is used from the query builders to get
* a query builder for a RELATED table.
*
* @param Table $table
* @return QueryBuilder
*/
public function getNewStubQueryBuilder(Table $table)
{
return $this->getGeneratorConfig()->getConfiguredBuilder($table, 'querystub');
}
/**
* Returns new Query Inheritance builder class for this table.
* @return ObjectBuilder
*/
public function getNewQueryInheritanceBuilder($child)
{
$queryInheritanceBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'queryinheritance');
$queryInheritanceBuilder->setChild($child);
return $queryInheritanceBuilder;
}
/**
* Returns new stub Query Inheritance builder class for this table.
* @return ObjectBuilder
*/
public function getNewStubQueryInheritanceBuilder($child)
{
$stubQueryInheritanceBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'queryinheritancestub');
$stubQueryInheritanceBuilder->setChild($child);
return $stubQueryInheritanceBuilder;
}
/**
* Gets the GeneratorConfig object.
*
* @return GeneratorConfig
*/
public function getGeneratorConfig()
{
return $this->generatorConfig;
}
/**
* Get a specific [name transformed] build property.
*
* @param string $name
* @return string
*/
public function getBuildProperty($name)
{
if ($this->getGeneratorConfig()) {
return $this->getGeneratorConfig()->getBuildProperty($name);
}
return null; // just to be explicit
}
/**
* Sets the GeneratorConfig object.
*
* @param GeneratorConfig $v
*/
public function setGeneratorConfig(GeneratorConfig $v)
{
$this->generatorConfig = $v;
}
/**
* Sets the table for this builder.
* @param Table $table
*/
public function setTable(Table $table)
{
$this->table = $table;
}
/**
* Returns the current Table object.
* @return Table
*/
public function getTable()
{
return $this->table;
}
/**
* Convenience method to returns the Platform class for this table (database).
* @return Platform
*/
public function getPlatform()
{
if ($this->getTable() && $this->getTable()->getDatabase()) {
return $this->getTable()->getDatabase()->getPlatform();
}
}
/**
* Convenience method to returns the database for current table.
* @return Database
*/
public function getDatabase()
{
if ($this->getTable()) {
return $this->getTable()->getDatabase();
}
}
/**
* Pushes a message onto the stack of warnings.
* @param string $msg The warning message.
*/
protected function warn($msg)
{
$this->warnings[] = $msg;
}
/**
* Gets array of warning messages.
* @return array string[]
*/
public function getWarnings()
{
return $this->warnings;
}
/**
* Wraps call to Platform->quoteIdentifier() with a check to see whether quoting is enabled.
*
* All subclasses should call this quoteIdentifier() method rather than calling the Platform
* method directly. This method is used by both DataSQLBuilder and DDLBuilder, and potentially
* in the OM builders also, which is why it is defined in this class.
*
* @param string $text The text to quote.
* @return string Quoted text.
*/
public function quoteIdentifier($text)
{
if (!$this->getBuildProperty('disableIdentifierQuoting')) {
return $this->getPlatform()->quoteIdentifier($text);
}
return $text;
}
/**
* Returns the name of the current class being built, with a possible prefix.
* @return string
* @see OMBuilder#getClassname()
*/
public function prefixClassname($identifier)
{
return $this->getBuildProperty('classPrefix') . $identifier;
}
}