<?php

namespace Incenteev\WebBundle\Validator;

use Symfony\Component\PropertyAccess\PropertyAccess;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class ConditionalValidationGroupValidator extends ConstraintValidator
{
    private $propertyAccessor;

    public function __construct()
    {
        $this->propertyAccessor = PropertyAccess::createPropertyAccessor();
    }

    /**
     * @param object|array|null $value
     * @param Constraint        $constraint
     */
    public function validate($value, Constraint $constraint)
    {
        if (null === $value) {
            return;
        }

        /** @var ConditionalValidationGroup $constraint */

        $group = $this->propertyAccessor->getValue($value, $constraint->groupProvider);

        if (is_string($group)) {
            $this->context->validate($value, '', array($group));
        }
    }
}