private function validateEmail(User $entity, ViolationsList $violations)
 {
     $email = $entity->getEmail();
     if ($this->isEmpty($email)) {
         //Empty is okay, non-required field.
         return;
     }
     if (!EmailValidator::isValid($email)) {
         $violations->add('email', 'devture_user.validation.email.invalid');
         return;
     }
     //Make sure it's unique, so it can potentially be used as an alternative user identifier.
     try {
         $user = $this->repository->findByEmail($email);
         if ($user->getId() !== $entity->getId()) {
             $violations->add('email', 'devture_user.validation.email.in_use', array('%username%' => $user->getUsername()));
         }
     } catch (NotFound $e) {
     }
 }
 public static function validateTransferRequest(TransferRequest $entity)
 {
     $violations = new ViolationsList();
     if (!in_array($entity->getType(), TransferRequest::getKnownTypes())) {
         $violations->add('type', 'Invalid transfer request type: `%type%`.', array('%type%' => $entity->getType()));
     }
     if (!$entity->getSourceBankAccount() instanceof BankAccount) {
         $violations->add('sourceBankAccount', 'Source bank account cannot be blank.');
     } else {
         $violationsBankAccount = static::validateBankAccount($entity->getSourceBankAccount(), self::BANK_ACCOUNT_ROLE_SENDER);
         if (count($violationsBankAccount) > 0) {
             $violations->add('sourceBankAccount', 'Source bank account is invalid.');
         }
     }
     if (!$entity->getDate() instanceof \DateTime) {
         $violations->add('date', 'Date cannot be blank.');
     }
     if (count($entity->getTransactions()) == 0) {
         $violations->add('transactions', 'A transfer request needs to contain at least one transaction.');
     }
     foreach ($entity->getTransactions() as $transaction) {
         $violationsTransaction = static::validateMoneyTransferTransaction($transaction);
         if (count($violationsTransaction) > 0) {
             $violations->add('transactions', 'Transaction is invalid.');
         }
     }
     return $violations;
 }