Skip to content

Commit 9bb4fc3

Browse files
author
brokkoli71
committed
remove duplicate 'id' for v2 compressors in .zarray
1 parent a2ffa6b commit 9bb4fc3

File tree

8 files changed

+59
-19
lines changed

8 files changed

+59
-19
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package dev.zarr.zarrjava.v2;
22

3-
import com.fasterxml.jackson.databind.ObjectMapper;
3+
import com.fasterxml.jackson.databind.ObjectWriter;
44
import dev.zarr.zarrjava.ZarrException;
55
import dev.zarr.zarrjava.store.FilesystemStore;
66
import dev.zarr.zarrjava.store.StoreHandle;
@@ -18,6 +18,7 @@
1818
import java.util.function.Function;
1919
import java.util.stream.Collectors;
2020
import static dev.zarr.zarrjava.v2.Node.makeObjectMapper;
21+
import static dev.zarr.zarrjava.v2.Node.makeObjectWriter;
2122

2223
public class Array extends dev.zarr.zarrjava.core.Array implements Node {
2324

@@ -141,8 +142,8 @@ public static Array create(StoreHandle storeHandle, ArrayMetadata arrayMetadata,
141142
"Trying to create a new array in " + storeHandle + ". But " + metadataHandle
142143
+ " already exists.");
143144
}
144-
ObjectMapper objectMapper = makeObjectMapper();
145-
ByteBuffer metadataBytes = ByteBuffer.wrap(objectMapper.writeValueAsBytes(arrayMetadata));
145+
ObjectWriter objectWriter = makeObjectWriter();
146+
ByteBuffer metadataBytes = ByteBuffer.wrap(objectWriter.writeValueAsBytes(arrayMetadata));
146147
metadataHandle.set(metadataBytes);
147148
return new Array(storeHandle, arrayMetadata);
148149
}

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package dev.zarr.zarrjava.v2;
22

3-
import com.fasterxml.jackson.databind.ObjectMapper;
3+
import com.fasterxml.jackson.databind.ObjectWriter;
44
import dev.zarr.zarrjava.ZarrException;
55
import dev.zarr.zarrjava.store.FilesystemStore;
66
import dev.zarr.zarrjava.store.StoreHandle;
@@ -14,6 +14,7 @@
1414
import java.nio.file.Paths;
1515
import java.util.function.Function;
1616
import static dev.zarr.zarrjava.v2.Node.makeObjectMapper;
17+
import static dev.zarr.zarrjava.v2.Node.makeObjectWriter;
1718

1819
public class Group extends dev.zarr.zarrjava.core.Group implements Node{
1920
public GroupMetadata metadata;
@@ -41,8 +42,8 @@ public static Group open(String path) throws IOException {
4142
public static Group create(
4243
@Nonnull StoreHandle storeHandle, @Nonnull GroupMetadata groupMetadata
4344
) throws IOException {
44-
ObjectMapper objectMapper = makeObjectMapper();
45-
ByteBuffer metadataBytes = ByteBuffer.wrap(objectMapper.writeValueAsBytes(groupMetadata));
45+
ObjectWriter objectWriter = makeObjectWriter();
46+
ByteBuffer metadataBytes = ByteBuffer.wrap(objectWriter.writeValueAsBytes(groupMetadata));
4647
storeHandle.resolve(ZGROUP).set(metadataBytes);
4748
return new Group(storeHandle, groupMetadata);
4849
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.zarr.zarrjava.v2;
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.fasterxml.jackson.databind.ObjectWriter;
45
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
56
import dev.zarr.zarrjava.ZarrException;
67
import dev.zarr.zarrjava.store.FilesystemStore;
@@ -21,7 +22,11 @@ static ObjectMapper makeObjectMapper() {
2122
return objectMapper;
2223
}
2324

24-
/**
25+
static ObjectWriter makeObjectWriter() {
26+
return makeObjectMapper().writerWithDefaultPrettyPrinter();
27+
}
28+
29+
/**
2530
* Opens an existing Zarr array or group at a specified storage location.
2631
*
2732
* @param storeHandle the storage location of the Zarr array

src/main/java/dev/zarr/zarrjava/v2/codec/core/BloscCodec.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.zarr.zarrjava.v2.codec.core;
22

33
import com.fasterxml.jackson.annotation.JsonCreator;
4+
import com.fasterxml.jackson.annotation.JsonIgnore;
45
import com.fasterxml.jackson.annotation.JsonProperty;
56
import com.fasterxml.jackson.core.JsonGenerator;
67
import com.fasterxml.jackson.core.JsonParser;
@@ -22,6 +23,7 @@
2223

2324
public class BloscCodec extends dev.zarr.zarrjava.core.codec.core.BloscCodec implements Codec {
2425

26+
@JsonIgnore
2527
public final String id = "blosc";
2628

2729
@Nonnull

src/main/java/dev/zarr/zarrjava/v2/codec/core/BytesCodec.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package dev.zarr.zarrjava.v2.codec.core;
22

3-
import com.fasterxml.jackson.annotation.JsonCreator;
4-
import com.fasterxml.jackson.annotation.JsonProperty;
5-
import dev.zarr.zarrjava.ZarrException;
63
import dev.zarr.zarrjava.core.ArrayMetadata;
74
import dev.zarr.zarrjava.v2.codec.Codec;
85

@@ -14,9 +11,7 @@ public class BytesCodec extends dev.zarr.zarrjava.core.codec.core.BytesCodec imp
1411
@Nonnull
1512
public final Endian endian;
1613

17-
@JsonCreator
18-
public BytesCodec(
19-
@JsonProperty(value = "endian", defaultValue = "little") Endian endian) {
14+
public BytesCodec(Endian endian) {
2015
this.endian = endian;
2116
}
2217

src/main/java/dev/zarr/zarrjava/v2/codec/core/ZlibCodec.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.zarr.zarrjava.v2.codec.core;
22

33
import com.fasterxml.jackson.annotation.JsonCreator;
4+
import com.fasterxml.jackson.annotation.JsonIgnore;
45
import com.fasterxml.jackson.annotation.JsonProperty;
56
import dev.zarr.zarrjava.ZarrException;
67
import dev.zarr.zarrjava.core.ArrayMetadata;
@@ -16,6 +17,7 @@
1617

1718
public class ZlibCodec extends BytesBytesCodec implements Codec {
1819

20+
@JsonIgnore
1921
public final String id = "zlib";
2022
public final int level;
2123

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

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
11
package dev.zarr.zarrjava;
22

3+
import com.fasterxml.jackson.databind.JsonNode;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
35
import dev.zarr.zarrjava.store.FilesystemStore;
46
import dev.zarr.zarrjava.store.StoreHandle;
5-
import dev.zarr.zarrjava.v2.Array;
6-
import dev.zarr.zarrjava.v2.ArrayMetadata;
7-
import dev.zarr.zarrjava.v2.DataType;
8-
import dev.zarr.zarrjava.v2.Group;
9-
import dev.zarr.zarrjava.v2.Node;
7+
import dev.zarr.zarrjava.v2.*;
108
import org.junit.jupiter.api.Assertions;
119
import org.junit.jupiter.api.Test;
1210
import org.junit.jupiter.params.ParameterizedTest;
1311
import org.junit.jupiter.params.provider.CsvSource;
12+
import org.junit.jupiter.params.provider.MethodSource;
1413
import org.junit.jupiter.params.provider.ValueSource;
1514

15+
import java.io.BufferedReader;
1616
import java.io.IOException;
1717
import java.nio.file.Files;
1818
import java.nio.file.NoSuchFileException;
1919
import java.nio.file.Path;
2020
import java.nio.file.Paths;
21+
import java.util.function.Function;
22+
import java.util.stream.Collectors;
23+
import java.util.stream.Stream;
24+
25+
import static dev.zarr.zarrjava.core.Node.ZARRAY;
2126

2227
public class ZarrV2Test extends ZarrTest {
2328
@ParameterizedTest
@@ -255,4 +260,32 @@ public void testCreateGroup() throws ZarrException, IOException {
255260
Group.create(storeHandleString);
256261
Assertions.assertTrue(Files.exists(Paths.get(storeHandleString).resolve(".zgroup")));
257262
}
263+
264+
265+
static Stream<Function<ArrayMetadataBuilder, ArrayMetadataBuilder>> compressorBuilder() {
266+
return Stream.of(
267+
ArrayMetadataBuilder::withBloscCompressor,
268+
ArrayMetadataBuilder::withZlibCompressor,
269+
b -> b
270+
);
271+
}
272+
273+
@ParameterizedTest
274+
@MethodSource("compressorBuilder")
275+
public void testZarrJsonFormat(Function<ArrayMetadataBuilder, ArrayMetadataBuilder> compressorBuilder) throws ZarrException, IOException {
276+
// regression test: ensure that 'id' keyword of codecs is only written once.
277+
StoreHandle storeHandle = new FilesystemStore(TESTOUTPUT).resolve("testZarrJsonFormatV2").resolve(String.valueOf(compressorBuilder.hashCode()));
278+
ArrayMetadataBuilder builder = Array.metadataBuilder()
279+
.withShape(10, 10)
280+
.withDataType(DataType.UINT8)
281+
.withChunks(6, 6);
282+
builder = compressorBuilder.apply(builder);
283+
Array.create(storeHandle, builder.build());
284+
285+
try (BufferedReader reader = Files.newBufferedReader(storeHandle.resolve(ZARRAY).toPath())) {
286+
String jsonInString = reader.lines().collect(Collectors.joining(System.lineSeparator()));
287+
JsonNode JSON = new ObjectMapper().readTree(jsonInString);
288+
Assertions.assertEquals(JSON.toPrettyString(), jsonInString);
289+
}
290+
}
258291
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.util.stream.Stream;
3737

3838
import static dev.zarr.zarrjava.core.ArrayMetadata.parseFillValue;
39+
import static dev.zarr.zarrjava.core.Node.ZARR_JSON;
3940
import static org.junit.Assert.assertThrows;
4041

4142
public class ZarrV3Test extends ZarrTest {
@@ -624,7 +625,7 @@ public void testZarrJsonFormat(Function<ArrayMetadataBuilder, ArrayMetadataBuild
624625

625626
Array.create(storeHandle, builder.build());
626627

627-
try (BufferedReader reader = Files.newBufferedReader(storeHandle.resolve("zarr.json").toPath())) {
628+
try (BufferedReader reader = Files.newBufferedReader(storeHandle.resolve(ZARR_JSON).toPath())) {
628629
String jsonInString = reader.lines().collect(Collectors.joining(System.lineSeparator()));
629630
JsonNode JSON = new ObjectMapper().readTree(jsonInString);
630631
Assertions.assertEquals(JSON.toPrettyString(), jsonInString);

0 commit comments

Comments
 (0)