PageRenderTime 25ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 1ms

/generator/lib/builder/DataModelBuilder.php

https://github.com/1989gaurav/Propel
PHP | 622 lines | 251 code | 63 blank | 308 comment | 23 complexity | cc081b5e6f53dfbcb6c8d61882e90685 MD5 | raw file
  1. <?php
  2. /**
  3. * This file is part of the Propel package.
  4. * For the full copyright and license information, please view the LICENSE
  5. * file that was distributed with this source code.
  6. *
  7. * @license MIT License
  8. */
  9. /**
  10. * This is the base class for any builder class that is using the data model.
  11. *
  12. * This could be extended by classes that build SQL DDL, PHP classes, configuration
  13. * files, input forms, etc.
  14. *
  15. * The GeneratorConfig needs to be set on this class in order for the builders
  16. * to be able to access the propel generator build properties. You should be
  17. * safe if you always use the GeneratorConfig to get a configured builder class
  18. * anyway.
  19. *
  20. * @author Hans Lellelid <hans@xmpl.org>
  21. * @package propel.generator.builder
  22. */
  23. abstract class DataModelBuilder
  24. {
  25. /**
  26. * The current table.
  27. * @var Table
  28. */
  29. private $table;
  30. /**
  31. * The generator config object holding build properties, etc.
  32. *
  33. * @var GeneratorConfigInterface
  34. */
  35. private $generatorConfig;
  36. /**
  37. * An array of warning messages that can be retrieved for display (e.g. as part of phing build process).
  38. * @var array string[]
  39. */
  40. private $warnings = array();
  41. /**
  42. * Peer builder class for current table.
  43. * @var DataModelBuilder
  44. */
  45. private $peerBuilder;
  46. /**
  47. * Stub Peer builder class for current table.
  48. * @var DataModelBuilder
  49. */
  50. private $stubPeerBuilder;
  51. /**
  52. * Object builder class for current table.
  53. * @var DataModelBuilder
  54. */
  55. private $objectBuilder;
  56. /**
  57. * Stub Object builder class for current table.
  58. * @var DataModelBuilder
  59. */
  60. private $stubObjectBuilder;
  61. /**
  62. * Query builder class for current table.
  63. * @var DataModelBuilder
  64. */
  65. private $queryBuilder;
  66. /**
  67. * Stub Query builder class for current table.
  68. * @var DataModelBuilder
  69. */
  70. private $stubQueryBuilder;
  71. /**
  72. * TableMap builder class for current table.
  73. * @var DataModelBuilder
  74. */
  75. protected $tablemapBuilder;
  76. /**
  77. * Stub Interface builder class for current table.
  78. * @var DataModelBuilder
  79. */
  80. private $interfaceBuilder;
  81. /**
  82. * Stub child object for current table.
  83. * @var DataModelBuilder
  84. */
  85. private $multiExtendObjectBuilder;
  86. /**
  87. * Node object builder for current table.
  88. * @var DataModelBuilder
  89. */
  90. private $nodeBuilder;
  91. /**
  92. * Node peer builder for current table.
  93. * @var DataModelBuilder
  94. */
  95. private $nodePeerBuilder;
  96. /**
  97. * Stub node object builder for current table.
  98. * @var DataModelBuilder
  99. */
  100. private $stubNodeBuilder;
  101. /**
  102. * Stub node peer builder for current table.
  103. * @var DataModelBuilder
  104. */
  105. private $stubNodePeerBuilder;
  106. /**
  107. * NestedSet object builder for current table.
  108. * @var DataModelBuilder
  109. */
  110. private $nestedSetBuilder;
  111. /**
  112. * NestedSet peer builder for current table.
  113. * @var DataModelBuilder
  114. */
  115. private $nestedSetPeerBuilder;
  116. /**
  117. * The Data-SQL builder for current table.
  118. * @var DataSQLBuilder
  119. */
  120. private $dataSqlBuilder;
  121. /**
  122. * The Pluralizer class to use.
  123. * @var Pluralizer
  124. */
  125. private $pluralizer;
  126. /**
  127. * The platform class
  128. * @var PropelPlatformInterface
  129. */
  130. protected $platform;
  131. /**
  132. * Creates new instance of DataModelBuilder subclass.
  133. * @param Table $table The Table which we are using to build [OM, DDL, etc.].
  134. */
  135. public function __construct(Table $table)
  136. {
  137. $this->table = $table;
  138. }
  139. /**
  140. * Returns new or existing Peer builder class for this table.
  141. * @return PeerBuilder
  142. */
  143. public function getPeerBuilder()
  144. {
  145. if (!isset($this->peerBuilder)) {
  146. $this->peerBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'peer');
  147. }
  148. return $this->peerBuilder;
  149. }
  150. /**
  151. * Returns new or existing Pluralizer class.
  152. * @return Pluralizer
  153. */
  154. public function getPluralizer()
  155. {
  156. if (!isset($this->pluralizer)) {
  157. $this->pluralizer = $this->getGeneratorConfig()->getConfiguredPluralizer();
  158. }
  159. return $this->pluralizer;
  160. }
  161. /**
  162. * Returns new or existing stub Peer builder class for this table.
  163. * @return PeerBuilder
  164. */
  165. public function getStubPeerBuilder()
  166. {
  167. if (!isset($this->stubPeerBuilder)) {
  168. $this->stubPeerBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'peerstub');
  169. }
  170. return $this->stubPeerBuilder;
  171. }
  172. /**
  173. * Returns new or existing Object builder class for this table.
  174. * @return ObjectBuilder
  175. */
  176. public function getObjectBuilder()
  177. {
  178. if (!isset($this->objectBuilder)) {
  179. $this->objectBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'object');
  180. }
  181. return $this->objectBuilder;
  182. }
  183. /**
  184. * Returns new or existing stub Object builder class for this table.
  185. * @return ObjectBuilder
  186. */
  187. public function getStubObjectBuilder()
  188. {
  189. if (!isset($this->stubObjectBuilder)) {
  190. $this->stubObjectBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'objectstub');
  191. }
  192. return $this->stubObjectBuilder;
  193. }
  194. /**
  195. * Returns new or existing Query builder class for this table.
  196. * @return ObjectBuilder
  197. */
  198. public function getQueryBuilder()
  199. {
  200. if (!isset($this->queryBuilder)) {
  201. $this->queryBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'query');
  202. }
  203. return $this->queryBuilder;
  204. }
  205. /**
  206. * Returns new or existing stub Query builder class for this table.
  207. * @return ObjectBuilder
  208. */
  209. public function getStubQueryBuilder()
  210. {
  211. if (!isset($this->stubQueryBuilder)) {
  212. $this->stubQueryBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'querystub');
  213. }
  214. return $this->stubQueryBuilder;
  215. }
  216. /**
  217. * Returns new or existing Object builder class for this table.
  218. * @return ObjectBuilder
  219. */
  220. public function getTableMapBuilder()
  221. {
  222. if (!isset($this->tablemapBuilder)) {
  223. $this->tablemapBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'tablemap');
  224. }
  225. return $this->tablemapBuilder;
  226. }
  227. /**
  228. * Returns new or existing stub Interface builder class for this table.
  229. * @return ObjectBuilder
  230. */
  231. public function getInterfaceBuilder()
  232. {
  233. if (!isset($this->interfaceBuilder)) {
  234. $this->interfaceBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'interface');
  235. }
  236. return $this->interfaceBuilder;
  237. }
  238. /**
  239. * Returns new or existing stub child object builder class for this table.
  240. * @return ObjectBuilder
  241. */
  242. public function getMultiExtendObjectBuilder()
  243. {
  244. if (!isset($this->multiExtendObjectBuilder)) {
  245. $this->multiExtendObjectBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'objectmultiextend');
  246. }
  247. return $this->multiExtendObjectBuilder;
  248. }
  249. /**
  250. * Returns new or existing node Object builder class for this table.
  251. * @return ObjectBuilder
  252. */
  253. public function getNodeBuilder()
  254. {
  255. if (!isset($this->nodeBuilder)) {
  256. $this->nodeBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'node');
  257. }
  258. return $this->nodeBuilder;
  259. }
  260. /**
  261. * Returns new or existing node Peer builder class for this table.
  262. * @return PeerBuilder
  263. */
  264. public function getNodePeerBuilder()
  265. {
  266. if (!isset($this->nodePeerBuilder)) {
  267. $this->nodePeerBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'nodepeer');
  268. }
  269. return $this->nodePeerBuilder;
  270. }
  271. /**
  272. * Returns new or existing stub node Object builder class for this table.
  273. * @return ObjectBuilder
  274. */
  275. public function getStubNodeBuilder()
  276. {
  277. if (!isset($this->stubNodeBuilder)) {
  278. $this->stubNodeBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'nodestub');
  279. }
  280. return $this->stubNodeBuilder;
  281. }
  282. /**
  283. * Returns new or existing stub node Peer builder class for this table.
  284. * @return PeerBuilder
  285. */
  286. public function getStubNodePeerBuilder()
  287. {
  288. if (!isset($this->stubNodePeerBuilder)) {
  289. $this->stubNodePeerBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'nodepeerstub');
  290. }
  291. return $this->stubNodePeerBuilder;
  292. }
  293. /**
  294. * Returns new or existing nested set object builder class for this table.
  295. * @return ObjectBuilder
  296. */
  297. public function getNestedSetBuilder()
  298. {
  299. if (!isset($this->nestedSetBuilder)) {
  300. $this->nestedSetBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'nestedset');
  301. }
  302. return $this->nestedSetBuilder;
  303. }
  304. /**
  305. * Returns new or existing nested set Peer builder class for this table.
  306. * @return PeerBuilder
  307. */
  308. public function getNestedSetPeerBuilder()
  309. {
  310. if (!isset($this->nestedSetPeerBuilder)) {
  311. $this->nestedSetPeerBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'nestedsetpeer');
  312. }
  313. return $this->nestedSetPeerBuilder;
  314. }
  315. /**
  316. * Returns new or existing data sql builder class for this table.
  317. * @return DataSQLBuilder
  318. */
  319. public function getDataSQLBuilder()
  320. {
  321. if (!isset($this->dataSqlBuilder)) {
  322. $this->dataSqlBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'datasql');
  323. }
  324. return $this->dataSqlBuilder;
  325. }
  326. /**
  327. * Gets a new data model builder class for specified table and classname.
  328. *
  329. * @param Table $table
  330. * @param string $classname The class of builder
  331. * @return DataModelBuilder
  332. */
  333. public function getNewBuilder(Table $table, $classname)
  334. {
  335. $builder = new $classname($table);
  336. $builder->setGeneratorConfig($this);
  337. return $builder;
  338. }
  339. /**
  340. * Convenience method to return a NEW Peer class builder instance.
  341. *
  342. * This is used very frequently from the peer and object builders to get
  343. * a peer builder for a RELATED table.
  344. *
  345. * @param Table $table
  346. * @return PeerBuilder
  347. */
  348. public function getNewPeerBuilder(Table $table)
  349. {
  350. return $this->getGeneratorConfig()->getConfiguredBuilder($table, 'peer');
  351. }
  352. /**
  353. * Convenience method to return a NEW Peer stub class builder instance.
  354. *
  355. * This is used from the peer and object builders to get
  356. * a peer builder for a RELATED table.
  357. *
  358. * @param Table $table
  359. * @return PeerBuilder
  360. */
  361. public function getNewStubPeerBuilder(Table $table)
  362. {
  363. return $this->getGeneratorConfig()->getConfiguredBuilder($table, 'peerstub');
  364. }
  365. /**
  366. * Convenience method to return a NEW Object class builder instance.
  367. *
  368. * This is used very frequently from the peer and object builders to get
  369. * an object builder for a RELATED table.
  370. *
  371. * @param Table $table
  372. * @return ObjectBuilder
  373. */
  374. public function getNewObjectBuilder(Table $table)
  375. {
  376. return $this->getGeneratorConfig()->getConfiguredBuilder($table, 'object');
  377. }
  378. /**
  379. * Convenience method to return a NEW Object stub class builder instance.
  380. *
  381. * This is used from the query builders to get
  382. * an object builder for a RELATED table.
  383. *
  384. * @param Table $table
  385. * @return ObjectBuilder
  386. */
  387. public function getNewStubObjectBuilder(Table $table)
  388. {
  389. return $this->getGeneratorConfig()->getConfiguredBuilder($table, 'objectstub');
  390. }
  391. /**
  392. * Convenience method to return a NEW query class builder instance.
  393. *
  394. * This is used from the query builders to get
  395. * a query builder for a RELATED table.
  396. *
  397. * @param Table $table
  398. * @return QueryBuilder
  399. */
  400. public function getNewQueryBuilder(Table $table)
  401. {
  402. return $this->getGeneratorConfig()->getConfiguredBuilder($table, 'query');
  403. }
  404. /**
  405. * Convenience method to return a NEW query stub class builder instance.
  406. *
  407. * This is used from the query builders to get
  408. * a query builder for a RELATED table.
  409. *
  410. * @param Table $table
  411. * @return QueryBuilder
  412. */
  413. public function getNewStubQueryBuilder(Table $table)
  414. {
  415. return $this->getGeneratorConfig()->getConfiguredBuilder($table, 'querystub');
  416. }
  417. /**
  418. * Returns new Query Inheritance builder class for this table.
  419. * @return ObjectBuilder
  420. */
  421. public function getNewQueryInheritanceBuilder($child)
  422. {
  423. $queryInheritanceBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'queryinheritance');
  424. $queryInheritanceBuilder->setChild($child);
  425. return $queryInheritanceBuilder;
  426. }
  427. /**
  428. * Returns new stub Query Inheritance builder class for this table.
  429. * @return ObjectBuilder
  430. */
  431. public function getNewStubQueryInheritanceBuilder($child)
  432. {
  433. $stubQueryInheritanceBuilder = $this->getGeneratorConfig()->getConfiguredBuilder($this->getTable(), 'queryinheritancestub');
  434. $stubQueryInheritanceBuilder->setChild($child);
  435. return $stubQueryInheritanceBuilder;
  436. }
  437. /**
  438. * Gets the GeneratorConfig object.
  439. *
  440. * @return GeneratorConfig
  441. */
  442. public function getGeneratorConfig()
  443. {
  444. return $this->generatorConfig;
  445. }
  446. /**
  447. * Get a specific [name transformed] build property.
  448. *
  449. * @param string $name
  450. * @return string
  451. */
  452. public function getBuildProperty($name)
  453. {
  454. if ($this->getGeneratorConfig()) {
  455. return $this->getGeneratorConfig()->getBuildProperty($name);
  456. }
  457. return null; // just to be explicit
  458. }
  459. /**
  460. * Sets the GeneratorConfig object.
  461. *
  462. * @param GeneratorConfig $v
  463. */
  464. public function setGeneratorConfig(GeneratorConfigInterface $v)
  465. {
  466. $this->generatorConfig = $v;
  467. }
  468. /**
  469. * Sets the table for this builder.
  470. * @param Table $table
  471. */
  472. public function setTable(Table $table)
  473. {
  474. $this->table = $table;
  475. }
  476. /**
  477. * Returns the current Table object.
  478. * @return Table
  479. */
  480. public function getTable()
  481. {
  482. return $this->table;
  483. }
  484. /**
  485. * Convenience method to returns the Platform class for this table (database).
  486. * @return PropelPlatformInterface
  487. */
  488. public function getPlatform()
  489. {
  490. if (null === $this->platform) {
  491. // try to load the platform from the table
  492. if ($this->getTable() && $this->getTable()->getDatabase()) {
  493. $this->setPlatform($this->getTable()->getDatabase()->getPlatform());
  494. }
  495. }
  496. return $this->platform;
  497. }
  498. /**
  499. * Platform setter
  500. *
  501. * @param PropelPlatformInterface $platform
  502. */
  503. public function setPlatform(PropelPlatformInterface $platform)
  504. {
  505. $this->platform = $platform;
  506. }
  507. /**
  508. * Convenience method to returns the database for current table.
  509. * @return Database
  510. */
  511. public function getDatabase()
  512. {
  513. if ($this->getTable()) {
  514. return $this->getTable()->getDatabase();
  515. }
  516. }
  517. /**
  518. * Pushes a message onto the stack of warnings.
  519. * @param string $msg The warning message.
  520. */
  521. protected function warn($msg)
  522. {
  523. $this->warnings[] = $msg;
  524. }
  525. /**
  526. * Gets array of warning messages.
  527. * @return array string[]
  528. */
  529. public function getWarnings()
  530. {
  531. return $this->warnings;
  532. }
  533. /**
  534. * Wraps call to Platform->quoteIdentifier() with a check to see whether quoting is enabled.
  535. *
  536. * All subclasses should call this quoteIdentifier() method rather than calling the Platform
  537. * method directly. This method is used by both DataSQLBuilder and DDLBuilder, and potentially
  538. * in the OM builders also, which is why it is defined in this class.
  539. *
  540. * @param string $text The text to quote.
  541. * @return string Quoted text.
  542. */
  543. public function quoteIdentifier($text)
  544. {
  545. if (!$this->getBuildProperty('disableIdentifierQuoting')) {
  546. return $this->getPlatform()->quoteIdentifier($text);
  547. }
  548. return $text;
  549. }
  550. /**
  551. * Returns the name of the current class being built, with a possible prefix.
  552. * @return string
  553. * @see OMBuilder#getClassname()
  554. */
  555. public function prefixClassname($identifier)
  556. {
  557. return $this->getBuildProperty('classPrefix') . $identifier;
  558. }
  559. }