/**
  * @param Response $response
  * @throws Exception\NotImplementedException
  * @throws Exception
  */
 protected function prepare(Response $response)
 {
     $request = $response->getRequest();
     $requestParams = $request->getParameters();
     $outputTypeCode = $requestParams->getParameter(RequestParameters::OUTPUT_TYPE_PARAMETER);
     switch ($outputTypeCode) {
         case OutputType::TSV_EXCEL:
             throw new NotImplementedException($outputTypeCode . " output is not implemented");
             break;
         case OutputType::CSV:
             $this->headers['Content-Type'] = 'text/csv; charset=UTF-8';
             $outFilename = $requestParams->getParameter(RequestParameters::OUTPUT_FILE_NAME_PARAMETER);
             if ($outFilename === false) {
                 $outFilename = 'results.csv';
             }
             // For security reasons, make sure this filename ends with .csv
             if (substr($outFilename, -4) !== '.csv') {
                 $outFilename .= '.csv';
             }
             $this->headers['Content-Disposition'] = 'attachment; filename=' . $outFilename;
             break;
         case OutputType::HTML:
             $this->headers['Content-Type'] = 'text/html; charset=UTF-8';
             break;
         case OutputType::JSONP:
             $this->headers['Content-Type'] = 'text/javascript; charset=UTF-8';
             break;
         case OutputType::JSON:
             $this->headers['Content-Type'] = 'application/json; charset=UTF-8';
             break;
         default:
             throw new Exception("Unknown Output Type: " . $outputTypeCode);
             break;
     }
     $this->output = $response->__toString();
 }