diff --git a/src/main/java/io/tiledb/java/api/Dimension.java b/src/main/java/io/tiledb/java/api/Dimension.java index 0b6b4899..22752bcb 100644 --- a/src/main/java/io/tiledb/java/api/Dimension.java +++ b/src/main/java/io/tiledb/java/api/Dimension.java @@ -215,6 +215,39 @@ public T getTileExtent() throws TileDBError { return tileExtent; } + /** + * Gets the list of filtes associated with the dimension + * + * @return A FilterList instance + * @throws TileDBError A TileDB exception + */ + public FilterList getFilterList() throws TileDBError { + FilterList filterlist; + SWIGTYPE_p_p_tiledb_filter_list_t filterlistpp = tiledb.new_tiledb_filter_list_tpp(); + try { + ctx.handleError( + tiledb.tiledb_dimension_get_filter_list(ctx.getCtxp(), dimensionp, filterlistpp)); + filterlist = new FilterList(ctx, filterlistpp); + } catch (TileDBError err) { + tiledb.delete_tiledb_filter_list_tpp(filterlistpp); + throw err; + } + return filterlist; + } + + /** + * Sets the Dimension FilterList. + * + * @param filters A TileDB FilterList + * @throws TileDBError A TileDB exception + */ + public Dimension setFilterList(FilterList filters) throws TileDBError { + ctx.handleError( + tiledb.tiledb_dimension_set_filter_list( + ctx.getCtxp(), dimensionp, filters.getFilterListp())); + return this; + } + /** * @return A string representation of the extent. * @throws TileDBError A TileDB exception diff --git a/src/test/java/io/tiledb/java/api/DimensionTest.java b/src/test/java/io/tiledb/java/api/DimensionTest.java index 7c0c6a07..fb4f1a4b 100644 --- a/src/test/java/io/tiledb/java/api/DimensionTest.java +++ b/src/test/java/io/tiledb/java/api/DimensionTest.java @@ -9,11 +9,28 @@ public class DimensionTest { public void testDimension() throws Exception { try (Context ctx = new Context(); Dimension dim = new Dimension<>(ctx, "d1", Integer.class, new Pair<>(1, 10), 10)) { + try (FilterList filterList = new FilterList(ctx)) { + filterList.addFilter(new GzipFilter(ctx, 3)); + filterList.addFilter(new Bzip2Filter(ctx, 1)); + filterList.addFilter(new DoubleDeltaFilter(ctx, -1)); + dim.setFilterList(filterList); + } Assert.assertEquals("d1", dim.getName()); Assert.assertEquals(Datatype.TILEDB_INT32, dim.getType()); Assert.assertEquals((Integer) 10, dim.getTileExtent()); Assert.assertEquals((Integer) 1, dim.getDomain().getFirst()); Assert.assertEquals((Integer) 10, dim.getDomain().getSecond()); + + // Filter List Tests + FilterList filterList = dim.getFilterList(); + Assert.assertEquals(GzipFilter.class, filterList.getFilter(0).getClass()); + Assert.assertEquals(3, ((GzipFilter) filterList.getFilter(0)).getLevel()); + + Assert.assertEquals(Bzip2Filter.class, filterList.getFilter(1).getClass()); + Assert.assertEquals(1, ((Bzip2Filter) filterList.getFilter(1)).getLevel()); + + Assert.assertEquals(DoubleDeltaFilter.class, filterList.getFilter(2).getClass()); + Assert.assertEquals(-1, ((DoubleDeltaFilter) filterList.getFilter(2)).getLevel()); } }