Ejemplo n.º 1
0
 /**
  * Process operations using connector pipeline. Handles pipeline building, cache and params.
  *
  * @param string     $connectorType
  * @param array      $payload
  * @param array|null $customPrePipeline
  * @param array|null $customPostPipeline
  *
  * @throws Exception
  *
  * @return array
  */
 protected function runConnectorPipeline($connectorType, $payload, $customPrePipeline = null, $customPostPipeline = null)
 {
     if (!isset($this->alambicConnectors[$connectorType])) {
         throw new Config('Undefined connector : ' . $connectorType);
     }
     if (empty($payload['pipelineParams'])) {
         $payload['pipelineParams'] = [];
     }
     $payload['connectorBaseConfig'] = $this->alambicConnectors[$connectorType];
     $payload['pipelineParams'] = array_merge($payload['pipelineParams'], $this->sharedPipelineContext);
     $prePipeline = !empty($this->alambicConnectors[$connectorType]['prePipeline']) && is_array($this->alambicConnectors[$connectorType]['prePipeline']) ? $this->alambicConnectors[$connectorType]['prePipeline'] : [];
     $postPipeline = !empty($this->alambicConnectors[$connectorType]['postPipeline']) && is_array($this->alambicConnectors[$connectorType]['postPipeline']) ? $this->alambicConnectors[$connectorType]['postPipeline'] : [];
     if ($customPrePipeline && is_array($customPrePipeline)) {
         $prePipeline = $customPrePipeline;
     }
     if ($customPostPipeline && is_array($customPostPipeline)) {
         $postPipeline = $customPostPipeline;
     }
     $finalPipeline = array_merge($prePipeline, [$this->alambicConnectors[$connectorType]['connectorClass']], $postPipeline);
     $pipeLineKey = implode('-', $finalPipeline);
     if (!array_key_exists($pipeLineKey, $this->pipelines)) {
         $pipelineBuilder = new PipelineBuilder();
         foreach ($finalPipeline as $stage) {
             $pipelineBuilder->add(new $stage());
         }
         $this->pipelines[$pipeLineKey] = $pipelineBuilder->build();
     }
     return $this->pipelines[$pipeLineKey]->process($payload)['response'];
 }
Ejemplo n.º 2
0
 /**
  * @param $stage
  *
  * @return $this
  */
 public function addMiddleware(StageInterface $stage)
 {
     $this->pipeline = $this->getPipeline();
     $this->pipeline = $this->pipeline->pipe($stage);
     return $this;
 }
Ejemplo n.º 3
0
 /**
  * @param Payload $payload
  *
  * @return Payload
  */
 public function process($payload)
 {
     $this->builder->add(new IncludedResource())->add(new RequestedFields())->add(new PagedPagination())->add(new OffsetLimitPagination())->add(new CursorBasedPagination())->add(new Sorts());
     $this->pipeline = $this->builder->build();
     return $this->pipeline->process($payload);
 }