From 096f3c438793787df4330c2f7280bbc5e839f221 Mon Sep 17 00:00:00 2001 From: ChronosX88 Date: Mon, 11 Dec 2023 21:54:07 +0300 Subject: [PATCH] Handle array merging --- .../io/github/chronosx88/JGUN/storage/Storage.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/chronosx88/JGUN/storage/Storage.java b/src/main/java/io/github/chronosx88/JGUN/storage/Storage.java index ae7872a..c9c6a37 100644 --- a/src/main/java/io/github/chronosx88/JGUN/storage/Storage.java +++ b/src/main/java/io/github/chronosx88/JGUN/storage/Storage.java @@ -3,6 +3,7 @@ package io.github.chronosx88.JGUN.storage; import io.github.chronosx88.JGUN.api.NodeChangeListener; import io.github.chronosx88.JGUN.models.graph.*; import io.github.chronosx88.JGUN.models.graph.NodeValue; +import io.github.chronosx88.JGUN.models.graph.values.ArrayValue; import java.util.*; @@ -17,7 +18,7 @@ public abstract class Storage { public abstract Set> entries(); - public abstract Collection nodes(); + public abstract Collection nodes(); public abstract boolean isEmpty(); @@ -102,7 +103,14 @@ public abstract class Storage { .build()) .build(); } - changedNode.values.put(key, value); + + if (value.getValueType() == NodeValue.ValueType.ARRAY) { + // handle appending element to array instead of rewriting + ArrayValue array = (ArrayValue) changedNode.getValues().getOrDefault(key, new ArrayValue(List.of())); + array.getValue().addAll(((ArrayValue) value).getValue()); + value = array; + } + changedNode.getValues().put(key, value); changedNode.getMetadata().getStates().put(key, state); }