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