TimeseriesCsvService.java
package de.dlr.shepard.data.timeseries.services;
import de.dlr.shepard.data.timeseries.io.TimeseriesWithDataPoints;
import de.dlr.shepard.data.timeseries.model.Timeseries;
import de.dlr.shepard.data.timeseries.model.TimeseriesDataPointsQueryParams;
import de.dlr.shepard.data.timeseries.utilities.CsvConverter;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@RequestScoped
public class TimeseriesCsvService {
@Inject
TimeseriesService timeseriesService;
@Inject
TimeseriesContainerService timeseriesContainerService;
/**
* Export one timeseries as CSV File if found.
*
* @param containerId Id of the container in Neo4j
* @param timeseriesList The list of timeseries whose points are queried
* @param queryParams The query params to fetch the data points
* @return InputStream containing the CSV file
*/
public InputStream exportTimeseriesDataToCsv(
long containerId,
Timeseries timeseries,
TimeseriesDataPointsQueryParams queryParams
) {
timeseriesContainerService.getContainer(containerId);
var stream = CsvConverter.convertToCsv(
timeseries,
this.timeseriesService.getDataPointsByTimeseries(containerId, timeseries, queryParams)
);
return stream;
}
/**
* Export a list of timeseries with data points as CSV File.
*
* @param containerId The timeseries container Id
* @param timeseriesList The list of timeseries whose points are queried
* @param queryParams Query params containing Aggregate functions, fill option, ...
* @return InputStream containing the CSV file
* @throws IOException When the CSV file could not be written
*/
public InputStream exportManyTimeseriesWithDataPointsToCsv(
Long containerId,
List<Timeseries> timeseriesList,
TimeseriesDataPointsQueryParams queryParams
) throws IOException {
timeseriesContainerService.getContainer(containerId);
var timeseriesWithDataPointsList = timeseriesService.getManyTimeseriesWithDataPoints(
containerId,
timeseriesList,
queryParams
);
var stream = CsvConverter.convertToCsv(timeseriesWithDataPointsList);
return stream;
}
public void importTimeseriesFromCsv(long containerId, String filePath) throws IOException {
timeseriesContainerService.getContainer(containerId);
timeseriesContainerService.assertIsAllowedToEditContainer(containerId);
try (InputStream fileInputStream = new FileInputStream(filePath)) {
List<TimeseriesWithDataPoints> timeseriesWithDataPointsList = CsvConverter.convertToTimeseriesWithData(
fileInputStream
);
for (var timeseriesWithDataPoints : timeseriesWithDataPointsList) {
this.timeseriesService.saveDataPoints(
containerId,
timeseriesWithDataPoints.getTimeseries(),
timeseriesWithDataPoints.getPoints()
);
}
}
}
}