1 package de.dlr.shepard.context.labJournal.services;
2
3 import de.dlr.shepard.auth.users.entities.User;
4 import de.dlr.shepard.auth.users.services.UserService;
5 import de.dlr.shepard.common.exceptions.InvalidAuthException;
6 import de.dlr.shepard.common.exceptions.InvalidPathException;
7 import de.dlr.shepard.common.util.DateHelper;
8 import de.dlr.shepard.context.collection.entities.DataObject;
9 import de.dlr.shepard.context.collection.services.CollectionService;
10 import de.dlr.shepard.context.collection.services.DataObjectService;
11 import de.dlr.shepard.context.labJournal.daos.LabJournalEntryDAO;
12 import de.dlr.shepard.context.labJournal.entities.LabJournalEntry;
13 import io.quarkus.logging.Log;
14 import jakarta.enterprise.context.RequestScoped;
15 import jakarta.inject.Inject;
16 import java.util.ArrayList;
17 import java.util.Comparator;
18 import java.util.List;
19 import java.util.stream.Collectors;
20
21 @RequestScoped
22 public class LabJournalEntryService {
23
24 @Inject
25 LabJournalEntryDAO labJournalEntryDAO;
26
27 @Inject
28 DataObjectService dataObjectService;
29
30 @Inject
31 CollectionService collectionService;
32
33 @Inject
34 UserService userService;
35
36 @Inject
37 DateHelper dateHelper;
38
39 public LabJournalEntry createLabJournalEntry(Long dataObjectId, String content) {
40 DataObject dataObject = dataObjectService.getDataObject(dataObjectId);
41 collectionService.assertIsAllowedToEditCollection(dataObject.getCollection().getId());
42
43 User user = userService.getCurrentUser();
44 LabJournalEntry labJournalEntry = new LabJournalEntry();
45 labJournalEntry.setContent(content);
46 labJournalEntry.setCreatedBy(user);
47 labJournalEntry.setCreatedAt(dateHelper.getDate());
48 labJournalEntry.setDataObject(dataObject);
49 labJournalEntry = labJournalEntryDAO.createOrUpdate(labJournalEntry);
50 return labJournalEntry;
51 }
52
53 public List<LabJournalEntry> getLabJournalEntries(DataObject dataObject) {
54 if (null == dataObject) return new ArrayList<LabJournalEntry>();
55 collectionService.assertIsAllowedToReadCollection(dataObject.getCollection().getId());
56
57 List<LabJournalEntry> labJournalEntries = dataObject.getLabJournalEntries();
58 List<Long> labJournalEntryIds = labJournalEntries.stream().map(LabJournalEntry::getId).collect(Collectors.toList());
59 labJournalEntries = labJournalEntryDAO.findLabJournalEntriesByIds(labJournalEntryIds);
60 return labJournalEntries
61 .stream()
62 .filter(labJournalEntry -> !labJournalEntry.isDeleted())
63 .sorted(Comparator.comparing(LabJournalEntry::getCreatedAt).reversed())
64 .collect(Collectors.toList());
65 }
66
67 public LabJournalEntry getLabJournalEntry(long labJournalEntryId) {
68 collectionService.assertIsAllowedToReadCollection(getCollectionId(labJournalEntryId));
69
70 return labJournalEntryDAO.findByNeo4jId(labJournalEntryId);
71 }
72
73 public LabJournalEntry updateLabJournalEntry(long labJournalEntryId, String content) {
74 collectionService.assertIsAllowedToEditCollection(getCollectionId(labJournalEntryId));
75
76 LabJournalEntry labJournalEntry = labJournalEntryDAO.findByNeo4jId(labJournalEntryId);
77 if (null == labJournalEntry) return null;
78 User user = userService.getCurrentUser();
79 labJournalEntry.setContent(content);
80 labJournalEntry.setUpdatedAt(dateHelper.getDate());
81 labJournalEntry.setUpdatedBy(user);
82 labJournalEntry = labJournalEntryDAO.createOrUpdate(labJournalEntry);
83 return labJournalEntry;
84 }
85
86 public boolean deleteLabJournalEntry(long labJournalEntryId) {
87 collectionService.assertIsAllowedToEditCollection(getCollectionId(labJournalEntryId));
88
89 User user = userService.getCurrentUser();
90 return labJournalEntryDAO.deleteLabJournalEntry(labJournalEntryId, user, dateHelper.getDate());
91 }
92
93
94
95
96
97
98
99
100
101 private Long getCollectionId(Long labJournalEntryId) {
102 LabJournalEntry labJournalEntry = labJournalEntryDAO.findByNeo4jId(labJournalEntryId);
103
104 if (null == labJournalEntry || labJournalEntry.isDeleted()) {
105 String errorMsg = String.format("LabJournal with Id %s cannot be found or is deleted", labJournalEntryId);
106 Log.error(errorMsg);
107 throw new InvalidPathException(errorMsg);
108 }
109
110 DataObject dataObject = dataObjectService.getDataObject(labJournalEntry.getDataObject().getId());
111 return dataObject.getCollection().getId();
112 }
113 }