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
27
28
29
30
31
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
51
52
53
54
55
56
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 }