/**
  * 
  * @param \webignition\WebResource\Sitemap\Sitemap $sitemap
  * @return boolean
  */
 public function retrieve(Sitemap $sitemap)
 {
     if ($this->getConfiguration()->getShouldHalt()) {
         return false;
     }
     $request = clone $this->getConfiguration()->getBaseRequest();
     $request->setUrl($sitemap->getUrl());
     $this->setRequestCookies($request);
     $this->setRequestTimeout($request);
     $events = $this->getPreAndPostTransferEvents();
     $this->dispatcher->dispatch(Events::TRANSFER_PRE, $events['pre']);
     $lastRequestException = null;
     try {
         $response = $request->send();
     } catch (\Guzzle\Http\Exception\CurlException $curlException) {
         $lastRequestException = $curlException;
     } catch (\Guzzle\Http\Exception\RequestException $requestException) {
         $lastRequestException = $requestException;
     }
     $this->dispatcher->dispatch(Events::TRANSFER_POST, $events['post']);
     if ($lastRequestException instanceof \Exception || $response->getStatusCode() !== 200) {
         return false;
     }
     $sitemap->setHttpResponse($response);
     if ($sitemap->isIndex()) {
         $childUrls = $sitemap->getUrls();
         foreach ($childUrls as $childUrl) {
             $childSitemap = new Sitemap();
             $childSitemap->setConfiguration($sitemap->getConfiguration());
             $childSitemap->setUrl($childUrl);
             $sitemap->addChild($childSitemap);
             if ($this->getConfiguration()->getRetrieveChildSitemaps()) {
                 $this->retrieve($childSitemap);
             }
         }
     }
     return true;
 }