VersionService.java
package de.dlr.shepard.context.version.services;
import de.dlr.shepard.auth.users.daos.UserDAO;
import de.dlr.shepard.auth.users.entities.User;
import de.dlr.shepard.common.util.DateHelper;
import de.dlr.shepard.context.collection.daos.CollectionDAO;
import de.dlr.shepard.context.collection.entities.Collection;
import de.dlr.shepard.context.collection.services.CollectionService;
import de.dlr.shepard.context.version.daos.VersionDAO;
import de.dlr.shepard.context.version.entities.Version;
import de.dlr.shepard.context.version.io.VersionIO;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@RequestScoped
public class VersionService {
@Inject
VersionDAO versionDAO;
@Inject
CollectionDAO collectionDAO;
@Inject
UserDAO userDAO;
@Inject
DateHelper dateHelper;
@Inject
CollectionService collectionService;
public List<Version> getAllVersions(long collectionId) {
List<Version> versions = versionDAO.findAllVersions(collectionId);
return versions;
}
public Version getVersion(UUID versionUID) {
return versionDAO.find(versionUID);
}
public Version attachToVersionOfVersionableEntityAndReturnVersion(long existingEntityId, long entityToAttachId) {
Version version = versionDAO.findVersionLightByNeo4jId(existingEntityId);
versionDAO.createLink(entityToAttachId, version.getUid());
return version;
}
private Collection copyCollectionForVersioning(Collection collection, Date createdAt, User createdBy) {
Collection collectionCopy = new Collection();
collectionCopy.setAnnotations(collection.getAnnotations());
collectionCopy.setAttributes(collection.getAttributes());
collectionCopy.setDescription(collection.getDescription());
collectionCopy.setName(collection.getName());
collectionCopy.setPermissions(collection.getPermissions());
collectionCopy.setShepardId(collection.getShepardId());
collectionCopy.setCreatedAt(createdAt);
collectionCopy.setCreatedBy(createdBy);
return collectionCopy;
}
public Version createVersion(long collectionId, VersionIO version, String username) {
Version HEADVersion = versionDAO.findHEADVersion(collectionId);
var user = userDAO.find(username);
var date = dateHelper.getDate();
Collection collection = collectionService.getCollectionWithDataObjectsAndIncomingReferences(collectionId, null);
Collection collectionCopy = copyCollectionForVersioning(collection, date, user);
Version newVersion = new Version();
newVersion.setCreatedAt(date);
newVersion.setCreatedBy(user);
newVersion.setDescription(version.getDescription());
newVersion.setName(version.getName());
newVersion.setHEADVersion(false);
if (HEADVersion.getPredecessor() != null) {
newVersion.setPredecessor(HEADVersion.getPredecessor());
}
if (HEADVersion.getPredecessor() != null) versionDAO.removeHasPredecessor(
HEADVersion.getUid(),
HEADVersion.getPredecessor().getUid()
);
Version createdVersion = versionDAO.createOrUpdate(newVersion);
HEADVersion.setPredecessor(createdVersion);
versionDAO.createOrUpdate(HEADVersion);
collectionCopy.setVersion(newVersion);
collectionDAO.createOrUpdate(collectionCopy);
UUID HEADVersionUID = HEADVersion.getUid();
UUID createdVersionUID = createdVersion.getUid();
versionDAO.copyDataObjectsWithParentsAndPredecessors(HEADVersionUID, createdVersionUID);
versionDAO.copyDataObjectReferences(HEADVersionUID, createdVersionUID);
versionDAO.copyCollectionReferences(HEADVersionUID, createdVersionUID);
versionDAO.copyFileReferences(HEADVersionUID, createdVersionUID);
versionDAO.copyStructuredDataReferences(HEADVersionUID, createdVersionUID);
versionDAO.copyTimeseriesReferences(HEADVersionUID, createdVersionUID);
versionDAO.copyURIReferences(HEADVersionUID, createdVersionUID);
return createdVersion;
}
}