From 4c3e9d4fd300c6745b38121e80960a1cc88eaae5 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Tue, 9 Jun 2020 23:58:58 +0200
Subject: [PATCH] WIP: versioning

---
 src/main/java/caosdb/server/jobs/Job.java           |  2 +-
 .../caosdb/server/jobs/core/RemoveDuplicates.java   | 13 ++++++++-----
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/main/java/caosdb/server/jobs/Job.java b/src/main/java/caosdb/server/jobs/Job.java
index 8d98cbc3..78c8ed61 100644
--- a/src/main/java/caosdb/server/jobs/Job.java
+++ b/src/main/java/caosdb/server/jobs/Job.java
@@ -186,7 +186,7 @@ public abstract class Job extends AbstractObservable implements Observer {
       if (ret != null) {
         return ret;
       }
-    } else if (version.startsWith("HEAD~")) {
+    } else if (version.startsWith("HEAD~") && getEntityById(id) != null) {
       // if version is HEAD~{OFFSET} with {OFFSET} > 0 and the targeted entity is
       // part of this request (i.e. is to be updated), the actual offset has to be
       // reduced by 1. HEAD always denotes the entity@HEAD *after* the successful
diff --git a/src/main/java/caosdb/server/jobs/core/RemoveDuplicates.java b/src/main/java/caosdb/server/jobs/core/RemoveDuplicates.java
index a104c124..a09f6653 100644
--- a/src/main/java/caosdb/server/jobs/core/RemoveDuplicates.java
+++ b/src/main/java/caosdb/server/jobs/core/RemoveDuplicates.java
@@ -30,17 +30,20 @@ public class RemoveDuplicates extends ContainerJob {
 
   @Override
   protected void run() {
-    final HashSet<EntityInterface> rm = new HashSet<EntityInterface>();
+    // collect duplicates
+    final HashSet<EntityInterface> duplicates = new HashSet<EntityInterface>();
     for (final EntityInterface e : getContainer()) {
-      if (e.hasId() && !rm.contains(e)) {
+      if (e.hasId() && !duplicates.contains(e)) {
         for (final EntityInterface e2 : getContainer()) {
-          if (e2 != e && e.getId().equals(e2.getId())) {
-            rm.add(e2);
+          if (e2 != e && e.getIdVersion().equals(e2.getIdVersion())) {
+            // this is a duplicate of another entity in this container
+            duplicates.add(e2);
           }
         }
       }
     }
-    for (final EntityInterface e : rm) {
+    // remove duplicates.
+    for (final EntityInterface e : duplicates) {
       getContainer().remove(e);
     }
   }
-- 
GitLab