diff --git a/src/main/java/emissary/core/BaseDataObject.java b/src/main/java/emissary/core/BaseDataObject.java index 7166a0939c..b7dae6c039 100755 --- a/src/main/java/emissary/core/BaseDataObject.java +++ b/src/main/java/emissary/core/BaseDataObject.java @@ -462,6 +462,16 @@ public void setData(@Nullable final byte[] newData, final int offset, final int safeUsageChecker.resetCacheThenRecordSnapshot(theData); } + /** + * Checks if the data is defined with a non-zero length. + * + * @return if data is undefined or zero length. + */ + @Override + public boolean isDataEmpty() throws IOException { + return getDataState() == DataState.NO_DATA || getChannelSize() == 0; + } + /** * Convenience method to get the size of the channel or byte array providing access to the data. * diff --git a/src/main/java/emissary/core/IBaseDataObject.java b/src/main/java/emissary/core/IBaseDataObject.java index 0632856272..c778b179d5 100755 --- a/src/main/java/emissary/core/IBaseDataObject.java +++ b/src/main/java/emissary/core/IBaseDataObject.java @@ -60,6 +60,13 @@ enum MergePolicy { */ void setData(final byte[] newData, int offset, int length); + /** + * Checks if the data is defined with a non-zero length. + * + * @return if data is undefined or zero length. + */ + boolean isDataEmpty() throws IOException; + /** * Set the byte channel factory using whichever implementation is providing access to the data. * diff --git a/src/test/java/emissary/core/BaseDataObjectTest.java b/src/test/java/emissary/core/BaseDataObjectTest.java index f6807faabf..a6940b0528 100755 --- a/src/test/java/emissary/core/BaseDataObjectTest.java +++ b/src/test/java/emissary/core/BaseDataObjectTest.java @@ -194,6 +194,17 @@ void testExceptionWhenGettingChannelSize() throws IOException { } } + @Test + void testIsDataEmpty() throws IOException { + final IBaseDataObject nullDataIbdo = new BaseDataObject(); + final IBaseDataObject zeroLengthDataIbdo = new BaseDataObject(new byte[0], "zeroLengthDataIbdo"); + final IBaseDataObject nonZeroLengthDataIbdo = new BaseDataObject(new byte[1], "nonZeroLengthDataIbdo"); + + assertTrue(nullDataIbdo.isDataEmpty()); + assertTrue(zeroLengthDataIbdo.isDataEmpty()); + assertFalse(nonZeroLengthDataIbdo.isDataEmpty()); + } + @Test void testDataLengthBothNull() { BaseDataObject bdo = new BaseDataObject();