* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Config\Definition\Builder; use Symfony\Component\Config\Definition\NodeInterface; use Symfony\Component\Config\Definition\Exception\InvalidDefinitionException; /** * This class provides a fluent interface for defining a node. * * @author Johannes M. Schmitt */ abstract class NodeDefinition implements NodeParentInterface { protected $name; protected $normalization; protected $validation; protected $defaultValue; protected $default = false; protected $required = false; protected $deprecationMessage = null; protected $merge; protected $allowEmptyValue = true; protected $nullEquivalent; protected $trueEquivalent = true; protected $falseEquivalent = false; protected $parent; protected $attributes = array(); /** * @param string|null $name The name of the node * @param NodeParentInterface|null $parent The parent */ public function __construct($name, NodeParentInterface $parent = null) { $this->parent = $parent; $this->name = $name; } /** * Sets the parent node. * * @return $this */ public function setParent(NodeParentInterface $parent) { $this->parent = $parent; return $this; } /** * Sets info message. * * @param string $info The info text * * @return $this */ public function info($info) { return $this->attribute('info', $info); } /** * Sets example configuration. * * @param string|array $example * * @return $this */ public function example($example) { return $this->attribute('example', $example); } /** * Sets an attribute on the node. * * @param string $key * @param mixed $value * * @return $this */ public function attribute($key, $value) { $this->attributes[$key] = $value; return $this; } /** * Returns the parent node. * * @return NodeParentInterface|NodeBuilder|NodeDefinition|ArrayNodeDefinition|VariableNodeDefinition|null The builder of the parent node */ public function end() { return $this->parent; } /** * Creates the node. * * @param bool $forceRootNode Whether to force this node as the root node * * @return NodeInterface */ public function getNode($forceRootNode = false) { if ($forceRootNode) { $this->parent = null; } if (null !== $this->normalization) { $this->normalization->before = ExprBuilder::buildExpressions($this->normalization->before); } if (null !== $this->validation) { $this->validation->rules = ExprBuilder::buildExpressions($this->validation->rules); } $node = $this->createNode(); $node->setAttributes($this->attributes); return $node; } /** * Sets the default value. * * @param mixed $value The default value * * @return $this */ public function defaultValue($value) { $this->default = true; $this->defaultValue = $value; return $this; } /** * Sets the node as required. * * @return $this */ public function isRequired() { $this->required = true; return $this; } /** * Sets the node as deprecated. * * You can use %node% and %path% placeholders in your message to display, * respectively, the node name and its complete path. * * @param string $message Deprecation message * * @return $this */ public function setDeprecated($message = 'The child node "%node%" at path "%path%" is deprecated.') { $this->deprecationMessage = $message; return $this; } /** * Sets the equivalent value used when the node contains null. * * @param mixed $value * * @return $this */ public function treatNullLike($value) { $this->nullEquivalent = $value; return $this; } /** * Sets the equivalent value used when the node contains true. * * @param mixed $value * * @return $this */ public function treatTrueLike($value) { $this->trueEquivalent = $value; return $this; } /** * Sets the equivalent value used when the node contains false. * * @param mixed $value * * @return $this */ public function treatFalseLike($value) { $this->falseEquivalent = $value; return $this; } /** * Sets null as the default value. * * @return $this */ public function defaultNull() { return $this->defaultValue(null); } /** * Sets true as the default value. * * @return $this */ public function defaultTrue() { return $this->defaultValue(true); } /** * Sets false as the default value. * * @return $this */ public function defaultFalse() { return $this->defaultValue(false); } /** * Sets an expression to run before the normalization. * * @return ExprBuilder */ public function beforeNormalization() { return $this->normalization()->before(); } /** * Denies the node value being empty. * * @return $this */ public function cannotBeEmpty() { $this->allowEmptyValue = false; return $this; } /** * Sets an expression to run for the validation. * * The expression receives the value of the node and must return it. It can * modify it. * An exception should be thrown when the node is not valid. * * @return ExprBuilder */ public function validate() { return $this->validation()->rule(); } /** * Sets whether the node can be overwritten. * * @param bool $deny Whether the overwriting is forbidden or not * * @return $this */ public function cannotBeOverwritten($deny = true) { $this->merge()->denyOverwrite($deny); return $this; } /** * Gets the builder for validation rules. * * @return ValidationBuilder */ protected function validation() { if (null === $this->validation) { $this->validation = new ValidationBuilder($this); } return $this->validation; } /** * Gets the builder for merging rules. * * @return MergeBuilder */ protected function merge() { if (null === $this->merge) { $this->merge = new MergeBuilder($this); } return $this->merge; } /** * Gets the builder for normalization rules. * * @return NormalizationBuilder */ protected function normalization() { if (null === $this->normalization) { $this->normalization = new NormalizationBuilder($this); } return $this->normalization; } /** * Instantiate and configure the node according to this definition. * * @return NodeInterface $node The node instance * * @throws InvalidDefinitionException When the definition is invalid */ abstract protected function createNode(); } __halt_compiler();----SIGNATURE:----o1DKH39FIuKqdrA0JhhfarSYP+YAIt0nTlJWO8LDLEk1Af3UNWDFZ4Kwjl4vrZuTP92Z/voOPykxA7TU4YNd4QP2y0z0JpEPqgzh61XqmWRNO0YZIy+moOmjOdjSnZxvsQ+xFOwnqq1ixWxTL4xVwoyJpvY+rM+B0wDPaIieP2D9jEu1QReEpOHpZEq7ImnE6Dies2O02tbR6alqcpK4/0IODMy7jhNgvFMbJe5g24LkPTwCamw809QKTJY12gqcVnDkW9SvtcvNlbXdMAM/apm3daXGY8b5v4Stra1fdVT+vmFLPWHz0la91SSB2nIxSpxsJDxERnhxTEFV6qQvufMlNmpo3Ji6H+OWZMiQcS6CDWOgxzPblj5ceU6fJO9dEF4CxGtbHB9Dm1E/M1BEXyVcFzcCPphswOKCQAuZCDTnXDkinsKo/fGBCDaa+MsBabJYjaEeWHBG9nk3b/qufjiwUJPy6rrtJucn0c9LUCd+R2C8VsYAcU11IEJIt5sxXp+wRrS4WgTsnWDKaP5h9nmjJKBmtywxXYkcX7dXvNgCXSPNDz6sSIyc0CFkEE++CbTk9iy9/7wO4kqb67TgyGEPMT661ZSzv7tEnatIpsBSHxv207cWvKNadXfqqPWjz5ffx3L92F/Z2D19bk+uMhG1GSmBZ9kWU1S2eQon6vM=----ATTACHMENT:----MzczNzcxNjM1NDExMTc4NiA2NTA2MzQwMzUzMzk5NjQwIDkzMjU0NDEzMzA2MjA1MDQ=