diff --git a/pom.xml b/pom.xml
index 63c4adc..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.1
+ 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 1ce200a..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;
@@ -58,6 +59,14 @@ public DataSet add(T data) {
return add(Utils.name(data.getClass()), data);
}
+ public Data remove(final String dataName) {
+ return safeWriteOp(() -> availableData.remove(dataName));
+ }
+
+ 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();
@@ -103,6 +112,10 @@ public DataSetAccessor accessor() {
return accessor(this);
}
+ public Set keySet() {
+ return safeOp(() -> ImmutableSet.copyOf(availableData.keySet()));
+ }
+
private T safeOp(Supplier operation) {
val stamp = lock.readLock();
try {
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..ab14aaa
--- /dev/null
+++ b/src/test/java/io/appform/databuilderframework/model/DataSetTest.java
@@ -0,0 +1,54 @@
+package io.appform.databuilderframework.model;
+
+import io.appform.databuilderframework.engine.Utils;
+import junit.framework.TestCase;
+import org.junit.Test;
+
+import java.util.Set;
+
+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)));
+ }
+
+ @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)));
+ }
+
+ @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