metadata code optimization
This commit is contained in:
@@ -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
|
||||
*
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user