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