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 }