/**
  * @param TransitPathDto $aTransitPath
  * @return Itinerary
  */
 private function toItinerary(TransitPathDto $aTransitPath)
 {
     $legs = array();
     foreach ($aTransitPath->getEdges() as $edge) {
         $legs[] = $this->toLeg($edge);
     }
     return new Itinerary($legs);
 }
 /**
  * @param string $fromUnLocode
  * @param string $toUnLocode
  * @return TransitPathDto[]
  */
 public function findShortestPath($fromUnLocode, $toUnLocode)
 {
     $transitPath = new TransitPathDto();
     $fromDate = new \DateTime('2014-03-29 19:59:23');
     $toDate = new \DateTime('2014-03-30 21:30:00');
     $edge = new EdgeDto();
     $edge->setFromUnLocode($fromUnLocode);
     $edge->setToUnLocode($toUnLocode);
     $edge->setFromDate($fromDate->format(\DateTime::ISO8601));
     $edge->setToDate($toDate->format(\DateTime::ISO8601));
     $transitPath->setEdges([$edge]);
     return [$transitPath];
 }
 /**
  * @param array $route
  * @return TransitPathDto
  */
 private function routeToTransitPath(array $route) : TransitPathDto
 {
     $edges = array();
     $loadDay = \rand(1, 4);
     $loadTimestamp = strtotime("+{$loadDay} day");
     $loadTime = new \DateTime();
     $loadTime->setTimestamp($loadTimestamp);
     $elapsedDays = 0;
     $currentLocation = $route['origin'];
     $currentTime = $loadTime;
     if (!empty($route['stops'])) {
         foreach ($route['stops'] as $unLocode => $duration) {
             $elapsedDays += $duration;
             $durationInterval = new \DateInterval('P' . $duration . 'DT' . \rand(1, 12) . 'H' . \rand(1, 60) . 'M');
             $currentTime->add(new \DateInterval('P1DT' . \rand(1, 12) . 'H' . \rand(1, 60) . 'M'));
             $loadTime = clone $currentTime;
             $currentTime->add($durationInterval);
             $unloadTime = clone $currentTime;
             $edge = new EdgeDto();
             $edge->setFromUnLocode($currentLocation);
             $edge->setToUnLocode($unLocode);
             $edge->setFromDate($loadTime->format(\DateTime::ATOM));
             $edge->setToDate($unloadTime->format(\DateTime::ATOM));
             $edges[] = $edge;
             $currentLocation = $unLocode;
         }
     }
     $destinationDuration = $route['duration'] - $elapsedDays;
     $durationInterval = new \DateInterval('P' . $destinationDuration . 'DT' . \rand(1, 12) . 'H' . \rand(1, 60) . 'M');
     $currentTime->add(new \DateInterval('P1DT' . \rand(1, 12) . 'H' . \rand(1, 60) . 'M'));
     $loadTime = clone $currentTime;
     $currentTime->add($durationInterval);
     $unloadTime = clone $currentTime;
     $edge = new EdgeDto();
     $edge->setFromUnLocode($currentLocation);
     $edge->setToUnLocode($route['destination']);
     $edge->setFromDate($loadTime->format(\DateTime::ATOM));
     $edge->setToDate($unloadTime->format(\DateTime::ATOM));
     $edges[] = $edge;
     $transitPath = new TransitPathDto();
     $transitPath->setEdges($edges);
     return $transitPath;
 }