Skip to content

Commit baeffa9

Browse files
committed
fix array.setAttributes
1 parent 526a16c commit baeffa9

File tree

8 files changed

+32
-7
lines changed

8 files changed

+32
-7
lines changed

src/main/java/dev/zarr/zarrjava/core/Attributes.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,20 @@
66
import java.util.HashMap;
77
import java.util.List;
88
import java.util.Map;
9+
import java.util.function.Function;
910

1011
public class Attributes extends HashMap<String, Object> {
1112

1213
public Attributes() {
1314
super();
1415
}
1516

17+
public Attributes (Function<Attributes, Attributes> attributeMapper) {
18+
super();
19+
attributeMapper.apply(this);
20+
}
21+
22+
1623
public Attributes(Map<String, Object> attributes) {
1724
super(attributes);
1825
}
@@ -90,7 +97,7 @@ public Attributes getAttributes(String key) {
9097

9198
public <T> T[] getArray(String key, Class<T> clazz) throws ZarrException {
9299
Object value = this.get(key);
93-
if (value instanceof Object[] && ( ((Object[]) value).length == 0 || clazz.isInstance(((Object[]) value)[0]) )) {
100+
if (value instanceof Object[] && (((Object[]) value).length == 0 || clazz.isInstance(((Object[]) value)[0]) )) {
94101
return (T[]) value;
95102
}
96103
if (value instanceof List) {

src/main/java/dev/zarr/zarrjava/v2/Array.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,6 @@ private Array writeMetadata(ArrayMetadata newArrayMetadata) throws ZarrException
191191
* @throws IOException throws IOException if the new metadata cannot be serialized
192192
*/
193193
public Array resize(long[] newShape) throws ZarrException, IOException {
194-
//TODO: test
195194
if (newShape.length != metadata.ndim()) {
196195
throw new IllegalArgumentException(
197196
"'newShape' needs to have rank '" + metadata.ndim() + "'.");
@@ -213,7 +212,7 @@ public Array resize(long[] newShape) throws ZarrException, IOException {
213212
*/
214213
public Array setAttributes(Attributes newAttributes) throws ZarrException, IOException {
215214
ArrayMetadata newArrayMetadata =
216-
ArrayMetadataBuilder.fromArrayMetadata(metadata)
215+
ArrayMetadataBuilder.fromArrayMetadata(metadata, false)
217216
.withAttributes(newAttributes)
218217
.build();
219218
return writeMetadata(newArrayMetadata);

src/main/java/dev/zarr/zarrjava/v2/ArrayMetadataBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ protected ArrayMetadataBuilder() {
2424
}
2525

2626
protected static ArrayMetadataBuilder fromArrayMetadata(ArrayMetadata arrayMetadata) {
27+
return fromArrayMetadata(arrayMetadata, true);
28+
}
29+
30+
protected static ArrayMetadataBuilder fromArrayMetadata(ArrayMetadata arrayMetadata, boolean withAttributes) {
2731
ArrayMetadataBuilder builder = new ArrayMetadataBuilder();
2832
builder.shape = arrayMetadata.shape;
2933
builder.chunks = arrayMetadata.chunks;
@@ -33,6 +37,9 @@ protected static ArrayMetadataBuilder fromArrayMetadata(ArrayMetadata arrayMetad
3337
builder.fillValue = arrayMetadata.parsedFillValue;
3438
builder.filters = arrayMetadata.filters;
3539
builder.compressor = arrayMetadata.compressor;
40+
if (withAttributes) {
41+
builder.attributes = arrayMetadata.attributes;
42+
}
3643
return builder;
3744
}
3845

src/main/java/dev/zarr/zarrjava/v3/Array.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
import java.nio.file.Path;
1313
import java.nio.file.Paths;
1414
import java.util.Arrays;
15-
import java.util.HashMap;
16-
import java.util.Map;
1715
import java.util.function.Function;
1816
import java.util.stream.Collectors;
1917
import javax.annotation.Nonnull;
@@ -217,7 +215,7 @@ public Array resize(long[] newShape) throws ZarrException, IOException {
217215
*/
218216
public Array setAttributes(Attributes newAttributes) throws ZarrException, IOException {
219217
ArrayMetadata newArrayMetadata =
220-
ArrayMetadataBuilder.fromArrayMetadata(metadata)
218+
ArrayMetadataBuilder.fromArrayMetadata(metadata, false)
221219
.withAttributes(newAttributes)
222220
.build();
223221
return writeMetadata(newArrayMetadata);

src/main/java/dev/zarr/zarrjava/v3/ArrayMetadataBuilder.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,22 @@ protected ArrayMetadataBuilder() {
3535
}
3636

3737
protected static ArrayMetadataBuilder fromArrayMetadata(ArrayMetadata arrayMetadata) {
38+
return fromArrayMetadata(arrayMetadata, true);
39+
}
40+
41+
protected static ArrayMetadataBuilder fromArrayMetadata(ArrayMetadata arrayMetadata, boolean withAttributes) {
3842
ArrayMetadataBuilder builder = new ArrayMetadataBuilder();
3943
builder.shape = arrayMetadata.shape;
4044
builder.dataType = arrayMetadata.dataType;
4145
builder.chunkGrid = arrayMetadata.chunkGrid;
4246
builder.chunkKeyEncoding = arrayMetadata.chunkKeyEncoding;
4347
builder.fillValue = arrayMetadata.parsedFillValue;
4448
builder.codecs = arrayMetadata.codecs;
45-
builder.attributes = arrayMetadata.attributes;
4649
builder.dimensionNames = arrayMetadata.dimensionNames;
4750
builder.storageTransformers = arrayMetadata.storageTransformers;
51+
if (withAttributes) {
52+
builder.attributes = arrayMetadata.attributes;
53+
}
4854
return builder;
4955
}
5056

src/test/java/dev/zarr/zarrjava/ZarrTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ protected Attributes defaultTestAttributes() {
6565
put("long_array", new long[]{1, 2, 3});
6666
put("double_array", new double[]{1.0, 2.0, 3.0});
6767
put("float_array", new float[]{1.0f, 2.0f, 3.0f});
68+
put("boolean_array", new boolean[]{true, false, true});
6869
put("nested", new Attributes() {{
6970
put("element", "value");
7071
}});
@@ -96,6 +97,7 @@ protected void assertContainsTestAttributes(Attributes attributes) throws ZarrEx
9697
Assertions.assertArrayEquals(new long[]{1, 2, 3}, attributes.getLongArray("long_array"));
9798
Assertions.assertArrayEquals(new double[]{1, 2, 3}, attributes.getDoubleArray("double_array"));
9899
Assertions.assertArrayEquals(new float[]{1, 2, 3}, attributes.getFloatArray("float_array"));
100+
Assertions.assertArrayEquals(new boolean[]{true, false, true}, attributes.getBooleanArray("boolean_array"));
99101
Assertions.assertEquals("value", attributes.getAttributes("nested").getString("element"));
100102
Assertions.assertArrayEquals(
101103
new Attributes[]{

src/test/java/dev/zarr/zarrjava/ZarrV2Test.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,12 +288,15 @@ public void testSetAndUpdateAttributes() throws IOException, ZarrException {
288288
.withShape(10, 10)
289289
.withDataType(DataType.UINT8)
290290
.withChunks(5, 5)
291+
.withAttributes(new Attributes(b -> b.add("some", "value")))
291292
.build();
292293

293294
Array array = Array.create(storeHandle, arrayMetadata);
295+
Assertions.assertEquals("value", array.metadata().attributes().getString("some"));
294296
array.setAttributes(defaultTestAttributes());
295297
array = Array.open(storeHandle);
296298
assertContainsTestAttributes(array.metadata().attributes());
299+
Assertions.assertNull(array.metadata().attributes().get("some"));
297300

298301
// add attribute
299302
array = array.updateAttributes(b -> b.add("new_attribute", "new_value"));

src/test/java/dev/zarr/zarrjava/ZarrV3Test.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,12 +602,15 @@ public void testSetAndUpdateAttributes() throws IOException, ZarrException {
602602
.withShape(10, 10)
603603
.withDataType(DataType.UINT8)
604604
.withChunkShape(5, 5)
605+
.withAttributes(new Attributes(b -> b.add("some", "value")))
605606
.build();
606607

607608
Array array = Array.create(storeHandle, arrayMetadata);
609+
Assertions.assertEquals("value", array.metadata().attributes().getString("some"));
608610
array.setAttributes(defaultTestAttributes());
609611
array = Array.open(storeHandle);
610612
assertContainsTestAttributes(array.metadata().attributes());
613+
Assertions.assertNull(array.metadata().attributes().get("some"));
611614

612615
// add attribute
613616
array = array.updateAttributes(b -> b.add("new_attribute", "new_value"));

0 commit comments

Comments
 (0)