View Javadoc
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.setAnnotations(collection.getAnnotations());
54      collectionCopy.setAttributes(collection.getAttributes());
55      collectionCopy.setDescription(collection.getDescription());
56      collectionCopy.setName(collection.getName());
57      collectionCopy.setPermissions(collection.getPermissions());
58      collectionCopy.setShepardId(collection.getShepardId());
59      collectionCopy.setCreatedAt(createdAt);
60      collectionCopy.setCreatedBy(createdBy);
61      return collectionCopy;
62    }
63  
64    public Version createVersion(long collectionId, VersionIO version, String username) {
65      Version HEADVersion = versionDAO.findHEADVersion(collectionId);
66      var user = userDAO.find(username);
67      var date = dateHelper.getDate();
68      Collection collection = collectionService.getCollectionWithDataObjectsAndIncomingReferences(collectionId, null);
69      Collection collectionCopy = copyCollectionForVersioning(collection, date, user);
70  
71      Version newVersion = new Version();
72      newVersion.setCreatedAt(date);
73      newVersion.setCreatedBy(user);
74      newVersion.setDescription(version.getDescription());
75      newVersion.setName(version.getName());
76      newVersion.setHEADVersion(false);
77      if (HEADVersion.getPredecessor() != null) {
78        newVersion.setPredecessor(HEADVersion.getPredecessor());
79      }
80  
81      if (HEADVersion.getPredecessor() != null) versionDAO.removeHasPredecessor(
82        HEADVersion.getUid(),
83        HEADVersion.getPredecessor().getUid()
84      );
85      Version createdVersion = versionDAO.createOrUpdate(newVersion);
86      HEADVersion.setPredecessor(createdVersion);
87      versionDAO.createOrUpdate(HEADVersion);
88  
89      collectionCopy.setVersion(newVersion);
90      collectionDAO.createOrUpdate(collectionCopy);
91  
92      UUID HEADVersionUID = HEADVersion.getUid();
93      UUID createdVersionUID = createdVersion.getUid();
94      versionDAO.copyDataObjectsWithParentsAndPredecessors(HEADVersionUID, createdVersionUID);
95      versionDAO.copyDataObjectReferences(HEADVersionUID, createdVersionUID);
96      versionDAO.copyCollectionReferences(HEADVersionUID, createdVersionUID);
97      versionDAO.copyFileReferences(HEADVersionUID, createdVersionUID);
98      versionDAO.copyStructuredDataReferences(HEADVersionUID, createdVersionUID);
99      versionDAO.copyTimeseriesReferences(HEADVersionUID, createdVersionUID);
100     versionDAO.copyURIReferences(HEADVersionUID, createdVersionUID);
101     return createdVersion;
102   }
103 }