From 5557111e9333b2d81da4cc9f7090e0badee244e1 Mon Sep 17 00:00:00 2001 From: gkolokythas Date: Tue, 23 Apr 2019 12:01:49 +0300 Subject: [PATCH] Makes the code of Dataset Profile version checking on a Dataset more maintainable. (Ticket #59) --- .../eudat/logic/managers/DatasetManager.java | 46 +++++++++---------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index 90f4e66bd..78690fab2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -55,6 +55,7 @@ import java.nio.file.Paths; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; +import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -174,36 +175,31 @@ public class DatasetManager { uuidList.add(profileId); profileCriteria.setGroupIds(uuidList); profileCriteria.setAllVersions(true); - List items = databaseRepository.getDatasetProfileDao().getWithCriteria(profileCriteria) - .orderBy(((builder, root) -> builder.asc(root.get("version")))) - .toList(); - // Search if the Dataset needs dataset Profile update depending on his DMP associated profiles. - AssociatedProfile associatedProfile = new AssociatedProfile(); - boolean y = true; - // Start the Dataset Profile List from the latest to the earliest. - for (int x=(items.size()-1); x>=0; x--) { - associatedProfile.setId(items.get(x).getId()); - // Check if Dmp contains this profile. - for(AssociatedProfile p : dataset.getDmp().getProfiles() ) { - if (p.getId().toString().equals(associatedProfile.getId().toString())) { - Short latestVersion = items.get(x).getVersion(); - if (latestVersion.equals(datasetEntity.getProfile().getVersion())) { - dataset.setIsProfileLatestVersion(true); - y = false; - break; - } else { - dataset.setIsProfileLatestVersion(false); - y = false; - break; - } + List profileVersions = databaseRepository.getDatasetProfileDao().getWithCriteria(profileCriteria) + .orderBy(((builder, root) -> builder.desc(root.get("version")))) + .toList(); + List profileVersionsIncluded = new LinkedList<>(); + + // Iterate through the versions and remove those that are not included in the DMP of the dataset in question. + for(DatasetProfile version : profileVersions) { + for(AssociatedProfile p : dataset.getDmp().getProfiles()){ + if(version.getId().toString().equals(p.getId().toString())) { + profileVersionsIncluded.add(version); } } - if (!y){ - break; - } } + // Sort the list with the included Versions. + Stream sorted = profileVersionsIncluded.stream().sorted(Comparator.comparing(DatasetProfile::getVersion).reversed()); + + // Make the Stream into List and get the first item. + DatasetProfile profile = sorted.collect(Collectors.toList()).iterator().next(); + + // Check if the dataset is on the latest Version. + boolean latestVersion = profile.getVersion().toString().equals(datasetEntity.getProfile().getVersion().toString()); + dataset.setIsProfileLatestVersion(latestVersion); + dataset.setTags(datasetElastic.getTags()); return dataset; }