/**
  * {@inheritdoc}
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     if (empty($options['data_class'])) {
         return;
     }
     $className = $options['data_class'];
     if (!$this->entityConfigProvider->hasConfig($className)) {
         return;
     }
     $config = $this->entityConfigProvider->getConfig($className);
     if (!$config->has('unique_key')) {
         return;
     }
     $uniqueKeys = $config->get('unique_key', false, ['keys' => []]);
     /* @var \Symfony\Component\Validator\Mapping\ClassMetadata $validatorMetadata */
     $validatorMetadata = $this->validator->getMetadataFor($className);
     foreach ($uniqueKeys['keys'] as $uniqueKey) {
         $fields = $uniqueKey['key'];
         $labels = array_map(function ($fieldName) use($className) {
             $label = $this->entityConfigProvider->getConfig($className, $fieldName)->get('label');
             return $this->translator->trans($label);
         }, $fields);
         $constraint = new UniqueEntity(['fields' => $fields, 'errorPath' => '', 'message' => $this->translator->transChoice('oro.entity.validation.unique_field', sizeof($fields), ['%field%' => implode(', ', $labels)])]);
         $validatorMetadata->addConstraint($constraint);
     }
 }
 /**
  * Adds validators to check the Descriptors.
  *
  * @param Validator $validator
  *
  * @return Validator
  */
 public function attachValidators(Validator $validator)
 {
     /** @var ClassMetadata $fileMetadata */
     $fileMetadata = $validator->getMetadataFor('phpDocumentor\\Descriptor\\FileDescriptor');
     /** @var ClassMetadata $constantMetadata */
     $constantMetadata = $validator->getMetadataFor('phpDocumentor\\Descriptor\\ConstantDescriptor');
     /** @var ClassMetadata $functionMetadata */
     $functionMetadata = $validator->getMetadataFor('phpDocumentor\\Descriptor\\FunctionDescriptor');
     /** @var ClassMetadata $classMetadata */
     $classMetadata = $validator->getMetadataFor('phpDocumentor\\Descriptor\\ClassDescriptor');
     /** @var ClassMetadata $interfaceMetadata */
     $interfaceMetadata = $validator->getMetadataFor('phpDocumentor\\Descriptor\\InterfaceDescriptor');
     /** @var ClassMetadata $traitMetadata */
     $traitMetadata = $validator->getMetadataFor('phpDocumentor\\Descriptor\\TraitDescriptor');
     /** @var ClassMetadata $propertyMetadata */
     $propertyMetadata = $validator->getMetadataFor('phpDocumentor\\Descriptor\\PropertyDescriptor');
     /** @var ClassMetadata $methodMetadata */
     $methodMetadata = $validator->getMetadataFor('phpDocumentor\\Descriptor\\MethodDescriptor');
     $fileMetadata->addPropertyConstraint('summary', new Assert\NotBlank(array('message' => 'PPC:ERR-50000')));
     $classMetadata->addPropertyConstraint('summary', new Assert\NotBlank(array('message' => 'PPC:ERR-50005')));
     $propertyMetadata->addConstraint(new phpDocAssert\Property\HasSummary());
     $methodMetadata->addPropertyConstraint('summary', new Assert\NotBlank(array('message' => 'PPC:ERR-50008')));
     $interfaceMetadata->addPropertyConstraint('summary', new Assert\NotBlank(array('message' => 'PPC:ERR-50009')));
     $traitMetadata->addPropertyConstraint('summary', new Assert\NotBlank(array('message' => 'PPC:ERR-50010')));
     $functionMetadata->addPropertyConstraint('summary', new Assert\NotBlank(array('message' => 'PPC:ERR-50011')));
     $functionMetadata->addConstraint(new phpDocAssert\Functions\IsReturnTypeNotAnIdeDefault());
     $methodMetadata->addConstraint(new phpDocAssert\Functions\IsReturnTypeNotAnIdeDefault());
     $functionMetadata->addConstraint(new phpDocAssert\Functions\IsParamTypeNotAnIdeDefault());
     $methodMetadata->addConstraint(new phpDocAssert\Functions\IsParamTypeNotAnIdeDefault());
     $functionMetadata->addConstraint(new phpDocAssert\Functions\AreAllArgumentsValid());
     $methodMetadata->addConstraint(new phpDocAssert\Functions\AreAllArgumentsValid());
     $classMetadata->addConstraint(new phpDocAssert\Classes\HasSinglePackage());
     $interfaceMetadata->addConstraint(new phpDocAssert\Classes\HasSinglePackage());
     $traitMetadata->addConstraint(new phpDocAssert\Classes\HasSinglePackage());
     $fileMetadata->addConstraint(new phpDocAssert\Classes\HasSinglePackage());
     $classMetadata->addConstraint(new phpDocAssert\Classes\HasSingleSubpackage());
     $interfaceMetadata->addConstraint(new phpDocAssert\Classes\HasSingleSubpackage());
     $traitMetadata->addConstraint(new phpDocAssert\Classes\HasSingleSubpackage());
     $fileMetadata->addConstraint(new phpDocAssert\Classes\HasSingleSubpackage());
     $classMetadata->addConstraint(new phpDocAssert\Classes\HasPackageWithSubpackage());
     $interfaceMetadata->addConstraint(new phpDocAssert\Classes\HasPackageWithSubpackage());
     $traitMetadata->addConstraint(new phpDocAssert\Classes\HasPackageWithSubpackage());
     $fileMetadata->addConstraint(new phpDocAssert\Classes\HasPackageWithSubpackage());
     return $validator;
 }