[Beeframework-svn] SF.net SVN: beeframework:[231] trunk/framework/Bee
Brought to you by:
b_hartmann,
m_plomer
From: <m_p...@us...> - 2014-09-26 12:53:59
|
Revision: 231 http://sourceforge.net/p/beeframework/code/231 Author: m_plomer Date: 2014-09-26 12:53:49 +0000 (Fri, 26 Sep 2014) Log Message: ----------- Context/Xml: added ability to decorate custom namespace beans with custom decorators Modified Paths: -------------- trunk/framework/Bee/Context/BeanDefinitionValueResolver.php trunk/framework/Bee/Context/Support/BeanDefinitionReaderUtils.php trunk/framework/Bee/Context/Xml/ParserDelegate.php trunk/framework/Bee/Context/Xml/XmlNamespace/AbstractBeanDefinitionParser.php trunk/framework/Bee/MVC/View/RequestStoringRedirectView.php Modified: trunk/framework/Bee/Context/BeanDefinitionValueResolver.php =================================================================== --- trunk/framework/Bee/Context/BeanDefinitionValueResolver.php 2014-09-26 08:53:13 UTC (rev 230) +++ trunk/framework/Bee/Context/BeanDefinitionValueResolver.php 2014-09-26 12:53:49 UTC (rev 231) @@ -134,21 +134,17 @@ private function resolveReference($argName, RuntimeBeanReference $ref) { try { if ($ref->isToParent()) { - if (is_null($this->context->getParent())) { // @todo: a lot of debug information is lost here throw new Bee_Context_BeanCreationException($this->beanName); } // return $this->context->getParent()->getBean($ref->getBeanName()); return $this->getBeanFromContext($ref->getBeanNames(), $this->context->getParent()); - } else { - // $bean = $this->context->getBean($ref->getBeanName()); // $this->context->registerDependentBean($ref->getBeanName(), $this->beanName); // return $bean; return $this->getBeanFromContext($ref->getBeanNames(), $this->context); - } } catch (Bee_Context_BeansException $ex) { Modified: trunk/framework/Bee/Context/Support/BeanDefinitionReaderUtils.php =================================================================== --- trunk/framework/Bee/Context/Support/BeanDefinitionReaderUtils.php 2014-09-26 08:53:13 UTC (rev 230) +++ trunk/framework/Bee/Context/Support/BeanDefinitionReaderUtils.php 2014-09-26 12:53:49 UTC (rev 231) @@ -1,5 +1,6 @@ <?php namespace Bee\Context\Support; + /* * Copyright 2008-2014 the original author or authors. * @@ -81,22 +82,21 @@ $id = $generatedBeanName; // @todo: special name generation for inner beans (see below) - // Top-level bean: use plain class name. - // Increase counter until the id is unique. - $counter = -1; - while ($counter == -1 || $registry->containsBeanDefinition($id)) { - $counter++; - $id = $generatedBeanName . self::GENERATED_BEAN_NAME_SEPARATOR . $counter; - } // @todo: this should be used for name generation of inner beans. right now we don't have a good identity function for PHP // objects. (btw, is this necessary at all?) -// if ($isInnerBean) { - // Inner bean: generate identity hashcode suffix. -// $id = $generatedBeanName + self::GENERATED_BEAN_NAME_SEPARATOR + ObjectUtils.getIdentityHexString(definition); -// } else { - // shold wrap the above code here... -// } + if ($isInnerBean) { + // Inner bean: generate identity hashcode suffix. + $id = $generatedBeanName . self::GENERATED_BEAN_NAME_SEPARATOR . spl_object_hash($definition); + } else { + // Top-level bean: use plain class name. + // Increase counter until the id is unique. + $counter = -1; + while ($counter == -1 || $registry->containsBeanDefinition($id)) { + $counter++; + $id = $generatedBeanName . self::GENERATED_BEAN_NAME_SEPARATOR . $counter; + } + } return $id; } Modified: trunk/framework/Bee/Context/Xml/ParserDelegate.php =================================================================== --- trunk/framework/Bee/Context/Xml/ParserDelegate.php 2014-09-26 08:53:13 UTC (rev 230) +++ trunk/framework/Bee/Context/Xml/ParserDelegate.php 2014-09-26 12:53:49 UTC (rev 231) @@ -545,12 +545,10 @@ public function parsePropertySubElement(DOMElement $ele, IBeanDefinition $bd, $defaultType = null) { if (!$this->isDefaultNamespace($ele->namespaceURI)) { - // todo MP: why is this missing? prevents XMLs with e.g. nested <util:array/> elements from being parsed // return $this->parseNestedCustomElement($ele, $bd); -// return $this->parseCustomElement($ele, $bd); - throw new Bee_Context_BeanCreationException($bd->getBeanClassName(), 'Namespaced nested elements are currently not supported'); - +// return $this->decorateWithCustomElement($ele, $bd); +// throw new Bee_Context_BeanCreationException($bd->getBeanClassName(), 'Namespaced nested elements are currently not supported'); } else if (Bee_Utils_Dom::nodeNameEquals($ele, self::BEAN_ELEMENT)) { $bdHolder = $this->parseBeanDefinitionElement($ele, $bd); @@ -681,7 +679,7 @@ $assoc = true; list($key, $value) = $this->parseAssocItemElement($ele, $bd, $defaultType); $list[$numericKeys ? intval($key) : $key] = $value; - } else { + } else if($this->isDefaultNamespace($ele->namespaceURI)) { $numeric = true; array_push($list, $this->parsePropertySubElement($ele, $bd, $defaultType)); } @@ -732,13 +730,29 @@ * @return IBeanDefinition */ public function parseCustomElement(DOMElement $ele, IBeanDefinition $containingBd = null) { + $handler = $this->findNamespaceHandler($ele); + $bd = !is_null($handler) ? $handler->parse($ele, new ParserContext($this->readerContext, $this, $containingBd)) : null; + if(!is_null($bd)) { + $beanName = BeanDefinitionReaderUtils::generateBeanName($bd, $this->readerContext->getRegistry(), true); + $this->readerContext->getRegistry()->registerBeanDefinition($beanName, $bd); + $bd = $this->decorateBeanDefinitionIfRequired($ele, new BeanDefinitionHolder($bd, $beanName)); + } + return $bd; + } + + /** + * @param DOMElement $ele + * @return XmlNamespace\IHandler|null + * @throws Bee_Context_BeanCreationException + */ + protected function findNamespaceHandler(DOMElement $ele) { $namespaceUri = $ele->namespaceURI; $handler = $this->readerContext->getNamespaceHandlerResolver()->resolve($namespaceUri); if (is_null($handler)) { $this->readerContext->error("Unable to locate Spring NamespaceHandler for XML schema namespace [$namespaceUri]", $ele); return null; } - return $handler->parse($ele, new ParserContext($this->readerContext, $this, $containingBd)); + return $handler; } /** Modified: trunk/framework/Bee/Context/Xml/XmlNamespace/AbstractBeanDefinitionParser.php =================================================================== --- trunk/framework/Bee/Context/Xml/XmlNamespace/AbstractBeanDefinitionParser.php 2014-09-26 08:53:13 UTC (rev 230) +++ trunk/framework/Bee/Context/Xml/XmlNamespace/AbstractBeanDefinitionParser.php 2014-09-26 12:53:49 UTC (rev 231) @@ -58,8 +58,7 @@ // postProcessComponentDefinition(componentDefinition); // parserContext.registerComponent(componentDefinition); // } - } - catch (Bee_Context_BeanDefinitionStoreException $ex) { + } catch (Bee_Context_BeanDefinitionStoreException $ex) { $parserContext->getReaderContext()->error($ex->getMessage(), $element); return null; } Modified: trunk/framework/Bee/MVC/View/RequestStoringRedirectView.php =================================================================== --- trunk/framework/Bee/MVC/View/RequestStoringRedirectView.php 2014-09-26 08:53:13 UTC (rev 230) +++ trunk/framework/Bee/MVC/View/RequestStoringRedirectView.php 2014-09-26 12:53:49 UTC (rev 231) @@ -48,6 +48,9 @@ return $this->stores; } + /** + * @param array $model + */ public function render(array $model = array()) { $this->augmentModel($model); $getParams = array_key_exists(self::MODEL_KEY_GET_PARAMS, $model) ? $model[self::MODEL_KEY_GET_PARAMS] : array(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |