/**
  * @param array $requestData
  * @param array $filterParams
  * @return array
  * @throws \Exception
  */
 public function export(array $requestData, array $filterParams)
 {
     $serviceHelpers = $this->buildServiceHelpers($requestData);
     $requestData['filter'] = $this->prepareFilter($serviceHelpers->getProfile()->getType(), $filterParams);
     $this->initializeDataIO($serviceHelpers->getDataIO(), $requestData);
     $dataTransformerChain = $this->createDataTransformerChain($serviceHelpers->getProfile(), $serviceHelpers->getFileWriter()->hasTreeStructure());
     $dataWorkflow = new DataWorkflow($serviceHelpers->getDataIO(), $serviceHelpers->getProfile(), $dataTransformerChain, $serviceHelpers->getFileWriter());
     $session = $serviceHelpers->getSession()->getEntity();
     try {
         $resultData = $dataWorkflow->export($requestData);
         $message = sprintf('%s %s %s', $resultData['position'], SnippetsHelper::getNamespace('backend/swag_import_export/default_profiles')->get('type/' . $serviceHelpers->getProfile()->getType()), SnippetsHelper::getNamespace('backend/swag_import_export/log')->get('export/success'));
         $this->logProcessing('false', $resultData['fileName'], $serviceHelpers->getProfile()->getName(), $message, 'true', $session);
         unset($resultData['filter']);
         return $resultData;
     } catch (\Exception $e) {
         $this->logProcessing('true', $requestData['fileName'], $serviceHelpers->getProfile()->getName(), $e->getMessage(), 'false', $session);
         throw $e;
     }
 }
 /**
  * Executes export action
  *
  * @return array
  */
 public function exportAction()
 {
     $logger = $this->getLogger();
     $postData = array('profileId' => (int) $this->profileEntity->getId(), 'type' => 'export', 'format' => $this->format, 'sessionId' => $this->sessionId, 'fileName' => basename($this->filePath), 'filter' => array(), 'limit' => array('limit' => $this->limit, 'offset' => $this->offset));
     if ($this->exportVariants) {
         $postData['filter']['variants'] = $this->exportVariants;
     }
     if ($this->category) {
         $postData['filter']['categories'] = $this->category;
     }
     /** @var Profile $profile */
     $profile = $this->Plugin()->getProfileFactory()->loadProfile($postData);
     /** @var DataFactory $dataFactory */
     $dataFactory = $this->Plugin()->getDataFactory();
     $dbAdapter = $dataFactory->createDbAdapter($profile->getType());
     $dataSession = $dataFactory->loadSession($postData);
     //create dataIO
     $dataIO = $dataFactory->createDataIO($dbAdapter, $dataSession, $logger);
     $colOpts = $dataFactory->createColOpts($postData['columnOptions']);
     $limit = $dataFactory->createLimit($postData['limit']);
     $filter = $dataFactory->createFilter($postData['filter']);
     $maxRecordCount = $postData['max_record_count'];
     $type = $postData['type'];
     $format = $postData['format'];
     $dataIO->initialize($colOpts, $limit, $filter, $type, $format, $maxRecordCount);
     $dataIO->setUsername($this->username);
     // we create the file writer that will write (partially) the result file
     /** @var FileIOFactory $fileFactory */
     $fileFactory = $this->Plugin()->getFileIOFactory();
     /** @var FileWriter $fileWriter */
     $fileWriter = $fileFactory->createFileWriter($postData['format']);
     /** @var DataTransformerChain $dataTransformerChain */
     $dataTransformerChain = $this->Plugin()->getDataTransformerFactory()->createDataTransformerChain($profile, array('isTree' => $fileWriter->hasTreeStructure()));
     $dataWorkflow = new DataWorkflow($dataIO, $profile, $dataTransformerChain, $fileWriter);
     $post = $dataWorkflow->export($postData, $this->filePath);
     $message = sprintf('%s %s %s', $post['position'], SnippetsHelper::getNamespace('backend/swag_import_export/default_profiles')->get('type/' . $profile->getType()), SnippetsHelper::getNamespace('backend/swag_import_export/log')->get('export/success'));
     $logger->write($message, 'false', $dataSession->getEntity());
     $logData = new LogDataStruct(date("Y-m-d H:i:s"), $post['fileName'], $profile->getName(), $message, 'true');
     $logger->writeToFile($logData);
     $this->sessionId = $post['sessionId'];
     return $post;
 }