/** * 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']; }
/** * @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); }