/** * Cria aplicação. * * @example ApplicationAbstract::factory * @code * <?php * $decStyle = 'ICMBioGreen'; * $docType = 'html'; * * # decorador do documento * $decorator = DecoratorAbstract::factory($docType, $decStyle); * * # criar aplicacao simples sem decorator * $app = ApplicationAbstract::factory($docType, $decorator); * ?> * @endcode * * @param string $type * @param DecoratorAbstract $decorator * @return Application * @throws IllegalArgumentException * */ public static function factory($type, $decorator = NULL) { $NSApplication = __NAMESPACE__ . self::NAMESPACE_SEPARATOR . 'application' . self::NAMESPACE_SEPARATOR . 'Application' . strtoupper($type); IllegalArgumentException::throwsExceptionIfParamIsNull(Location::hasClassInNamespace($NSApplication), self::T_APPLICATION_INVLAID_APP); $application = new $NSApplication(); $application->_decorator = $decorator; return $application; }
/** * @param stdClass $param * @param string $type * @throws IllegalArgumentException * */ public static function factory(\stdClass $param, $type) { $namespace = __NAMESPACE__ . self::NAMESPACE_SEPARATOR . $type . self::NAMESPACE_SEPARATOR . 'ScreenForm'; IllegalArgumentException::throwsExceptionIfParamIsNull(Location::hasClassInNamespace($namespace), self::T_SCREENFORMABSTRACT_COMPONENT_UNAVAILABLE); return $namespace::factory($param); }
/** * Cria instância da View levando em consideração a especialização ou não da classe View pelo projeto. * * @return ViewAbstract * @throws ControllerException * @example ControllerAbstract::getView * @code * <?php * // Busca em \mvcb\view\scripts\html o arquivo Foo.html * $this->setViewType('html'); * $this->getView('foo'); * * // Busca em \mvcb\view\scripts\json o arquivo Bar.html * $this->setViewType('json'); * $this->getView('bar'); * ?> * @encode * */ public function getView() { # nome da view que sera instanciada $type = ucfirst($this->_viewType); if (!isset($this->_view[$type])) { # certifica-se de que o boostrap tenha sido inicializado ControllerException::throwsExceptionIfParamIsNull($this->_bootstrap, self::T_CONTROLLER_METHOD_AFTER_BOOTSTRAP); # complemento do namespace para o pacote view $view = '\\mvcb\\view\\'; # namespace da library da aplicacao $namespace = $this->_bootstrap->config()->get('app.namespace'); $namespace = $this->erReplace(array('application' => ''), $namespace) . 'library'; # verifica se existe especializacao da view na aplicacao # caso nao exista aponta para a view da camada do SIAL/core if (!Location::hasClassInNamespace("{$namespace}{$view}{$type}")) { $namespace = '\\br\\gov\\sial\\core'; } $namespace = "{$namespace}{$view}{$type}"; $this->_view[$type] = new $namespace(); $this->_view[$type]->registerViewScriptBasedFromController($this); $this->_view[$type]->set('constant', $this->_bootstrap->constantHandler()); } return $this->_view[$type]; }
/** * @param string $type = 'html' * @throws IllegalArgumentException * */ public static function factory($type = 'html') { $namespace = __NAMESPACE__ . self::NAMESPACE_SEPARATOR . $type . self::NAMESPACE_SEPARATOR . 'Document'; IllegalArgumentException::throwsExceptionIfParamIsNull(Location::hasClassInNamespace($namespace), self::T_INVALID_TYPE); return new $namespace($type); }
/** * Cria decorator. * * @example DecoratorAbstract::factory * @code * <?php * $docType = 'html'; * $decStyle = 'ICMBioGreen'; * * # decorador do documento * $decorator = DecoratorAbstract::factory($docType, $decStyle); * ?> * @endcode * * @param string $type * @param string $decStyle * @return Decorator * @throws IllegalArgumentException * */ public static function factory($type, $decStyle = 'default') { $NSApplication = __NAMESPACE__ . self::NAMESPACE_SEPARATOR . 'decorator' . self::NAMESPACE_SEPARATOR . 'Decorator' . strtoupper($type); IllegalArgumentException::throwsExceptionIfParamIsNull(Location::hasClassInNamespace($NSApplication), self::T_DECORATOR_INVLAID_APP); return new $NSApplication(); }
/** * @param string|ModelAbstract|null $namespace * @param stdClass $data * @return ValueObjectAbstract * */ public static function factory($namespace = NULL, $data = NULL) { $data = $data ?: new \stdClass(); if (NULL === $namespace) { $namespace = get_called_class(); } if ($namespace instanceof parent) { $namespace = $namespace->getClassName(); } if (FALSE === stripos($namespace, sprintf('%1$svalueObject%1$s', self::NAMESPACE_SEPARATOR)) && $namespace != 'br\\gov\\sial\\core\\lang\\TFile') { $sep = sprintf('%1$smvcb%1$s', self::NAMESPACE_SEPARATOR); ValueObjectException::throwsExceptionIfParamIsNull(!(FALSE === stripos($namespace, $sep)), self::T_VALUEOBJECT_IMPOSSIBLE_DEFINE_NAMESPACE); $namespace = current(explode($sep, $namespace)); $namespace = sprintf('%1$s%2$svalueObject%2$s%3$s', $namespace, self::NAMESPACE_SEPARATOR, ucfirst(end(explode(self::NAMESPACE_SEPARATOR, $namespace))) . 'ValueObject'); ValueObjectException::throwsExceptionIfParamIsNull(Location::hasClassInNamespace($namespace), sprintf(self::T_VALUEOBJECT_UNAVALIABLE, $namespace)); } $valueObject = new $namespace(); $valueObject->loadData((array) $data); return $valueObject; }