View Javadoc
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     * Gets a collectionId for a given labJournalEntryId
95     *
96     * @param labJournalEntryId
97     * @return Long
98     * @throws InvalidPathException if labJournal is not accessible, or if the associated dataobject is not accessible
99     * @throws InvalidAuthException if user has no read permissions on associated DataObject
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 }