metadata code optimization

This commit is contained in:
Taras Machyshyn
2013-11-18 12:58:06 +02:00
parent 2d7c56d528
commit d1c2531125
4 changed files with 95 additions and 57 deletions
@@ -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
*
+3
View File
@@ -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;
+3 -53
View File
@@ -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
+2 -2
View File
@@ -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);
}