Exemplo n.º 1
0
 public function finalize()
 {
     parent::finalize();
     foreach ($this->columns as $column) {
         $column->finalize();
     }
     // soring columns by columnIndex
     sort_records($this->columns, new PropertyBasedComparator_DefaultSortingConfiguration('columnIndex'));
 }
    public function queryDataset(DataControllerCallContext $callcontext, DatasetQueryRequest $request, ResultFormatter $resultFormatter) {
        $records = NULL;

        $environment_metamodel = data_controller_get_environment_metamodel();
        $metamodel = data_controller_get_metamodel();

        $datasetName = $request->getDatasetName();
        $dataset = $metamodel->getDataset($datasetName);
        $datasource = $environment_metamodel->getDataSource($dataset->datasourceName);

        $databaseName = $dataset->source->database;

        list($url, $requestBody) = $this->prepareDatasetQuery($callcontext, $request, $databaseName);
        list($url, $manulSortingRequired) = $this->applyOrderBy($url, $request);
        $manualPaginationRequired = $manulSortingRequired;
        if (!$manualPaginationRequired) {
            $url = $this->applyPagination($url, $request);
        }

        $serverRequest->url = $url;
        $serverRequest->body = $requestBody;
        // executing the server request
        $serverResponse = $this->communicateWithServer($datasource, $serverRequest);

        if (isset($serverResponse->rows)) {
            foreach ($serverResponse->rows as $record) {
                $this->processRecord($records, $record, $request->columns, TRUE, $resultFormatter);
            }
        }
        else {
            $this->processRecord($records, $serverResponse, $request->columns, FALSE, $resultFormatter);
        }
        $resultFormatter->postFormatRecords($records);

        if ($manulSortingRequired) {
            sort_records($records, $request->sortingConfigurations);
        }

        if ($manualPaginationRequired) {
            $records = paginate_records($records, $request->startWith, $request->limit);
        }

        return $records;
    }