This is an automated email from the ASF dual-hosted git repository.

bchapuis pushed a commit to branch modularization
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git

commit 074b9d3af1ef04b50e64a511a253ff960a6b6770
Author: Bertil Chapuis <[email protected]>
AuthorDate: Sat May 4 18:34:10 2024 +0200

    Add utility class for conversions
---
 .../database/collection/AppendOnlyLog.java         |  10 +-
 .../database/collection/DataCollection.java        |  26 +++++
 .../database/collection/DataConversions.java       | 110 +++++++++++++++++++++
 .../baremaps/database/collection/DataMap.java      |  70 ++++++++++---
 .../database/collection/IndexedDataList.java       |   6 ++
 .../database/collection/IndexedDataMap.java        |   2 +-
 .../baremaps/database/collection/MapAdapter.java   |  24 -----
 .../database/collection/MemoryAlignedDataMap.java  |   2 +-
 .../database/collection/MonotonicDataMap.java      |   2 +-
 .../collection/MonotonicFixedSizeDataMap.java      |   2 +-
 .../collection/MonotonicPairedDataMap.java         |   2 +-
 .../apache/baremaps/workflow/WorkflowContext.java  |   4 +-
 .../baremaps/database/AppendOnlyLogTest.java       |   1 -
 .../org/apache/baremaps/database/DataMapTest.java  |   6 +-
 .../workflow/tasks/ImportUpdateSampleTest.java     |   6 +-
 15 files changed, 213 insertions(+), 60 deletions(-)

diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/AppendOnlyLog.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/AppendOnlyLog.java
index ea4cd2db..55664d7e 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/AppendOnlyLog.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/AppendOnlyLog.java
@@ -101,6 +101,9 @@ public class AppendOnlyLog<E> implements DataCollection<E> {
     return position;
   }
 
+  /**
+   * {@inheritDoc}
+   */
   @Override
   public boolean add(E e) {
     addPositioned(e);
@@ -130,13 +133,6 @@ public class AppendOnlyLog<E> implements DataCollection<E> 
{
     return size;
   }
 
-  /**
-   * Closes the log.
-   */
-  public void close() {
-    memory.segment(0).putLong(0, size);
-  }
-
   /**
    * Clears the log.
    */
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataCollection.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataCollection.java
index bbf1b316..cbc7afc1 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataCollection.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataCollection.java
@@ -33,20 +33,46 @@ public interface DataCollection<E> extends Iterable<E> {
    */
   long size();
 
+  /**
+   * Returns true if the data collection is empty.
+   *
+   * @return true if the data collection is empty
+   */
   default boolean isEmpty() {
     return size() == 0;
   }
 
+  /**
+   * Returns an iterator over the elements in the data collection.
+   *
+   * @return an iterator
+   */
   Iterator<E> iterator();
 
+  /**
+   * Returns a spliterator over the elements in the data collection.
+   *
+   * @return a spliterator
+   */
   default Spliterator<E> spliterator() {
     return Spliterators.spliterator(iterator(), size(), Spliterator.ORDERED);
   }
 
+  /**
+   * Returns a stream over the elements in the data collection.
+   *
+   * @return a stream
+   */
   default Stream<E> stream() {
     return StreamSupport.stream(spliterator(), false);
   }
 
+  /**
+   * Adds a value to the data collection.
+   *
+   * @param e the value to add
+   * @return true if the data collection has been modified
+   */
   default boolean add(E e) {
     throw new UnsupportedOperationException();
   }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataConversions.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataConversions.java
new file mode 100644
index 00000000..0d2e6d8e
--- /dev/null
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataConversions.java
@@ -0,0 +1,110 @@
+package org.apache.baremaps.database.collection;
+
+import java.util.*;
+import java.util.Map.Entry;
+
+public class DataConversions {
+
+    public static <K, V> Map<K, V> asMap(DataMap<K, V> dataMap) {
+        if (dataMap instanceof DataMapAdapter<K, V> adapter) {
+            return adapter.map;
+        } else {
+            return new MapAdapter<>(dataMap);
+        }
+    }
+
+    public static <K, V> DataMap<K, V> asDataMap(Map<K, V> map) {
+        if (map instanceof MapAdapter<K, V> adapter) {
+            return adapter.map;
+        } else {
+            return new DataMapAdapter<>(map);
+        }
+    }
+
+    public static class MapAdapter<K, V> extends AbstractMap<K, V> {
+
+        private final DataMap<K, V> map;
+        private final int size;
+
+        public MapAdapter(DataMap<K, V> dataMap) {
+            this.map = dataMap;
+            this.size = (int) dataMap.size();
+        }
+
+        @Override
+        public Set<Entry<K, V>> entrySet() {
+            return new AbstractSet<>() {
+                @Override
+                public Iterator<Entry<K, V>> iterator() {
+                    return map.entryIterator();
+                }
+
+                @Override
+                public int size() {
+                    return size;
+                }
+            };
+        }
+    }
+
+    public static class DataMapAdapter<K, V> implements DataMap<K, V> {
+
+        private final Map<K, V> map;
+
+        public DataMapAdapter(Map<K, V> map) {
+            this.map = map;
+        }
+
+
+        @Override
+        public long size() {
+            return map.size();
+        }
+
+        @Override
+        public V get(Object key) {
+            return map.get(key);
+        }
+
+        @Override
+        public V put(K key, V value) {
+            return map.put(key, value);
+        }
+
+        @Override
+        public V remove(K key) {
+            return map.remove(key);
+        }
+
+        @Override
+        public boolean containsKey(Object key) {
+            return map.containsKey(key);
+        }
+
+        @Override
+        public boolean containsValue(V value) {
+            return map.containsValue(value);
+        }
+
+        @Override
+        public void clear() {
+            map.clear();
+        }
+
+        @Override
+        public Iterator<K> keyIterator() {
+            return map.keySet().iterator();
+        }
+
+        @Override
+        public Iterator<V> valueIterator() {
+            return map.values().iterator();
+        }
+
+        @Override
+        public Iterator<Entry<K, V>> entryIterator() {
+            return map.entrySet().iterator();
+        }
+    }
+
+}
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataMap.java
index b2d5258e..3fab0239 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataMap.java
@@ -29,24 +29,21 @@ import java.util.Map.Entry;
  */
 public interface DataMap<K, V> {
 
+  /**
+   * Returns the number of values stored in the data map.
+   *
+   * @return the number of values
+   */
   long size();
 
+  /**
+   * Returns the value associated with the specified key or null if the key is 
not present.
+   *
+   * @param key the key
+   * @return the value
+   */
   V get(Object key);
 
-  V put(K key, V value);
-
-  V remove(Object key);
-
-  void clear();
-
-  boolean containsKey(Object key);
-
-  boolean containsValue(Object value);
-
-  default void putAll(Map<? extends K, ? extends V> m) {
-    m.forEach(this::put);
-  }
-
   /**
    * Returns the value associated with the specified key or null if the key is 
not present.
    *
@@ -57,7 +54,50 @@ public interface DataMap<K, V> {
     return Streams.stream(keys).map(this::get).toList();
   }
 
-  /** {@inheritDoc} */
+  /**
+   * Associates the specified value with the specified key in the map.
+   * 
+   * @param key the key
+   * @param value the value
+   * @return the previous value associated with the key, or null if there was 
no mapping for the
+   *         key.
+   */
+  V put(K key, V value);
+
+  /**
+   * Removes the mapping for the specified key from the map if present.
+   *
+   * @param key the key
+   * @return the previous value associated with the key, or null if there was 
no mapping for the
+   *         key.
+   */
+  V remove(K key);
+
+  /**
+   * Returns true if the map contains a mapping for the specified key.
+   *
+   * @param key the key
+   * @return true if the map contains a mapping for the key
+   */
+  boolean containsKey(Object key);
+
+  /**
+   * Returns true if the map contains a mapping for the specified value.
+   *
+   * @param value the value
+   * @return true if the map contains a mapping for the value
+   */
+  boolean containsValue(V value);
+
+  /**
+   * Clears the map.
+   */
+  void clear();
+
+  /**
+   * Returns true if the map contains no elements.
+   * @return true if the map contains no elements
+   */
   default boolean isEmpty() {
     return size() == 0;
   }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/IndexedDataList.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/IndexedDataList.java
index a74dac94..0fe65547 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/IndexedDataList.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/IndexedDataList.java
@@ -82,11 +82,17 @@ public class IndexedDataList<E> implements DataList<E> {
     return values.read(position);
   }
 
+  /**
+   * {@inheritDoc}
+   */
   @Override
   public long size() {
     return index.size();
   }
 
+  /**
+   * {@inheritDoc}
+   */
   @Override
   public void clear() {
     index.clear();
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/IndexedDataMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/IndexedDataMap.java
index 82d33018..4e1655db 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/IndexedDataMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/IndexedDataMap.java
@@ -135,7 +135,7 @@ public class IndexedDataMap<E> implements DataMap<Long, E> {
    * {@inheritDoc}
    */
   @Override
-  public E remove(Object key) {
+  public E remove(Long key) {
     return values.read(index.remove(key));
   }
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MapAdapter.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MapAdapter.java
index 303c9c3c..fdeef477 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MapAdapter.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MapAdapter.java
@@ -22,28 +22,4 @@ import java.util.AbstractSet;
 import java.util.Iterator;
 import java.util.Set;
 
-public class MapAdapter<K, V> extends AbstractMap<K, V> {
 
-  private final DataMap<K, V> dataMap;
-  private final int size;
-
-  public MapAdapter(DataMap<K, V> dataMap) {
-    this.dataMap = dataMap;
-    this.size = (int) dataMap.size();
-  }
-
-  @Override
-  public Set<Entry<K, V>> entrySet() {
-    return new AbstractSet<>() {
-      @Override
-      public Iterator<Entry<K, V>> iterator() {
-        return dataMap.entryIterator();
-      }
-
-      @Override
-      public int size() {
-        return size;
-      }
-    };
-  }
-}
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MemoryAlignedDataMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MemoryAlignedDataMap.java
index db439637..3cbd3f4f 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MemoryAlignedDataMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MemoryAlignedDataMap.java
@@ -92,7 +92,7 @@ public class MemoryAlignedDataMap<E> implements DataMap<Long, 
E> {
 
   /** {@inheritDoc} */
   @Override
-  public E remove(Object key) {
+  public E remove(Long key) {
     throw new UnsupportedOperationException();
   }
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicDataMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicDataMap.java
index 732a63d2..21d22bea 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicDataMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicDataMap.java
@@ -170,7 +170,7 @@ public class MonotonicDataMap<E> implements DataMap<Long, 
E> {
 
   /** {@inheritDoc} */
   @Override
-  public E remove(Object key) {
+  public E remove(Long key) {
     throw new UnsupportedOperationException();
   }
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicFixedSizeDataMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicFixedSizeDataMap.java
index dfd99409..d686c047 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicFixedSizeDataMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicFixedSizeDataMap.java
@@ -110,7 +110,7 @@ public class MonotonicFixedSizeDataMap<E> implements 
DataMap<Long, E> {
 
   /** {@inheritDoc} */
   @Override
-  public E remove(Object key) {
+  public E remove(Long key) {
     throw new UnsupportedOperationException();
   }
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicPairedDataMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicPairedDataMap.java
index 11394602..45f2ad30 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicPairedDataMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicPairedDataMap.java
@@ -137,7 +137,7 @@ public class MonotonicPairedDataMap<E> implements 
DataMap<Long, E> {
 
   /** {@inheritDoc} */
   @Override
-  public E remove(Object key) {
+  public E remove(Long key) {
     throw new UnsupportedOperationException();
   }
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/WorkflowContext.java 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/WorkflowContext.java
index 66daaac0..541479ec 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/WorkflowContext.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/WorkflowContext.java
@@ -65,11 +65,11 @@ public class WorkflowContext {
   }
 
   public Map<Long, Coordinate> getCoordinateMap() throws IOException {
-    return new MapAdapter<>(getMemoryAlignedDataMap("coordinates", new 
LonLatDataType()));
+    return DataConversions.asMap(getMemoryAlignedDataMap("coordinates", new 
LonLatDataType()));
   }
 
   public Map<Long, List<Long>> getReferenceMap() throws IOException {
-    return new MapAdapter<>(getMonotonicDataMap("references", new 
LongListDataType()));
+    return DataConversions.asMap(getMonotonicDataMap("references", new 
LongListDataType()));
   }
 
   public <T> DataMap<Long, T> getMemoryAlignedDataMap(String name, 
FixedSizeDataType<T> dataType)
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/database/AppendOnlyLogTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/database/AppendOnlyLogTest.java
index 140b94ce..8b5d14ab 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/database/AppendOnlyLogTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/database/AppendOnlyLogTest.java
@@ -75,7 +75,6 @@ class AppendOnlyLogTest {
     for (int i = 0; i < num; i++) {
       collection.addPositioned(value);
     }
-    collection.close();
 
     // read values
     int count = 0;
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/database/DataMapTest.java 
b/baremaps-core/src/test/java/org/apache/baremaps/database/DataMapTest.java
index d3bdd263..f6e82feb 100644
--- a/baremaps-core/src/test/java/org/apache/baremaps/database/DataMapTest.java
+++ b/baremaps-core/src/test/java/org/apache/baremaps/database/DataMapTest.java
@@ -105,7 +105,7 @@ class DataMapTest {
       set.add(i);
       map.put(i, i);
     }
-    var res = new MapAdapter<>(map).keySet();
+    var res = DataConversions.asMap(map).keySet();
     assertEquals(set, res);
   }
 
@@ -117,7 +117,7 @@ class DataMapTest {
       set.add(i);
       map.put(i, i);
     }
-    assertEquals(set, new HashSet(new MapAdapter<>(map).values()));
+    assertEquals(set, new HashSet(DataConversions.asMap(map).values()));
   }
 
   @ParameterizedTest
@@ -156,7 +156,7 @@ class DataMapTest {
     assertEquals(15l, map.get(15l));
     assertEquals(20l, map.get(20l));
 
-    assertEquals(Set.of(10l, 15l, 20l), new MapAdapter<>(map).keySet());;
+    assertEquals(Set.of(10l, 15l, 20l), DataConversions.asMap(map).keySet());;
   }
 
 
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateSampleTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateSampleTest.java
index dd019048..cb75d868 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateSampleTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateSampleTest.java
@@ -26,8 +26,8 @@ import java.nio.file.Files;
 import java.util.List;
 import java.util.Map;
 import org.apache.baremaps.database.collection.AppendOnlyLog;
+import org.apache.baremaps.database.collection.DataConversions;
 import org.apache.baremaps.database.collection.IndexedDataMap;
-import org.apache.baremaps.database.collection.MapAdapter;
 import org.apache.baremaps.database.memory.OnHeapMemory;
 import org.apache.baremaps.database.type.LongListDataType;
 import org.apache.baremaps.database.type.geometry.CoordinateDataType;
@@ -59,9 +59,9 @@ class ImportUpdateSampleTest extends PostgresRepositoryTest {
     PostgresRelationRepository relationRepository = new 
PostgresRelationRepository(dataSource());
 
     // Initialize the data maps
-    Map<Long, Coordinate> coordinateMap = new MapAdapter<>(
+    Map<Long, Coordinate> coordinateMap = DataConversions.asMap(
         new IndexedDataMap<>(new AppendOnlyLog<>(new CoordinateDataType(), new 
OnHeapMemory())));
-    Map<Long, List<Long>> referenceMap = new MapAdapter<>(
+    Map<Long, List<Long>> referenceMap = DataConversions.asMap(
         new IndexedDataMap<>(new AppendOnlyLog<>(new LongListDataType(), new 
OnHeapMemory())));
 
     // Import the sample data

Reply via email to