/**
  * Load extension.
  *
  * @param array            $configs
  * @param ContainerBuilder $container
  */
 public function load(array $configs, ContainerBuilder $container)
 {
     $loader = new FilesystemLoader($configs['paths'], $container, $configs['app_path']);
     $environment = new Twig_Environment($loader, $configs['options']);
     $container->register('twig.loader', $loader);
     $container->register('twig.environment', $environment);
     $container->load($this->loadResource('Resources/config/services.yml'));
 }
 /**
  * Prepare handler.
  *
  * @param ContainerBuilder $container
  * @param Closure          $closure
  *
  * @return Closure
  */
 private static function prepare(ContainerBuilder $container, Closure $closure)
 {
     return function (MessageInterface $message, $handler) use($container, $closure) {
         $handler = $container->getDi()->createInstance($handler);
         $handler = $handler->getOriginalInstance();
         self::assertHandleMethodExist($handler, $message);
         return call_user_func($closure, $message, $handler);
     };
 }
 /**
  * {@inheritdoc}
  */
 protected function handle(JobInterface $job)
 {
     try {
         parent::handle($job);
         $this->container->get('cqrs.command_bus')->dispatchNow($job);
     } catch (\Exception $e) {
         $this->output->writeln(sprintf('<style name="error">%s</style>', $e->getMessage()));
     }
 }
 /**
  * Constructor.
  *
  * @param ContainerBuilder $container
  * @param array            $bundles
  */
 public function __construct(ContainerBuilder $container, array $bundles)
 {
     $this->resolver = $container->getParameterBag()->getResolver();
     foreach ($bundles as $bundle) {
         if ($bundle instanceof BundleInterface) {
             $this->bundlesPath['@' . $bundle->getName()] = $bundle->getPath();
         }
     }
 }
 /**
  * Load registered extensions.
  *
  * @param Configuration    $configuration
  * @param ContainerBuilder $container
  */
 public function load(Configuration $configuration, ContainerBuilder $container)
 {
     $resolver = $container->getParameterBag()->getResolver();
     foreach ($this->extension as $alias => $extension) {
         $extension->initialize($configuration, $container);
         if ($extension instanceof PrependConfigInterface) {
             $extension->prepend($container);
         }
         $extension->load($resolver->resolveValue($configuration->get($alias)), $container);
     }
 }
 /**
  * Build container
  *
  * @param KernelInterface $kernel
  */
 private function buildContainer(KernelInterface $kernel)
 {
     $this->container = new ContainerBuilder(new ParameterBag($kernel->getKernelParameters()));
     $this->extension = new ExtensionManager();
     $this->configuration = new Configuration();
     $this->resource = new ResourceBuilder($this->container, $kernel->getBundleManager()->all());
     // register some services
     foreach ($this->getDefaultServices($kernel) as $id => $service) {
         $this->container->register($id, $service, true);
     }
     // register it self.
     $this->container->register('container', $this->container, true);
 }
 /**
  * Execute console.
  *
  * @param AbstractInput $input
  * @param Output        $output
  */
 protected function execute(AbstractInput $input, Output $output)
 {
     /** @var RouteCollection $routeCollection */
     $routeCollection = $this->container->get('route_collection');
     $table = new Table($output);
     $table->setHeaders(array(new Table\TableHeader('Name'), new Table\TableHeader('Method'), new Table\TableHeader('Path'), new Table\TableHeader('Action'), new Table\TableHeader('Domain'), new Table\TableHeader('Schema'), new Table\TableHeader('Middleware')));
     foreach ($routeCollection->dump() as $name => $route) {
         $middleware = array();
         $r = $routeCollection->get($name);
         if ($r->hasBag('middlewares')) {
             $middleware = $this->buildMiddlewareString($r->getBag('middlewares')->all());
         }
         $table->addRow(array(new Table\TableCell($name), new Table\TableCell(strtoupper(empty($route['methods']) ? 'any' : implode('|', $route['methods']))), new Table\TableCell($route['path']), new Table\TableCell($route['handler']), new Table\TableCell(empty($route['domain']) ? 'ANY' : $route['domain']), new Table\TableCell(implode('|', $route['schemas'])), new Table\TableCell($middleware)));
     }
     $table->write();
 }
 /**
  * Load services from config.
  *
  * @param array $configs
  */
 private function loadServicesFromConfig(array &$configs)
 {
     if (isset($configs['services']) && is_array($configs['services'])) {
         $this->container->load($configs['services']);
         unset($configs['services']);
     }
 }
 /**
  * Build response from controller.
  *
  * @param string $bundleName
  * @param string $controller
  * @param array  $parameters
  *
  * @return mixed
  */
 private function getBundleController($bundleName, $controller, array $parameters)
 {
     $bundleManager = $this->kernel->getBundleManager();
     if (null !== ($bundle = $bundleManager->get($bundleName))) {
         $class = $bundle->getNamespace() . '\\' . $this->prefix . '\\' . $controller . 'Controller';
         if (!class_exists($class)) {
             throw new RuntimeException(sprintf('Controller "%s" is undefined.', $class));
         }
         return $this->container->getDi()->createInstance($class, $parameters);
     }
     throw new RuntimeException(sprintf('Bundle "%s" is undefined.', $bundleName));
 }
 /**
  * Normalize array service parameters.
  *
  * @param array  $service
  * @param string $index
  *
  * @return array
  */
 private function normalizeParameters(array $service, $index)
 {
     if (!$this->isValidArrayParameters($service, $index)) {
         return array();
     }
     $resolver = $this->container->getParameterBag()->getResolver();
     $normalized = array();
     foreach ($service[$index] as $index => $value) {
         $normalized[$index] = $this->computeValue($value, $resolver);
     }
     return $resolver->resolveValue($normalized);
 }
 /**
  * Load extension.
  *
  * @param array            $configs
  * @param ContainerBuilder $container
  */
 public function load(array $configs, ContainerBuilder $container)
 {
     if ($container->has('request')) {
         new RequestFacade($container->get('request'));
     }
     /** @var KernelInterface $kernel */
     $kernel = $container->get('kernel');
     $routes = $this->buildRouteCollection($configs['router']['routes']);
     $container->register('route_collection', $routes, true);
     $kernel->addListenerOnce(KernelEvents::REQUEST, array(new RouterListener($routes, $configs['router']['prefix']), 'onRequest'));
     Log::$APP_LOG = $configs['log']['name'];
     $container->register('log', $this->buildLog($configs['log']), true);
     $container->setDefinition('template', new Definition('Borobudur\\Bundle\\FrameworkBundle\\Template\\TemplateCompiler'))->addArgument(new Reference('container'))->addArgument($configs['template']['app_path'])->share();
     $container->setDefinition('acl', new Definition('Borobudur\\Acl\\Acl'))->addArgument(isset($configs['acl']) && isset($configs['acl']['policies']) ? $configs['acl']['policies'] : null)->share();
 }
 /**
  * Load resource file.
  *
  * @param string $fileName
  *
  * @return array
  */
 protected final function loadResource($fileName)
 {
     $resolver = $this->container->getParameterBag()->getResolver();
     $fileName = $resolver->resolveString($this->getBundlePath() . '/' . ltrim($fileName, '/'));
     $resources = $this->loader->import(new FileLocator($fileName));
     $resources = $this->resource->process($this->loader, $resources);
     if (isset($resources['parameters']) && is_array($resources['parameters'])) {
         foreach ($resources['parameters'] as $name => $param) {
             if (!$this->container->getParameterBag()->has($name)) {
                 $this->container->getParameterBag()->set($name, $param);
             }
         }
     }
     return $resolver->resolveValue($resources);
 }
 /**
  * Build storage.
  *
  * @param ContainerBuilder $container
  * @param array            $configs
  */
 private function buildStorage(ContainerBuilder $container, array $configs)
 {
     $readModelStorage = $this->buildReadModelStorage($configs['read_model']['storage']);
     $readModelDefinition = new AbstractDefinition(get_class($readModelStorage), 'Borobudur\\Cqrs\\ReadModel\\Storage\\StorageInterface');
     $container->register('cqrs.read_model_storage', $readModelStorage);
     $container->setDefinition('cqrs.read_model_storage', $readModelDefinition);
     if (true === $configs['snapshot']['enable']) {
         $snapshot = $this->buildSnapshot($configs['snapshot']['storage']);
         $snapshotDefinition = new AbstractDefinition(get_class($snapshot), 'Borobudur\\EventSourcing\\Snapshot\\SnapshotInterface');
         $container->register('cqrs.snapshot', $snapshot);
         $container->setDefinition('cqrs.snapshot', $snapshotDefinition);
         $container->get('cqrs.snapshot')->setSnapshotPeriodical($configs['snapshot']['periodically']);
     }
     $eventStore = $this->buildEventStore($configs['event_store']['storage']);
     $eventStoreDefinition = new AbstractDefinition(get_class($eventStore), 'Borobudur\\EventSourcing\\Storage\\StorageInterface');
     $container->register('cqrs.event_store', $eventStore);
     $container->setDefinition('cqrs.event_store', $eventStoreDefinition);
     if (true === $configs['snapshot']['enable']) {
         $container->get('cqrs.event_store')->attachSnapshot($container->get('cqrs.snapshot'));
     }
     $container->register('cqrs.uow_transaction', new UnitOfWorkTransaction(array($container->get('cqrs.read_model_storage'), $container->get('cqrs.event_store'))));
 }
 /**
  * Load extension.
  *
  * @param array            $configs
  * @param ContainerBuilder $container
  */
 public function load(array $configs, ContainerBuilder $container)
 {
     $container->getParameterBag()->set('app.locale', $configs['locale']);
     $container->getParameterBag()->set('app.port', $configs['port']);
     $container->load($this->loadResource('Resources/configs/services.yml'));
 }
 /**
  * Constructor.
  *
  * @param ContainerBuilder $container
  * @param string           $appPath
  */
 public function __construct(ContainerBuilder $container, $appPath)
 {
     $this->container = $container;
     $this->locator = new TemplateFileLocator($this->container->get('kernel')->getBundleManager(), $appPath);
 }
 /**
  * Generate route path.
  *
  * @param string $name
  * @param array  $params
  *
  * @return RequestContext
  */
 public function generateRoute($name, array $params = array())
 {
     return $this->container->get('router')->generateRoute($name, $params)->getPath();
 }
 /**
  * Constructor.
  *
  * @param array            $paths
  * @param ContainerBuilder $container
  * @param string           $appPath
  */
 public function __construct($paths = array(), ContainerBuilder $container, $appPath)
 {
     parent::__construct($paths);
     $this->locator = new TemplateFileLocator($container->get('kernel')->getBundleManager(), $appPath);
 }
 /**
  * {@inheritdoc}
  */
 public function build(ContainerBuilder $container)
 {
     $container->addTag(new UnitOfWorkTransactionTag());
 }
 /**
  * {@inheritdoc}
  */
 public function build(ContainerBuilder $container)
 {
     $container->addTag(new TwigExtensionTag());
 }
 /**
  * Add consoles.
  *
  * @param array $consoles
  */
 private function add(array $consoles, ContainerBuilder $container)
 {
     foreach ($consoles as $console) {
         if (is_string($console)) {
             $instance = $container->getDi()->createInstance($console);
             /** @var AbstractConsole $console */
             $console = $instance->getOriginalInstance();
         }
         $this->addConsole($console);
     }
 }
 /**
  * @return string
  */
 private function getDefaultLog()
 {
     return $this->container->getParameterBag()->getResolver()->resolveString('%kernel.root_dir%/../var/log/%kernel.environment%/server.log');
 }
 public function testDefineAbstractServiceFromArray()
 {
     $services = array('iqbal' => array('class' => 'Borobudur\\DependencyInjection\\Test\\Iqbal', 'abstract' => 'Borobudur\\DependencyInjection\\Test\\WarriorInterface'), 'battle' => array('class' => 'Borobudur\\DependencyInjection\\Test\\Battle'));
     $container = new ContainerBuilder();
     $container->load($services);
     $battle = $container->get('battle');
     $this->assertEquals('iqbal', $battle->warrior->getName());
     $this->assertEquals('fighter', $battle->warrior->getType());
 }
 /**
  * @return AbstractKernel
  */
 private function getKernel()
 {
     return $this->container->get('kernel');
 }
 /**
  * {@inheritdoc}
  */
 public function load(array $configs, ContainerBuilder $container)
 {
     $container->load($this->loadResource('Resources/config/services.yml'));
     $container->get('cqrs.event_bus')->registers($this->loadResource('Resources/config/messages/event.yml'));
 }
 /**
  * Get configuration.
  *
  * @return Configuration
  */
 public function getConfiguration()
 {
     return $this->container->get('config');
 }
 /**
  * {@inheritdoc}
  */
 public function build(ContainerBuilder $container)
 {
     $container->addTag(new TemplateCompilerTag());
 }
 /**
  * {@inheritdoc}
  */
 public function process(ContainerBuilder $container, $id, array $attributes)
 {
     $definition = $container->getDefinition('twig');
     $definition->addMethodCall('addExtension', array(new Reference($id)));
 }
 /**
  * {@inheritdoc}
  */
 public function process(ContainerBuilder $container, $id, array $attributes)
 {
     $definition = $container->getDefinition('cqrs.uow_transaction');
     $definition->addMethodCall('add', array(new Reference($id)));
 }