public function prebuildEmbedType($yaml_path, AdminGenerator $generator)
 {
     $pattern_string = '/(?<namespace_prefix>(?>.+\\:)?.+)\\:(?<bundle_name>.+Bundle)\\:(?<generator_path>.*?)$/';
     if (preg_match($pattern_string, $yaml_path, $match_string)) {
         $namespace_prefix = $match_string['namespace_prefix'];
         $bundle_name = $match_string['bundle_name'];
         $generator_path = $match_string['generator_path'];
     } else {
         $namespace_prefix = $generator->getFromYaml('params.namespace_prefix');
         $bundle_name = $generator->getFromYaml('params.bundle_name');
         $generator_path = $yaml_path;
     }
     $yaml_file = $this->kernel->locateResource('@' . $namespace_prefix . $bundle_name . '/Resources/config/' . $generator_path);
     if (!file_exists($yaml_file)) {
         throw new CantGenerateException("Can't generate embed type for {$yaml_file}, file not found.");
     }
     $embedGenerator = new AdminGenerator($this->cache_dir, $yaml_file);
     $embedGenerator->setBundleConfig($this->bundleConfig);
     $embedGenerator->setRouter($this->router);
     $embedGenerator->setBaseAdminTemplate($embedGenerator->getFromYaml('base_admin_template', $embedGenerator->getFromBundleConfig('base_admin_template')));
     $embedGenerator->setFieldGuesser($this->getFieldGuesser());
     $embedGenerator->setMustOverwriteIfExists($this->needToOverwrite($embedGenerator));
     $embedGenerator->setTwigExtensions($this->twig->getExtensions());
     $embedGenerator->setTwigFilters($this->twig->getFilters());
     $embedGenerator->setTemplateDirs($this->templatesDirectories);
     $embedGenerator->addBuilder(new EditBuilderType());
     $embedGenerator->addBuilder(new NewBuilderType());
     $embedGenerator->writeOnDisk($this->getCachePath($embedGenerator->getFromYaml('params.namespace_prefix'), $generator->getFromYaml('params.bundle_name')));
 }
 public function prebuildEmbedType($yaml_path, AdminGenerator $generator)
 {
     $pattern_string = '/(?<namespace_prefix>(?>.+\\:)?.+)\\:(?<bundle_name>.+Bundle)\\:(?<generator_path>.*?)$/';
     if (preg_match($pattern_string, $yaml_path, $match_string)) {
         $namespace_prefix = $match_string['namespace_prefix'];
         $bundle_name = $match_string['bundle_name'];
         $generator_path = $match_string['generator_path'];
     } else {
         $namespace_prefix = $generator->getFromYaml('params.namespace_prefix');
         $bundle_name = $generator->getFromYaml('params.bundle_name');
         $generator_path = $yaml_path;
     }
     $kernel = $this->container->get('kernel');
     $yaml_file = $kernel->locateResource('@' . $namespace_prefix . $bundle_name . '/Resources/config/' . $generator_path);
     if (!file_exists($yaml_file)) {
         throw new CantGenerateException("Can't generate embed type for {$yaml_file}, file not found.");
     }
     $embedGenerator = new AdminGenerator($this->cache_dir, $yaml_file);
     $embedGenerator->setContainer($this->container);
     $embedGenerator->setBaseAdminTemplate($embedGenerator->getFromYaml('base_admin_template', $this->container->getParameter('admingenerator.base_admin_template')));
     $embedGenerator->setFieldGuesser($this->getFieldGuesser());
     $embedGenerator->setMustOverwriteIfExists($this->needToOverwrite($embedGenerator));
     $embedGenerator->setTemplateDirs(array_merge($this->container->getParameter('admingenerator.doctrine_templates_dirs'), array(__DIR__ . '/../Resources/templates/Doctrine')));
     $embedGenerator->addBuilder(new EditBuilderType());
     $embedGenerator->addBuilder(new NewBuilderType());
     $embedGenerator->writeOnDisk($this->getCachePath($embedGenerator->getFromYaml('params.namespace_prefix'), $generator->getFromYaml('params.bundle_name')));
 }
 /**
  * (non-PHPdoc)
  * @see Generator/Admingenerator\GeneratorBundle\Generator.Generator::build()
  * @see http://juliusbeckmann.de/blog/php-benchmark-isset-or-array_key_exists.html
  *   // Key is NULL
  *   $array['key'] = NULL;
  *   var_dump(isset($array['key'])); // false
  *   var_dump(array_key_exists('key', $array)); // true
  */
 public function build()
 {
     $generator = new AdminGenerator($this->cache_dir, $this->getGeneratorYml());
     $generator->setContainer($this->container);
     $generator->setBaseAdminTemplate($this->container->getParameter('admingenerator.base_admin_template'));
     $generator->setFieldGuesser($this->getFieldGuesser());
     $generator->setMustOverwriteIfExists($this->needToOverwrite($generator));
     $generator->setTemplateDirs(array(__DIR__ . '/../Resources/templates/DoctrineODM'));
     $generator->setBaseController('Admingenerator\\GeneratorBundle\\Controller\\DoctrineODM\\BaseController');
     $generator->setBaseGeneratorName($this->getBaseGeneratorName());
     $builders = $generator->getFromYaml('builders', array());
     if (array_key_exists('list', $builders)) {
         $generator->addBuilder(new ListBuilderAction());
         $generator->addBuilder(new ListBuilderTemplate());
         $generator->addBuilder(new FiltersBuilderType());
     }
     if (array_key_exists('delete', $builders)) {
         $generator->addBuilder(new DeleteBuilderAction());
     }
     if (array_key_exists('edit', $builders)) {
         $generator->addBuilder(new EditBuilderAction());
         $generator->addBuilder(new EditBuilderTemplate());
         $generator->addBuilder(new EditBuilderType());
     }
     if (array_key_exists('new', $builders)) {
         $generator->addBuilder(new NewBuilderAction());
         $generator->addBuilder(new NewBuilderTemplate());
         $generator->addBuilder(new NewBuilderType());
     }
     $generator->writeOnDisk($this->getCachePath($generator->getFromYaml('params.namespace_prefix'), $generator->getFromYaml('params.bundle_name')));
 }
 /**
  * Check if we have to build file
  */
 public function needToOverwrite(AdminGenerator $generator)
 {
     if ($this->container->getParameter('admingenerator.overwrite_if_exists')) {
         return true;
     }
     $cacheDir = $this->getCachePath($generator->getFromYaml('params.namespace_prefix'), $generator->getFromYaml('params.bundle_name'));
     if (!is_dir($cacheDir)) {
         return true;
     }
     $fileInfo = new \SplFileInfo($this->getGeneratorYml());
     $finder = new Finder();
     $files = $finder->files()->date('< ' . date('Y-m-d H:i:s', $fileInfo->getMTime()))->in($cacheDir)->count();
     if ($files > 0) {
         return true;
     }
     $finder = new Finder();
     foreach ($finder->files()->in($cacheDir) as $file) {
         if (false !== strpos(file_get_contents($file), 'AdmingeneratorEmptyBuilderClass')) {
             return true;
         }
     }
     return false;
 }