From ae4517df0d55572b7c1d0c9f7587f7d9b065d36f Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Mon, 21 Apr 2025 12:11:51 +0530 Subject: [PATCH 01/11] Added Getter and Setters for DataSet for backward compatibility of projects which were using com.flipkart domain --- .../engine/DataSetAccessor.java | 4 ++++ .../databuilderframework/model/DataSet.java | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java b/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java index 6da8a55..9e805aa 100644 --- a/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java +++ b/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java @@ -120,6 +120,10 @@ public boolean checkForData(Class clazz) { return checkForData(Utils.name(clazz)); } + public Set keySet() { + return dataSet.keySet(); + } + /** * Get a copy of the underlying data set. */ diff --git a/src/main/java/io/appform/databuilderframework/model/DataSet.java b/src/main/java/io/appform/databuilderframework/model/DataSet.java index 1ce200a..845d486 100644 --- a/src/main/java/io/appform/databuilderframework/model/DataSet.java +++ b/src/main/java/io/appform/databuilderframework/model/DataSet.java @@ -28,6 +28,8 @@ public class DataSet { @NotNull @NotEmpty @JsonProperty + @Getter + @Setter private final Map availableData; private final StampedLock lock = new StampedLock(); @@ -58,6 +60,21 @@ public DataSet add(T data) { return add(Utils.name(data.getClass()), data); } + public DataSet remove(final String dataName) { + return safeWriteOp(() -> { + availableData.remove(dataName); + return DataSet.this; + }); + } + + public DataSet remove(final Class dataClass) { + return safeWriteOp(() -> { + availableData.remove(Utils.name(dataClass)); + return DataSet.this; + }); + } + + public Map filter(final Collection requiredKeys) { if (null == requiredKeys || requiredKeys.isEmpty()) { return Collections.emptyMap(); @@ -103,6 +120,10 @@ public DataSetAccessor accessor() { return accessor(this); } + public Set keySet() { + return availableData.keySet(); + } + private T safeOp(Supplier operation) { val stamp = lock.readLock(); try { From a619c0484528f792eefded9cd682e43139731a70 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Mon, 21 Apr 2025 12:13:52 +0530 Subject: [PATCH 02/11] Updated version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 549cf25..8f00352 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> io.appform.databuilderframework - 1.1.1 + 1.1.2-RC1 4.0.0 databuilderframework From d9fc41c69ac1cfac34444adf35442a86764021bf Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Mon, 21 Apr 2025 12:33:08 +0530 Subject: [PATCH 03/11] Removed keySet() from DataSetAccessor --- .../appform/databuilderframework/engine/DataSetAccessor.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java b/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java index 9e805aa..6da8a55 100644 --- a/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java +++ b/src/main/java/io/appform/databuilderframework/engine/DataSetAccessor.java @@ -120,10 +120,6 @@ public boolean checkForData(Class clazz) { return checkForData(Utils.name(clazz)); } - public Set keySet() { - return dataSet.keySet(); - } - /** * Get a copy of the underlying data set. */ From c4831fbb28ba8c4d82c25c95c7929d70398bceba Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Mon, 21 Apr 2025 14:14:28 +0530 Subject: [PATCH 04/11] Moved to snapshot version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8f00352..29fdecf 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> io.appform.databuilderframework - 1.1.2-RC1 + 1.1.2-SNAPSHOT 4.0.0 databuilderframework From 33c15bcc5f988a0e402658f32ea2d628f5f55535 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Thu, 24 Apr 2025 15:31:29 +0530 Subject: [PATCH 05/11] Removed Getter and Setter for DataSet Map. Creating a copy of keySet() before giving it to external world --- pom.xml | 2 +- .../java/io/appform/databuilderframework/model/DataSet.java | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 7d74a8b..a341a7d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> io.appform.databuilderframework - 1.1.2-SNAPSHOT + 1.1.2 4.0.0 databuilderframework diff --git a/src/main/java/io/appform/databuilderframework/model/DataSet.java b/src/main/java/io/appform/databuilderframework/model/DataSet.java index 845d486..45f3bc6 100644 --- a/src/main/java/io/appform/databuilderframework/model/DataSet.java +++ b/src/main/java/io/appform/databuilderframework/model/DataSet.java @@ -28,8 +28,6 @@ public class DataSet { @NotNull @NotEmpty @JsonProperty - @Getter - @Setter private final Map availableData; private final StampedLock lock = new StampedLock(); @@ -121,7 +119,7 @@ public DataSetAccessor accessor() { } public Set keySet() { - return availableData.keySet(); + return Set.copyOf(availableData.keySet()); } private T safeOp(Supplier operation) { From bcbbd4bc6373ea371faae84a12d82c9b0369910b Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Thu, 24 Apr 2025 15:36:41 +0530 Subject: [PATCH 06/11] Running keySet() under lock --- .../java/io/appform/databuilderframework/model/DataSet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/appform/databuilderframework/model/DataSet.java b/src/main/java/io/appform/databuilderframework/model/DataSet.java index 45f3bc6..65d0fef 100644 --- a/src/main/java/io/appform/databuilderframework/model/DataSet.java +++ b/src/main/java/io/appform/databuilderframework/model/DataSet.java @@ -119,7 +119,7 @@ public DataSetAccessor accessor() { } public Set keySet() { - return Set.copyOf(availableData.keySet()); + return safeOp(() -> Set.copyOf(availableData.keySet())); } private T safeOp(Supplier operation) { From 2bd6d1ef27b8a8dd2232b1c5acc4da7c3f687703 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Fri, 25 Apr 2025 11:10:56 +0530 Subject: [PATCH 07/11] Added test for removal of data --- pom.xml | 2 +- .../databuilderframework/model/DataSet.java | 17 +++------- .../model/DataSetTest.java | 34 +++++++++++++++++++ 3 files changed, 40 insertions(+), 13 deletions(-) create mode 100644 src/test/java/io/appform/databuilderframework/model/DataSetTest.java diff --git a/pom.xml b/pom.xml index a341a7d..9e28d82 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> io.appform.databuilderframework - 1.1.2 + 1.1.2-R-SNAPSHOT 4.0.0 databuilderframework diff --git a/src/main/java/io/appform/databuilderframework/model/DataSet.java b/src/main/java/io/appform/databuilderframework/model/DataSet.java index 65d0fef..1c36868 100644 --- a/src/main/java/io/appform/databuilderframework/model/DataSet.java +++ b/src/main/java/io/appform/databuilderframework/model/DataSet.java @@ -58,21 +58,14 @@ public DataSet add(T data) { return add(Utils.name(data.getClass()), data); } - public DataSet remove(final String dataName) { - return safeWriteOp(() -> { - availableData.remove(dataName); - return DataSet.this; - }); + public Data remove(final String dataName) { + return safeWriteOp(() -> availableData.remove(dataName)); } - public DataSet remove(final Class dataClass) { - return safeWriteOp(() -> { - availableData.remove(Utils.name(dataClass)); - return DataSet.this; - }); + public Data remove(final Class dataClass) { + return safeWriteOp(() -> availableData.remove(Utils.name(dataClass))); } - public Map filter(final Collection requiredKeys) { if (null == requiredKeys || requiredKeys.isEmpty()) { return Collections.emptyMap(); @@ -119,7 +112,7 @@ public DataSetAccessor accessor() { } public Set keySet() { - return safeOp(() -> Set.copyOf(availableData.keySet())); + return safeOp(() -> new HashSet<>(availableData.keySet())); } private T safeOp(Supplier operation) { diff --git a/src/test/java/io/appform/databuilderframework/model/DataSetTest.java b/src/test/java/io/appform/databuilderframework/model/DataSetTest.java new file mode 100644 index 0000000..f5891b3 --- /dev/null +++ b/src/test/java/io/appform/databuilderframework/model/DataSetTest.java @@ -0,0 +1,34 @@ +package io.appform.databuilderframework.model; + +import io.appform.databuilderframework.engine.Utils; +import junit.framework.TestCase; +import org.junit.Test; + +public class DataSetTest extends TestCase { + + public class TestData extends Data { + protected TestData() { + super(Utils.name(TestData.class)); + } + } + + @Test + public void testKeyRemovalFromDataSetKeyExists() { + DataSet ds = new DataSet(); + ds.add(new TestData()); + assertNotNull(ds.get(Utils.name(TestData.class))); + Data removedData = ds.remove(Utils.name(TestData.class)); + assertNotNull(removedData); + assertNull(ds.get(Utils.name(TestData.class))); + } + + @Test + public void testKeyRemovalFromDataSetKeyDoesNotExist() { + DataSet ds = new DataSet(); + assertNull(ds.get(Utils.name(TestData.class))); + assertNull(ds.remove(Utils.name(TestData.class))); + assertNull(ds.get(Utils.name(TestData.class))); + } + + +} \ No newline at end of file From 273c5fe5ddd2eb027c3a02774c57c3d6ccdb90d1 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Fri, 25 Apr 2025 11:11:45 +0530 Subject: [PATCH 08/11] Moved to release version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9e28d82..a341a7d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> io.appform.databuilderframework - 1.1.2-R-SNAPSHOT + 1.1.2 4.0.0 databuilderframework From 684edfc1866cad0f1b03f4fd91dc94f75f5d0e34 Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Fri, 25 Apr 2025 11:15:49 +0530 Subject: [PATCH 09/11] Added test case for removal of data using class --- .../appform/databuilderframework/model/DataSetTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/io/appform/databuilderframework/model/DataSetTest.java b/src/test/java/io/appform/databuilderframework/model/DataSetTest.java index f5891b3..c0020ff 100644 --- a/src/test/java/io/appform/databuilderframework/model/DataSetTest.java +++ b/src/test/java/io/appform/databuilderframework/model/DataSetTest.java @@ -30,5 +30,14 @@ public void testKeyRemovalFromDataSetKeyDoesNotExist() { assertNull(ds.get(Utils.name(TestData.class))); } + @Test + public void testKeyRemovalFromDataSetWithClassAsParameter() { + DataSet ds = new DataSet(); + ds.add(new TestData()); + assertNotNull(ds.get(Utils.name(TestData.class))); + Data removedData = ds.remove(TestData.class); + assertNotNull(removedData); + assertNull(ds.get(Utils.name(TestData.class))); + } } \ No newline at end of file From 40423849e9b3db5bdfe4f4d528a24d2257a0273b Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Fri, 25 Apr 2025 11:35:08 +0530 Subject: [PATCH 10/11] Added test case for keySet() fetch --- .../databuilderframework/model/DataSetTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/test/java/io/appform/databuilderframework/model/DataSetTest.java b/src/test/java/io/appform/databuilderframework/model/DataSetTest.java index c0020ff..ab14aaa 100644 --- a/src/test/java/io/appform/databuilderframework/model/DataSetTest.java +++ b/src/test/java/io/appform/databuilderframework/model/DataSetTest.java @@ -4,6 +4,8 @@ import junit.framework.TestCase; import org.junit.Test; +import java.util.Set; + public class DataSetTest extends TestCase { public class TestData extends Data { @@ -40,4 +42,13 @@ public void testKeyRemovalFromDataSetWithClassAsParameter() { assertNull(ds.get(Utils.name(TestData.class))); } + @Test + public void testKeySetFetch() { + DataSet ds = new DataSet(); + ds.add(new TestData()); + Set dataKeys = ds.keySet(); + assertNotNull(dataKeys); + assertEquals(1, dataKeys.size()); + } + } \ No newline at end of file From 1230b440126dac4edf47293224ea3e765020f9da Mon Sep 17 00:00:00 2001 From: Rishabh Goyal Date: Mon, 28 Apr 2025 13:47:18 +0530 Subject: [PATCH 11/11] Moved to immutable set --- .../java/io/appform/databuilderframework/model/DataSet.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/appform/databuilderframework/model/DataSet.java b/src/main/java/io/appform/databuilderframework/model/DataSet.java index 1c36868..92c0114 100644 --- a/src/main/java/io/appform/databuilderframework/model/DataSet.java +++ b/src/main/java/io/appform/databuilderframework/model/DataSet.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Predicates; import com.google.common.base.Strings; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; import io.appform.databuilderframework.engine.DataSetAccessor; import io.appform.databuilderframework.engine.Utils; @@ -112,7 +113,7 @@ public DataSetAccessor accessor() { } public Set keySet() { - return safeOp(() -> new HashSet<>(availableData.keySet())); + return safeOp(() -> ImmutableSet.copyOf(availableData.keySet())); } private T safeOp(Supplier operation) {