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
42
43
44
45
46
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 }