From d1c25311250299fb15fe2c168d5ba54d935e1d19 Mon Sep 17 00:00:00 2001 From: Taras Machyshyn Date: Mon, 18 Nov 2013 12:58:06 +0200 Subject: [PATCH] metadata code optimization --- .../Espo/Core/Doctrine/EspoConverter.php | 89 ++++++++++++++++++- application/Espo/Core/Utils/Api/Auth.php | 3 + application/Espo/Core/Utils/Metadata.php | 56 +----------- application/Espo/Core/Utils/Resolver.php | 4 +- 4 files changed, 95 insertions(+), 57 deletions(-) diff --git a/application/Espo/Core/Doctrine/EspoConverter.php b/application/Espo/Core/Doctrine/EspoConverter.php index 951581c71f..7acaf9e76c 100644 --- a/application/Espo/Core/Doctrine/EspoConverter.php +++ b/application/Espo/Core/Doctrine/EspoConverter.php @@ -4,18 +4,103 @@ namespace Espo\Core\Doctrine; class EspoConverter { + private $entityManager; private $metadata; + private $schemaTool; + private $disconnectedClassMetadataFactory; + private $entityGenerator; - public function __construct(\Espo\Core\Utils\Metadata $metadata) + public function __construct(\Doctrine\ORM\EntityManager $entityManager, \Espo\Core\Utils\Metadata $metadata) { + $this->entityManager = $entityManager; $this->metadata = $metadata; + + $this->schemaTool = new \Doctrine\ORM\Tools\SchemaTool($this->getEntityManager()); + $this->entityGenerator = new \Doctrine\ORM\Tools\EntityGenerator(); + + $this->disconnectedClassMetadataFactory = new \Doctrine\ORM\Tools\DisconnectedClassMetadataFactory(); + $this->disconnectedClassMetadataFactory->setEntityManager($this->getEntityManager()); // $em is EntityManager instance } - public function getMetadata() + protected function getEntityManager() + { + return $this->entityManager; + } + + protected function getMetadata() { return $this->metadata; } + + protected function getSchemaTool() + { + return $this->schemaTool; + } + + protected function getDisconnectedClassMetadataFactory() + { + return $this->disconnectedClassMetadataFactory; + } + + protected function getEntityGenerator() + { + return $this->entityGenerator; + } + + + + /** + * Rebuild a database accordinly to metadata + * + * @return bool + */ + public function rebuildDatabase() + { + $GLOBALS['log']->add('DEBUG', 'EspoConverter:rebuildDatabase() - start rebuild database'); + + $classes = $this->getDisconnectedClassMetadataFactory()->getAllMetadata(); + $this->getSchemaTool()->updateSchema($classes); + + $GLOBALS['log']->add('DEBUG', 'EspoConverter:rebuildDatabase() - end rebuild database'); + + return true; //always true, because updateSchema just returns the VOID + } + + /** + * Rebuild a database accordinly to metadata + * + * @return bool + */ + public function generateEntities($classNames) + { + if (!is_array($classNames)) { + $classNames= (array) $classNames; + } + + $metadata= array(); + foreach($classNames as $className) { + $metadata[]= $this->getDisconnectedClassMetadataFactory()->getMetadataFor($className); + } + + if (!empty($metadata)) { + $GLOBALS['log']->add('DEBUG', 'EspoConverter:generateEntities() - start generate Entities'); + + $this->getEntityGenerator()->setGenerateAnnotations(false); + $this->getEntityGenerator()->setGenerateStubMethods(true); + $this->getEntityGenerator()->setRegenerateEntityIfExists(false); + $this->getEntityGenerator()->setUpdateEntityIfExists(false); + $this->getEntityGenerator()->generate($metadata, 'application'); + + $GLOBALS['log']->add('DEBUG', 'EspoConverter:generateEntities() - end generate Entities'); + + return true; //always true, because generate just returns the VOID + } + + return false; + } + + /** * Metadata conversion from Espo format into Doctrine * diff --git a/application/Espo/Core/Utils/Api/Auth.php b/application/Espo/Core/Utils/Api/Auth.php index 3361555353..cdc46f5780 100644 --- a/application/Espo/Core/Utils/Api/Auth.php +++ b/application/Espo/Core/Utils/Api/Auth.php @@ -8,6 +8,9 @@ class Auth extends \Slim\Middleware { private $container; + protected $realm = 'Protected Area'; + + public function __construct(\Espo\Core\Container $container) { $this->container = $container; diff --git a/application/Espo/Core/Utils/Metadata.php b/application/Espo/Core/Utils/Metadata.php index b322fd00a7..512ba5ccaa 100644 --- a/application/Espo/Core/Utils/Metadata.php +++ b/application/Espo/Core/Utils/Metadata.php @@ -24,7 +24,7 @@ class Metadata $this->config = $config; $this->uniteFiles = $uniteFiles; $this->fileManager = $fileManager; - $this->doctrineConverter = new \Espo\Core\Doctrine\EspoConverter($this); //TODO + $this->doctrineConverter = new \Espo\Core\Doctrine\EspoConverter($entityManager, $this); } @@ -85,7 +85,7 @@ class Metadata $GLOBALS['log']->add('Debug', 'Metadata:get() - database rebuild'); try{ - $this->rebuildDatabase(); + $this->getDoctrineConverter()->rebuildDatabase(); } catch (\Exception $e) { $GLOBALS['log']->add('EXCEPTION', 'Try to rebuildDatabase'.'. Details: '.$e->getMessage()); } @@ -168,7 +168,7 @@ class Metadata //create classes only for "defs" metadata if ($type == $this->doctrineMetadataName) { try{ - $this->generateEntities( array($this->getEntityPath($scope)) ); + $this->getDoctrineConverter()->generateEntities( array($this->getEntityPath($scope)) ); } catch (\Exception $e) { $GLOBALS['log']->add('EXCEPTION', 'Try to generate Entities for '.$this->getEntityPath($scope).'. Details: '.$e->getMessage()); } @@ -211,56 +211,6 @@ class Metadata return $result; } - /** - * Rebuild a database accordinly to metadata - * - * @return bool - */ - public function rebuildDatabase() - { - $tool = new \Doctrine\ORM\Tools\SchemaTool($this->getEntityManager()); - - $cmf = new \Doctrine\ORM\Tools\DisconnectedClassMetadataFactory(); - $cmf->setEntityManager($this->getEntityManager()); // $em is EntityManager instance - $classes = $cmf->getAllMetadata(); - - $tool->updateSchema($classes); - - return true; //always true, because updateSchema just returns the VOID - } - - /** - * Rebuild a database accordinly to metadata - * - * @return bool - */ - public function generateEntities($classNames) - { - if (!is_array($classNames)) { - $classNames= (array) $classNames; - } - - $cmf = new \Doctrine\ORM\Tools\DisconnectedClassMetadataFactory(); - $cmf->setEntityManager($this->getEntityManager()); // $em is EntityManager instance - - $metadata= array(); - foreach($classNames as $className) { - $metadata[]= $cmf->getMetadataFor($className); - } - - if (!empty($metadata)) { - $generator = new \Doctrine\ORM\Tools\EntityGenerator(); - $generator->setGenerateAnnotations(false); - $generator->setGenerateStubMethods(true); - $generator->setRegenerateEntityIfExists(false); - $generator->setUpdateEntityIfExists(false); - $generator->generate($metadata, 'application'); - - return true; //always true, because generate just returns the VOID - } - - return false; - } /** * Unite file content to the file diff --git a/application/Espo/Core/Utils/Resolver.php b/application/Espo/Core/Utils/Resolver.php index 8e58ceb669..29beceeeab 100644 --- a/application/Espo/Core/Utils/Resolver.php +++ b/application/Espo/Core/Utils/Resolver.php @@ -54,12 +54,12 @@ class Resolver protected function DBALException($args) { - return $this->getMetadata()->rebuildDatabase(); + return $this->getMetadata()->getDoctrineConverter()->rebuildDatabase(); } protected function ReflectionException($args) { - return $this->getMetadata()->generateEntities($args); + return $this->getMetadata()->getDoctrineConverter()->generateEntities($args); }