View Javadoc
1   package de.dlr.shepard.data.timeseries.services;
2   
3   import de.dlr.shepard.auth.permission.services.PermissionsService;
4   import de.dlr.shepard.auth.users.entities.User;
5   import de.dlr.shepard.auth.users.services.UserService;
6   import de.dlr.shepard.common.exceptions.InvalidAuthException;
7   import de.dlr.shepard.common.exceptions.InvalidPathException;
8   import de.dlr.shepard.common.util.DateHelper;
9   import de.dlr.shepard.common.util.PermissionType;
10  import de.dlr.shepard.common.util.QueryParamHelper;
11  import de.dlr.shepard.data.AbstractContainerService;
12  import de.dlr.shepard.data.timeseries.daos.TimeseriesContainerDAO;
13  import de.dlr.shepard.data.timeseries.io.TimeseriesContainerIO;
14  import de.dlr.shepard.data.timeseries.model.TimeseriesContainer;
15  import io.quarkus.logging.Log;
16  import jakarta.enterprise.context.RequestScoped;
17  import jakarta.inject.Inject;
18  import java.util.List;
19  import java.util.Optional;
20  
21  @RequestScoped
22  public class TimeseriesContainerService extends AbstractContainerService<TimeseriesContainer, TimeseriesContainerIO> {
23  
24    @Inject
25    TimeseriesContainerDAO timeseriesContainerDAO;
26  
27    @Inject
28    UserService userService;
29  
30    @Inject
31    DateHelper dateHelper;
32  
33    @Inject
34    PermissionsService permissionsService;
35  
36    @Inject
37    TimeseriesService timeseriesService;
38  
39    public List<TimeseriesContainer> getContainers() {
40      return timeseriesContainerDAO.findAll().stream().filter(c -> c.isDeleted() == false).toList();
41    }
42  
43    @Override
44    public List<TimeseriesContainer> getAllContainers(QueryParamHelper params) {
45      User user = userService.getCurrentUser();
46      var containers = timeseriesContainerDAO.findAllTimeseriesContainers(params, user.getUsername());
47      return containers;
48    }
49  
50    /**
51     * Get Timeseries Container by Id
52     *
53     * @throws InvalidPathException if container is null or deleted
54     * @throws InvalidAuthException if user has no read permissions on container
55     * @return timeseries container
56     */
57    @Override
58    public TimeseriesContainer getContainer(long timeseriesContainerId) {
59      Optional<TimeseriesContainer> containerOptional = getContainerOptional(timeseriesContainerId);
60      if (containerOptional.isEmpty()) {
61        String errorMsg = String.format(
62          "ID ERROR - Timeseries Container with id %s is null or deleted",
63          timeseriesContainerId
64        );
65        Log.errorf(errorMsg);
66        throw new InvalidPathException(errorMsg);
67      }
68      assertIsAllowedToReadContainer(timeseriesContainerId);
69      return containerOptional.get();
70    }
71  
72    private Optional<TimeseriesContainer> getContainerOptional(long timeseriesContainerId) {
73      TimeseriesContainer timeseriesContainer = timeseriesContainerDAO.findByNeo4jId(timeseriesContainerId);
74      if (timeseriesContainer == null || timeseriesContainer.isDeleted()) {
75        return Optional.empty();
76      }
77      return Optional.of(timeseriesContainer);
78    }
79  
80    /**
81     * Creates a TimeseriesContainer and stores it in Neo4J
82     *
83     * @param name name of the container
84     * @param username of the related user
85     * @return the created timeseriesContainer
86     */
87    @Override
88    public TimeseriesContainer createContainer(TimeseriesContainerIO timeseriesContainerIO) {
89      User user = userService.getCurrentUser();
90      var toCreate = new TimeseriesContainer();
91      toCreate.setCreatedAt(dateHelper.getDate());
92      toCreate.setCreatedBy(user);
93      toCreate.setDatabase(null); // This is not needed anymore after the migration to TSDB
94      toCreate.setName(timeseriesContainerIO.getName());
95  
96      var created = timeseriesContainerDAO.createOrUpdate(toCreate);
97      permissionsService.createPermissions(created, user, PermissionType.Private);
98      return created;
99    }
100 
101   /**
102    * Deletes a TimeseriesContainer in Neo4j
103    *
104    * @param timeSeriesContainerId identifies the TimeseriesContainer
105    * @param username              of the related user
106    */
107   @Override
108   public void deleteContainer(long timeSeriesContainerId) {
109     User user = userService.getCurrentUser();
110     TimeseriesContainer timeseriesContainer = this.getContainer(timeSeriesContainerId);
111     timeseriesService.deleteTimeseriesByContainerId(timeSeriesContainerId);
112 
113     timeseriesContainer.setDeleted(true);
114     timeseriesContainer.setUpdatedAt(dateHelper.getDate());
115     timeseriesContainer.setUpdatedBy(user);
116     timeseriesContainerDAO.createOrUpdate(timeseriesContainer);
117   }
118 }