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