View Javadoc
1   package de.dlr.shepard.data.spatialdata.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.spatialdata.daos.SpatialDataContainerDAO;
13  import de.dlr.shepard.data.spatialdata.io.SpatialDataContainerIO;
14  import de.dlr.shepard.data.spatialdata.model.SpatialDataContainer;
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 SpatialDataContainerService
23    extends AbstractContainerService<SpatialDataContainer, SpatialDataContainerIO> {
24  
25    @Inject
26    SpatialDataPointService spatialDataPointService;
27  
28    @Inject
29    SpatialDataContainerDAO containerDao;
30  
31    @Inject
32    UserService userService;
33  
34    @Inject
35    PermissionsService permissionsService;
36  
37    @Inject
38    DateHelper dateHelper;
39  
40    /**
41     * Gets the SpatialDataContainer
42     *
43     * @param id identifies the searched SpatialDataContainer
44     * @return the SpatialDataContainer with matching id or null
45     * @throws InvalidPathException if the SpatialData container cannot be found
46     * @throws InvalidAuthException if user has no read permission on container
47     */
48    @Override
49    public SpatialDataContainer getContainer(long containerId) {
50      var containerOptional = this.getContainerOptional(containerId);
51  
52      if (containerOptional.isEmpty()) {
53        String errorMsg = String.format("ID ERROR - Spatial data container with id %s is null or deleted", containerId);
54        Log.error(errorMsg);
55        throw new InvalidPathException(errorMsg);
56      }
57      assertIsAllowedToReadContainer(containerId);
58      return containerOptional.get();
59    }
60  
61    private Optional<SpatialDataContainer> getContainerOptional(long containerId) {
62      var container = containerDao.findByNeo4jId(containerId);
63      if (container == null || container.isDeleted()) {
64        return Optional.empty();
65      }
66      return Optional.of(container);
67    }
68  
69    @Override
70    public List<SpatialDataContainer> getAllContainers(QueryParamHelper params) {
71      User user = userService.getCurrentUser();
72      var containers = containerDao.findAllSpatialContainers(params, user.getUsername());
73      return containers;
74    }
75  
76    @Override
77    public SpatialDataContainer createContainer(SpatialDataContainerIO containerIO) {
78      User user = userService.getCurrentUser();
79  
80      SpatialDataContainer toCreate = new SpatialDataContainer();
81      toCreate.setCreatedAt(dateHelper.getDate());
82      toCreate.setCreatedBy(user);
83      toCreate.setName(containerIO.getName());
84  
85      var created = containerDao.createOrUpdate(toCreate);
86      permissionsService.createPermissions(created, user, PermissionType.Private);
87      return created;
88    }
89  
90    @Override
91    public void deleteContainer(long containerId) {
92      SpatialDataContainer container = getContainer(containerId);
93      assertIsAllowedToDeleteContainer(containerId);
94  
95      User user = userService.getCurrentUser();
96      spatialDataPointService.deleteByContainerId(containerId);
97      container.setDeleted(true);
98      container.setUpdatedAt(dateHelper.getDate());
99      container.setUpdatedBy(user);
100     containerDao.createOrUpdate(container);
101   }
102 }