From d55352a6916d2075235b79eec5e6724eaec015bc Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Thu, 4 Jan 2024 12:16:08 +0100 Subject: [PATCH 01/14] first draft of Bulk API and retrieve tests --- bulk-api/build.gradle.kts | 108 ++++++++++++++++++ .../io/lionweb/api/bulk/BulkException.java | 18 +++ .../main/java/io/lionweb/api/bulk/IBulk.java | 22 ++++ .../java/io/lionweb/api/bulk/StoreMode.java | 7 ++ .../api/bulk/lowlevel/IBulkLowlevel.java | 24 ++++ .../api/bulk/lowlevel/IDeleteResponse.java | 15 +++ .../api/bulk/lowlevel/IIdsResponse.java | 15 +++ .../api/bulk/lowlevel/ILowlevelResponse.java | 8 ++ .../bulk/lowlevel/IPartitionsResponse.java | 11 ++ .../api/bulk/lowlevel/IRetrieveResponse.java | 28 +++++ .../api/bulk/lowlevel/IStoreResponse.java | 13 +++ .../api/bulk/wrapper/BulkLowlevelWrapper.java | 88 ++++++++++++++ .../io/lionweb/api/bulk/test/ATestBulk.java | 17 +++ .../lionweb/api/bulk/test/TestPartitions.java | 16 +++ .../api/bulk/test/retrieve/ATestRetrieve.java | 6 + .../TestMixedPartitionMidNodeLeaf.java | 32 ++++++ .../bulk/test/retrieve/TestMixedUnknown.java | 32 ++++++ .../api/bulk/test/retrieve/TestMultiLeaf.java | 32 ++++++ .../bulk/test/retrieve/TestMultiMidNode.java | 32 ++++++ .../test/retrieve/TestMultiPartition.java | 32 ++++++ .../bulk/test/retrieve/TestMultiUnknown.java | 32 ++++++ .../bulk/test/retrieve/TestSingleLeaf.java | 32 ++++++ .../bulk/test/retrieve/TestSingleMidNode.java | 32 ++++++ .../test/retrieve/TestSinglePartition.java | 32 ++++++ .../bulk/test/retrieve/TestSingleUnknown.java | 32 ++++++ .../retrieve/lowlevel/TestInvalidDepth.java | 36 ++++++ .../test/retrieve/lowlevel/TestNoNodeIds.java | 36 ++++++ settings.gradle | 2 +- 28 files changed, 789 insertions(+), 1 deletion(-) create mode 100644 bulk-api/build.gradle.kts create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/BulkException.java create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/IBulk.java create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/StoreMode.java create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IBulkLowlevel.java create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IDeleteResponse.java create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IIdsResponse.java create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/ILowlevelResponse.java create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IPartitionsResponse.java create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IRetrieveResponse.java create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IStoreResponse.java create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/BulkLowlevelWrapper.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/ATestBulk.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/TestPartitions.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/ATestRetrieve.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMixedPartitionMidNodeLeaf.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMixedUnknown.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiLeaf.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiMidNode.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiPartition.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiUnknown.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleLeaf.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleMidNode.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSinglePartition.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleUnknown.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/lowlevel/TestInvalidDepth.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/lowlevel/TestNoNodeIds.java diff --git a/bulk-api/build.gradle.kts b/bulk-api/build.gradle.kts new file mode 100644 index 00000000..8c96ed6e --- /dev/null +++ b/bulk-api/build.gradle.kts @@ -0,0 +1,108 @@ +import com.vanniktech.maven.publish.SonatypeHost + +plugins { + id("java-library") + id("com.vanniktech.maven.publish") + id("signing") +} + +repositories { + mavenCentral() +} + +val javadocConfig by configurations.creating { + extendsFrom(configurations.testImplementation.get()) +} + +dependencies { + api(project(":core")) + + implementation(libs.gson) + + // Use JUnit test framework. + testImplementation(libs.junit) + testImplementation(libs.gson) +} + +val jvmVersion = extra["jvmVersion"] as String +val specsVersion = extra["specsVersion"] as String + +java { + sourceCompatibility = JavaVersion.toVersion(jvmVersion) + targetCompatibility = JavaVersion.toVersion(jvmVersion) +} +tasks.register("myJavadoc") { + source = sourceSets.main.get().allJava + classpath = javadocConfig + options { + require(this is StandardJavadocDocletOptions) + addStringOption("link", "https://docs.oracle.com/javase/8/docs/api/") + addStringOption("link", "https://alexanderpann.github.io/mps-openapi-doc/javadoc_2021.2/") + } +} + +val isReleaseVersion = !(version as String).endsWith("SNAPSHOT") + +tasks.register("javadocJar") { + dependsOn("myJavadoc") + from(tasks.getByName("myJavadoc")/*.destinationDir*/) + archiveClassifier.set("javadoc") +} + +tasks.register("sourcesJar") { + archiveClassifier.set("sources") + // See https://discuss.gradle.org/t/why-subproject-sourceset-dirs-project-sourceset-dirs/7376/5 + // Without the closure, parent sources are used for children too + from(sourceSets.getByName("main").java.srcDirs) +} + +mavenPublishing { + coordinates( + groupId = "io.lionweb.lionweb-java", + artifactId = "lionweb-java-${specsVersion}-" + project.name, + version = project.version as String, + ) + + pom { + name.set("lionweb-java-" + project.name) + description.set("LionWeb Bulk API") + version = project.version as String + packaging = "jar" + url.set("https://github.com/LionWeb-io/lionweb-java") + + scm { + connection.set("scm:git:https://github.com/LionWeb-io/lionweb-java.git") + developerConnection.set("scm:git:git@github.com:LionWeb-io/lionweb-java.git") + url.set("https://github.com/LionWeb-io/lionweb-java.git") + } + + licenses { + license { + name.set("Apache Licenve V2.0") + url.set("https://www.apache.org/licenses/LICENSE-2.0") + distribution.set("repo") + } + } + + // The developers entry is strictly required by Maven Central + developers { + developer { + id.set("ftomassetti") + name.set("Federico Tomassetti") + email.set("federico@strumenta.com") + } + developer { + id.set("dslmeinte") + name.set("Meinte Boersma") + email.set("meinte.boersma@gmail.com") + } + developer { + id.set("enikao") + name.set("Niko Stotz") + email.set("github-public@nikostotz.de") + } + } + } + publishToMavenCentral(SonatypeHost.S01, true) + signAllPublications() +} diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/BulkException.java b/bulk-api/src/main/java/io/lionweb/api/bulk/BulkException.java new file mode 100644 index 00000000..03cd1bea --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/BulkException.java @@ -0,0 +1,18 @@ +package io.lionweb.api.bulk; + +public class BulkException extends RuntimeException { + public BulkException() { + } + + public BulkException(String message) { + super(message); + } + + public BulkException(String message, Throwable cause) { + super(message, cause); + } + + public BulkException(Throwable cause) { + super(cause); + } +} diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/IBulk.java b/bulk-api/src/main/java/io/lionweb/api/bulk/IBulk.java new file mode 100644 index 00000000..85b883d4 --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/IBulk.java @@ -0,0 +1,22 @@ +package io.lionweb.api.bulk; + +import io.lionweb.lioncore.java.serialization.data.SerializedChunk; + +import java.util.List; + +public interface IBulk { + // @Nonnull + SerializedChunk partitions() throws BulkException; + + // @Nonnull + SerializedChunk retrieve(List nodeIds, /*@Nullable*/ Integer depthLimit) throws BulkException; + + // @Nonnull + void store(/*@Nonnull*/ SerializedChunk nodes, /*@Nullable*/ StoreMode mode) throws BulkException; + + // @Nonnull + void delete(List nodeIds) throws BulkException; + + // @Nonnull + List ids(/*@Nonnull*/ Integer count) throws BulkException; +} diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/StoreMode.java b/bulk-api/src/main/java/io/lionweb/api/bulk/StoreMode.java new file mode 100644 index 00000000..6ad34264 --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/StoreMode.java @@ -0,0 +1,7 @@ +package io.lionweb.api.bulk; + +public enum StoreMode { + REPLACE, + CREATE, + UPDATE +} diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IBulkLowlevel.java b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IBulkLowlevel.java new file mode 100644 index 00000000..fb06bb06 --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IBulkLowlevel.java @@ -0,0 +1,24 @@ +package io.lionweb.api.bulk.lowlevel; + +import io.lionweb.lioncore.java.serialization.data.SerializedChunk; + +import java.util.List; +//import javax.annotation.Nonnull; +//import javax.annotation.Nullable; + +public interface IBulkLowlevel { + // @Nonnull + IPartitionsResponse partitions(); + +// @Nonnull + IRetrieveResponse retrieve(List nodeIds, /*@Nullable*/ String depthLimit); + + // @Nonnull + IStoreResponse store(/*@Nonnull*/ SerializedChunk nodes, /*@Nullable*/ String mode); + + // @Nonnull + IDeleteResponse delete(List nodeIds); + + // @Nonnull + IIdsResponse ids(/*@Nonnull*/ String count); +} diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IDeleteResponse.java b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IDeleteResponse.java new file mode 100644 index 00000000..e801d6ba --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IDeleteResponse.java @@ -0,0 +1,15 @@ +package io.lionweb.api.bulk.lowlevel; + +import java.util.List; + +public interface IDeleteResponse extends ILowlevelResponse { + /** + * Whether there was an issue with the nodeIds parameter. + */ + boolean isValidNodeIds(); + + /** + * Requested node ids unknown to the repository. + */ + List getUnknownNodeIds(); +} diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IIdsResponse.java b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IIdsResponse.java new file mode 100644 index 00000000..ca3b8caa --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IIdsResponse.java @@ -0,0 +1,15 @@ +package io.lionweb.api.bulk.lowlevel; + +import java.util.List; + +public interface IIdsResponse extends ILowlevelResponse { + /** + * Retrieved available (i.e. free, usable, reserved for this client) ids, if successful. + */ + List getIds(); + + /** + * Whether there was an issue with the count parameter. + */ + boolean isValidCount(); +} diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/ILowlevelResponse.java b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/ILowlevelResponse.java new file mode 100644 index 00000000..390d4be4 --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/ILowlevelResponse.java @@ -0,0 +1,8 @@ +package io.lionweb.api.bulk.lowlevel; + +public interface ILowlevelResponse { + boolean isOk(); + + //@Nonnull + String getErrorMessage(); +} diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IPartitionsResponse.java b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IPartitionsResponse.java new file mode 100644 index 00000000..3e815b7f --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IPartitionsResponse.java @@ -0,0 +1,11 @@ +package io.lionweb.api.bulk.lowlevel; + +import io.lionweb.lioncore.java.serialization.data.SerializedChunk; + +public interface IPartitionsResponse extends ILowlevelResponse { + /** + * Retrieved partition nodes, if successful. + */ + // @Nonnull + SerializedChunk getResult(); +} diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IRetrieveResponse.java b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IRetrieveResponse.java new file mode 100644 index 00000000..fad31eb6 --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IRetrieveResponse.java @@ -0,0 +1,28 @@ +package io.lionweb.api.bulk.lowlevel; + +import io.lionweb.lioncore.java.serialization.data.SerializedChunk; + +import java.util.List; + +public interface IRetrieveResponse extends ILowlevelResponse { + /** + * Retrieved nodes, if successful. + */ + // @Nonnull + SerializedChunk getResult(); + + /** + * Whether there was an issue with the nodeIds parameter. + */ + boolean isValidNodeIds(); + + /** + * Whether there was an issue with the depthLimit parameter. + */ + boolean isValidDepthLimit(); + + /** + * Requested node ids unknown to the repository. + */ + List getUnknownNodeIds(); +} diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IStoreResponse.java b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IStoreResponse.java new file mode 100644 index 00000000..34bbc598 --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IStoreResponse.java @@ -0,0 +1,13 @@ +package io.lionweb.api.bulk.lowlevel; + +public interface IStoreResponse extends ILowlevelResponse { + /** + * Whether there was an issue with the nodes parameter. + */ + boolean isValidNodes(); + + /** + * Whether there was an issue with the mode parameter. + */ + boolean isValidMode(); +} diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/BulkLowlevelWrapper.java b/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/BulkLowlevelWrapper.java new file mode 100644 index 00000000..0b2cc85f --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/BulkLowlevelWrapper.java @@ -0,0 +1,88 @@ +package io.lionweb.api.bulk.wrapper; + +import io.lionweb.api.bulk.BulkException; +import io.lionweb.api.bulk.IBulk; +import io.lionweb.api.bulk.StoreMode; +import io.lionweb.api.bulk.lowlevel.*; +import io.lionweb.lioncore.java.serialization.data.SerializedChunk; + +import java.util.List; +import java.util.Objects; + +public class BulkLowlevelWrapper implements IBulk { + private final IBulkLowlevel lowlevel; + + public BulkLowlevelWrapper(/*@Nonnull*/ IBulkLowlevel lowlevel) { + this.lowlevel = lowlevel; + } + + @Override + public SerializedChunk partitions() throws BulkException { + IPartitionsResponse response = lowlevel.partitions(); + + if(response.isOk()) { + Objects.requireNonNull(response.getResult()); + return response.getResult(); + } + + throw new BulkException(response.getErrorMessage()); + } + + @Override + public SerializedChunk retrieve(List nodeIds, Integer depthLimit) throws BulkException { + Objects.requireNonNull(nodeIds); + nodeIds.forEach(Objects::requireNonNull); + + IRetrieveResponse response = lowlevel.retrieve(nodeIds, Objects.toString(depthLimit, null)); + + if(response.isOk()) { + Objects.requireNonNull(response.getResult()); + return response.getResult(); + } + + throw new BulkException(response.getErrorMessage()); + } + + @Override + public void store(SerializedChunk nodes, StoreMode mode) throws BulkException { + Objects.requireNonNull(nodes); + Objects.requireNonNull(mode); + + IStoreResponse response = lowlevel.store(nodes, mode.name().toLowerCase()); + + if(response.isOk()) { + return; + } + + throw new BulkException(response.getErrorMessage()); + } + + @Override + public void delete(List nodeIds) throws BulkException { + Objects.requireNonNull(nodeIds); + nodeIds.forEach(Objects::requireNonNull); + + IDeleteResponse response = lowlevel.delete(nodeIds); + + if(response.isOk()) { + return; + } + + throw new BulkException(response.getErrorMessage()); + } + + @Override + public List ids(Integer count) throws BulkException { + Objects.requireNonNull(count); + + IIdsResponse response = lowlevel.ids(count.toString()); + + if(response.isOk()) { + Objects.requireNonNull(response.getIds()); + response.getIds().forEach(Objects::requireNonNull); + return response.getIds(); + } + + throw new BulkException(response.getErrorMessage()); + } +} \ No newline at end of file diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/ATestBulk.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/ATestBulk.java new file mode 100644 index 00000000..57e3fd9e --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/ATestBulk.java @@ -0,0 +1,17 @@ +package io.lionweb.api.bulk.test; + +import io.lionweb.api.bulk.IBulk; +import io.lionweb.api.bulk.lowlevel.IBulkLowlevel; + +public abstract class ATestBulk { + + protected IBulk getBulk() { + // TODO + throw new UnsupportedOperationException(); + } + + protected IBulkLowlevel getBulkLowlevel() { + // TODO + throw new UnsupportedOperationException(); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/TestPartitions.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/TestPartitions.java new file mode 100644 index 00000000..7b5c5348 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/TestPartitions.java @@ -0,0 +1,16 @@ +package io.lionweb.api.bulk.test; + +import io.lionweb.lioncore.java.serialization.data.SerializedClassifierInstance; +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertFalse; + +public class TestPartitions extends ATestBulk { + @Test + public void listPartitions() { + List roots = getBulk().partitions().getClassifierInstances(); + assertFalse(roots.toString(), roots.isEmpty()); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/ATestRetrieve.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/ATestRetrieve.java new file mode 100644 index 00000000..029c5e74 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/ATestRetrieve.java @@ -0,0 +1,6 @@ +package io.lionweb.api.bulk.test.retrieve; + +import io.lionweb.api.bulk.test.ATestBulk; + +public abstract class ATestRetrieve extends ATestBulk { +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMixedPartitionMidNodeLeaf.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMixedPartitionMidNodeLeaf.java new file mode 100644 index 00000000..3e3113a2 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMixedPartitionMidNodeLeaf.java @@ -0,0 +1,32 @@ +package io.lionweb.api.bulk.test.retrieve; + +import io.lionweb.lioncore.java.serialization.data.SerializedClassifierInstance; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class TestMixedPartitionMidNodeLeaf extends ATestRetrieve { + @Test + public void infinite() { + List roots = getBulk().retrieve(Arrays.asList("partition-id", "midnode-id", "leaf-id"), null).getClassifierInstances(); + assertEquals(16, roots.size()); + } + @Test + public void depth0() { + List roots = getBulk().retrieve(Arrays.asList("partition-id", "midnode-id", "leaf-id"), 0).getClassifierInstances(); + assertEquals(3, roots.size()); + } + @Test + public void depth1() { + List roots = getBulk().retrieve(Arrays.asList("partition-id", "midnode-id", "leaf-id"), 1).getClassifierInstances(); + assertEquals(7, roots.size()); + } + @Test + public void depth2() { + List roots = getBulk().retrieve(Arrays.asList("partition-id", "midnode-id", "leaf-id"), 3).getClassifierInstances(); + assertEquals(9, roots.size()); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMixedUnknown.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMixedUnknown.java new file mode 100644 index 00000000..1dfa8151 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMixedUnknown.java @@ -0,0 +1,32 @@ +package io.lionweb.api.bulk.test.retrieve; + +import io.lionweb.lioncore.java.serialization.data.SerializedClassifierInstance; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class TestMixedUnknown extends ATestRetrieve { + @Test + public void infinite() { + List roots = getBulk().retrieve(Arrays.asList("leaf-id", "unknown-id", "midnode-id"), null).getClassifierInstances(); + assertEquals(6, roots.size()); + } + @Test + public void depth0() { + List roots = getBulk().retrieve(Arrays.asList("leaf-id", "unknown-id", "midnode-id"), 0).getClassifierInstances(); + assertEquals(2, roots.size()); + } + @Test + public void depth1() { + List roots = getBulk().retrieve(Arrays.asList("leaf-id", "unknown-id", "midnode-id"), 1).getClassifierInstances(); + assertEquals(4, roots.size()); + } + @Test + public void depth2() { + List roots = getBulk().retrieve(Arrays.asList("leaf-id", "unknown-id", "midnode-id"), 2).getClassifierInstances(); + assertEquals(5, roots.size()); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiLeaf.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiLeaf.java new file mode 100644 index 00000000..db29c2c0 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiLeaf.java @@ -0,0 +1,32 @@ +package io.lionweb.api.bulk.test.retrieve; + +import io.lionweb.lioncore.java.serialization.data.SerializedClassifierInstance; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class TestMultiLeaf extends ATestRetrieve { + @Test + public void infinite() { + List roots = getBulk().retrieve(Arrays.asList("leaf-id", "other-leaf-id", "third-leaf-id"), null).getClassifierInstances(); + assertEquals(3, roots.size()); + } + @Test + public void depth0() { + List roots = getBulk().retrieve(Arrays.asList("leaf-id", "other-leaf-id", "third-leaf-id"), 0).getClassifierInstances(); + assertEquals(3, roots.size()); + } + @Test + public void depth1() { + List roots = getBulk().retrieve(Arrays.asList("leaf-id", "other-leaf-id", "third-leaf-id"), 1).getClassifierInstances(); + assertEquals(3, roots.size()); + } + @Test + public void depth2() { + List roots = getBulk().retrieve(Arrays.asList("leaf-id", "other-leaf-id", "third-leaf-id"), 2).getClassifierInstances(); + assertEquals(3, roots.size()); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiMidNode.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiMidNode.java new file mode 100644 index 00000000..b06795c8 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiMidNode.java @@ -0,0 +1,32 @@ +package io.lionweb.api.bulk.test.retrieve; + +import io.lionweb.lioncore.java.serialization.data.SerializedClassifierInstance; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class TestMultiMidNode extends ATestRetrieve { + @Test + public void infinite() { + List roots = getBulk().retrieve(Arrays.asList("midnode-id", "other-midnode-id", "third-midnode-id"), null).getClassifierInstances(); + assertEquals(10, roots.size()); + } + @Test + public void depth0() { + List roots = getBulk().retrieve(Arrays.asList("midnode-id", "other-midnode-id", "third-midnode-id"), 0).getClassifierInstances(); + assertEquals(3, roots.size()); + } + @Test + public void depth1() { + List roots = getBulk().retrieve(Arrays.asList("midnode-id", "other-midnode-id", "third-midnode-id"), 1).getClassifierInstances(); + assertEquals(5, roots.size()); + } + @Test + public void depth2() { + List roots = getBulk().retrieve(Arrays.asList("midnode-id", "other-midnode-id", "third-midnode-id"), 2).getClassifierInstances(); + assertEquals(8, roots.size()); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiPartition.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiPartition.java new file mode 100644 index 00000000..b05e27d8 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiPartition.java @@ -0,0 +1,32 @@ +package io.lionweb.api.bulk.test.retrieve; + +import io.lionweb.lioncore.java.serialization.data.SerializedClassifierInstance; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class TestMultiPartition extends ATestRetrieve { + @Test + public void infinite() { + List roots = getBulk().retrieve(Arrays.asList("partition-id", "other-partition-id"), null).getClassifierInstances(); + assertEquals(17, roots.size()); + } + @Test + public void depth0() { + List roots = getBulk().retrieve(Arrays.asList("partition-id", "other-partition-id"), 0).getClassifierInstances(); + assertEquals(2, roots.size()); + } + @Test + public void depth1() { + List roots = getBulk().retrieve(Arrays.asList("partition-id", "other-partition-id"), 1).getClassifierInstances(); + assertEquals(5, roots.size()); + } + @Test + public void depth2() { + List roots = getBulk().retrieve(Arrays.asList("partition-id", "other-partition-id"), 2).getClassifierInstances(); + assertEquals(8, roots.size()); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiUnknown.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiUnknown.java new file mode 100644 index 00000000..d07ede6d --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiUnknown.java @@ -0,0 +1,32 @@ +package io.lionweb.api.bulk.test.retrieve; + +import io.lionweb.lioncore.java.serialization.data.SerializedClassifierInstance; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertTrue; + +public class TestMultiUnknown extends ATestRetrieve { + @Test + public void infinite() { + List roots = getBulk().retrieve(Arrays.asList("unknown-id", "other-unknown-id"), null).getClassifierInstances(); + assertTrue(roots.isEmpty()); + } + @Test + public void depth0() { + List roots = getBulk().retrieve(Arrays.asList("unknown-id", "other-unknown-id"), 0).getClassifierInstances(); + assertTrue(roots.isEmpty()); + } + @Test + public void depth1() { + List roots = getBulk().retrieve(Arrays.asList("unknown-id", "other-unknown-id"), 1).getClassifierInstances(); + assertTrue(roots.isEmpty()); + } + @Test + public void depth2() { + List roots = getBulk().retrieve(Arrays.asList("unknown-id", "other-unknown-id"), 2).getClassifierInstances(); + assertTrue(roots.isEmpty()); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleLeaf.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleLeaf.java new file mode 100644 index 00000000..158ba04d --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleLeaf.java @@ -0,0 +1,32 @@ +package io.lionweb.api.bulk.test.retrieve; + +import io.lionweb.lioncore.java.serialization.data.SerializedClassifierInstance; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class TestSingleLeaf extends ATestRetrieve { + @Test + public void depthinfinite() { + List roots = getBulk().retrieve(Arrays.asList("leaf-id"), null).getClassifierInstances(); + assertEquals(1, roots.size()); + } + @Test + public void depth0() { + List roots = getBulk().retrieve(Arrays.asList("leaf-id"), 0).getClassifierInstances(); + assertEquals(1, roots.size()); + } + @Test + public void depth1() { + List roots = getBulk().retrieve(Arrays.asList("leaf-id"), 1).getClassifierInstances(); + assertEquals(1, roots.size()); + } + @Test + public void depth2() { + List roots = getBulk().retrieve(Arrays.asList("leaf-id"), 2).getClassifierInstances(); + assertEquals(1, roots.size()); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleMidNode.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleMidNode.java new file mode 100644 index 00000000..fbac9298 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleMidNode.java @@ -0,0 +1,32 @@ +package io.lionweb.api.bulk.test.retrieve; + +import io.lionweb.lioncore.java.serialization.data.SerializedClassifierInstance; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class TestSingleMidNode extends ATestRetrieve { + @Test + public void infinite() { + List roots = getBulk().retrieve(Arrays.asList("midnode-id"), null).getClassifierInstances(); + assertEquals(5, roots.size()); + } + @Test + public void depth0() { + List roots = getBulk().retrieve(Arrays.asList("midnode-id"), 0).getClassifierInstances(); + assertEquals(1, roots.size()); + } + @Test + public void depth1() { + List roots = getBulk().retrieve(Arrays.asList("midnode-id"), 1).getClassifierInstances(); + assertEquals(3, roots.size()); + } + @Test + public void depth2() { + List roots = getBulk().retrieve(Arrays.asList("midnode-id"), 2).getClassifierInstances(); + assertEquals(4, roots.size()); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSinglePartition.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSinglePartition.java new file mode 100644 index 00000000..cd29b5cd --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSinglePartition.java @@ -0,0 +1,32 @@ +package io.lionweb.api.bulk.test.retrieve; + +import io.lionweb.lioncore.java.serialization.data.SerializedClassifierInstance; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class TestSinglePartition extends ATestRetrieve { + @Test + public void infinite() { + List roots = getBulk().retrieve(Arrays.asList("partition-id"), null).getClassifierInstances(); + assertEquals(10, roots.size()); + } + @Test + public void depth0() { + List roots = getBulk().retrieve(Arrays.asList("partition-id"), 0).getClassifierInstances(); + assertEquals(1, roots.size()); + } + @Test + public void depth1() { + List roots = getBulk().retrieve(Arrays.asList("partition-id"), 1).getClassifierInstances(); + assertEquals(3, roots.size()); + } + @Test + public void depth2() { + List roots = getBulk().retrieve(Arrays.asList("partition-id"), 2).getClassifierInstances(); + assertEquals(4, roots.size()); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleUnknown.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleUnknown.java new file mode 100644 index 00000000..426740e1 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleUnknown.java @@ -0,0 +1,32 @@ +package io.lionweb.api.bulk.test.retrieve; + +import io.lionweb.lioncore.java.serialization.data.SerializedClassifierInstance; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertTrue; + +public class TestSingleUnknown extends ATestRetrieve { + @Test + public void infinite() { + List roots = getBulk().retrieve(Arrays.asList("unknown-id"), null).getClassifierInstances(); + assertTrue(roots.isEmpty()); + } + @Test + public void depth0() { + List roots = getBulk().retrieve(Arrays.asList("unknown-id"), 0).getClassifierInstances(); + assertTrue(roots.isEmpty()); + } + @Test + public void depth1() { + List roots = getBulk().retrieve(Arrays.asList("unknown-id"), 1).getClassifierInstances(); + assertTrue(roots.isEmpty()); + } + @Test + public void depth2() { + List roots = getBulk().retrieve(Arrays.asList("unknown-id"), 2).getClassifierInstances(); + assertTrue(roots.isEmpty()); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/lowlevel/TestInvalidDepth.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/lowlevel/TestInvalidDepth.java new file mode 100644 index 00000000..40ef2682 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/lowlevel/TestInvalidDepth.java @@ -0,0 +1,36 @@ +package io.lionweb.api.bulk.test.retrieve.lowlevel; + +import io.lionweb.api.bulk.lowlevel.IRetrieveResponse; +import io.lionweb.api.bulk.test.retrieve.ATestRetrieve; +import org.junit.Test; + +import java.util.Arrays; + +import static org.junit.Assert.assertFalse; + +public class TestInvalidDepth extends ATestRetrieve { + @Test + public void nothing() { + IRetrieveResponse response = getBulkLowlevel().retrieve(Arrays.asList("leaf-id"), ""); + assertFalse(response.isOk()); + assertFalse(response.isValidDepthLimit()); + } + @Test + public void negative() { + IRetrieveResponse response = getBulkLowlevel().retrieve(Arrays.asList("leaf-id"), "-1"); + assertFalse(response.isOk()); + assertFalse(response.isValidDepthLimit()); + } + @Test + public void character() { + IRetrieveResponse response = getBulkLowlevel().retrieve(Arrays.asList("leaf-id"), "a"); + assertFalse(response.isOk()); + assertFalse(response.isValidDepthLimit()); + } + @Test + public void string() { + IRetrieveResponse response = getBulkLowlevel().retrieve(Arrays.asList("leaf-id"), "asdf"); + assertFalse(response.isOk()); + assertFalse(response.isValidDepthLimit()); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/lowlevel/TestNoNodeIds.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/lowlevel/TestNoNodeIds.java new file mode 100644 index 00000000..11864798 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/lowlevel/TestNoNodeIds.java @@ -0,0 +1,36 @@ +package io.lionweb.api.bulk.test.retrieve.lowlevel; + +import io.lionweb.api.bulk.lowlevel.IRetrieveResponse; +import io.lionweb.api.bulk.test.retrieve.ATestRetrieve; +import org.junit.Test; + +import java.util.Collections; + +import static org.junit.Assert.assertFalse; + +public class TestNoNodeIds extends ATestRetrieve { + @Test + public void infinite() { + IRetrieveResponse response = getBulkLowlevel().retrieve(Collections.emptyList(), null); + assertFalse(response.isOk()); + assertFalse(response.isValidNodeIds()); + } + @Test + public void depth0() { + IRetrieveResponse response = getBulkLowlevel().retrieve(Collections.emptyList(), "0"); + assertFalse(response.isOk()); + assertFalse(response.isValidNodeIds()); + } + @Test + public void depth1() { + IRetrieveResponse response = getBulkLowlevel().retrieve(Collections.emptyList(), "1"); + assertFalse(response.isOk()); + assertFalse(response.isValidNodeIds()); + } + @Test + public void depth2() { + IRetrieveResponse response = getBulkLowlevel().retrieve(Collections.emptyList(), "2"); + assertFalse(response.isOk()); + assertFalse(response.isValidNodeIds()); + } +} diff --git a/settings.gradle b/settings.gradle index d8698a25..b45e8a91 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,7 +2,7 @@ rootProject.name = 'lionweb-java' include('core') include('emf') include('emf-builtins') - +include('bulk-api') dependencyResolutionManagement { versionCatalogs { From b12a5c89c631f6b70a072982bd5cdb28d26672c7 Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Thu, 4 Jan 2024 15:31:23 +0100 Subject: [PATCH 02/14] added Bulk API implementation for lionweb-repository (yet untested) --- .../io/lionweb/api/bulk/test/ATestBulk.java | 6 +- .../api/bulk/test/BulkApiProvider.java | 20 ++ .../impl/LionwebRepositoryBulkLowlevel.java | 235 ++++++++++++++++++ 3 files changed, 257 insertions(+), 4 deletions(-) create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryBulkLowlevel.java diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/ATestBulk.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/ATestBulk.java index 57e3fd9e..85f6661f 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/ATestBulk.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/ATestBulk.java @@ -6,12 +6,10 @@ public abstract class ATestBulk { protected IBulk getBulk() { - // TODO - throw new UnsupportedOperationException(); + return BulkApiProvider.getInstance().getBulk(); } protected IBulkLowlevel getBulkLowlevel() { - // TODO - throw new UnsupportedOperationException(); + return BulkApiProvider.getInstance().getBulkLowlevel(); } } diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java new file mode 100644 index 00000000..2520993e --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java @@ -0,0 +1,20 @@ +package io.lionweb.api.bulk.test; + +import io.lionweb.api.bulk.IBulk; +import io.lionweb.api.bulk.lowlevel.IBulkLowlevel; +import io.lionweb.api.bulk.test.impl.LionwebRepositoryBulkLowlevel; +import io.lionweb.api.bulk.wrapper.BulkLowlevelWrapper; + +public class BulkApiProvider { + public static BulkApiProvider getInstance() { + return new BulkApiProvider(); + } + + public IBulk getBulk() { + return new BulkLowlevelWrapper(getBulkLowlevel()); + } + + public IBulkLowlevel getBulkLowlevel() { + return new LionwebRepositoryBulkLowlevel(); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryBulkLowlevel.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryBulkLowlevel.java new file mode 100644 index 00000000..56156ad7 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryBulkLowlevel.java @@ -0,0 +1,235 @@ +package io.lionweb.api.bulk.test.impl; + +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.google.gson.stream.JsonReader; +import io.lionweb.api.bulk.lowlevel.*; +import io.lionweb.lioncore.java.serialization.LowLevelJsonSerialization; +import io.lionweb.lioncore.java.serialization.data.SerializedChunk; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.Duration; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public class LionwebRepositoryBulkLowlevel implements IBulkLowlevel { + private static final String URI_BASE = "http://127.0.0.1:3005/bulk/"; + + @Override + public IPartitionsResponse partitions() { + HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "partitions")).GET().build(); + HttpResponse response = send(request); + if (HttpURLConnection.HTTP_OK != response.statusCode()) { + return new IPartitionsResponse() { + @Override + public SerializedChunk getResult() { + return null; + } + + @Override + public boolean isOk() { + return false; + } + + @Override + public String getErrorMessage() { + return Integer.toString(response.statusCode()); + } + }; + } + + SerializedChunk chunk = parseChunk(response); + + return new IPartitionsResponse() { + @Override + public SerializedChunk getResult() { + return chunk; + } + + @Override + public boolean isOk() { + return true; + } + + @Override + public String getErrorMessage() { + return ""; + } + }; + } + + @Override + public IRetrieveResponse retrieve(List nodeIds, String depthLimit) { + String ids = "{" + nodeIds.stream().map(s -> "\"" + s + "\"").collect(Collectors.joining(",", "[", "]")) + "}"; + String limit = depthLimit != null ? "?depthLimit=" + depthLimit : ""; + + HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "retrieve" + limit)).POST(HttpRequest.BodyPublishers.ofString(ids)).build(); + HttpResponse response = send(request); + if (HttpURLConnection.HTTP_OK != response.statusCode()) { + return new IRetrieveResponse() { + @Override + public SerializedChunk getResult() { + return null; + } + + @Override + public boolean isValidNodeIds() { + return true; + } + + @Override + public boolean isValidDepthLimit() { + return true; + } + + @Override + public List getUnknownNodeIds() { + return Collections.emptyList(); + } + + @Override + public boolean isOk() { + return false; + } + + @Override + public String getErrorMessage() { + return Integer.toString(response.statusCode()); + } + }; + } + + + SerializedChunk chunk = parseChunk(response); + + return new IRetrieveResponse() { + @Override + public SerializedChunk getResult() { + return chunk; + } + + @Override + public boolean isValidNodeIds() { + return true; + } + + @Override + public boolean isValidDepthLimit() { + return true; + } + + @Override + public List getUnknownNodeIds() { + return Collections.emptyList(); + } + + @Override + public boolean isOk() { + return true; + } + + @Override + public String getErrorMessage() { + return ""; + } + }; + } + + @Override + public IStoreResponse store(SerializedChunk nodes, String mode) { + String jsonString = new LowLevelJsonSerialization().serializeToJsonString(nodes); + + HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "store")).POST(HttpRequest.BodyPublishers.ofString(jsonString)).build(); + HttpResponse response = send(request); + if (HttpURLConnection.HTTP_OK != response.statusCode()) { + return new IStoreResponse() { + @Override + public boolean isValidNodes() { + return true; + } + + @Override + public boolean isValidMode() { + return true; + } + + @Override + public boolean isOk() { + return false; + } + + @Override + public String getErrorMessage() { + return Integer.toString(response.statusCode()); + } + }; + } + + return new IStoreResponse() { + @Override + public boolean isValidNodes() { + return true; + } + + @Override + public boolean isValidMode() { + return true; + } + + @Override + public boolean isOk() { + return true; + } + + @Override + public String getErrorMessage() { + return ""; + } + }; + } + + @Override + public IDeleteResponse delete(List nodeIds) { + throw new UnsupportedOperationException(); + } + + @Override + public IIdsResponse ids(String count) { + throw new UnsupportedOperationException(); + } + + private HttpClient createClient() { + return HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(2)).build(); + } + + private static HttpRequest.Builder buildRequest() { + return HttpRequest.newBuilder().setHeader("Content-Type", "application/json"); + } + + private HttpResponse send(HttpRequest request) { + try { + HttpClient client = createClient(); + return client.send(request, HttpResponse.BodyHandlers.ofInputStream()); + } catch (InterruptedException | IOException e) { + throw new RuntimeException(e); + } + } + + private SerializedChunk parseChunk(HttpResponse response) { + InputStreamReader reader = new InputStreamReader(response.body()); + JsonReader json = new JsonReader(reader); + json.setLenient(true); + JsonElement jsonElement = JsonParser.parseReader(json); + LowLevelJsonSerialization serialization = new LowLevelJsonSerialization(); + SerializedChunk chunk = serialization.deserializeSerializationBlock(jsonElement); + return chunk; + } +} From f4c9f49120d2a5886d532aa5bff00884bf8ee2bd Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Thu, 4 Jan 2024 17:10:39 +0100 Subject: [PATCH 03/14] fixed parameter validation --- .../io/lionweb/api/bulk/wrapper/BulkLowlevelWrapper.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/BulkLowlevelWrapper.java b/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/BulkLowlevelWrapper.java index 0b2cc85f..ec638561 100644 --- a/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/BulkLowlevelWrapper.java +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/BulkLowlevelWrapper.java @@ -46,9 +46,8 @@ public SerializedChunk retrieve(List nodeIds, Integer depthLimit) throws @Override public void store(SerializedChunk nodes, StoreMode mode) throws BulkException { Objects.requireNonNull(nodes); - Objects.requireNonNull(mode); - - IStoreResponse response = lowlevel.store(nodes, mode.name().toLowerCase()); + String modeString = mode !=null ? mode.name().toLowerCase() : null; + IStoreResponse response = lowlevel.store(nodes, modeString); if(response.isOk()) { return; From 2c675b50eda6c3e77b9f68fbb295c740142889ff Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Thu, 4 Jan 2024 17:11:17 +0100 Subject: [PATCH 04/14] added MPS Bulk API implementation --- .../api/bulk/test/BulkApiProvider.java | 3 +- .../api/bulk/test/impl/MpsBulkLowlevel.java | 235 ++++++++++++++++++ 2 files changed, 237 insertions(+), 1 deletion(-) create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevel.java diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java index 2520993e..ca97136b 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java @@ -3,6 +3,7 @@ import io.lionweb.api.bulk.IBulk; import io.lionweb.api.bulk.lowlevel.IBulkLowlevel; import io.lionweb.api.bulk.test.impl.LionwebRepositoryBulkLowlevel; +import io.lionweb.api.bulk.test.impl.MpsBulkLowlevel; import io.lionweb.api.bulk.wrapper.BulkLowlevelWrapper; public class BulkApiProvider { @@ -15,6 +16,6 @@ public IBulk getBulk() { } public IBulkLowlevel getBulkLowlevel() { - return new LionwebRepositoryBulkLowlevel(); + return new MpsBulkLowlevel(); } } diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevel.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevel.java new file mode 100644 index 00000000..7c0f6220 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevel.java @@ -0,0 +1,235 @@ +package io.lionweb.api.bulk.test.impl; + +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.google.gson.stream.JsonReader; +import io.lionweb.api.bulk.lowlevel.*; +import io.lionweb.lioncore.java.serialization.LowLevelJsonSerialization; +import io.lionweb.lioncore.java.serialization.data.SerializedChunk; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.Duration; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public class MpsBulkLowlevel implements IBulkLowlevel { + private static final String URI_BASE = "http://127.0.0.1:63320/lionweb/api/bulk/"; + + @Override + public IPartitionsResponse partitions() { + HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "partitions?onlyPartitions=true")).GET().build(); + HttpResponse response = send(request); + if (HttpURLConnection.HTTP_OK != response.statusCode()) { + return new IPartitionsResponse() { + @Override + public SerializedChunk getResult() { + return null; + } + + @Override + public boolean isOk() { + return false; + } + + @Override + public String getErrorMessage() { + return Integer.toString(response.statusCode()); + } + }; + } + + SerializedChunk chunk = parseChunk(response); + + return new IPartitionsResponse() { + @Override + public SerializedChunk getResult() { + return chunk; + } + + @Override + public boolean isOk() { + return true; + } + + @Override + public String getErrorMessage() { + return ""; + } + }; + } + + @Override + public IRetrieveResponse retrieve(List nodeIds, String depthLimit) { + String ids = nodeIds.stream().map(s -> "\"" + s + "\"").collect(Collectors.joining(",", "[", "]")); + String limit = depthLimit != null ? "?depthLimit=" + depthLimit : ""; + + HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "retrieve" + limit)).POST(HttpRequest.BodyPublishers.ofString(ids)).build(); + HttpResponse response = send(request); + if (HttpURLConnection.HTTP_OK != response.statusCode()) { + return new IRetrieveResponse() { + @Override + public SerializedChunk getResult() { + return null; + } + + @Override + public boolean isValidNodeIds() { + return true; + } + + @Override + public boolean isValidDepthLimit() { + return true; + } + + @Override + public List getUnknownNodeIds() { + return Collections.emptyList(); + } + + @Override + public boolean isOk() { + return false; + } + + @Override + public String getErrorMessage() { + return Integer.toString(response.statusCode()); + } + }; + } + + + SerializedChunk chunk = parseChunk(response); + + return new IRetrieveResponse() { + @Override + public SerializedChunk getResult() { + return chunk; + } + + @Override + public boolean isValidNodeIds() { + return true; + } + + @Override + public boolean isValidDepthLimit() { + return true; + } + + @Override + public List getUnknownNodeIds() { + return Collections.emptyList(); + } + + @Override + public boolean isOk() { + return true; + } + + @Override + public String getErrorMessage() { + return ""; + } + }; + } + + @Override + public IStoreResponse store(SerializedChunk nodes, String mode) { + String jsonString = new LowLevelJsonSerialization().serializeToJsonString(nodes); + + HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "store")).POST(HttpRequest.BodyPublishers.ofString(jsonString)).build(); + HttpResponse response = send(request); + if (HttpURLConnection.HTTP_OK != response.statusCode()) { + return new IStoreResponse() { + @Override + public boolean isValidNodes() { + return true; + } + + @Override + public boolean isValidMode() { + return true; + } + + @Override + public boolean isOk() { + return false; + } + + @Override + public String getErrorMessage() { + return Integer.toString(response.statusCode()); + } + }; + } + + return new IStoreResponse() { + @Override + public boolean isValidNodes() { + return true; + } + + @Override + public boolean isValidMode() { + return true; + } + + @Override + public boolean isOk() { + return true; + } + + @Override + public String getErrorMessage() { + return ""; + } + }; + } + + @Override + public IDeleteResponse delete(List nodeIds) { + throw new UnsupportedOperationException(); + } + + @Override + public IIdsResponse ids(String count) { + throw new UnsupportedOperationException(); + } + + private HttpClient createClient() { + return HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(2)).build(); + } + + private static HttpRequest.Builder buildRequest() { + return HttpRequest.newBuilder().setHeader("Content-Type", "application/json"); + } + + private HttpResponse send(HttpRequest request) { + try { + HttpClient client = createClient(); + return client.send(request, HttpResponse.BodyHandlers.ofInputStream()); + } catch (InterruptedException | IOException e) { + throw new RuntimeException(e); + } + } + + private SerializedChunk parseChunk(HttpResponse response) { + InputStreamReader reader = new InputStreamReader(response.body()); + JsonReader json = new JsonReader(reader); + json.setLenient(true); + JsonElement jsonElement = JsonParser.parseReader(json); + LowLevelJsonSerialization serialization = new LowLevelJsonSerialization(); + SerializedChunk chunk = serialization.deserializeSerializationBlock(jsonElement); + return chunk; + } +} From c46fa073c4210f0e96ee658ea9adcacd31b40f6f Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Mon, 8 Jan 2024 14:24:33 +0100 Subject: [PATCH 05/14] added id mapping layer for lowlevel Bulk API --- .../api/bulk/wrapper/DefaultIdMapper.java | 24 +++ .../lionweb/api/bulk/wrapper/IIdMapper.java | 7 + .../api/bulk/wrapper/IdMappingWrapper.java | 179 ++++++++++++++++++ 3 files changed, 210 insertions(+) create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/DefaultIdMapper.java create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/IIdMapper.java create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/IdMappingWrapper.java diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/DefaultIdMapper.java b/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/DefaultIdMapper.java new file mode 100644 index 00000000..fb736aa3 --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/DefaultIdMapper.java @@ -0,0 +1,24 @@ +package io.lionweb.api.bulk.wrapper; + +import java.util.Map; +import java.util.stream.Collectors; + +public class DefaultIdMapper implements IIdMapper { + private final Map externalToInternal; + private final Map internalToExternal; + + public DefaultIdMapper(Map externalToInternal) { + this.externalToInternal = externalToInternal; + this.internalToExternal = externalToInternal.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); + } + + @Override + public String externalToInternal(String externalId) { + return externalToInternal.getOrDefault(externalId, externalId); + } + + @Override + public String internalToExternal(String internalId) { + return internalToExternal.getOrDefault(internalId, internalId); + } +} diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/IIdMapper.java b/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/IIdMapper.java new file mode 100644 index 00000000..eb81895e --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/IIdMapper.java @@ -0,0 +1,7 @@ +package io.lionweb.api.bulk.wrapper; + +public interface IIdMapper { + String externalToInternal(String externalId); + + String internalToExternal(String internalId); +} diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/IdMappingWrapper.java b/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/IdMappingWrapper.java new file mode 100644 index 00000000..a2aef01f --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/IdMappingWrapper.java @@ -0,0 +1,179 @@ +package io.lionweb.api.bulk.wrapper; + +import io.lionweb.api.bulk.lowlevel.*; +import io.lionweb.lioncore.java.serialization.data.SerializedChunk; +import io.lionweb.lioncore.java.serialization.data.SerializedClassifierInstance; +import io.lionweb.lioncore.java.serialization.data.SerializedContainmentValue; +import io.lionweb.lioncore.java.serialization.data.SerializedReferenceValue; + +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class IdMappingWrapper implements IBulkLowlevel { + private final IBulkLowlevel delegate; + private final IIdMapper idMapper; + + public IdMappingWrapper(IBulkLowlevel delegate, IIdMapper idMapper){ + this.delegate = delegate; + this.idMapper = idMapper; + } + + @Override + public IPartitionsResponse partitions() { + IPartitionsResponse response = delegate.partitions(); + return new IPartitionsResponse() { + @Override + public SerializedChunk getResult() { + return mapToExternal(response.getResult()); + } + + @Override + public boolean isOk() { + return response.isOk(); + } + + @Override + public String getErrorMessage() { + return response.getErrorMessage(); + } + }; + } + + @Override + public IRetrieveResponse retrieve(List nodeIds, String depthLimit) { + List mappedNodeIds = mapToInternal(nodeIds); + IRetrieveResponse response = delegate.retrieve(mappedNodeIds, depthLimit); + return new IRetrieveResponse() { + @Override + public SerializedChunk getResult() { + return mapToExternal(response.getResult()) ; + } + + @Override + public boolean isValidNodeIds() { + return response.isValidNodeIds(); + } + + @Override + public boolean isValidDepthLimit() { + return response.isValidDepthLimit(); + } + + @Override + public List getUnknownNodeIds() { + return mapToExternal(response.getUnknownNodeIds()); + } + + @Override + public boolean isOk() { + return response.isOk(); + } + + @Override + public String getErrorMessage() { + return response.getErrorMessage(); + } + }; + } + + @Override + public IStoreResponse store(SerializedChunk nodes, String mode) { + SerializedChunk mappedNodes = mapToInternal(nodes); + IStoreResponse response = delegate.store(mappedNodes, mode); + return response; + } + + @Override + public IDeleteResponse delete(List nodeIds) { + List mappedNodeIds = mapToInternal(nodeIds); + IDeleteResponse response = delegate.delete(mappedNodeIds); + return new IDeleteResponse() { + @Override + public boolean isValidNodeIds() { + return response.isValidNodeIds(); + } + + @Override + public List getUnknownNodeIds() { + return mapToExternal(response.getUnknownNodeIds()); + } + + @Override + public boolean isOk() { + return response.isOk(); + } + + @Override + public String getErrorMessage() { + return response.getErrorMessage(); + } + }; + } + + @Override + public IIdsResponse ids(String count) { + IIdsResponse response = delegate.ids(count); + return new IIdsResponse() { + @Override + public List getIds() { + return mapToExternal(response.getIds()); + } + + @Override + public boolean isValidCount() { + return response.isValidCount(); + } + + @Override + public boolean isOk() { + return response.isOk(); + } + + @Override + public String getErrorMessage() { + return response.getErrorMessage(); + } + }; + } + + private SerializedChunk mapToExternal(SerializedChunk input) { + return map(input, idMapper::internalToExternal); + } + + private SerializedChunk mapToInternal(SerializedChunk input) { + return map(input, idMapper::externalToInternal); + } + + private List mapToExternal(List nodeIds) { + return map(nodeIds, idMapper::internalToExternal); + } + + private List mapToInternal(List nodeIds) { + return map(nodeIds, idMapper::externalToInternal); + } + + private SerializedChunk map(SerializedChunk input, Function mapper) { + SerializedChunk result = new SerializedChunk(); + + result.setSerializationFormatVersion(input.getSerializationFormatVersion()); + input.getLanguages().forEach(result::addLanguage); + + input.getClassifierInstances().forEach(ci -> + { + SerializedClassifierInstance mci = new SerializedClassifierInstance(mapper.apply(ci.getID()), ci.getClassifier()); + mci.setParentNodeID(ci.getParentNodeID()); + mci.setAnnotations(map(ci.getAnnotations(), mapper)); + ci.getProperties().forEach(mci::addPropertyValue); + ci.getContainments().forEach(c -> mci.addContainmentValue(new SerializedContainmentValue(c.getMetaPointer(), map(c.getValue(), mapper)))); + ci.getReferences().forEach(r -> mci.addReferenceValue(r.getMetaPointer(), r.getValue().stream().map(e -> new SerializedReferenceValue.Entry(mapper.apply(e.getReference()), e.getResolveInfo())).collect(Collectors.toList()))); + result.addClassifierInstance(mci); + }); + + return result; + } + + private List map(List ids, Function mapper) { + return ids.stream().map(mapper).collect(Collectors.toList()); + } +} From 1767608e7dd64efc90523b88d5dc01bdfe3e3b6c Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Mon, 8 Jan 2024 14:25:22 +0100 Subject: [PATCH 06/14] created example model for retrieve and partition tests --- .../api/bulk/test/BulkApiProvider.java | 1 + .../impl/LionwebRepositoryBulkLowlevel.java | 2 +- .../api/bulk/test/impl/MpsBulkLowlevel.java | 248 +-------- .../bulk/test/impl/MpsBulkLowlevelImpl.java | 248 +++++++++ .../TestMixedPartitionMidNodeLeaf.java | 6 +- .../bulk/test/retrieve/TestMultiMidNode.java | 4 +- .../test/retrieve/TestMultiPartition.java | 4 +- .../bulk/test/retrieve/TestSingleLeaf.java | 2 +- .../test/retrieve/TestSinglePartition.java | 2 +- .../src/test/resources/FileSystem-lang.json | 476 ++++++++++++++++++ .../src/test/resources/retrieve-baseline.json | 448 +++++++++++++++++ 11 files changed, 1200 insertions(+), 241 deletions(-) create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevelImpl.java create mode 100644 bulk-api/src/test/resources/FileSystem-lang.json create mode 100644 bulk-api/src/test/resources/retrieve-baseline.json diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java index ca97136b..74da8406 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java @@ -17,5 +17,6 @@ public IBulk getBulk() { public IBulkLowlevel getBulkLowlevel() { return new MpsBulkLowlevel(); +// return new LionwebRepositoryBulkLowlevel(); } } diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryBulkLowlevel.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryBulkLowlevel.java index 56156ad7..1b004620 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryBulkLowlevel.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryBulkLowlevel.java @@ -68,7 +68,7 @@ public String getErrorMessage() { @Override public IRetrieveResponse retrieve(List nodeIds, String depthLimit) { - String ids = "{" + nodeIds.stream().map(s -> "\"" + s + "\"").collect(Collectors.joining(",", "[", "]")) + "}"; + String ids = "{ \"ids\": " + nodeIds.stream().map(s -> "\"" + s + "\"").collect(Collectors.joining(",", "[", "]")) + "}"; String limit = depthLimit != null ? "?depthLimit=" + depthLimit : ""; HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "retrieve" + limit)).POST(HttpRequest.BodyPublishers.ofString(ids)).build(); diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevel.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevel.java index 7c0f6220..984d5f9d 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevel.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevel.java @@ -1,235 +1,21 @@ package io.lionweb.api.bulk.test.impl; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; -import com.google.gson.stream.JsonReader; -import io.lionweb.api.bulk.lowlevel.*; -import io.lionweb.lioncore.java.serialization.LowLevelJsonSerialization; -import io.lionweb.lioncore.java.serialization.data.SerializedChunk; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.time.Duration; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -public class MpsBulkLowlevel implements IBulkLowlevel { - private static final String URI_BASE = "http://127.0.0.1:63320/lionweb/api/bulk/"; - - @Override - public IPartitionsResponse partitions() { - HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "partitions?onlyPartitions=true")).GET().build(); - HttpResponse response = send(request); - if (HttpURLConnection.HTTP_OK != response.statusCode()) { - return new IPartitionsResponse() { - @Override - public SerializedChunk getResult() { - return null; - } - - @Override - public boolean isOk() { - return false; - } - - @Override - public String getErrorMessage() { - return Integer.toString(response.statusCode()); - } - }; - } - - SerializedChunk chunk = parseChunk(response); - - return new IPartitionsResponse() { - @Override - public SerializedChunk getResult() { - return chunk; - } - - @Override - public boolean isOk() { - return true; - } - - @Override - public String getErrorMessage() { - return ""; - } - }; - } - - @Override - public IRetrieveResponse retrieve(List nodeIds, String depthLimit) { - String ids = nodeIds.stream().map(s -> "\"" + s + "\"").collect(Collectors.joining(",", "[", "]")); - String limit = depthLimit != null ? "?depthLimit=" + depthLimit : ""; - - HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "retrieve" + limit)).POST(HttpRequest.BodyPublishers.ofString(ids)).build(); - HttpResponse response = send(request); - if (HttpURLConnection.HTTP_OK != response.statusCode()) { - return new IRetrieveResponse() { - @Override - public SerializedChunk getResult() { - return null; - } - - @Override - public boolean isValidNodeIds() { - return true; - } - - @Override - public boolean isValidDepthLimit() { - return true; - } - - @Override - public List getUnknownNodeIds() { - return Collections.emptyList(); - } - - @Override - public boolean isOk() { - return false; - } - - @Override - public String getErrorMessage() { - return Integer.toString(response.statusCode()); - } - }; - } - - - SerializedChunk chunk = parseChunk(response); - - return new IRetrieveResponse() { - @Override - public SerializedChunk getResult() { - return chunk; - } - - @Override - public boolean isValidNodeIds() { - return true; - } - - @Override - public boolean isValidDepthLimit() { - return true; - } - - @Override - public List getUnknownNodeIds() { - return Collections.emptyList(); - } - - @Override - public boolean isOk() { - return true; - } - - @Override - public String getErrorMessage() { - return ""; - } - }; - } - - @Override - public IStoreResponse store(SerializedChunk nodes, String mode) { - String jsonString = new LowLevelJsonSerialization().serializeToJsonString(nodes); - - HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "store")).POST(HttpRequest.BodyPublishers.ofString(jsonString)).build(); - HttpResponse response = send(request); - if (HttpURLConnection.HTTP_OK != response.statusCode()) { - return new IStoreResponse() { - @Override - public boolean isValidNodes() { - return true; - } - - @Override - public boolean isValidMode() { - return true; - } - - @Override - public boolean isOk() { - return false; - } - - @Override - public String getErrorMessage() { - return Integer.toString(response.statusCode()); - } - }; - } - - return new IStoreResponse() { - @Override - public boolean isValidNodes() { - return true; - } - - @Override - public boolean isValidMode() { - return true; - } - - @Override - public boolean isOk() { - return true; - } - - @Override - public String getErrorMessage() { - return ""; - } - }; - } - - @Override - public IDeleteResponse delete(List nodeIds) { - throw new UnsupportedOperationException(); - } - - @Override - public IIdsResponse ids(String count) { - throw new UnsupportedOperationException(); - } - - private HttpClient createClient() { - return HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(2)).build(); - } - - private static HttpRequest.Builder buildRequest() { - return HttpRequest.newBuilder().setHeader("Content-Type", "application/json"); - } - - private HttpResponse send(HttpRequest request) { - try { - HttpClient client = createClient(); - return client.send(request, HttpResponse.BodyHandlers.ofInputStream()); - } catch (InterruptedException | IOException e) { - throw new RuntimeException(e); - } - } - - private SerializedChunk parseChunk(HttpResponse response) { - InputStreamReader reader = new InputStreamReader(response.body()); - JsonReader json = new JsonReader(reader); - json.setLenient(true); - JsonElement jsonElement = JsonParser.parseReader(json); - LowLevelJsonSerialization serialization = new LowLevelJsonSerialization(); - SerializedChunk chunk = serialization.deserializeSerializationBlock(jsonElement); - return chunk; +import io.lionweb.api.bulk.wrapper.DefaultIdMapper; +import io.lionweb.api.bulk.wrapper.IdMappingWrapper; + +import java.util.Map; + +public class MpsBulkLowlevel extends IdMappingWrapper { + public MpsBulkLowlevel() { + super(new MpsBulkLowlevelImpl(), new DefaultIdMapper(Map.of( + "leaf-id", "3783922071925855302", + "other-leaf-id", "3783922071925855326", + "third-leaf-id", "3783922071925855319", + "partition-id", "3783922071925855294", + "other-partition-id", "3783922071925855305", + "midnode-id", "3783922071925855296", + "other-midnode-id", "3783922071925855307", + "third-midnode-id", "3783922071925855313" + ))); } } diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevelImpl.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevelImpl.java new file mode 100644 index 00000000..31ccf4f9 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevelImpl.java @@ -0,0 +1,248 @@ +package io.lionweb.api.bulk.test.impl; + +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.google.gson.stream.JsonReader; +import io.lionweb.api.bulk.lowlevel.*; +import io.lionweb.lioncore.java.serialization.LowLevelJsonSerialization; +import io.lionweb.lioncore.java.serialization.data.SerializedChunk; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public class MpsBulkLowlevelImpl implements IBulkLowlevel { + private static final String URI_BASE = "http://127.0.0.1:63320/lionweb/api/bulk/"; + + @Override + public IPartitionsResponse partitions() { + HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "partitions?onlyPartitions=true")).GET().build(); + HttpResponse response = send(request); + if (HttpURLConnection.HTTP_OK != response.statusCode()) { + return new IPartitionsResponse() { + @Override + public SerializedChunk getResult() { + return null; + } + + @Override + public boolean isOk() { + return false; + } + + @Override + public String getErrorMessage() { + return Integer.toString(response.statusCode()); + } + }; + } + + SerializedChunk chunk = parseChunk(response); + + return new IPartitionsResponse() { + @Override + public SerializedChunk getResult() { + return chunk; + } + + @Override + public boolean isOk() { + return true; + } + + @Override + public String getErrorMessage() { + return ""; + } + }; + } + + @Override + public IRetrieveResponse retrieve(List nodeIds, String depthLimit) { + String ids = nodeIds.stream().map(s -> "\"" + s + "\"").collect(Collectors.joining(",", "[", "]")); + String limit = depthLimit != null ? "?depthLimit=" + depthLimit : ""; + + HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "retrieve" + limit)).POST(HttpRequest.BodyPublishers.ofString(ids)).build(); + HttpResponse response = send(request); + if (HttpURLConnection.HTTP_OK != response.statusCode()) { + return new IRetrieveResponse() { + @Override + public SerializedChunk getResult() { + return null; + } + + @Override + public boolean isValidNodeIds() { + return responseContains(response, "nodeids"); + } + + @Override + public boolean isValidDepthLimit() { + return responseContains(response, "depthlimit"); + } + + @Override + public List getUnknownNodeIds() { + return Collections.emptyList(); + } + + @Override + public boolean isOk() { + return false; + } + + @Override + public String getErrorMessage() { + return Integer.toString(response.statusCode()); + } + }; + } + + + SerializedChunk chunk = parseChunk(response); + + return new IRetrieveResponse() { + @Override + public SerializedChunk getResult() { + return chunk; + } + + @Override + public boolean isValidNodeIds() { + return true; + } + + @Override + public boolean isValidDepthLimit() { + return true; + } + + @Override + public List getUnknownNodeIds() { + return Collections.emptyList(); + } + + @Override + public boolean isOk() { + return true; + } + + @Override + public String getErrorMessage() { + return ""; + } + }; + } + + private boolean responseContains(HttpResponse response, String keyword) { + try { + return !extractContents(response).toLowerCase().contains(keyword); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private String extractContents(HttpResponse response) throws IOException { + return new String(response.body().readAllBytes(), StandardCharsets.UTF_8); + } + + @Override + public IStoreResponse store(SerializedChunk nodes, String mode) { + String jsonString = new LowLevelJsonSerialization().serializeToJsonString(nodes); + + HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "store")).POST(HttpRequest.BodyPublishers.ofString(jsonString)).build(); + HttpResponse response = send(request); + if (HttpURLConnection.HTTP_OK != response.statusCode()) { + return new IStoreResponse() { + @Override + public boolean isValidNodes() { + return true; + } + + @Override + public boolean isValidMode() { + return true; + } + + @Override + public boolean isOk() { + return false; + } + + @Override + public String getErrorMessage() { + return Integer.toString(response.statusCode()); + } + }; + } + + return new IStoreResponse() { + @Override + public boolean isValidNodes() { + return true; + } + + @Override + public boolean isValidMode() { + return true; + } + + @Override + public boolean isOk() { + return true; + } + + @Override + public String getErrorMessage() { + return ""; + } + }; + } + + @Override + public IDeleteResponse delete(List nodeIds) { + throw new UnsupportedOperationException(); + } + + @Override + public IIdsResponse ids(String count) { + throw new UnsupportedOperationException(); + } + + private HttpClient createClient() { + return HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(2)).build(); + } + + private static HttpRequest.Builder buildRequest() { + return HttpRequest.newBuilder().setHeader("Content-Type", "application/json"); + } + + private HttpResponse send(HttpRequest request) { + try { + HttpClient client = createClient(); + return client.send(request, HttpResponse.BodyHandlers.ofInputStream()); + } catch (InterruptedException | IOException e) { + throw new RuntimeException(e); + } + } + + private SerializedChunk parseChunk(HttpResponse response) { + InputStreamReader reader = new InputStreamReader(response.body()); + JsonReader json = new JsonReader(reader); + json.setLenient(true); + JsonElement jsonElement = JsonParser.parseReader(json); + LowLevelJsonSerialization serialization = new LowLevelJsonSerialization(); + SerializedChunk chunk = serialization.deserializeSerializationBlock(jsonElement); + return chunk; + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMixedPartitionMidNodeLeaf.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMixedPartitionMidNodeLeaf.java index 3e3113a2..48885a08 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMixedPartitionMidNodeLeaf.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMixedPartitionMidNodeLeaf.java @@ -12,7 +12,7 @@ public class TestMixedPartitionMidNodeLeaf extends ATestRetrieve { @Test public void infinite() { List roots = getBulk().retrieve(Arrays.asList("partition-id", "midnode-id", "leaf-id"), null).getClassifierInstances(); - assertEquals(16, roots.size()); + assertEquals(10, roots.size()); } @Test public void depth0() { @@ -22,11 +22,11 @@ public void depth0() { @Test public void depth1() { List roots = getBulk().retrieve(Arrays.asList("partition-id", "midnode-id", "leaf-id"), 1).getClassifierInstances(); - assertEquals(7, roots.size()); + assertEquals(6, roots.size()); } @Test public void depth2() { List roots = getBulk().retrieve(Arrays.asList("partition-id", "midnode-id", "leaf-id"), 3).getClassifierInstances(); - assertEquals(9, roots.size()); + assertEquals(10, roots.size()); } } diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiMidNode.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiMidNode.java index b06795c8..76ef7036 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiMidNode.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiMidNode.java @@ -12,7 +12,7 @@ public class TestMultiMidNode extends ATestRetrieve { @Test public void infinite() { List roots = getBulk().retrieve(Arrays.asList("midnode-id", "other-midnode-id", "third-midnode-id"), null).getClassifierInstances(); - assertEquals(10, roots.size()); + assertEquals(9, roots.size()); } @Test public void depth0() { @@ -22,7 +22,7 @@ public void depth0() { @Test public void depth1() { List roots = getBulk().retrieve(Arrays.asList("midnode-id", "other-midnode-id", "third-midnode-id"), 1).getClassifierInstances(); - assertEquals(5, roots.size()); + assertEquals(7, roots.size()); } @Test public void depth2() { diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiPartition.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiPartition.java index b05e27d8..a16e3b23 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiPartition.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestMultiPartition.java @@ -12,7 +12,7 @@ public class TestMultiPartition extends ATestRetrieve { @Test public void infinite() { List roots = getBulk().retrieve(Arrays.asList("partition-id", "other-partition-id"), null).getClassifierInstances(); - assertEquals(17, roots.size()); + assertEquals(15, roots.size()); } @Test public void depth0() { @@ -22,7 +22,7 @@ public void depth0() { @Test public void depth1() { List roots = getBulk().retrieve(Arrays.asList("partition-id", "other-partition-id"), 1).getClassifierInstances(); - assertEquals(5, roots.size()); + assertEquals(4, roots.size()); } @Test public void depth2() { diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleLeaf.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleLeaf.java index 158ba04d..51877ead 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleLeaf.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSingleLeaf.java @@ -10,7 +10,7 @@ public class TestSingleLeaf extends ATestRetrieve { @Test - public void depthinfinite() { + public void infinite() { List roots = getBulk().retrieve(Arrays.asList("leaf-id"), null).getClassifierInstances(); assertEquals(1, roots.size()); } diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSinglePartition.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSinglePartition.java index cd29b5cd..9bc2bcd5 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSinglePartition.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/TestSinglePartition.java @@ -22,7 +22,7 @@ public void depth0() { @Test public void depth1() { List roots = getBulk().retrieve(Arrays.asList("partition-id"), 1).getClassifierInstances(); - assertEquals(3, roots.size()); + assertEquals(2, roots.size()); } @Test public void depth2() { diff --git a/bulk-api/src/test/resources/FileSystem-lang.json b/bulk-api/src/test/resources/FileSystem-lang.json new file mode 100644 index 00000000..b844468a --- /dev/null +++ b/bulk-api/src/test/resources/FileSystem-lang.json @@ -0,0 +1,476 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Language" + }, + "properties": [ + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Language-version" + }, + "value": "1" + }, + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "IKeyed-key" + }, + "value": "FileSystem-key" + }, + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "FileSystem" + } + ], + "containments": [ + { + "containment": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Language-entities" + }, + "children": [ + "ID-7", + "ID-3", + "ID-4", + "ID-5" + ] + } + ], + "references": [ + { + "reference": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Language-dependsOn" + }, + "targets": [] + } + ], + "parent": null + }, + { + "id": "ID-7", + "classifier": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept" + }, + "properties": [ + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept-abstract" + }, + "value": "false" + }, + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept-partition" + }, + "value": "true" + }, + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk" + }, + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "IKeyed-key" + }, + "value": "Disk-key" + } + ], + "containments": [ + { + "containment": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Classifier-features" + }, + "children": [ + "ID-8" + ] + } + ], + "references": [ + { + "reference": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept-implements" + }, + "targets": [ + { + "resolveInfo": "INamed", + "reference": "LionCore-builtins-INamed" + } + ] + } + ], + "parent": "ID-2" + }, + { + "id": "ID-8", + "classifier": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Containment" + }, + "properties": [ + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Link-multiple" + }, + "value": "false" + }, + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Feature-optional" + }, + "value": "false" + }, + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + }, + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "IKeyed-key" + }, + "value": "Disk-root-key" + } + ], + "containments": [], + "references": [ + { + "reference": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Link-type" + }, + "targets": [ + { + "resolveInfo": "FileSystemElement", + "reference": "ID-3" + } + ] + } + ], + "parent": "ID-7" + }, + { + "id": "ID-3", + "classifier": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept" + }, + "properties": [ + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept-abstract" + }, + "value": "true" + }, + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept-partition" + }, + "value": "false" + }, + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "FileSystemElement" + }, + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "IKeyed-key" + }, + "value": "FileSystemElement-key" + } + ], + "containments": [ + { + "containment": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Classifier-features" + }, + "children": [] + } + ], + "references": [ + { + "reference": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept-implements" + }, + "targets": [ + { + "resolveInfo": "INamed", + "reference": "LionCore-builtins-INamed" + } + ] + } + ], + "parent": "ID-2" + }, + { + "id": "ID-4", + "classifier": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept" + }, + "properties": [ + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept-abstract" + }, + "value": "false" + }, + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept-partition" + }, + "value": "false" + }, + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "File" + }, + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "IKeyed-key" + }, + "value": "File-key" + } + ], + "containments": [ + { + "containment": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Classifier-features" + }, + "children": [] + } + ], + "references": [ + { + "reference": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept-extends" + }, + "targets": [ + { + "resolveInfo": "FileSystemElement", + "reference": "ID-3" + } + ] + }, + { + "reference": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept-implements" + }, + "targets": [] + } + ], + "parent": "ID-2" + }, + { + "id": "ID-5", + "classifier": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept" + }, + "properties": [ + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept-abstract" + }, + "value": "false" + }, + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept-partition" + }, + "value": "false" + }, + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Folder" + }, + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "IKeyed-key" + }, + "value": "Folder-key" + } + ], + "containments": [ + { + "containment": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Classifier-features" + }, + "children": [ + "ID-6" + ] + } + ], + "references": [ + { + "reference": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept-extends" + }, + "targets": [ + { + "resolveInfo": "FileSystemElement", + "reference": "ID-3" + } + ] + }, + { + "reference": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Concept-implements" + }, + "targets": [] + } + ], + "parent": "ID-2" + }, + { + "id": "ID-6", + "classifier": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Containment" + }, + "properties": [ + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Link-multiple" + }, + "value": "true" + }, + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Feature-optional" + }, + "value": "false" + }, + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "listing" + }, + { + "property": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "IKeyed-key" + }, + "value": "Folder-listing-key" + } + ], + "containments": [], + "references": [ + { + "reference": { + "language": "LionCore-M3", + "version": "2023.1", + "key": "Link-type" + }, + "targets": [ + { + "resolveInfo": "FileSystemElement", + "reference": "ID-3" + } + ] + } + ], + "parent": "ID-5" + } + ] +} \ No newline at end of file diff --git a/bulk-api/src/test/resources/retrieve-baseline.json b/bulk-api/src/test/resources/retrieve-baseline.json new file mode 100644 index 00000000..20f9c270 --- /dev/null +++ b/bulk-api/src/test/resources/retrieve-baseline.json @@ -0,0 +1,448 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "FileSystem-key", + "version": "1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "3783922071925855294", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Partition" + } + ], + "containments": [ + { + "containment": { + "language": "FileSystem-key", + "version": "1", + "key": "Disk-root-key" + }, + "children": [ + "3783922071929604053" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "3783922071929604053", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "something" + } + ], + "containments": [ + { + "containment": { + "language": "FileSystem-key", + "version": "1", + "key": "Folder-listing-key" + }, + "children": [ + "3783922071929604110", + "3783922071925855296" + ] + } + ], + "references": [], + "annotations": [], + "parent": "3783922071925855294" + }, + { + "id": "3783922071929604110", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "f" + } + ], + "containments": [ + { + "containment": { + "language": "FileSystem-key", + "version": "1", + "key": "Folder-listing-key" + }, + "children": [ + "3783922071929604060", + "3783922071925855302" + ] + } + ], + "references": [], + "annotations": [], + "parent": "3783922071929604053" + }, + { + "id": "3783922071929604060", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "File-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "1" + } + ], + "containments": [], + "references": [], + "annotations": [], + "parent": "3783922071929604110" + }, + { + "id": "3783922071925855302", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "File-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Leaf" + } + ], + "containments": [], + "references": [], + "annotations": [], + "parent": "3783922071929604110" + }, + { + "id": "3783922071925855296", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Midnode" + } + ], + "containments": [ + { + "containment": { + "language": "FileSystem-key", + "version": "1", + "key": "Folder-listing-key" + }, + "children": [ + "3783922071929604075", + "3783922071929604254" + ] + } + ], + "references": [], + "annotations": [], + "parent": "3783922071929604053" + }, + { + "id": "3783922071929604075", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "File-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "d" + } + ], + "containments": [], + "references": [], + "annotations": [], + "parent": "3783922071925855296" + }, + { + "id": "3783922071929604254", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "d" + } + ], + "containments": [ + { + "containment": { + "language": "FileSystem-key", + "version": "1", + "key": "Folder-listing-key" + }, + "children": [ + "3783922071929604312" + ] + } + ], + "references": [], + "annotations": [], + "parent": "3783922071925855296" + }, + { + "id": "3783922071929604312", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "d" + } + ], + "containments": [ + { + "containment": { + "language": "FileSystem-key", + "version": "1", + "key": "Folder-listing-key" + }, + "children": [ + "3783922071929604070" + ] + } + ], + "references": [], + "annotations": [], + "parent": "3783922071929604254" + }, + { + "id": "3783922071929604070", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "File-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "2" + } + ], + "containments": [], + "references": [], + "annotations": [], + "parent": "3783922071929604312" + }, + { + "id": "3783922071925855305", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "OtherPartition" + } + ], + "containments": [ + { + "containment": { + "language": "FileSystem-key", + "version": "1", + "key": "Disk-root-key" + }, + "children": [ + "3783922071925855307" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "3783922071925855307", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "OtherMidnode" + } + ], + "containments": [ + { + "containment": { + "language": "FileSystem-key", + "version": "1", + "key": "Folder-listing-key" + }, + "children": [ + "3783922071925855326", + "3783922071925855313" + ] + } + ], + "references": [], + "annotations": [], + "parent": "3783922071925855305" + }, + { + "id": "3783922071925855326", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "File-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "OtherLeaf" + } + ], + "containments": [], + "references": [], + "annotations": [], + "parent": "3783922071925855307" + }, + { + "id": "3783922071925855313", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "ThirdMidnode" + } + ], + "containments": [ + { + "containment": { + "language": "FileSystem-key", + "version": "1", + "key": "Folder-listing-key" + }, + "children": [ + "3783922071925855319" + ] + } + ], + "references": [], + "annotations": [], + "parent": "3783922071925855307" + }, + { + "id": "3783922071925855319", + "classifier": { + "language": "FileSystem-key", + "version": "1", + "key": "File-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "ThirdLeaf" + } + ], + "containments": [], + "references": [], + "annotations": [], + "parent": "3783922071925855313" + } + ] +} \ No newline at end of file From a1f932912c4c58f0d29719adafa3459724b5568c Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Mon, 8 Jan 2024 15:32:50 +0100 Subject: [PATCH 07/14] added generic config to lowlevel (Bulk) API to reflect differences in clients --- .../api/bulk/lowlevel/IBulkLowlevel.java | 9 +++- .../api/bulk/lowlevel/ILowlevelConfig.java | 4 ++ .../api/bulk/wrapper/IdMappingWrapper.java | 16 ++++-- .../impl/LionwebRepositoryBulkLowlevel.java | 20 +++++-- .../test/impl/LionwebRepositoryConfig.java | 25 +++++++++ .../bulk/test/impl/MpsBulkLowlevelImpl.java | 27 ++++++++-- .../lionweb/api/bulk/test/impl/MpsConfig.java | 52 +++++++++++++++++++ 7 files changed, 138 insertions(+), 15 deletions(-) create mode 100644 bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/ILowlevelConfig.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryConfig.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsConfig.java diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IBulkLowlevel.java b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IBulkLowlevel.java index fb06bb06..50b3a3b8 100644 --- a/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IBulkLowlevel.java +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/IBulkLowlevel.java @@ -6,11 +6,11 @@ //import javax.annotation.Nonnull; //import javax.annotation.Nullable; -public interface IBulkLowlevel { +public interface IBulkLowlevel { // @Nonnull IPartitionsResponse partitions(); -// @Nonnull + // @Nonnull IRetrieveResponse retrieve(List nodeIds, /*@Nullable*/ String depthLimit); // @Nonnull @@ -21,4 +21,9 @@ public interface IBulkLowlevel { // @Nonnull IIdsResponse ids(/*@Nonnull*/ String count); + + // @Nonnull + C getConfig(); + + void setConfig(/*@Nonnull*/ C config); } diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/ILowlevelConfig.java b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/ILowlevelConfig.java new file mode 100644 index 00000000..4adb9c93 --- /dev/null +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/lowlevel/ILowlevelConfig.java @@ -0,0 +1,4 @@ +package io.lionweb.api.bulk.lowlevel; + +public interface ILowlevelConfig { +} diff --git a/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/IdMappingWrapper.java b/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/IdMappingWrapper.java index a2aef01f..6b0e4438 100644 --- a/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/IdMappingWrapper.java +++ b/bulk-api/src/main/java/io/lionweb/api/bulk/wrapper/IdMappingWrapper.java @@ -10,11 +10,11 @@ import java.util.function.Function; import java.util.stream.Collectors; -public class IdMappingWrapper implements IBulkLowlevel { - private final IBulkLowlevel delegate; +public class IdMappingWrapper implements IBulkLowlevel { + private final IBulkLowlevel delegate; private final IIdMapper idMapper; - public IdMappingWrapper(IBulkLowlevel delegate, IIdMapper idMapper){ + public IdMappingWrapper(IBulkLowlevel delegate, IIdMapper idMapper){ this.delegate = delegate; this.idMapper = idMapper; } @@ -111,6 +111,16 @@ public String getErrorMessage() { }; } + @Override + public C getConfig() { + return delegate.getConfig(); + } + + @Override + public void setConfig(C config) { + delegate.setConfig(config); + } + @Override public IIdsResponse ids(String count) { IIdsResponse response = delegate.ids(count); diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryBulkLowlevel.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryBulkLowlevel.java index 1b004620..968767a2 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryBulkLowlevel.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryBulkLowlevel.java @@ -20,12 +20,12 @@ import java.util.List; import java.util.stream.Collectors; -public class LionwebRepositoryBulkLowlevel implements IBulkLowlevel { - private static final String URI_BASE = "http://127.0.0.1:3005/bulk/"; +public class LionwebRepositoryBulkLowlevel implements IBulkLowlevel { + private LionwebRepositoryConfig config = new LionwebRepositoryConfig(); @Override public IPartitionsResponse partitions() { - HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "partitions")).GET().build(); + HttpRequest request = buildRequest().uri(URI.create(config.getUriBase() + "partitions")).GET().build(); HttpResponse response = send(request); if (HttpURLConnection.HTTP_OK != response.statusCode()) { return new IPartitionsResponse() { @@ -71,7 +71,7 @@ public IRetrieveResponse retrieve(List nodeIds, String depthLimit) { String ids = "{ \"ids\": " + nodeIds.stream().map(s -> "\"" + s + "\"").collect(Collectors.joining(",", "[", "]")) + "}"; String limit = depthLimit != null ? "?depthLimit=" + depthLimit : ""; - HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "retrieve" + limit)).POST(HttpRequest.BodyPublishers.ofString(ids)).build(); + HttpRequest request = buildRequest().uri(URI.create(config.getUriBase() + "retrieve" + limit)).POST(HttpRequest.BodyPublishers.ofString(ids)).build(); HttpResponse response = send(request); if (HttpURLConnection.HTTP_OK != response.statusCode()) { return new IRetrieveResponse() { @@ -147,7 +147,7 @@ public String getErrorMessage() { public IStoreResponse store(SerializedChunk nodes, String mode) { String jsonString = new LowLevelJsonSerialization().serializeToJsonString(nodes); - HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "store")).POST(HttpRequest.BodyPublishers.ofString(jsonString)).build(); + HttpRequest request = buildRequest().uri(URI.create(config.getUriBase() + "store")).POST(HttpRequest.BodyPublishers.ofString(jsonString)).build(); HttpResponse response = send(request); if (HttpURLConnection.HTTP_OK != response.statusCode()) { return new IStoreResponse() { @@ -206,6 +206,16 @@ public IIdsResponse ids(String count) { throw new UnsupportedOperationException(); } + @Override + public LionwebRepositoryConfig getConfig() { + return this.config; + } + + @Override + public void setConfig(LionwebRepositoryConfig config) { + this.config = config; + } + private HttpClient createClient() { return HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(2)).build(); } diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryConfig.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryConfig.java new file mode 100644 index 00000000..81ebb052 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/LionwebRepositoryConfig.java @@ -0,0 +1,25 @@ +package io.lionweb.api.bulk.test.impl; + +import io.lionweb.api.bulk.lowlevel.ILowlevelConfig; + +import java.net.URI; + +public class LionwebRepositoryConfig implements ILowlevelConfig { + private URI baseUri = URI.create("http://127.0.0.1:3005/bulk/"); + + public URI getBaseUri() { + return baseUri; + } + + public void setBaseUri(URI baseUri) { + this.baseUri = baseUri; + } + + String getUriBase() { + String result = getBaseUri().toString(); + if (!result.endsWith("/")) { + result += "/"; + } + return result; + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevelImpl.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevelImpl.java index 31ccf4f9..e9f1e07a 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevelImpl.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsBulkLowlevelImpl.java @@ -17,16 +17,22 @@ import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; import java.time.Duration; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; -public class MpsBulkLowlevelImpl implements IBulkLowlevel { - private static final String URI_BASE = "http://127.0.0.1:63320/lionweb/api/bulk/"; +public class MpsBulkLowlevelImpl implements IBulkLowlevel { + private MpsConfig config = new MpsConfig(); @Override public IPartitionsResponse partitions() { - HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "partitions?onlyPartitions=true")).GET().build(); + List parameters = Arrays.asList( + "onlyPartitions=" + config.isOnlyPartitions(), + "includeLanguages=" + config.isIncludeLanguages(), + "includePackaged=" + config.isIncludePackaged()); + URI uri = URI.create(config.getUriBase() + "partitions?" + String.join("&", parameters)); + HttpRequest request = buildRequest().uri(uri).GET().build(); HttpResponse response = send(request); if (HttpURLConnection.HTTP_OK != response.statusCode()) { return new IPartitionsResponse() { @@ -72,7 +78,8 @@ public IRetrieveResponse retrieve(List nodeIds, String depthLimit) { String ids = nodeIds.stream().map(s -> "\"" + s + "\"").collect(Collectors.joining(",", "[", "]")); String limit = depthLimit != null ? "?depthLimit=" + depthLimit : ""; - HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "retrieve" + limit)).POST(HttpRequest.BodyPublishers.ofString(ids)).build(); + URI uri = URI.create(config.getUriBase() + "retrieve" + limit); + HttpRequest request = buildRequest().uri(uri).POST(HttpRequest.BodyPublishers.ofString(ids)).build(); HttpResponse response = send(request); if (HttpURLConnection.HTTP_OK != response.statusCode()) { return new IRetrieveResponse() { @@ -144,6 +151,16 @@ public String getErrorMessage() { }; } + @Override + public MpsConfig getConfig() { + return config; + } + + @Override + public void setConfig(MpsConfig config) { + this.config = config; + } + private boolean responseContains(HttpResponse response, String keyword) { try { return !extractContents(response).toLowerCase().contains(keyword); @@ -160,7 +177,7 @@ private String extractContents(HttpResponse response) throws IOExce public IStoreResponse store(SerializedChunk nodes, String mode) { String jsonString = new LowLevelJsonSerialization().serializeToJsonString(nodes); - HttpRequest request = buildRequest().uri(URI.create(URI_BASE + "store")).POST(HttpRequest.BodyPublishers.ofString(jsonString)).build(); + HttpRequest request = buildRequest().uri(URI.create(config.getUriBase() + "store")).POST(HttpRequest.BodyPublishers.ofString(jsonString)).build(); HttpResponse response = send(request); if (HttpURLConnection.HTTP_OK != response.statusCode()) { return new IStoreResponse() { diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsConfig.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsConfig.java new file mode 100644 index 00000000..a7ce1bde --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/impl/MpsConfig.java @@ -0,0 +1,52 @@ +package io.lionweb.api.bulk.test.impl; + +import io.lionweb.api.bulk.lowlevel.ILowlevelConfig; + +import java.net.URI; + +public class MpsConfig implements ILowlevelConfig { + private URI baseUri = URI.create("http://127.0.0.1:63320/lionweb/api/bulk/"); + private boolean onlyPartitions = true; + private boolean includeLanguages = false; + private boolean includePackaged = false; + + public boolean isOnlyPartitions() { + return onlyPartitions; + } + + public void setOnlyPartitions(boolean onlyPartitions) { + this.onlyPartitions = onlyPartitions; + } + + public boolean isIncludeLanguages() { + return includeLanguages; + } + + public void setIncludeLanguages(boolean includeLanguages) { + this.includeLanguages = includeLanguages; + } + + public boolean isIncludePackaged() { + return includePackaged; + } + + public void setIncludePackaged(boolean includePackaged) { + this.includePackaged = includePackaged; + } + + public URI getBaseUri() { + return baseUri; + } + + public void setBaseUri(URI baseUri) { + this.baseUri = baseUri; + } + + String getUriBase() { + String result = getBaseUri().toString(); + if (!result.endsWith("/")) { + result += "/"; + } + return result; + } +} From 3b6876a2f8815868971dfc3c857d71b359770601 Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Fri, 19 Jan 2024 19:25:11 +0100 Subject: [PATCH 08/14] improved equals() implementation (now null-safe) --- .../lioncore/java/serialization/data/SerializedChunk.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/io/lionweb/lioncore/java/serialization/data/SerializedChunk.java b/core/src/main/java/io/lionweb/lioncore/java/serialization/data/SerializedChunk.java index 7676d58d..2814a8ef 100644 --- a/core/src/main/java/io/lionweb/lioncore/java/serialization/data/SerializedChunk.java +++ b/core/src/main/java/io/lionweb/lioncore/java/serialization/data/SerializedChunk.java @@ -72,9 +72,9 @@ public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof SerializedChunk)) return false; SerializedChunk that = (SerializedChunk) o; - return serializationFormatVersion.equals(that.serializationFormatVersion) - && languages.equals(that.languages) - && classifierInstances.equals(that.classifierInstances); + return Objects.equals(serializationFormatVersion, that.serializationFormatVersion) + && Objects.equals(languages, that.languages) + && Objects.equals(classifierInstances, that.classifierInstances); } @Override From 4f1af2985a462b8695794e565cab325bb598837f Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Fri, 19 Jan 2024 19:27:23 +0100 Subject: [PATCH 09/14] added sorted variants of low-level JSON classes for easy comparison --- .../json/sorted/MetaPointerComparator.java | 25 +++ .../json/sorted/SortedSerializedChunk.java | 95 ++++++++++ .../SortedSerializedClassifierInstance.java | 179 ++++++++++++++++++ .../SortedSerializedContainmentValue.java | 60 ++++++ .../sorted/SortedSerializedPropertyValue.java | 54 ++++++ .../SortedSerializedReferenceValue.java | 119 ++++++++++++ .../json/sorted/SortedUsedLanguage.java | 58 ++++++ 7 files changed, 590 insertions(+) create mode 100644 bulk-api/src/test/java/io/lionweb/json/sorted/MetaPointerComparator.java create mode 100644 bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedChunk.java create mode 100644 bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedClassifierInstance.java create mode 100644 bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedContainmentValue.java create mode 100644 bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedPropertyValue.java create mode 100644 bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedReferenceValue.java create mode 100644 bulk-api/src/test/java/io/lionweb/json/sorted/SortedUsedLanguage.java diff --git a/bulk-api/src/test/java/io/lionweb/json/sorted/MetaPointerComparator.java b/bulk-api/src/test/java/io/lionweb/json/sorted/MetaPointerComparator.java new file mode 100644 index 00000000..87c5c59c --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/json/sorted/MetaPointerComparator.java @@ -0,0 +1,25 @@ +package io.lionweb.json.sorted; + +import io.lionweb.lioncore.java.serialization.data.MetaPointer; + +import java.util.Comparator; +import java.util.Objects; + +/** + * Compares {@link MetaPointer }s + * by {@link Comparator#naturalOrder() } of language, version, and key (in that order). + */ +public class MetaPointerComparator implements Comparator { + @Override + public int compare(MetaPointer a, MetaPointer b) { + int lang = Objects.compare(a.getLanguage(), b.getLanguage(), Comparator.nullsLast(Comparator.naturalOrder())); + if (lang != 0) { + return lang; + } + int version = Objects.compare(a.getVersion(), b.getVersion(), Comparator.nullsLast(Comparator.naturalOrder())); + if (version != 0) { + return version; + } + return Objects.compare(a.getKey(), b.getKey(), Comparator.nullsLast(Comparator.naturalOrder())); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedChunk.java b/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedChunk.java new file mode 100644 index 00000000..9069ac9f --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedChunk.java @@ -0,0 +1,95 @@ +package io.lionweb.json.sorted; + +import io.lionweb.lioncore.java.serialization.data.SerializedChunk; +import io.lionweb.lioncore.java.serialization.data.SerializedClassifierInstance; +import io.lionweb.lioncore.java.serialization.data.UsedLanguage; + +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * View of {@link SortedSerializedChunk#delegate } with sorted {@link SortedSerializedChunk#getLanguages() } and {@link SortedSerializedChunk#getClassifierInstances() }. + */ +public class SortedSerializedChunk extends SerializedChunk { + private final SerializedChunk delegate; + + public SortedSerializedChunk(SerializedChunk delegate) { + this.delegate = delegate; + } + + @Override + public List getLanguages() { + return delegate.getLanguages().stream().map(new Function() { + public SortedUsedLanguage apply(UsedLanguage it) { + return new SortedUsedLanguage(it); + } + }).sorted().collect(Collectors.toList()); + } + + @Override + public List getClassifierInstances() { + return delegate.getClassifierInstances().stream().map(new Function() { + public SortedSerializedClassifierInstance apply(SerializedClassifierInstance it) { + return new SortedSerializedClassifierInstance(it); + } + }).sorted().collect(Collectors.toList()); + } + + @Override + public void setSerializationFormatVersion(String value) { + delegate.setSerializationFormatVersion(value); + } + + @Override + public String getSerializationFormatVersion() { + return delegate.getSerializationFormatVersion(); + } + + @Override + public void addClassifierInstance(SerializedClassifierInstance instance) { + delegate.addClassifierInstance(instance); + } + + @Override + public SerializedClassifierInstance getInstanceByID(String instanceID) { + return delegate.getInstanceByID(instanceID); + } + + @Override + public Map getClassifierInstancesByID() { + return delegate.getClassifierInstancesByID(); + } + + @Override + public void addLanguage(UsedLanguage language) { + delegate.addLanguage(language); + } + + @Override + public String toString() { + return "SerializationBlock{\n" + + "serializationFormatVersion='" + getSerializationFormatVersion() + + "',\n languages=\n" + + getLanguages().stream().map(Object::toString).collect(Collectors.joining(",\n")) + + ",\n classifierInstances=\n" + + getClassifierInstances().stream().map(Object::toString).collect(Collectors.joining(",\n")) + + "\n}"; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SerializedChunk)) return false; + SerializedChunk that = (SerializedChunk) o; + return getSerializationFormatVersion().equals(that.getSerializationFormatVersion()) + && getLanguages().equals(that.getLanguages()) + && getClassifierInstances().equals(that.getClassifierInstances()); + } + + @Override + public int hashCode() { + return delegate.hashCode(); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedClassifierInstance.java b/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedClassifierInstance.java new file mode 100644 index 00000000..bb03e4ee --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedClassifierInstance.java @@ -0,0 +1,179 @@ +package io.lionweb.json.sorted; + +import io.lionweb.lioncore.java.serialization.data.*; + +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class SortedSerializedClassifierInstance extends SerializedClassifierInstance implements Comparable { + private final SerializedClassifierInstance delegate; + + public SortedSerializedClassifierInstance(SerializedClassifierInstance delegate) { + this.delegate = delegate; + } + + @Override + public List getContainments() { + return delegate.getContainments().stream().map(new Function() { + public SortedSerializedContainmentValue apply(SerializedContainmentValue it) { + return new SortedSerializedContainmentValue(it); + } + }).sorted().collect(Collectors.toList()); + } + + @Override + public List getChildren() { + List result = delegate.getChildren(); + result.sort(Comparator.nullsLast(Comparator.naturalOrder())); + return result; + } + + @Override + public List getReferences() { + return delegate.getReferences().stream().map(new Function() { + public SortedSerializedReferenceValue apply(SerializedReferenceValue it) { + return new SortedSerializedReferenceValue(it); + } + }).sorted().collect(Collectors.toList()); + } + + @Override + public List getProperties() { + return delegate.getProperties().stream().map(new Function() { + public SortedSerializedPropertyValue apply(SerializedPropertyValue it) { + return new SortedSerializedPropertyValue(it); + } + }).sorted().collect(Collectors.toList()); + } + + @Override + public List getReferenceValues(String referenceKey) { + return delegate.getReferenceValues(referenceKey).stream().map(new Function() { + public SortedSerializedReferenceValue.Entry apply(SerializedReferenceValue.Entry it) { + return new SortedSerializedReferenceValue.Entry(it); + } + }).sorted().collect(Collectors.toList()); + } + + + @Override + public int compareTo(SerializedClassifierInstance other) { + return Objects.compare(this.getID(), other.getID(), Comparator.nullsLast(Comparator.naturalOrder())); + } + + @Override + public String getParentNodeID() { + return delegate.getParentNodeID(); + } + + @Override + public void setParentNodeID(String parentNodeID) { + delegate.setParentNodeID(parentNodeID); + } + + @Override + public void addPropertyValue(SerializedPropertyValue propertyValue) { + delegate.addPropertyValue(propertyValue); + } + + @Override + public void addContainmentValue(SerializedContainmentValue containmentValue) { + delegate.addContainmentValue(containmentValue); + } + + @Override + public void addReferenceValue(SerializedReferenceValue referenceValue) { + delegate.addReferenceValue(referenceValue); + } + + @Override + public List getAnnotations() { + return delegate.getAnnotations(); + } + + @Override + public MetaPointer getClassifier() { + return delegate.getClassifier(); + } + + @Override + public void setClassifier(MetaPointer classifier) { + delegate.setClassifier(classifier); + } + + @Override + public void setAnnotations(List annotationIDs) { + delegate.setAnnotations(annotationIDs); + } + + @Override + public String getID() { + return delegate.getID(); + } + + @Override + public void setID(String id) { + delegate.setID(id); + } + + @Override + public void setPropertyValue(MetaPointer property, String serializedValue) { + delegate.setPropertyValue(property, serializedValue); + } + + @Override + public void addChildren(MetaPointer containment, List childrenIds) { + delegate.addChildren(containment, childrenIds); + } + + @Override + public void addReferenceValue(MetaPointer reference, List referenceValues) { + delegate.addReferenceValue(reference, referenceValues); + } + + @Override + public String getPropertyValue(String propertyKey) { + return delegate.getPropertyValue(propertyKey); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SerializedClassifierInstance)) return false; + SerializedClassifierInstance that = (SerializedClassifierInstance) o; + return Objects.equals(getID(), that.getID()) + && Objects.equals(getClassifier(), that.getClassifier()) + && Objects.equals(getParentNodeID(), that.getParentNodeID()) + && Objects.equals(getProperties(), that.getProperties()) + && Objects.equals(getContainments(), that.getContainments()) + && Objects.equals(getReferences(), that.getReferences()) + && Objects.equals(getAnnotations(), that.getAnnotations()); + } + + @Override + public int hashCode() { + return delegate.hashCode(); + } + + @Override + public String toString() { + return "SerializedClassifierInstance{" + + "id='" + getID() + + "', parentNodeID='" + getParentNodeID() + + "',\n classifier=" + getClassifier() + + ",\n properties=" + + getProperties().stream().map(Objects::toString).collect(Collectors.joining(",\n")) + + ",\n containments=" + + getContainments().stream().map(Objects::toString).collect(Collectors.joining(",\n")) + + ",\n references=" + + getReferences().stream().map(Objects::toString).collect(Collectors.joining(",\n")) + + ",\n annotations=" + + getAnnotations().stream().map(Objects::toString).collect(Collectors.joining(",\n")) + + "'\n}"; + + } + +} diff --git a/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedContainmentValue.java b/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedContainmentValue.java new file mode 100644 index 00000000..f947cc0b --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedContainmentValue.java @@ -0,0 +1,60 @@ +package io.lionweb.json.sorted; + +import io.lionweb.lioncore.java.serialization.data.MetaPointer; +import io.lionweb.lioncore.java.serialization.data.SerializedContainmentValue; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * {@link Comparable } view of {@link SortedSerializedContainmentValue#delegate } with sorted {@link SortedSerializedContainmentValue#getValue() }s. + * + * Comparison based on its {@link SortedSerializedContainmentValue#getMetaPointer() }. + */ +public class SortedSerializedContainmentValue extends SerializedContainmentValue implements Comparable { + private final SerializedContainmentValue delegate; + + public SortedSerializedContainmentValue(SerializedContainmentValue delegate) { + super(); + this.delegate = delegate; + } + + @Override + public List getValue() { + return delegate.getValue().stream().sorted().collect(Collectors.toList()); + } + + @Override + public int compareTo(SerializedContainmentValue other) { + return new MetaPointerComparator().compare(this.getMetaPointer(), other.getMetaPointer()); + } + + @Override + public MetaPointer getMetaPointer() { + return delegate.getMetaPointer(); + } + @Override + public void setMetaPointer(MetaPointer metaPointer) { + delegate.setMetaPointer(metaPointer); + } + @Override + public void setValue(List value) { + delegate.setValue(value); + } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SerializedContainmentValue)) return false; + SerializedContainmentValue that = (SerializedContainmentValue) o; + return Objects.equals(getMetaPointer(), that.getMetaPointer()) && Objects.equals(getValue(), that.getValue()); + } + @Override + public int hashCode() { + return delegate.hashCode(); + } + @Override + public String toString() { + return delegate.toString(); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedPropertyValue.java b/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedPropertyValue.java new file mode 100644 index 00000000..b1acc2b7 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedPropertyValue.java @@ -0,0 +1,54 @@ +package io.lionweb.json.sorted; + +import io.lionweb.lioncore.java.serialization.data.MetaPointer; +import io.lionweb.lioncore.java.serialization.data.SerializedPropertyValue; + +import java.util.Objects; + +/** + * {@link Comparable } view of {@link SortedSerializedPropertyValue#delegate }, compared by its {@link SortedSerializedPropertyValue#getMetaPointer() }. + */ +public class SortedSerializedPropertyValue extends SerializedPropertyValue implements Comparable { + private final SerializedPropertyValue delegate; + + public SortedSerializedPropertyValue(SerializedPropertyValue delegate) { + this.delegate = delegate; + } + + @Override + public int compareTo(SerializedPropertyValue other) { + return new MetaPointerComparator().compare(this.getMetaPointer(), other.getMetaPointer()); + } + + @Override + public MetaPointer getMetaPointer() { + return delegate.getMetaPointer(); + } + @Override + public void setMetaPointer(MetaPointer metaPointer) { + delegate.setMetaPointer(metaPointer); + } + @Override + public String getValue() { + return delegate.getValue(); + } + @Override + public void setValue(String value) { + delegate.setValue(value); + } + @Override + public String toString() { + return delegate.toString(); + } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SerializedPropertyValue)) return false; + SerializedPropertyValue that = (SerializedPropertyValue) o; + return Objects.equals(getMetaPointer(), that.getMetaPointer()) && Objects.equals(getValue(), that.getValue()); + } + @Override + public int hashCode() { + return delegate.hashCode(); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedReferenceValue.java b/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedReferenceValue.java new file mode 100644 index 00000000..2fb498b5 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/json/sorted/SortedSerializedReferenceValue.java @@ -0,0 +1,119 @@ +package io.lionweb.json.sorted; + +import io.lionweb.lioncore.java.serialization.data.MetaPointer; +import io.lionweb.lioncore.java.serialization.data.SerializedReferenceValue; + +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * {@link Comparable } view of {@link SortedSerializedReferenceValue#delegate } with sorted {@link SortedSerializedReferenceValue#getValue() }. + * + * Comparison based on its {@link SortedSerializedReferenceValue#getMetaPointer() }. + */ +public class SortedSerializedReferenceValue extends SerializedReferenceValue implements Comparable { + private final SerializedReferenceValue delegate; + + public SortedSerializedReferenceValue(SerializedReferenceValue delegate) { + this.delegate = delegate; + } + + @Override + public List getValue() { + return delegate.getValue().stream().map(new Function() { + public Entry apply(SerializedReferenceValue.Entry it) { + return new Entry(it); + } + }).sorted().collect(Collectors.toList()); + } + + @Override + public int compareTo(SerializedReferenceValue other) { + return new MetaPointerComparator().compare(this.getMetaPointer(), other.getMetaPointer()); + } + + /** + * {@link Comparable } view of {@link SortedSerializedReferenceValue.Entry#delegate }, based on its {@link SortedSerializedReferenceValue.Entry#getReference() } and then {@link SortedSerializedReferenceValue.Entry#getResolveInfo() } (in that order). + */ + public static class Entry extends SerializedReferenceValue.Entry implements Comparable { + private final SerializedReferenceValue.Entry delegate; + + public Entry(SerializedReferenceValue.Entry delegate) { + this.delegate = delegate; + } + + @Override + public int compareTo(SerializedReferenceValue.Entry other) { + int reference = Objects.compare(this.getReference(), other.getReference(), Comparator.nullsLast(Comparator.naturalOrder())); + if (reference != 0) { + return reference; + } + return Objects.compare(this.getResolveInfo(), other.getResolveInfo(), Comparator.nullsLast(Comparator.naturalOrder())); + } + + + @Override + public String getResolveInfo() { + return delegate.getResolveInfo(); + } + @Override + public void setResolveInfo(String resolveInfo) { + delegate.setResolveInfo(resolveInfo); + } + @Override + public String getReference() { + return delegate.getReference(); + } + @Override + public void setReference(String reference) { + delegate.setReference(reference); + } + @Override + public String toString() { + return delegate.toString(); + } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SerializedReferenceValue.Entry)) return false; + SerializedReferenceValue.Entry entry = (SerializedReferenceValue.Entry) o; + return Objects.equals(getResolveInfo(), entry.getResolveInfo()) + && Objects.equals(getReference(), entry.getReference()); + } + @Override + public int hashCode() { + return delegate.hashCode(); + } + } + + @Override + public MetaPointer getMetaPointer() { + return delegate.getMetaPointer(); + } + @Override + public void setMetaPointer(MetaPointer metaPointer) { + delegate.setMetaPointer(metaPointer); + } + @Override + public void setValue(List value) { + delegate.setValue(value); + } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SerializedReferenceValue)) return false; + SerializedReferenceValue that = (SerializedReferenceValue) o; + return Objects.equals(getMetaPointer(), that.getMetaPointer()) && Objects.equals(getValue(), that.getValue()); + } + @Override + public int hashCode() { + return delegate.hashCode(); + } + @Override + public String toString() { + return delegate.toString(); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/json/sorted/SortedUsedLanguage.java b/bulk-api/src/test/java/io/lionweb/json/sorted/SortedUsedLanguage.java new file mode 100644 index 00000000..d0f8984c --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/json/sorted/SortedUsedLanguage.java @@ -0,0 +1,58 @@ +package io.lionweb.json.sorted; + +import io.lionweb.lioncore.java.serialization.data.UsedLanguage; + +import java.util.Comparator; +import java.util.Objects; + +/** + * {@link Comparable } view of {@link SortedUsedLanguage#delegate }, based on first {@link SortedUsedLanguage#getKey() }, then {@link SortedUsedLanguage#getVersion() } (in that order). + */ +public class SortedUsedLanguage extends UsedLanguage implements Comparable { + private final UsedLanguage delegate; + + public SortedUsedLanguage(UsedLanguage delegate) { + this.delegate = delegate; + } + + @Override + public int compareTo(UsedLanguage other) { + int key = Objects.compare(this.getKey(), other.getKey(), Comparator.nullsLast(Comparator.naturalOrder())); + if (key != 0) { + return key; + } + return Objects.compare(this.getVersion(), other.getVersion(), Comparator.nullsLast(Comparator.naturalOrder())); + } + + @Override + public String getKey() { + return delegate.getKey(); + } + @Override + public void setKey(String key) { + delegate.setKey(key); + } + @Override + public String getVersion() { + return delegate.getVersion(); + } + @Override + public void setVersion(String version) { + delegate.setVersion(version); + } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof UsedLanguage)) return false; + UsedLanguage that = (UsedLanguage) o; + return Objects.equals(getKey(), that.getKey()) && Objects.equals(getVersion(), that.getVersion()); + } + @Override + public int hashCode() { + return delegate.hashCode(); + } + @Override + public String toString() { + return delegate.toString(); + } +} From ef21fd516cdf8bc89f6cc83e4e1428e35e842eac Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Fri, 19 Jan 2024 19:28:26 +0100 Subject: [PATCH 10/14] added bulk API store() tests from lionweb-repository --- .../api/bulk/test/BulkApiProvider.java | 4 +- .../api/bulk/test/store/ATestStore.java | 49 ++ .../bulk/test/store/TestAddNewAnnotation.java | 21 + .../api/bulk/test/store/TestAddNewNode.java | 23 + .../bulk/test/store/TestAddNewProperty.java | 23 + .../api/bulk/test/store/TestAddReference.java | 21 + .../test/store/TestChangePropertyValue.java | 21 + .../api/bulk/test/store/TestMoveChild.java | 37 ++ .../bulk/test/store/TestRemoveAnnotation.java | 21 + .../api/bulk/test/store/TestRemoveChild.java | 21 + .../bulk/test/store/TestRemoveReference.java | 21 + .../test/store/TestReorderAnnotations.java | 21 + .../store/TestReorderReferenceTargets.java | 21 + .../bulk/test/store/TestRorderChildren.java | 21 + bulk-api/src/test/resources/Disk_A.json | 528 ++++++++++++++++ .../Disk-add-new-annotation-partition.json | 516 ++++++++++++++++ .../Disk-add-new-annotation-two-nodes.json | 62 ++ .../Disk-add-new-nodes-partition.json | 572 ++++++++++++++++++ .../Disk-add-new-nodes-single-node.json | 70 +++ .../Disk-Property-add-property-partition.json | 539 +++++++++++++++++ ...isk-Property-add-property-single-node.json | 56 ++ .../Disk_add-reference-partition.json | 532 ++++++++++++++++ .../Disk_add-reference-single-node.json | 72 +++ ...Disk_Property_value_changed-partition.json | 522 ++++++++++++++++ ...sk_Property_value_changed-single-node.json | 51 ++ .../move-child/Disk-move-child-partition.json | 528 ++++++++++++++++ .../Disk-move-child-single-node.json | 50 ++ .../Disk-move-child-two-nodes-2.json | 81 +++ .../move-child/Disk-move-child-two-nodes.json | 102 ++++ .../Disk-remove-annotation-partition.json | 485 +++++++++++++++ .../Disk-remove-annotation-single-node.json | 46 ++ .../Disk-remove-child-partition.json | 416 +++++++++++++ .../Disk-remove-child-single-node.json | 85 +++ .../Disk-remove-reference-partition.json | 531 ++++++++++++++++ .../Disk-remove-reference-single-node.json | 50 ++ .../reorder-annotations-partition.json | 528 ++++++++++++++++ .../reorder-annotations-single-node.json | 50 ++ .../reorder-children-partition.json | 531 ++++++++++++++++ .../reorder-children-single-node.json | 51 ++ .../reorder-reference-targets-partition.json | 531 ++++++++++++++++ ...reorder-reference-targets-single-node.json | 68 +++ 41 files changed, 7976 insertions(+), 2 deletions(-) create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/store/ATestStore.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddNewAnnotation.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddNewNode.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddNewProperty.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddReference.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestChangePropertyValue.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestMoveChild.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRemoveAnnotation.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRemoveChild.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRemoveReference.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestReorderAnnotations.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestReorderReferenceTargets.java create mode 100644 bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRorderChildren.java create mode 100644 bulk-api/src/test/resources/Disk_A.json create mode 100644 bulk-api/src/test/resources/add-new-annotation/Disk-add-new-annotation-partition.json create mode 100644 bulk-api/src/test/resources/add-new-annotation/Disk-add-new-annotation-two-nodes.json create mode 100644 bulk-api/src/test/resources/add-new-nodes/Disk-add-new-nodes-partition.json create mode 100644 bulk-api/src/test/resources/add-new-nodes/Disk-add-new-nodes-single-node.json create mode 100644 bulk-api/src/test/resources/add-new-property-with-value/Disk-Property-add-property-partition.json create mode 100644 bulk-api/src/test/resources/add-new-property-with-value/Disk-Property-add-property-single-node.json create mode 100644 bulk-api/src/test/resources/add-reference/Disk_add-reference-partition.json create mode 100644 bulk-api/src/test/resources/add-reference/Disk_add-reference-single-node.json create mode 100644 bulk-api/src/test/resources/change-property-value/Disk_Property_value_changed-partition.json create mode 100644 bulk-api/src/test/resources/change-property-value/Disk_Property_value_changed-single-node.json create mode 100644 bulk-api/src/test/resources/move-child/Disk-move-child-partition.json create mode 100644 bulk-api/src/test/resources/move-child/Disk-move-child-single-node.json create mode 100644 bulk-api/src/test/resources/move-child/Disk-move-child-two-nodes-2.json create mode 100644 bulk-api/src/test/resources/move-child/Disk-move-child-two-nodes.json create mode 100644 bulk-api/src/test/resources/remove-annotation/Disk-remove-annotation-partition.json create mode 100644 bulk-api/src/test/resources/remove-annotation/Disk-remove-annotation-single-node.json create mode 100644 bulk-api/src/test/resources/remove-child/Disk-remove-child-partition.json create mode 100644 bulk-api/src/test/resources/remove-child/Disk-remove-child-single-node.json create mode 100644 bulk-api/src/test/resources/remove-reference/Disk-remove-reference-partition.json create mode 100644 bulk-api/src/test/resources/remove-reference/Disk-remove-reference-single-node.json create mode 100644 bulk-api/src/test/resources/reorder-annotations/reorder-annotations-partition.json create mode 100644 bulk-api/src/test/resources/reorder-annotations/reorder-annotations-single-node.json create mode 100644 bulk-api/src/test/resources/reorder-children/reorder-children-partition.json create mode 100644 bulk-api/src/test/resources/reorder-children/reorder-children-single-node.json create mode 100644 bulk-api/src/test/resources/reorder-reference-targets/reorder-reference-targets-partition.json create mode 100644 bulk-api/src/test/resources/reorder-reference-targets/reorder-reference-targets-single-node.json diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java index 74da8406..07428d65 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/BulkApiProvider.java @@ -16,7 +16,7 @@ public IBulk getBulk() { } public IBulkLowlevel getBulkLowlevel() { - return new MpsBulkLowlevel(); -// return new LionwebRepositoryBulkLowlevel(); +// return new MpsBulkLowlevel(); + return new LionwebRepositoryBulkLowlevel(); } } diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/ATestStore.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/ATestStore.java new file mode 100644 index 00000000..30e2912e --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/ATestStore.java @@ -0,0 +1,49 @@ +package io.lionweb.api.bulk.test.store; + +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.google.gson.stream.JsonReader; +import io.lionweb.api.bulk.StoreMode; +import io.lionweb.api.bulk.test.ATestBulk; +import io.lionweb.lioncore.java.serialization.LowLevelJsonSerialization; +import io.lionweb.lioncore.java.serialization.data.SerializedChunk; +import io.lionweb.json.sorted.SortedSerializedChunk; +import org.junit.Before; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public abstract class ATestStore extends ATestBulk { + @Before + public void initDb() { + getBulk().store(loadResource("Disk_A.json"), StoreMode.REPLACE); + } + + protected SerializedChunk loadResource(String resourcePath) { + SerializedChunk chunk; + Class aClass = this.getClass(); + try (InputStream is = aClass.getResourceAsStream("/" + resourcePath)) { + LowLevelJsonSerialization jsonSerialization = new LowLevelJsonSerialization(); + InputStreamReader reader = new InputStreamReader(is); + JsonReader json = new JsonReader(reader); + json.setLenient(true); + JsonElement jsonElement = JsonParser.parseReader(json); + chunk = jsonSerialization.deserializeSerializationBlock(jsonElement); + } catch (IOException e) { + throw new RuntimeException(e); + } + return chunk; + } + + protected void test(String originalJsonResource, String changesResource) { + getBulk().store(loadResource(changesResource), StoreMode.REPLACE); + + SortedSerializedChunk expected = new SortedSerializedChunk(loadResource(originalJsonResource)); + SortedSerializedChunk actual = new SortedSerializedChunk(getBulk().retrieve(List.of("ID-2"), null)); + assertEquals(expected, actual); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddNewAnnotation.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddNewAnnotation.java new file mode 100644 index 00000000..2848dcee --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddNewAnnotation.java @@ -0,0 +1,21 @@ +package io.lionweb.api.bulk.test.store; + +import org.junit.Test; + +public class TestAddNewAnnotation extends ATestStore { + @Test + public void updateFullPartition() { + test( + "add-new-annotation/Disk-add-new-annotation-partition.json", + "add-new-annotation/Disk-add-new-annotation-partition.json" + ); + } + + @Test + public void updateTwoNodes() { + test( + "add-new-annotation/Disk-add-new-annotation-partition.json", + "add-new-annotation/Disk-add-new-annotation-two-nodes.json" + ); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddNewNode.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddNewNode.java new file mode 100644 index 00000000..891da558 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddNewNode.java @@ -0,0 +1,23 @@ +package io.lionweb.api.bulk.test.store; + +import org.junit.Ignore; +import org.junit.Test; + +@Ignore("Crashes Lionweb-repository on second run") +public class TestAddNewNode extends ATestStore { + @Test + public void updateFullPartition() { + test( + "add-new-nodes/Disk-add-new-nodes-partition.json", + "add-new-nodes/Disk-add-new-nodes-partition.json" + ); + } + + @Test + public void updateSingleNode() { + test( + "add-new-nodes/Disk-add-new-nodes-partition.json", + "add-new-nodes/Disk-add-new-nodes-single-node.json" + ); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddNewProperty.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddNewProperty.java new file mode 100644 index 00000000..dd04a59b --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddNewProperty.java @@ -0,0 +1,23 @@ +package io.lionweb.api.bulk.test.store; + +import org.junit.Ignore; +import org.junit.Test; + +@Ignore("Leaves residual data in lionweb-repository, influencing other tests") +public class TestAddNewProperty extends ATestStore { + @Test + public void updateFullPartition() { + test( + "add-new-property-with-value/Disk-Property-add-property-partition.json", + "add-new-property-with-value/Disk-Property-add-property-partition.json" + ); + } + + @Test + public void updateSingleNode() { + test( + "add-new-property-with-value/Disk-Property-add-property-partition.json", + "add-new-property-with-value/Disk-Property-add-property-single-node.json" + ); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddReference.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddReference.java new file mode 100644 index 00000000..810f1ea5 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestAddReference.java @@ -0,0 +1,21 @@ +package io.lionweb.api.bulk.test.store; + +import org.junit.Test; + +public class TestAddReference extends ATestStore { + @Test + public void updateFullPartition() { + test( + "add-reference/Disk_add-reference-partition.json", + "add-reference/Disk_add-reference-partition.json" + ); + } + + @Test + public void updateSingleNode() { + test( + "add-reference/Disk_add-reference-partition.json", + "add-reference/Disk_add-reference-single-node.json" + ); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestChangePropertyValue.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestChangePropertyValue.java new file mode 100644 index 00000000..6d99e9d2 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestChangePropertyValue.java @@ -0,0 +1,21 @@ +package io.lionweb.api.bulk.test.store; + +import org.junit.Test; + +public class TestChangePropertyValue extends ATestStore { + @Test + public void updateFullPartition() { + test( + "change-property-value/Disk_Property_value_changed-partition.json", + "change-property-value/Disk_Property_value_changed-partition.json" + ); + } + + @Test + public void updateNode3() { + test( + "change-property-value/Disk_Property_value_changed-partition.json", + "change-property-value/Disk_Property_value_changed-single-node.json" + ); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestMoveChild.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestMoveChild.java new file mode 100644 index 00000000..6cdd0631 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestMoveChild.java @@ -0,0 +1,37 @@ +package io.lionweb.api.bulk.test.store; + +import org.junit.Test; + +public class TestMoveChild extends ATestStore { + @Test + public void updateFullPartition() { + test( + "move-child/Disk-move-child-partition.json", + "move-child/Disk-move-child-partition.json" + ); + } + + @Test + public void updateNode5() { + test( + "move-child/Disk-move-child-partition.json", + "move-child/Disk-move-child-single-node.json" + ); + } + + @Test + public void updateNodes5And4() { + test( + "move-child/Disk-move-child-partition.json", + "move-child/Disk-move-child-two-nodes.json" + ); + } + + @Test + public void updateNodes5And9() { + test( + "move-child/Disk-move-child-partition.json", + "move-child/Disk-move-child-two-nodes-2.json" + ); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRemoveAnnotation.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRemoveAnnotation.java new file mode 100644 index 00000000..1ba43e24 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRemoveAnnotation.java @@ -0,0 +1,21 @@ +package io.lionweb.api.bulk.test.store; + +import org.junit.Test; + +public class TestRemoveAnnotation extends ATestStore { + @Test + public void updateFullPartition() { + test( + "remove-annotation/Disk-remove-annotation-partition.json", + "remove-annotation/Disk-remove-annotation-partition.json" + ); + } + + @Test + public void updateSingleNode() { + test( + "remove-annotation/Disk-remove-annotation-partition.json", + "remove-annotation/Disk-remove-annotation-single-node.json" + ); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRemoveChild.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRemoveChild.java new file mode 100644 index 00000000..2e34f823 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRemoveChild.java @@ -0,0 +1,21 @@ +package io.lionweb.api.bulk.test.store; + +import org.junit.Test; + +public class TestRemoveChild extends ATestStore { + @Test + public void updateFullPartition() { + test( + "remove-child/Disk-remove-child-partition.json", + "remove-child/Disk-remove-child-partition.json" + ); + } + + @Test + public void updateNode3() { + test( + "remove-child/Disk-remove-child-partition.json", + "remove-child/Disk-remove-child-single-node.json" + ); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRemoveReference.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRemoveReference.java new file mode 100644 index 00000000..5a247f03 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRemoveReference.java @@ -0,0 +1,21 @@ +package io.lionweb.api.bulk.test.store; + +import org.junit.Test; + +public class TestRemoveReference extends ATestStore { + @Test + public void updateFullPartition() { + test( + "remove-reference/Disk-remove-reference-partition.json", + "remove-reference/Disk-remove-reference-partition.json" + ); + } + + @Test + public void updateSingleNode() { + test( + "remove-reference/Disk-remove-reference-partition.json", + "remove-reference/Disk-remove-reference-single-node.json" + ); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestReorderAnnotations.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestReorderAnnotations.java new file mode 100644 index 00000000..ac7f5d21 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestReorderAnnotations.java @@ -0,0 +1,21 @@ +package io.lionweb.api.bulk.test.store; + +import org.junit.Test; + +public class TestReorderAnnotations extends ATestStore { + @Test + public void updateFullPartition() { + test( + "reorder-annotations/reorder-annotations-partition.json", + "reorder-annotations/reorder-annotations-partition.json" + ); + } + + @Test + public void updateSingleNode() { + test( + "reorder-annotations/reorder-annotations-partition.json", + "reorder-annotations/reorder-annotations-single-node.json" + ); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestReorderReferenceTargets.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestReorderReferenceTargets.java new file mode 100644 index 00000000..b7db4d84 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestReorderReferenceTargets.java @@ -0,0 +1,21 @@ +package io.lionweb.api.bulk.test.store; + +import org.junit.Test; + +public class TestReorderReferenceTargets extends ATestStore { + @Test + public void updateFullPartition() { + test( + "reorder-reference-targets/reorder-reference-targets-partition.json", + "reorder-reference-targets/reorder-reference-targets-partition.json" + ); + } + + @Test + public void updateSingleNode() { + test( + "reorder-reference-targets/reorder-reference-targets-partition.json", + "reorder-reference-targets/reorder-reference-targets-single-node.json" + ); + } +} diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRorderChildren.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRorderChildren.java new file mode 100644 index 00000000..1e8ebbf5 --- /dev/null +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/TestRorderChildren.java @@ -0,0 +1,21 @@ +package io.lionweb.api.bulk.test.store; + +import org.junit.Test; + +public class TestRorderChildren extends ATestStore { + @Test + public void updateFullPartition() { + test( + "reorder-children/reorder-children-partition.json", + "reorder-children/reorder-children-partition.json" + ); + } + + @Test + public void updateSingleNode() { + test( + "reorder-children/reorder-children-partition.json", + "reorder-children/reorder-children-single-node.json" + ); + } +} diff --git a/bulk-api/src/test/resources/Disk_A.json b/bulk-api/src/test/resources/Disk_A.json new file mode 100644 index 00000000..04bbf2df --- /dev/null +++ b/bulk-api/src/test/resources/Disk_A.json @@ -0,0 +1,528 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk_A" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-root-key" + }, + "children": [ + "ID-3" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-4", + "ID-5", + "ID-6", + "ID-7" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + }, + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-9", + "ID-10" + ] + } + ], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [ + { + "resolveInfo": null, + "reference": "ID-10" + }, + { + "resolveInfo": null, + "reference": "ID-8" + } + ] + } + ], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-8", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-c" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-11", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-12", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-13", + "ID-14", + "ID-15" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-13", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b--i" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-14", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-ii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-15", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-iii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-6", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-3" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [ + "ANN-1", + "ANN-9", + "ANN-10" + ], + "parent": "ID-3" + }, + { + "id": "ANN-1", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [], + "references": [], + "annotations": [], + "parent": "ID-7" + } + ] +} diff --git a/bulk-api/src/test/resources/add-new-annotation/Disk-add-new-annotation-partition.json b/bulk-api/src/test/resources/add-new-annotation/Disk-add-new-annotation-partition.json new file mode 100644 index 00000000..d017f6ee --- /dev/null +++ b/bulk-api/src/test/resources/add-new-annotation/Disk-add-new-annotation-partition.json @@ -0,0 +1,516 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk_A" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-root-key" + }, + "children": [ + "ID-3" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-4", + "ID-5", + "ID-6", + "ID-7" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + }, + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-9", + "ID-10" + ] + } + ], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [ + { + "resolveInfo": null, + "reference": "ID-10" + }, + { + "resolveInfo": null, + "reference": "ID-8" + } + ] + } + ], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-8", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-c" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-11", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-12", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-13", + "ID-14", + "ID-15" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-13", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b--i" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-14", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-ii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-15", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-iii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-6", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-3" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [ + "ANN-1", + "ANN-2" + ], + "parent": "ID-3" + }, + { + "id": "ANN-1", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + } + ] +} diff --git a/bulk-api/src/test/resources/add-new-annotation/Disk-add-new-annotation-two-nodes.json b/bulk-api/src/test/resources/add-new-annotation/Disk-add-new-annotation-two-nodes.json new file mode 100644 index 00000000..bb285df8 --- /dev/null +++ b/bulk-api/src/test/resources/add-new-annotation/Disk-add-new-annotation-two-nodes.json @@ -0,0 +1,62 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [ + "ANN-1", + "ANN-2" + ], + "parent": "ID-3" + }, + { + "id": "ANN-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [], + "references": [], + "annotations": [], + "parent": "ID-7" + } + ] +} diff --git a/bulk-api/src/test/resources/add-new-nodes/Disk-add-new-nodes-partition.json b/bulk-api/src/test/resources/add-new-nodes/Disk-add-new-nodes-partition.json new file mode 100644 index 00000000..732e8e96 --- /dev/null +++ b/bulk-api/src/test/resources/add-new-nodes/Disk-add-new-nodes-partition.json @@ -0,0 +1,572 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk_A" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-root-key" + }, + "children": [ + "ID-3" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-4", + "ID-5", + "ID-6", + "ID-7" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + }, + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-9", + "ID-10" + ] + } + ], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [ + { + "resolveInfo": null, + "reference": "ID-10" + }, + { + "resolveInfo": null, + "reference": "ID-8" + } + ] + } + ], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-8", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-c" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-11", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-12", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-13", + "ID-14", + "ID-15" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-13", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b--i" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-14", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-ii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-15", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-iii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-6", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-3" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [ + "ANN-1", + "ANN-9", + "ANN-10" + ], + "parent": "ID-3" + }, + { + "id": "ID-20", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-20" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ANN-1" + }, + { + "id": "ANN-1", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-20" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + } + ] +} diff --git a/bulk-api/src/test/resources/add-new-nodes/Disk-add-new-nodes-single-node.json b/bulk-api/src/test/resources/add-new-nodes/Disk-add-new-nodes-single-node.json new file mode 100644 index 00000000..871cd478 --- /dev/null +++ b/bulk-api/src/test/resources/add-new-nodes/Disk-add-new-nodes-single-node.json @@ -0,0 +1,70 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-20", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-20" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ANN-1" + }, + { + "id": "ANN-1", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-20" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-7" + } + ] +} diff --git a/bulk-api/src/test/resources/add-new-property-with-value/Disk-Property-add-property-partition.json b/bulk-api/src/test/resources/add-new-property-with-value/Disk-Property-add-property-partition.json new file mode 100644 index 00000000..444d5d77 --- /dev/null +++ b/bulk-api/src/test/resources/add-new-property-with-value/Disk-Property-add-property-partition.json @@ -0,0 +1,539 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk_A" + }, + { + "property": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "FileSystem-virtual-key" + }, + "value": "true" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-root-key" + }, + "children": [ + "ID-3" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-4", + "ID-5", + "ID-6", + "ID-7" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + }, + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-9", + "ID-10" + ] + } + ], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [ + { + "resolveInfo": null, + "reference": "ID-10" + }, + { + "resolveInfo": null, + "reference": "ID-8" + } + ] + } + ], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-8", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-c" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-11", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-12", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-13", + "ID-14", + "ID-15" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-13", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b--i" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-14", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-ii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-15", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-iii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-6", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-3" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [ + "ANN-1", + "ANN-9", + "ANN-10" + ], + "parent": "ID-3" + }, + { + "id": "ANN-1", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + } + ] +} diff --git a/bulk-api/src/test/resources/add-new-property-with-value/Disk-Property-add-property-single-node.json b/bulk-api/src/test/resources/add-new-property-with-value/Disk-Property-add-property-single-node.json new file mode 100644 index 00000000..8206f08d --- /dev/null +++ b/bulk-api/src/test/resources/add-new-property-with-value/Disk-Property-add-property-single-node.json @@ -0,0 +1,56 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk_A" + }, + { + "property": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "FileSystem-virtual-key" + }, + "value": "true" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-root-key" + }, + "children": [ + "ID-3" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + } + ] +} diff --git a/bulk-api/src/test/resources/add-reference/Disk_add-reference-partition.json b/bulk-api/src/test/resources/add-reference/Disk_add-reference-partition.json new file mode 100644 index 00000000..7333e9ae --- /dev/null +++ b/bulk-api/src/test/resources/add-reference/Disk_add-reference-partition.json @@ -0,0 +1,532 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk_A" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-root-key" + }, + "children": [ + "ID-3" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-4", + "ID-5", + "ID-6", + "ID-7" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + }, + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-9", + "ID-10" + ] + } + ], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [ + { + "resolveInfo": null, + "reference": "ID-10" + }, + { + "resolveInfo": null, + "reference": "ID-8" + }, + { + "resolveInfo": null, + "reference": "ID-3" + } + ] + } + ], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-8", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-c" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-11", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-12", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-13", + "ID-14", + "ID-15" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-13", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b--i" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-14", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-ii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-15", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-iii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-6", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-3" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [ + "ANN-1", + "ANN-9", + "ANN-10" + ], + "parent": "ID-3" + }, + { + "id": "ANN-1", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [], + "references": [], + "annotations": [], + "parent": "ID-7" + } + ] +} diff --git a/bulk-api/src/test/resources/add-reference/Disk_add-reference-single-node.json b/bulk-api/src/test/resources/add-reference/Disk_add-reference-single-node.json new file mode 100644 index 00000000..58bd31db --- /dev/null +++ b/bulk-api/src/test/resources/add-reference/Disk_add-reference-single-node.json @@ -0,0 +1,72 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-9", + "ID-10" + ] + } + ], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [ + { + "resolveInfo": null, + "reference": "ID-10" + }, + { + "resolveInfo": null, + "reference": "ID-8" + }, + { + "resolveInfo": null, + "reference": "ID-3" + } + ] + } + ], + "annotations": [], + "parent": "ID-3" + } + ] +} diff --git a/bulk-api/src/test/resources/change-property-value/Disk_Property_value_changed-partition.json b/bulk-api/src/test/resources/change-property-value/Disk_Property_value_changed-partition.json new file mode 100644 index 00000000..d0577f4d --- /dev/null +++ b/bulk-api/src/test/resources/change-property-value/Disk_Property_value_changed-partition.json @@ -0,0 +1,522 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk_A" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-root-key" + }, + "children": [ + "ID-3" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root-new-value" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-4", + "ID-5", + "ID-6", + "ID-7" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + }, + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-9", + "ID-10" + ] + } + ], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [] + } + ], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-8", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-c" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-11", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-12", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-13", + "ID-14", + "ID-15" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-13", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b--i" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-14", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-ii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-15", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-iii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-6", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-3" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [ + "ANN-1", + "ANN-9", + "ANN-10" + ], + "parent": "ID-3" + }, + { + "id": "ANN-1", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + } + ] +} diff --git a/bulk-api/src/test/resources/change-property-value/Disk_Property_value_changed-single-node.json b/bulk-api/src/test/resources/change-property-value/Disk_Property_value_changed-single-node.json new file mode 100644 index 00000000..fada116c --- /dev/null +++ b/bulk-api/src/test/resources/change-property-value/Disk_Property_value_changed-single-node.json @@ -0,0 +1,51 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root-new-value" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-4", + "ID-5", + "ID-6", + "ID-7" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + } + ] +} diff --git a/bulk-api/src/test/resources/move-child/Disk-move-child-partition.json b/bulk-api/src/test/resources/move-child/Disk-move-child-partition.json new file mode 100644 index 00000000..ffed4fb4 --- /dev/null +++ b/bulk-api/src/test/resources/move-child/Disk-move-child-partition.json @@ -0,0 +1,528 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk_A" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-root-key" + }, + "children": [ + "ID-3" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-4", + "ID-5", + "ID-6", + "ID-7" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + }, + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-10" + ] + } + ], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [ + { + "resolveInfo": null, + "reference": "ID-10" + }, + { + "resolveInfo": null, + "reference": "ID-8" + } + ] + } + ], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-8", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "annotations": [], + "references": [], + "parent": "ID-4" + }, + { + "id": "ID-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-c" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-9", + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-11", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-12", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-13", + "ID-14", + "ID-15" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-13", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b--i" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-14", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-ii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-15", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-iii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-6", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-3" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [ + "ANN-1", + "ANN-9", + "ANN-10" + ], + "parent": "ID-3" + }, + { + "id": "ANN-1", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [], + "references": [], + "annotations": [], + "parent": "ID-7" + } + ] +} diff --git a/bulk-api/src/test/resources/move-child/Disk-move-child-single-node.json b/bulk-api/src/test/resources/move-child/Disk-move-child-single-node.json new file mode 100644 index 00000000..22deeb12 --- /dev/null +++ b/bulk-api/src/test/resources/move-child/Disk-move-child-single-node.json @@ -0,0 +1,50 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-9", + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + } + ] +} diff --git a/bulk-api/src/test/resources/move-child/Disk-move-child-two-nodes-2.json b/bulk-api/src/test/resources/move-child/Disk-move-child-two-nodes-2.json new file mode 100644 index 00000000..87a7c198 --- /dev/null +++ b/bulk-api/src/test/resources/move-child/Disk-move-child-two-nodes-2.json @@ -0,0 +1,81 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-9", + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + } + ] +} diff --git a/bulk-api/src/test/resources/move-child/Disk-move-child-two-nodes.json b/bulk-api/src/test/resources/move-child/Disk-move-child-two-nodes.json new file mode 100644 index 00000000..086f912e --- /dev/null +++ b/bulk-api/src/test/resources/move-child/Disk-move-child-two-nodes.json @@ -0,0 +1,102 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-10" + ] + } + ], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [ + { + "resolveInfo": null, + "reference": "ID-10" + }, + { + "resolveInfo": null, + "reference": "ID-8" + } + ] + } + ], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-9", + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + } + ] +} diff --git a/bulk-api/src/test/resources/remove-annotation/Disk-remove-annotation-partition.json b/bulk-api/src/test/resources/remove-annotation/Disk-remove-annotation-partition.json new file mode 100644 index 00000000..4e0141a7 --- /dev/null +++ b/bulk-api/src/test/resources/remove-annotation/Disk-remove-annotation-partition.json @@ -0,0 +1,485 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk_A" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-root-key" + }, + "children": [ + "ID-3" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-4", + "ID-5", + "ID-6", + "ID-7" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + }, + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-9", + "ID-10" + ] + } + ], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [ + { + "resolveInfo": null, + "reference": "ID-10" + }, + { + "resolveInfo": null, + "reference": "ID-8" + } + ] + } + ], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-8", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-c" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-11", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-12", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-13", + "ID-14", + "ID-15" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-13", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b--i" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-14", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-ii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-15", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-iii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-6", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-3" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + } + ] +} diff --git a/bulk-api/src/test/resources/remove-annotation/Disk-remove-annotation-single-node.json b/bulk-api/src/test/resources/remove-annotation/Disk-remove-annotation-single-node.json new file mode 100644 index 00000000..fca08bf1 --- /dev/null +++ b/bulk-api/src/test/resources/remove-annotation/Disk-remove-annotation-single-node.json @@ -0,0 +1,46 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + } + ] +} diff --git a/bulk-api/src/test/resources/remove-child/Disk-remove-child-partition.json b/bulk-api/src/test/resources/remove-child/Disk-remove-child-partition.json new file mode 100644 index 00000000..933efd7a --- /dev/null +++ b/bulk-api/src/test/resources/remove-child/Disk-remove-child-partition.json @@ -0,0 +1,416 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk_A" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-root-key" + }, + "children": [ + "ID-3" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-5", + "ID-6", + "ID-7" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-9", + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-11", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-12", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-13", + "ID-14", + "ID-15" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-13", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b--i" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-14", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-ii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-15", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-iii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-6", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-3" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [ + "ANN-1", + "ANN-9", + "ANN-10" + ], + "parent": "ID-3" + }, + { + "id": "ANN-1", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + } + ] +} diff --git a/bulk-api/src/test/resources/remove-child/Disk-remove-child-single-node.json b/bulk-api/src/test/resources/remove-child/Disk-remove-child-single-node.json new file mode 100644 index 00000000..33d35590 --- /dev/null +++ b/bulk-api/src/test/resources/remove-child/Disk-remove-child-single-node.json @@ -0,0 +1,85 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-5", + "ID-6", + "ID-7" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-9", + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + } + ] +} diff --git a/bulk-api/src/test/resources/remove-reference/Disk-remove-reference-partition.json b/bulk-api/src/test/resources/remove-reference/Disk-remove-reference-partition.json new file mode 100644 index 00000000..e0232737 --- /dev/null +++ b/bulk-api/src/test/resources/remove-reference/Disk-remove-reference-partition.json @@ -0,0 +1,531 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk_A" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-root-key" + }, + "children": [ + "ID-3" + ] + } + ], + "annotations": [], + "references": [], + "parent": null + }, + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-4", + "ID-5", + "ID-6", + "ID-7" + ] + } + ], + "annotations": [], + "references": [], + "parent": "ID-2" + }, + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-9", + "ID-10" + ] + } + ], + "annotations": [], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [ + { + "resolveInfo": null, + "reference": "ID-10" + }, + { + "resolveInfo": null, + "reference": "ID-8" + } + ] + } + ], + "parent": "ID-3" + }, + { + "id": "ID-8", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "annotations": [], + "references": [], + "parent": "ID-4" + }, + { + "id": "ID-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "annotations": [], + "references": [], + "parent": "ID-4" + }, + { + "id": "ID-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-c" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "annotations": [], + "references": [], + "parent": "ID-4" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-11", + "ID-12" + ] + } + ], + "annotations": [], + "references": [], + "parent": "ID-3" + }, + { + "id": "ID-11", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "annotations": [], + "references": [], + "parent": "ID-5" + }, + { + "id": "ID-12", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-13", + "ID-14", + "ID-15" + ] + } + ], + "annotations": [], + "references": [], + "parent": "ID-5" + }, + { + "id": "ID-13", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b--i" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "annotations": [], + "references": [], + "parent": "ID-12" + }, + { + "id": "ID-14", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-ii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "annotations": [], + "references": [], + "parent": "ID-12" + }, + { + "id": "ID-15", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-iii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "annotations": [], + "references": [], + "parent": "ID-12" + }, + { + "id": "ID-6", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-3" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "annotations": [], + "references": [], + "parent": "ID-3" + }, + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [ + "ANN-1", + "ANN-9", + "ANN-10" + ], + "parent": "ID-3" + }, + { + "id": "ANN-1", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + } + ] +} diff --git a/bulk-api/src/test/resources/remove-reference/Disk-remove-reference-single-node.json b/bulk-api/src/test/resources/remove-reference/Disk-remove-reference-single-node.json new file mode 100644 index 00000000..7d01ec0d --- /dev/null +++ b/bulk-api/src/test/resources/remove-reference/Disk-remove-reference-single-node.json @@ -0,0 +1,50 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-9", + "ID-10" + ] + } + ], + "annotations": [], + "references": [], + "parent": "ID-3" + } + ] +} diff --git a/bulk-api/src/test/resources/reorder-annotations/reorder-annotations-partition.json b/bulk-api/src/test/resources/reorder-annotations/reorder-annotations-partition.json new file mode 100644 index 00000000..04bbf2df --- /dev/null +++ b/bulk-api/src/test/resources/reorder-annotations/reorder-annotations-partition.json @@ -0,0 +1,528 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk_A" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-root-key" + }, + "children": [ + "ID-3" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-4", + "ID-5", + "ID-6", + "ID-7" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + }, + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-9", + "ID-10" + ] + } + ], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [ + { + "resolveInfo": null, + "reference": "ID-10" + }, + { + "resolveInfo": null, + "reference": "ID-8" + } + ] + } + ], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-8", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-c" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-11", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-12", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-13", + "ID-14", + "ID-15" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-13", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b--i" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-14", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-ii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-15", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-iii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-6", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-3" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [ + "ANN-1", + "ANN-9", + "ANN-10" + ], + "parent": "ID-3" + }, + { + "id": "ANN-1", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [], + "references": [], + "annotations": [], + "parent": "ID-7" + } + ] +} diff --git a/bulk-api/src/test/resources/reorder-annotations/reorder-annotations-single-node.json b/bulk-api/src/test/resources/reorder-annotations/reorder-annotations-single-node.json new file mode 100644 index 00000000..e3e19f7c --- /dev/null +++ b/bulk-api/src/test/resources/reorder-annotations/reorder-annotations-single-node.json @@ -0,0 +1,50 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [ + "ANN-1", + "ANN-9", + "ANN-10" + ], + "parent": "ID-3" + } + ] +} diff --git a/bulk-api/src/test/resources/reorder-children/reorder-children-partition.json b/bulk-api/src/test/resources/reorder-children/reorder-children-partition.json new file mode 100644 index 00000000..ef1b695e --- /dev/null +++ b/bulk-api/src/test/resources/reorder-children/reorder-children-partition.json @@ -0,0 +1,531 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk_A" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-root-key" + }, + "children": [ + "ID-3" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-4", + "ID-6", + "ID-7", + "ID-5" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + }, + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-9", + "ID-10" + ] + } + ], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [ + { + "resolveInfo": null, + "reference": "ID-10" + }, + { + "resolveInfo": null, + "reference": "ID-8" + } + ] + } + ], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-8", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-c" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-11", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-12", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-13", + "ID-14", + "ID-15" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-13", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b--i" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-14", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-ii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-15", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-iii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-6", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-3" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [ + "ANN-1", + "ANN-9", + "ANN-10" + ], + "parent": "ID-3" + }, + { + "id": "ANN-1", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + } + ] +} diff --git a/bulk-api/src/test/resources/reorder-children/reorder-children-single-node.json b/bulk-api/src/test/resources/reorder-children/reorder-children-single-node.json new file mode 100644 index 00000000..c1e18f09 --- /dev/null +++ b/bulk-api/src/test/resources/reorder-children/reorder-children-single-node.json @@ -0,0 +1,51 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-4", + "ID-6", + "ID-7", + "ID-5" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + } + ] +} diff --git a/bulk-api/src/test/resources/reorder-reference-targets/reorder-reference-targets-partition.json b/bulk-api/src/test/resources/reorder-reference-targets/reorder-reference-targets-partition.json new file mode 100644 index 00000000..7b7d6dd6 --- /dev/null +++ b/bulk-api/src/test/resources/reorder-reference-targets/reorder-reference-targets-partition.json @@ -0,0 +1,531 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-2", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "Disk_A" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Disk-root-key" + }, + "children": [ + "ID-3" + ] + } + ], + "references": [], + "annotations": [], + "parent": null + }, + { + "id": "ID-3", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "root" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-4", + "ID-5", + "ID-6", + "ID-7" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-2" + }, + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-9", + "ID-10" + ] + } + ], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [ + { + "resolveInfo": null, + "reference": "ID-8" + }, + { + "resolveInfo": null, + "reference": "ID-10" + } + ] + } + ], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-8", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1-c" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-4" + }, + { + "id": "ID-5", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-11", + "ID-12" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-11", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-a" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-12", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-13", + "ID-14", + "ID-15" + ] + } + ], + "references": [], + "annotations": [], + "parent": "ID-5" + }, + { + "id": "ID-13", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b--i" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-14", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-ii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-15", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-2-b-iii" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-12" + }, + { + "id": "ID-6", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-3" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [], + "parent": "ID-3" + }, + { + "id": "ID-7", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-4" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [] + } + ], + "references": [], + "annotations": [ + "ANN-1", + "ANN-9", + "ANN-10" + ], + "parent": "ID-3" + }, + { + "id": "ANN-1", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-9", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + }, + { + "id": "ANN-10", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [], + "containments": [ + ], + "references": [], + "annotations": [], + "parent": "ID-7" + } + ] +} diff --git a/bulk-api/src/test/resources/reorder-reference-targets/reorder-reference-targets-single-node.json b/bulk-api/src/test/resources/reorder-reference-targets/reorder-reference-targets-single-node.json new file mode 100644 index 00000000..09b75e6d --- /dev/null +++ b/bulk-api/src/test/resources/reorder-reference-targets/reorder-reference-targets-single-node.json @@ -0,0 +1,68 @@ +{ + "serializationFormatVersion": "2023.1", + "languages": [ + { + "key": "-default-key-FileSystem", + "version": "2023.1" + }, + { + "key": "LionCore-builtins", + "version": "2023.1" + } + ], + "nodes": [ + { + "id": "ID-4", + "classifier": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-key" + }, + "properties": [ + { + "property": { + "language": "LionCore-builtins", + "version": "2023.1", + "key": "LionCore-builtins-INamed-name" + }, + "value": "folder-1" + } + ], + "containments": [ + { + "containment": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-listing-key" + }, + "children": [ + "ID-8", + "ID-9", + "ID-10" + ] + } + ], + "references": [ + { + "reference": { + "language": "-default-key-FileSystem", + "version": "2023.1", + "key": "Folder-linked-key" + }, + "targets": [ + { + "resolveInfo": null, + "reference": "ID-8" + }, + { + "resolveInfo": null, + "reference": "ID-10" + } + ] + } + ], + "annotations": [], + "parent": "ID-3" + } + ] +} From e9cc53361d838b16727ce11331aed48648803a0f Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Wed, 24 Jan 2024 20:43:32 +0100 Subject: [PATCH 11/14] moved loadResource() test helper method up in hierarchy --- .../io/lionweb/api/bulk/test/ATestBulk.java | 37 ++++++++++++++++--- .../api/bulk/test/store/ATestStore.java | 26 +------------ 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/ATestBulk.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/ATestBulk.java index 85f6661f..ab56f7d0 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/ATestBulk.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/ATestBulk.java @@ -1,15 +1,40 @@ package io.lionweb.api.bulk.test; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.google.gson.stream.JsonReader; import io.lionweb.api.bulk.IBulk; import io.lionweb.api.bulk.lowlevel.IBulkLowlevel; +import io.lionweb.lioncore.java.serialization.LowLevelJsonSerialization; +import io.lionweb.lioncore.java.serialization.data.SerializedChunk; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; public abstract class ATestBulk { - protected IBulk getBulk() { - return BulkApiProvider.getInstance().getBulk(); - } + protected IBulk getBulk() { + return BulkApiProvider.getInstance().getBulk(); + } + + protected IBulkLowlevel getBulkLowlevel() { + return BulkApiProvider.getInstance().getBulkLowlevel(); + } - protected IBulkLowlevel getBulkLowlevel() { - return BulkApiProvider.getInstance().getBulkLowlevel(); - } + protected SerializedChunk loadResource(String resourcePath) { + SerializedChunk chunk; + Class aClass = this.getClass(); + try (InputStream is = aClass.getResourceAsStream("/" + resourcePath)) { + LowLevelJsonSerialization jsonSerialization = new LowLevelJsonSerialization(); + InputStreamReader reader = new InputStreamReader(is); + JsonReader json = new JsonReader(reader); + json.setLenient(true); + JsonElement jsonElement = JsonParser.parseReader(json); + chunk = jsonSerialization.deserializeSerializationBlock(jsonElement); + } catch (IOException e) { + throw new RuntimeException(e); + } + return chunk; + } } diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/ATestStore.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/ATestStore.java index 30e2912e..a05b4664 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/ATestStore.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/store/ATestStore.java @@ -1,18 +1,10 @@ package io.lionweb.api.bulk.test.store; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; -import com.google.gson.stream.JsonReader; import io.lionweb.api.bulk.StoreMode; import io.lionweb.api.bulk.test.ATestBulk; -import io.lionweb.lioncore.java.serialization.LowLevelJsonSerialization; -import io.lionweb.lioncore.java.serialization.data.SerializedChunk; import io.lionweb.json.sorted.SortedSerializedChunk; import org.junit.Before; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.util.List; import static org.junit.Assert.assertEquals; @@ -23,22 +15,6 @@ public void initDb() { getBulk().store(loadResource("Disk_A.json"), StoreMode.REPLACE); } - protected SerializedChunk loadResource(String resourcePath) { - SerializedChunk chunk; - Class aClass = this.getClass(); - try (InputStream is = aClass.getResourceAsStream("/" + resourcePath)) { - LowLevelJsonSerialization jsonSerialization = new LowLevelJsonSerialization(); - InputStreamReader reader = new InputStreamReader(is); - JsonReader json = new JsonReader(reader); - json.setLenient(true); - JsonElement jsonElement = JsonParser.parseReader(json); - chunk = jsonSerialization.deserializeSerializationBlock(jsonElement); - } catch (IOException e) { - throw new RuntimeException(e); - } - return chunk; - } - protected void test(String originalJsonResource, String changesResource) { getBulk().store(loadResource(changesResource), StoreMode.REPLACE); @@ -46,4 +22,4 @@ protected void test(String originalJsonResource, String changesResource) { SortedSerializedChunk actual = new SortedSerializedChunk(getBulk().retrieve(List.of("ID-2"), null)); assertEquals(expected, actual); } -} +} \ No newline at end of file From 29116bd56cca4eb8f5a1b577af43aa79b64b19a3 Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Wed, 24 Jan 2024 20:43:55 +0100 Subject: [PATCH 12/14] make retrieve tests properly initialize the repository --- .../io/lionweb/api/bulk/test/retrieve/ATestRetrieve.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/ATestRetrieve.java b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/ATestRetrieve.java index 029c5e74..9f2caca1 100644 --- a/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/ATestRetrieve.java +++ b/bulk-api/src/test/java/io/lionweb/api/bulk/test/retrieve/ATestRetrieve.java @@ -1,6 +1,12 @@ package io.lionweb.api.bulk.test.retrieve; +import io.lionweb.api.bulk.StoreMode; import io.lionweb.api.bulk.test.ATestBulk; +import org.junit.Before; public abstract class ATestRetrieve extends ATestBulk { + @Before + public void initDb() { + getBulk().store(loadResource("retrieve-baseline.json"), StoreMode.REPLACE); + } } From 7cda7a8c479e25cb14eb08dbea268bdddb530c39 Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Wed, 24 Jan 2024 20:44:12 +0100 Subject: [PATCH 13/14] fixed node ids in retrieve-baseline.json --- .../src/test/resources/retrieve-baseline.json | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/bulk-api/src/test/resources/retrieve-baseline.json b/bulk-api/src/test/resources/retrieve-baseline.json index 20f9c270..00f58fe1 100644 --- a/bulk-api/src/test/resources/retrieve-baseline.json +++ b/bulk-api/src/test/resources/retrieve-baseline.json @@ -12,7 +12,7 @@ ], "nodes": [ { - "id": "3783922071925855294", + "id": "partition-id", "classifier": { "language": "FileSystem-key", "version": "1", @@ -70,13 +70,13 @@ }, "children": [ "3783922071929604110", - "3783922071925855296" + "midnode-id" ] } ], "references": [], "annotations": [], - "parent": "3783922071925855294" + "parent": "partition-id" }, { "id": "3783922071929604110", @@ -104,7 +104,7 @@ }, "children": [ "3783922071929604060", - "3783922071925855302" + "leaf-id" ] } ], @@ -135,7 +135,7 @@ "parent": "3783922071929604110" }, { - "id": "3783922071925855302", + "id": "leaf-id", "classifier": { "language": "FileSystem-key", "version": "1", @@ -157,7 +157,7 @@ "parent": "3783922071929604110" }, { - "id": "3783922071925855296", + "id": "midnode-id", "classifier": { "language": "FileSystem-key", "version": "1", @@ -210,7 +210,7 @@ "containments": [], "references": [], "annotations": [], - "parent": "3783922071925855296" + "parent": "midnode-id" }, { "id": "3783922071929604254", @@ -243,7 +243,7 @@ ], "references": [], "annotations": [], - "parent": "3783922071925855296" + "parent": "midnode-id" }, { "id": "3783922071929604312", @@ -301,7 +301,7 @@ "parent": "3783922071929604312" }, { - "id": "3783922071925855305", + "id": "other-partition-id", "classifier": { "language": "FileSystem-key", "version": "1", @@ -325,7 +325,7 @@ "key": "Disk-root-key" }, "children": [ - "3783922071925855307" + "other-midnode-id" ] } ], @@ -334,7 +334,7 @@ "parent": null }, { - "id": "3783922071925855307", + "id": "other-midnode-id", "classifier": { "language": "FileSystem-key", "version": "1", @@ -358,17 +358,17 @@ "key": "Folder-listing-key" }, "children": [ - "3783922071925855326", - "3783922071925855313" + "other-leaf-id", + "third-midnode-id" ] } ], "references": [], "annotations": [], - "parent": "3783922071925855305" + "parent": "other-partition-id" }, { - "id": "3783922071925855326", + "id": "other-leaf-id", "classifier": { "language": "FileSystem-key", "version": "1", @@ -387,10 +387,10 @@ "containments": [], "references": [], "annotations": [], - "parent": "3783922071925855307" + "parent": "other-midnode-id" }, { - "id": "3783922071925855313", + "id": "third-midnode-id", "classifier": { "language": "FileSystem-key", "version": "1", @@ -414,16 +414,16 @@ "key": "Folder-listing-key" }, "children": [ - "3783922071925855319" + "third-leaf-id" ] } ], "references": [], "annotations": [], - "parent": "3783922071925855307" + "parent": "other-midnode-id" }, { - "id": "3783922071925855319", + "id": "third-leaf-id", "classifier": { "language": "FileSystem-key", "version": "1", @@ -442,7 +442,7 @@ "containments": [], "references": [], "annotations": [], - "parent": "3783922071925855313" + "parent": "third-midnode-id" } ] } \ No newline at end of file From cb7639629f606d1fccfcb255bd751abfe49d31b8 Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Fri, 26 Jan 2024 15:32:33 +0100 Subject: [PATCH 14/14] copied newer reference json from lw-repo --- .../Disk-add-new-nodes-partition.json | 11 +---- ...Disk_Property_value_changed-partition.json | 11 +---- .../Disk-remove-reference-partition.json | 42 ++++++------------- 3 files changed, 14 insertions(+), 50 deletions(-) diff --git a/bulk-api/src/test/resources/add-new-nodes/Disk-add-new-nodes-partition.json b/bulk-api/src/test/resources/add-new-nodes/Disk-add-new-nodes-partition.json index 732e8e96..04391b57 100644 --- a/bulk-api/src/test/resources/add-new-nodes/Disk-add-new-nodes-partition.json +++ b/bulk-api/src/test/resources/add-new-nodes/Disk-add-new-nodes-partition.json @@ -502,16 +502,7 @@ "value": "folder-20" } ], - "containments": [ - { - "containment": { - "language": "-default-key-FileSystem", - "version": "2023.1", - "key": "Folder-listing-key" - }, - "children": [] - } - ], + "containments": [], "references": [], "annotations": [], "parent": "ANN-1" diff --git a/bulk-api/src/test/resources/change-property-value/Disk_Property_value_changed-partition.json b/bulk-api/src/test/resources/change-property-value/Disk_Property_value_changed-partition.json index d0577f4d..8f42c5dc 100644 --- a/bulk-api/src/test/resources/change-property-value/Disk_Property_value_changed-partition.json +++ b/bulk-api/src/test/resources/change-property-value/Disk_Property_value_changed-partition.json @@ -111,16 +111,7 @@ ] } ], - "references": [ - { - "reference": { - "language": "-default-key-FileSystem", - "version": "2023.1", - "key": "Folder-linked-key" - }, - "targets": [] - } - ], + "references": [], "annotations": [], "parent": "ID-3" }, diff --git a/bulk-api/src/test/resources/remove-reference/Disk-remove-reference-partition.json b/bulk-api/src/test/resources/remove-reference/Disk-remove-reference-partition.json index e0232737..19c1da66 100644 --- a/bulk-api/src/test/resources/remove-reference/Disk-remove-reference-partition.json +++ b/bulk-api/src/test/resources/remove-reference/Disk-remove-reference-partition.json @@ -40,8 +40,8 @@ ] } ], - "annotations": [], "references": [], + "annotations": [], "parent": null }, { @@ -76,8 +76,8 @@ ] } ], - "annotations": [], "references": [], + "annotations": [], "parent": "ID-2" }, { @@ -111,26 +111,8 @@ ] } ], + "references": [], "annotations": [], - "references": [ - { - "reference": { - "language": "-default-key-FileSystem", - "version": "2023.1", - "key": "Folder-linked-key" - }, - "targets": [ - { - "resolveInfo": null, - "reference": "ID-10" - }, - { - "resolveInfo": null, - "reference": "ID-8" - } - ] - } - ], "parent": "ID-3" }, { @@ -160,8 +142,8 @@ "children": [] } ], - "annotations": [], "references": [], + "annotations": [], "parent": "ID-4" }, { @@ -191,8 +173,8 @@ "children": [] } ], - "annotations": [], "references": [], + "annotations": [], "parent": "ID-4" }, { @@ -222,8 +204,8 @@ "children": [] } ], - "annotations": [], "references": [], + "annotations": [], "parent": "ID-4" }, { @@ -287,8 +269,8 @@ "children": [] } ], - "annotations": [], "references": [], + "annotations": [], "parent": "ID-5" }, { @@ -322,8 +304,8 @@ ] } ], - "annotations": [], "references": [], + "annotations": [], "parent": "ID-5" }, { @@ -353,8 +335,8 @@ "children": [] } ], - "annotations": [], "references": [], + "annotations": [], "parent": "ID-12" }, { @@ -384,8 +366,8 @@ "children": [] } ], - "annotations": [], "references": [], + "annotations": [], "parent": "ID-12" }, { @@ -415,8 +397,8 @@ "children": [] } ], - "annotations": [], "references": [], + "annotations": [], "parent": "ID-12" }, { @@ -446,8 +428,8 @@ "children": [] } ], - "annotations": [], "references": [], + "annotations": [], "parent": "ID-3" }, {