vendor/symfony/src/Symfony/Component/Validator/Mapping/MemberMetadata.php
changeset 0 7f95f8617b0b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/symfony/src/Symfony/Component/Validator/Mapping/MemberMetadata.php	Sat Sep 24 15:40:41 2011 +0200
@@ -0,0 +1,189 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Mapping;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\Valid;
+use Symfony\Component\Validator\Exception\ValidatorException;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
+
+abstract class MemberMetadata extends ElementMetadata
+{
+    public $class;
+    public $name;
+    public $property;
+    public $cascaded = false;
+    public $collectionCascaded = false;
+    private $reflMember;
+
+    /**
+     * Constructor.
+     *
+     * @param string $class    The name of the class this member is defined on
+     * @param string $name     The name of the member
+     * @param string $property The property the member belongs to
+     */
+    public function __construct($class, $name, $property)
+    {
+        $this->class = $class;
+        $this->name = $name;
+        $this->property = $property;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function addConstraint(Constraint $constraint)
+    {
+        if (!in_array(Constraint::PROPERTY_CONSTRAINT, (array) $constraint->getTargets())) {
+            throw new ConstraintDefinitionException(sprintf(
+                'The constraint %s cannot be put on properties or getters',
+                get_class($constraint)
+            ));
+        }
+
+        if ($constraint instanceof Valid) {
+            $this->cascaded = true;
+            $this->collectionCascaded = $constraint->traverse;
+        } else {
+            parent::addConstraint($constraint);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Returns the names of the properties that should be serialized
+     *
+     * @return array
+     */
+    public function __sleep()
+    {
+        return array_merge(parent::__sleep(), array(
+            'class',
+            'name',
+            'property',
+            'cascaded', // TESTME
+        ));
+    }
+
+    /**
+     * Returns the name of the member
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Returns the class this member is defined on
+     *
+     * @return string
+     */
+    public function getClassName()
+    {
+        return $this->class;
+    }
+
+    /**
+     * Returns the name of the property this member belongs to
+     *
+     * @return string The property name
+     */
+    public function getPropertyName()
+    {
+        return $this->property;
+    }
+
+    /**
+     * Returns whether this member is public
+     *
+     * @return Boolean
+     */
+    public function isPublic()
+    {
+        return $this->getReflectionMember()->isPublic();
+    }
+
+    /**
+     * Returns whether this member is protected
+     *
+     * @return Boolean
+     */
+    public function isProtected()
+    {
+        return $this->getReflectionMember()->isProtected();
+    }
+
+    /**
+     * Returns whether this member is private
+     *
+     * @return Boolean
+     */
+    public function isPrivate()
+    {
+        return $this->getReflectionMember()->isPrivate();
+    }
+
+    /**
+     * Returns whether objects stored in this member should be validated
+     *
+     * @return Boolean
+     */
+    public function isCascaded()
+    {
+        return $this->cascaded;
+    }
+
+    /**
+     * Returns whether arrays or traversable objects stored in this member
+     * should be traversed and validated in each entry
+     *
+     * @return Boolean
+     */
+    public function isCollectionCascaded()
+    {
+        return $this->collectionCascaded;
+    }
+
+    /**
+     * Returns the value of this property in the given object
+     *
+     * @param object $object The object
+     *
+     * @return mixed The property value
+     */
+    abstract public function getValue($object);
+
+    /**
+     * Returns the Reflection instance of the member
+     *
+     * @return object
+     */
+    public function getReflectionMember()
+    {
+        if (!$this->reflMember) {
+            $this->reflMember = $this->newReflectionMember();
+        }
+
+        return $this->reflMember;
+    }
+
+    /**
+     * Creates a new Reflection instance for the member
+     *
+     * @return object
+     */
+    abstract protected function newReflectionMember();
+}