public ResponseEntity downloadData()

in streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/datalake/DataLakeResource.java [278:357]


  public ResponseEntity<StreamingResponseBody> downloadData(
      @Parameter(in = ParameterIn.PATH, description = "the id of the measurement series", required = true)
      @PathVariable("measurementID") String measurementID
      , @Parameter(in = ParameterIn.QUERY, description = "the columns to be selected (comma-separated)")
      @RequestParam(value = QP_COLUMNS, required = false) String columns
      , @Parameter(in = ParameterIn.QUERY, description = "start date for slicing operation")
      @RequestParam(value = QP_START_DATE, required = false) Long startDate
      , @Parameter(in = ParameterIn.QUERY, description = "end date for slicing operation")
      @RequestParam(value = QP_END_DATE, required = false) Long endDate
      , @Parameter(in = ParameterIn.QUERY, description = "page number for paging operation")
      @RequestParam(value = QP_PAGE, required = false) Integer page
      , @Parameter(in = ParameterIn.QUERY, description = "maximum number of retrieved query results")
      @RequestParam(value = QP_LIMIT, required = false) Integer limit
      , @Parameter(in = ParameterIn.QUERY, description = "offset")
      @RequestParam(value = QP_OFFSET, required = false) Integer offset
      , @Parameter(in = ParameterIn.QUERY, description = "grouping tags (comma-separated) for grouping operation")
      @RequestParam(value = QP_GROUP_BY, required = false) String groupBy
      ,
      @Parameter(
          in = ParameterIn.QUERY,
          description = "ordering of retrieved query results (ASC or DESC - default is ASC)")
      @RequestParam(value = QP_ORDER, required = false) String order
      , @Parameter(in = ParameterIn.QUERY, description = "name of aggregation function used for grouping operation")
      @RequestParam(value = QP_AGGREGATION_FUNCTION, required = false) String aggregationFunction
      ,
      @Parameter(
          in = ParameterIn.QUERY,
          description = "time interval for aggregation (e.g. 1m - one minute) for grouping operation")
      @RequestParam(value = QP_TIME_INTERVAL, required = false) String timeInterval
      ,
      @Parameter(
          in = ParameterIn.QUERY,
          description = "format specification (csv, json - default is csv) for data download")
      @RequestParam(value = QP_FORMAT, required = false) String format
      , @Parameter(in = ParameterIn.QUERY, description = "csv delimiter (comma or semicolon)")
      @RequestParam(value = QP_CSV_DELIMITER, required = false) String csvDelimiter
      , @Parameter(in = ParameterIn.QUERY, description = "missingValueBehaviour (ignore or empty)")
      @RequestParam(value = QP_MISSING_VALUE_BEHAVIOUR, required = false) String missingValueBehaviour
      ,
      @Parameter(
          in = ParameterIn.QUERY,
          description = "filter conditions (a comma-separated list of filter conditions"
              + "such as [field,operator,condition])")
      @RequestParam(value = QP_FILTER, required = false) String filter,
      @Parameter(in = ParameterIn.QUERY, description = "Excel export with template")
      @RequestParam(value = QP_XLSX_USE_TEMPLATE, required = false) boolean useTemplate
      , @Parameter(in = ParameterIn.QUERY, description = "ID of the excel template file to use")
      @RequestParam(value = QP_XLSX_TEMPLATE_ID, required = false) String templateId
      , @Parameter(in = ParameterIn.QUERY, description = "The first row in the excel file where data should be written")
      @RequestParam(value = QP_XLSX_START_ROW, required = false) Integer startRow,
      @Parameter(in = ParameterIn.QUERY, description = "Use either label or key as the column header")
      @RequestParam(value = QP_HEADER_COLUMN_NAME, required = false) String headerColumnName,
      @RequestParam Map<String, String> queryParams) {


    if (!(checkProvidedQueryParams(queryParams))) {
      throw new SpMessageException(HttpStatus.BAD_REQUEST, Notifications.error("Wrong query parameters provided"));
    } else {
      ProvidedRestQueryParams sanitizedParams = populate(measurementID, queryParams);
      if (format == null) {
        format = "csv";
      }

      var outputFormat = OutputFormat.fromString(format);
      StreamingResponseBody streamingOutput = output -> dataExplorerQueryManagement.getDataAsStream(
          sanitizedParams,
          outputFormat,
          isIgnoreMissingValues(missingValueBehaviour),
          output);

      HttpHeaders headers = new HttpHeaders();
      headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
      headers.setContentDispositionFormData("attachment",
          "datalake." + outputFormat.toString().toLowerCase());

      return ResponseEntity.ok()
          .headers(headers)
          .body(streamingOutput);
    }
  }