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.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 }