1 package de.dlr.shepard.context.version.services;
2
3 import de.dlr.shepard.auth.users.daos.UserDAO;
4 import de.dlr.shepard.auth.users.entities.User;
5 import de.dlr.shepard.common.util.DateHelper;
6 import de.dlr.shepard.context.collection.daos.CollectionDAO;
7 import de.dlr.shepard.context.collection.entities.Collection;
8 import de.dlr.shepard.context.collection.services.CollectionService;
9 import de.dlr.shepard.context.version.daos.VersionDAO;
10 import de.dlr.shepard.context.version.entities.Version;
11 import de.dlr.shepard.context.version.io.VersionIO;
12 import jakarta.enterprise.context.RequestScoped;
13 import jakarta.inject.Inject;
14 import java.util.Date;
15 import java.util.List;
16 import java.util.UUID;
17
18 @RequestScoped
19 public class VersionService {
20
21 @Inject
22 VersionDAO versionDAO;
23
24 @Inject
25 CollectionDAO collectionDAO;
26
27 @Inject
28 UserDAO userDAO;
29
30 @Inject
31 DateHelper dateHelper;
32
33 @Inject
34 CollectionService collectionService;
35
36 public List<Version> getAllVersions(long collectionId) {
37 List<Version> versions = versionDAO.findAllVersions(collectionId);
38 return versions;
39 }
40
41 public Version getVersion(UUID versionUID) {
42 return versionDAO.find(versionUID);
43 }
44
45 public Version attachToVersionOfVersionableEntityAndReturnVersion(long existingEntityId, long entityToAttachId) {
46 Version version = versionDAO.findVersionLightByNeo4jId(existingEntityId);
47 versionDAO.createLink(entityToAttachId, version.getUid());
48 return version;
49 }
50
51 private Collection copyCollectionForVersioning(Collection collection, Date createdAt, User createdBy) {
52 Collection collectionCopy = new Collection();
53 collectionCopy.setAttributes(collection.getAttributes());
54 collectionCopy.setDescription(collection.getDescription());
55 collectionCopy.setName(collection.getName());
56 collectionCopy.setPermissions(collection.getPermissions());
57 collectionCopy.setShepardId(collection.getShepardId());
58 collectionCopy.setCreatedAt(createdAt);
59 collectionCopy.setCreatedBy(createdBy);
60 return collectionCopy;
61 }
62
63 public Version createVersion(long collectionId, VersionIO version, String username) {
64 Version HEADVersion = versionDAO.findHEADVersion(collectionId);
65 var user = userDAO.find(username);
66 var date = dateHelper.getDate();
67 Collection collection = collectionService.getCollectionWithDataObjectsAndIncomingReferences(collectionId, null);
68 Collection collectionCopy = copyCollectionForVersioning(collection, date, user);
69
70 Version newVersion = new Version();
71 newVersion.setCreatedAt(date);
72 newVersion.setCreatedBy(user);
73 newVersion.setDescription(version.getDescription());
74 newVersion.setName(version.getName());
75 newVersion.setHEADVersion(false);
76 if (HEADVersion.getPredecessor() != null) {
77 newVersion.setPredecessor(HEADVersion.getPredecessor());
78 }
79
80 if (HEADVersion.getPredecessor() != null) versionDAO.removeHasPredecessor(
81 HEADVersion.getUid(),
82 HEADVersion.getPredecessor().getUid()
83 );
84 Version createdVersion = versionDAO.createOrUpdate(newVersion);
85 HEADVersion.setPredecessor(createdVersion);
86 versionDAO.createOrUpdate(HEADVersion);
87
88 collectionCopy.setVersion(newVersion);
89 collectionDAO.createOrUpdate(collectionCopy);
90
91 UUID HEADVersionUID = HEADVersion.getUid();
92 UUID createdVersionUID = createdVersion.getUid();
93 versionDAO.copyDataObjectsWithParentsAndPredecessors(HEADVersionUID, createdVersionUID);
94 versionDAO.copyDataObjectReferences(HEADVersionUID, createdVersionUID);
95 versionDAO.copyCollectionReferences(HEADVersionUID, createdVersionUID);
96 versionDAO.copyFileReferences(HEADVersionUID, createdVersionUID);
97 versionDAO.copyStructuredDataReferences(HEADVersionUID, createdVersionUID);
98 versionDAO.copyTimeseriesReferences(HEADVersionUID, createdVersionUID);
99 versionDAO.copyURIReferences(HEADVersionUID, createdVersionUID);
100 versionDAO.addAnnotations(HEADVersionUID, createdVersionUID);
101 return createdVersion;
102 }
103 }