/**
  * Supports a given class name.
  *
  * @param string $className
  * @return bool
  */
 public function supports($className)
 {
     if ($this->specification) {
         return $this->specification->supports($className);
     }
     return true;
 }
 /**
  * Transforms a Specification into a Query
  *
  * @param Specification $specification
  * @return \Doctrine\ORM\Query
  * @throws \InvalidArgumentException
  */
 private function getQuery(Specification $specification)
 {
     if (!$specification->supports($this->getEntityName())) {
         throw new \InvalidArgumentException("Specification does not support this repository");
     }
     $qb = $this->createQueryBuilder('e');
     if ($expr = $specification->match($qb, 'e')) {
         $qb->where($expr);
     }
     $query = $qb->getQuery();
     $specification->modifyQuery($query);
     return $query;
 }