View Javadoc
1   package de.dlr.shepard.data.timeseries.services;
2   
3   import de.dlr.shepard.data.timeseries.io.TimeseriesWithDataPoints;
4   import de.dlr.shepard.data.timeseries.model.Timeseries;
5   import de.dlr.shepard.data.timeseries.model.TimeseriesDataPointsQueryParams;
6   import de.dlr.shepard.data.timeseries.utilities.CsvConverter;
7   import jakarta.enterprise.context.RequestScoped;
8   import jakarta.inject.Inject;
9   import java.io.FileInputStream;
10  import java.io.IOException;
11  import java.io.InputStream;
12  import java.util.List;
13  
14  @RequestScoped
15  public class TimeseriesCsvService {
16  
17    @Inject
18    TimeseriesService timeseriesService;
19  
20    @Inject
21    TimeseriesContainerService timeseriesContainerService;
22  
23    /**
24     * Export one timeseries as CSV File if found.
25     *
26     * @param containerId           Id of the container in Neo4j
27     * @param timeseriesList        The list of timeseries whose points are queried
28     * @param queryParams           The query params to fetch the data points
29     * @return InputStream containing the CSV file
30     */
31    public InputStream exportTimeseriesDataToCsv(
32      long containerId,
33      Timeseries timeseries,
34      TimeseriesDataPointsQueryParams queryParams
35    ) {
36      timeseriesContainerService.getContainer(containerId);
37  
38      var stream = CsvConverter.convertToCsv(
39        timeseries,
40        this.timeseriesService.getDataPointsByTimeseries(containerId, timeseries, queryParams)
41      );
42      return stream;
43    }
44  
45    /**
46     * Export a list of timeseries with data points as CSV File.
47     *
48     * @param containerId           The timeseries container Id
49     * @param timeseriesList        The list of timeseries whose points are queried
50     * @param queryParams           Query params containing Aggregate functions, fill option, ...
51     * @return InputStream containing the CSV file
52     * @throws IOException When the CSV file could not be written
53     */
54    public InputStream exportManyTimeseriesWithDataPointsToCsv(
55      Long containerId,
56      List<Timeseries> timeseriesList,
57      TimeseriesDataPointsQueryParams queryParams
58    ) throws IOException {
59      timeseriesContainerService.getContainer(containerId);
60  
61      var timeseriesWithDataPointsList = timeseriesService.getManyTimeseriesWithDataPoints(
62        containerId,
63        timeseriesList,
64        queryParams
65      );
66      var stream = CsvConverter.convertToCsv(timeseriesWithDataPointsList);
67      return stream;
68    }
69  
70    public void importTimeseriesFromCsv(long containerId, String filePath) throws IOException {
71      timeseriesContainerService.getContainer(containerId);
72      timeseriesContainerService.assertIsAllowedToEditContainer(containerId);
73  
74      try (InputStream fileInputStream = new FileInputStream(filePath)) {
75        List<TimeseriesWithDataPoints> timeseriesWithDataPointsList = CsvConverter.convertToTimeseriesWithData(
76          fileInputStream
77        );
78        for (var timeseriesWithDataPoints : timeseriesWithDataPointsList) {
79          this.timeseriesService.saveDataPoints(
80              containerId,
81              timeseriesWithDataPoints.getTimeseries(),
82              timeseriesWithDataPoints.getPoints()
83            );
84        }
85      }
86    }
87  }