TimeseriesContainerService.java
package de.dlr.shepard.data.timeseries.services;
import de.dlr.shepard.auth.permission.services.PermissionsService;
import de.dlr.shepard.auth.users.entities.User;
import de.dlr.shepard.auth.users.services.UserService;
import de.dlr.shepard.common.exceptions.InvalidAuthException;
import de.dlr.shepard.common.exceptions.InvalidPathException;
import de.dlr.shepard.common.util.DateHelper;
import de.dlr.shepard.common.util.PermissionType;
import de.dlr.shepard.common.util.QueryParamHelper;
import de.dlr.shepard.data.AbstractContainerService;
import de.dlr.shepard.data.timeseries.daos.TimeseriesContainerDAO;
import de.dlr.shepard.data.timeseries.io.TimeseriesContainerIO;
import de.dlr.shepard.data.timeseries.model.TimeseriesContainer;
import io.quarkus.logging.Log;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;
import java.util.List;
import java.util.Optional;
@RequestScoped
public class TimeseriesContainerService extends AbstractContainerService<TimeseriesContainer, TimeseriesContainerIO> {
@Inject
TimeseriesContainerDAO timeseriesContainerDAO;
@Inject
UserService userService;
@Inject
DateHelper dateHelper;
@Inject
PermissionsService permissionsService;
@Inject
TimeseriesService timeseriesService;
public List<TimeseriesContainer> getContainers() {
return timeseriesContainerDAO.findAll().stream().filter(c -> c.isDeleted() == false).toList();
}
@Override
public List<TimeseriesContainer> getAllContainers(QueryParamHelper params) {
User user = userService.getCurrentUser();
var containers = timeseriesContainerDAO.findAllTimeseriesContainers(params, user.getUsername());
return containers;
}
/**
* Get Timeseries Container by Id
*
* @throws InvalidPathException if container is null or deleted
* @throws InvalidAuthException if user has no read permissions on container
* @return timeseries container
*/
@Override
public TimeseriesContainer getContainer(long timeseriesContainerId) {
Optional<TimeseriesContainer> containerOptional = getContainerOptional(timeseriesContainerId);
if (containerOptional.isEmpty()) {
String errorMsg = String.format(
"ID ERROR - Timeseries Container with id %s is null or deleted",
timeseriesContainerId
);
Log.errorf(errorMsg);
throw new InvalidPathException(errorMsg);
}
assertIsAllowedToReadContainer(timeseriesContainerId);
return containerOptional.get();
}
/**
* Get Timeseries Container by Id
*
* This function is introduced to fix the issue occurring in ticket: #581.
* TODO: This function should only be used for the timeseries migration, and should be deleted in the future!
*
* @throws InvalidPathException if container is null or deleted
* @throws InvalidAuthException if user has no read permissions on container
* @return timeseries container
*/
@Deprecated
public TimeseriesContainer getContainerNoChecks(long timeseriesContainerId) {
Optional<TimeseriesContainer> containerOptional = getContainerOptional(timeseriesContainerId);
if (containerOptional.isEmpty()) {
String errorMsg = String.format(
"ID ERROR - Timeseries Container with id %s is null or deleted",
timeseriesContainerId
);
Log.errorf(errorMsg);
throw new InvalidPathException(errorMsg);
}
return containerOptional.get();
}
private Optional<TimeseriesContainer> getContainerOptional(long timeseriesContainerId) {
TimeseriesContainer timeseriesContainer = timeseriesContainerDAO.findByNeo4jId(timeseriesContainerId);
if (timeseriesContainer == null || timeseriesContainer.isDeleted()) {
return Optional.empty();
}
return Optional.of(timeseriesContainer);
}
/**
* Creates a TimeseriesContainer and stores it in Neo4J
*
* @param name name of the container
* @param username of the related user
* @return the created timeseriesContainer
*/
@Override
public TimeseriesContainer createContainer(TimeseriesContainerIO timeseriesContainerIO) {
User user = userService.getCurrentUser();
var toCreate = new TimeseriesContainer();
toCreate.setCreatedAt(dateHelper.getDate());
toCreate.setCreatedBy(user);
toCreate.setDatabase(null); // This is not needed anymore after the migration to TSDB
toCreate.setName(timeseriesContainerIO.getName());
var created = timeseriesContainerDAO.createOrUpdate(toCreate);
permissionsService.createPermissions(created, user, PermissionType.Private);
return created;
}
/**
* Deletes a TimeseriesContainer in Neo4j
*
* @param timeSeriesContainerId identifies the TimeseriesContainer
* @param username of the related user
*/
@Override
public void deleteContainer(long timeSeriesContainerId) {
User user = userService.getCurrentUser();
TimeseriesContainer timeseriesContainer = this.getContainer(timeSeriesContainerId);
timeseriesService.deleteTimeseriesByContainerId(timeSeriesContainerId);
timeseriesContainer.setDeleted(true);
timeseriesContainer.setUpdatedAt(dateHelper.getDate());
timeseriesContainer.setUpdatedBy(user);
timeseriesContainerDAO.createOrUpdate(timeseriesContainer);
}
}