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 }