[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.
|