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