1 package de.dlr.shepard.data.structureddata.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.InvalidPathException;
7 import de.dlr.shepard.common.exceptions.InvalidRequestException;
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.structureddata.daos.StructuredDataContainerDAO;
13 import de.dlr.shepard.data.structureddata.entities.StructuredData;
14 import de.dlr.shepard.data.structureddata.entities.StructuredDataContainer;
15 import de.dlr.shepard.data.structureddata.entities.StructuredDataPayload;
16 import de.dlr.shepard.data.structureddata.io.StructuredDataContainerIO;
17 import io.quarkus.logging.Log;
18 import jakarta.enterprise.context.RequestScoped;
19 import jakarta.inject.Inject;
20 import java.util.List;
21
22 @RequestScoped
23 public class StructuredDataContainerService
24 extends AbstractContainerService<StructuredDataContainer, StructuredDataContainerIO> {
25
26 @Inject
27 StructuredDataContainerDAO structuredDataContainerDAO;
28
29 @Inject
30 StructuredDataService structuredDataService;
31
32 @Inject
33 PermissionsService permissionsService;
34
35 @Inject
36 UserService userService;
37
38 @Inject
39 DateHelper dateHelper;
40
41
42
43
44
45
46
47
48 @Override
49 public StructuredDataContainer createContainer(StructuredDataContainerIO structuredDataContainerIO) {
50 User user = userService.getCurrentUser();
51 String mongoId = structuredDataService.createStructuredDataContainer();
52
53 var toCreate = new StructuredDataContainer();
54 toCreate.setCreatedAt(dateHelper.getDate());
55 toCreate.setCreatedBy(user);
56 toCreate.setMongoId(mongoId);
57 toCreate.setName(structuredDataContainerIO.getName());
58
59 var created = structuredDataContainerDAO.createOrUpdate(toCreate);
60 permissionsService.createPermissions(created, user, PermissionType.Private);
61 return created;
62 }
63
64
65
66
67
68
69
70 @Override
71 public StructuredDataContainer getContainer(long id) {
72 StructuredDataContainer structuredDataContainer = structuredDataContainerDAO.findByNeo4jId(id);
73 if (structuredDataContainer == null || structuredDataContainer.isDeleted()) {
74 String errorMsg = String.format("ID ERROR - Structured Data Container with id %s is null or deleted", id);
75 Log.error(errorMsg);
76 throw new InvalidPathException(errorMsg);
77 }
78 assertIsAllowedToReadContainer(id);
79 return structuredDataContainer;
80 }
81
82
83
84
85
86
87
88
89 @Override
90 public List<StructuredDataContainer> getAllContainers(QueryParamHelper params) {
91 User user = userService.getCurrentUser();
92 var containers = structuredDataContainerDAO.findAllStructuredDataContainers(params, user.getUsername());
93 return containers;
94 }
95
96
97
98
99
100
101
102
103
104
105 @Override
106 public void deleteContainer(long structuredDataId) {
107 User user = userService.getCurrentUser();
108 StructuredDataContainer structuredDataContainer = getContainer(structuredDataId);
109 assertIsAllowedToDeleteContainer(structuredDataId);
110
111 String mongoId = structuredDataContainer.getMongoId();
112 structuredDataContainer.setDeleted(true);
113 structuredDataContainer.setUpdatedAt(dateHelper.getDate());
114 structuredDataContainer.setUpdatedBy(user);
115 structuredDataContainerDAO.createOrUpdate(structuredDataContainer);
116
117 structuredDataService.deleteStructuredDataContainer(mongoId);
118 }
119
120
121
122
123
124
125
126
127 public StructuredData createStructuredData(long structuredDataContainerID, StructuredDataPayload payload) {
128 StructuredDataContainer structuredDataContainer = getContainer(structuredDataContainerID);
129 assertIsAllowedToEditContainer(structuredDataContainerID);
130
131 StructuredData result = structuredDataService.createStructuredData(structuredDataContainer.getMongoId(), payload);
132
133 structuredDataContainer.addStructuredData(result);
134 structuredDataContainerDAO.createOrUpdate(structuredDataContainer);
135 return result;
136 }
137
138
139
140
141
142
143
144
145
146 public StructuredDataPayload getStructuredData(long structuredDataContainerID, String oid) {
147 StructuredDataContainer structuredDataContainer = getContainer(structuredDataContainerID);
148
149 return structuredDataService.getPayload(structuredDataContainer.getMongoId(), oid);
150 }
151
152
153
154
155
156
157
158
159 public void deleteStructuredData(long structuredDataContainerID, String oid) {
160 StructuredDataContainer structuredDataContainer = getContainer(structuredDataContainerID);
161 assertIsAllowedToEditContainer(structuredDataContainerID);
162
163 structuredDataService.deletePayload(structuredDataContainer.getMongoId(), oid);
164
165 List<StructuredData> newStructuredDatas = structuredDataContainer
166 .getStructuredDatas()
167 .stream()
168 .filter(f -> !f.getOid().equals(oid))
169 .toList();
170 structuredDataContainer.setStructuredDatas(newStructuredDatas);
171 structuredDataContainerDAO.createOrUpdate(structuredDataContainer);
172 }
173 }