From 3bfe1feabaf755a40c4083effcffe9ea48dc731b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20Proch=C3=A1zka?= <david@prochazka.dev>
Date: Fri, 15 Jan 2021 08:46:49 +0100
Subject: [PATCH] ADD: objects are retrieved from LocalBucket

---
 src/mhtree/InternalNode.java | 11 +++++++++++
 src/mhtree/LeafNode.java     | 11 +++++++++++
 src/mhtree/MHTree.java       |  3 +--
 src/mhtree/Node.java         |  5 +----
 4 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/src/mhtree/InternalNode.java b/src/mhtree/InternalNode.java
index b4c70d7..8875006 100644
--- a/src/mhtree/InternalNode.java
+++ b/src/mhtree/InternalNode.java
@@ -1,9 +1,11 @@
 package mhtree;
 
+import messif.buckets.BucketStorageException;
 import messif.objects.LocalAbstractObject;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -38,6 +40,15 @@ public class InternalNode extends Node implements Serializable {
     }
 
     public void addObject(LocalAbstractObject object) {
+        if (isCovered(object)) return;
+
         rebuildHull(object);
     }
+
+    public List<LocalAbstractObject> getObjects() {
+        return children.stream()
+                .map(Node::getObjects)
+                .flatMap(Collection::stream)
+                .collect(Collectors.toList());
+    }
 }
diff --git a/src/mhtree/LeafNode.java b/src/mhtree/LeafNode.java
index 5e47197..796fd00 100644
--- a/src/mhtree/LeafNode.java
+++ b/src/mhtree/LeafNode.java
@@ -4,8 +4,10 @@ import cz.muni.fi.disa.similarityoperators.cover.AbstractRepresentation;
 import messif.buckets.BucketStorageException;
 import messif.buckets.LocalBucket;
 import messif.objects.LocalAbstractObject;
+import messif.objects.util.AbstractObjectIterator;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
 
 public class LeafNode extends Node implements Serializable {
@@ -34,4 +36,13 @@ public class LeafNode extends Node implements Serializable {
 
         rebuildHull(object);
     }
+
+    public List<LocalAbstractObject> getObjects() {
+        List<LocalAbstractObject> objects = new ArrayList<>();
+
+        for (AbstractObjectIterator<LocalAbstractObject> it = bucket.getAllObjects(); it.hasNext(); )
+            objects.add(it.next());
+
+        return objects;
+    }
 }
diff --git a/src/mhtree/MHTree.java b/src/mhtree/MHTree.java
index 0380225..23865fc 100644
--- a/src/mhtree/MHTree.java
+++ b/src/mhtree/MHTree.java
@@ -75,8 +75,7 @@ public class MHTree extends Algorithm implements Serializable {
         Node currentNode = root;
 
         while (!currentNode.isLeaf()) {
-            if (!currentNode.isCovered(object))
-                currentNode.addObject(object);
+            currentNode.addObject(object);
 
             currentNode = ((InternalNode) currentNode).getNearestChild(object);
         }
diff --git a/src/mhtree/Node.java b/src/mhtree/Node.java
index 333055f..71eb224 100644
--- a/src/mhtree/Node.java
+++ b/src/mhtree/Node.java
@@ -63,16 +63,13 @@ public abstract class Node implements Serializable {
         return hull.getHull();
     }
 
-    public List<LocalAbstractObject> getObjects() {
-        return hull.getObjects();
-    }
-
     @Override
     public String toString() {
         return "Node{hull=" + hull + '}';
     }
 
     public abstract void addObject(LocalAbstractObject object) throws BucketStorageException;
+    public abstract List<LocalAbstractObject> getObjects();
 
     protected void rebuildHull(LocalAbstractObject object) {
         List<LocalAbstractObject> objects = new ArrayList<>(getObjects());
-- 
GitLab