/**
  * Transforms the entity usages from $pageEntityUsages according to the relevant
  * aspects defined by calling setRelevantAspects(). A new PageEntityUsages
  * containing the filtered usage list is returned.
  *
  * @see getFilteredUsages()
  *
  * @param PageEntityUsages $pageEntityUsages
  *
  * @return PageEntityUsages
  */
 public function transformPageEntityUsages(PageEntityUsages $pageEntityUsages)
 {
     $entityIds = $pageEntityUsages->getEntityIds();
     $transformedPageEntityUsages = new PageEntityUsages($pageEntityUsages->getPageId(), array());
     foreach ($entityIds as $id) {
         $aspects = $pageEntityUsages->getUsageAspectKeys($id);
         $usages = $this->getFilteredUsages($id, $aspects);
         $transformedPageEntityUsages->addUsages($usages);
     }
     return $transformedPageEntityUsages;
 }
 public function testGetters()
 {
     $q7 = new ItemId('Q7');
     $q11 = new ItemId('Q11');
     $usages = array(new EntityUsage($q7, EntityUsage::ALL_USAGE), new EntityUsage($q11, EntityUsage::LABEL_USAGE, 'de'), new EntityUsage($q11, EntityUsage::LABEL_USAGE, 'en'), new EntityUsage($q11, EntityUsage::TITLE_USAGE));
     $pageUsages = new PageEntityUsages(6, $usages);
     $this->assertEquals(6, $pageUsages->getPageId());
     $expectedAspects = array(EntityUsage::LABEL_USAGE, EntityUsage::TITLE_USAGE, EntityUsage::ALL_USAGE);
     $expectedAspectKeys = array(EntityUsage::LABEL_USAGE . '.de', EntityUsage::LABEL_USAGE . '.en', EntityUsage::TITLE_USAGE, EntityUsage::ALL_USAGE);
     $expectedAspectKeysQ11 = array(EntityUsage::LABEL_USAGE . '.de', EntityUsage::LABEL_USAGE . '.en', EntityUsage::TITLE_USAGE);
     $this->assertEquals($expectedAspects, $pageUsages->getAspects(), 'getAspects');
     $this->assertEquals($expectedAspectKeys, $pageUsages->getAspectKeys(), 'getAspectKeys');
     $this->assertEquals(array('Q11' => $q11, 'Q7' => $q7), $pageUsages->getEntityIds(), 'getEntityIds');
     $this->assertEquals(array('Q11#L.de', 'Q11#L.en', 'Q11#T', 'Q7#X'), array_keys($pageUsages->getUsages()), 'getUsagesCallback');
     $this->assertEquals($expectedAspectKeysQ11, $pageUsages->getUsageAspectKeys($q11), 'getUsageAspects');
 }
 /**
  * @param Traversable $rows
  *
  * @return PageEntityUsages[]
  */
 private function foldRowsIntoPageEntityUsages(Traversable $rows)
 {
     $usagesPerPage = array();
     foreach ($rows as $row) {
         $pageId = (int) $row->eu_page_id;
         if (isset($usagesPerPage[$pageId])) {
             $pageEntityUsages = $usagesPerPage[$pageId];
         } else {
             $pageEntityUsages = new PageEntityUsages($pageId);
         }
         $entityId = $this->idParser->parse($row->eu_entity_id);
         list($aspect, $modifier) = EntityUsage::splitAspectKey($row->eu_aspect);
         $usage = new EntityUsage($entityId, $aspect, $modifier);
         $pageEntityUsages->addUsages(array($usage));
         $usagesPerPage[$pageId] = $pageEntityUsages;
     }
     return $usagesPerPage;
 }
 /**
  * @param PageEntityUsages $other
  *
  * @return bool
  */
 public function equals(PageEntityUsages $other)
 {
     if (!$other->getPageId() === $this->getPageId()) {
         return false;
     } elseif (array_keys($other->getUsages()) != array_keys($this->getUsages())) {
         return false;
     }
     return true;
 }