/**
  * Gets all tags for the given taggable resource
  *
  * @param BaseTaggable $resource Taggable resource
  * @return array
  */
 public function getTagging(BaseTaggable $resource)
 {
     $em = $this->em;
     $config = $em->getConfiguration();
     if (is_null($config->getCustomHydrationMode(self::TAGGING_HYDRATOR))) {
         $config->addCustomHydrationMode(self::TAGGING_HYDRATOR, 'Doctrine\\ORM\\Internal\\Hydration\\ObjectHydrator');
     }
     return $em->createQueryBuilder()->select('t')->from($this->tagClass, 't')->innerJoin('t.tagging', 't2', Expr\Join::WITH, 't2.resourceId = :id AND t2.resourceType = :type')->setParameter('id', $resource->getTaggableId())->setParameter('type', $resource->getTaggableType())->getQuery()->getResult(self::TAGGING_HYDRATOR);
 }
 /**
  * Returns an array of tag names for the given Taggable resource.
  *
  * @param Taggable  $resource   Taggable resource
  */
 public function getTagNames(Taggable $resource)
 {
     $names = array();
     if (sizeof($resource->getTags()) > 0) {
         foreach ($resource->getTags() as $tag) {
             $names[] = $tag->getName();
         }
     }
     return $names;
 }
 /**
  * Sets the resource
  *
  * @param Taggable $resource Resource to set
  */
 public function setResource(Taggable $resource)
 {
     $this->resourceType = $resource->getTaggableType();
     $this->resourceId = $resource->getTaggableId();
 }