Skip to content

Commit 494b01a

Browse files
committed
isolate v2 and v3 with common core.chunkkeyencoding
1 parent 8400124 commit 494b01a

File tree

16 files changed

+87
-64
lines changed

16 files changed

+87
-64
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import dev.zarr.zarrjava.ZarrException;
44
import dev.zarr.zarrjava.utils.MultiArrayUtils;
55
import dev.zarr.zarrjava.utils.Utils;
6-
import dev.zarr.zarrjava.v3.chunkkeyencoding.ChunkKeyEncoding;
6+
import dev.zarr.zarrjava.core.chunkkeyencoding.ChunkKeyEncoding;
77
import ucar.ma2.Array;
88

99
import javax.annotation.Nonnull;
@@ -132,10 +132,10 @@ final class CoreArrayMetadata {
132132

133133
public final long[] shape;
134134
public final int[] chunkShape;
135-
public final dev.zarr.zarrjava.v3.DataType dataType;
135+
public final DataType dataType;
136136
public final Object parsedFillValue;
137137

138-
public CoreArrayMetadata(long[] shape, int[] chunkShape, dev.zarr.zarrjava.v3.DataType dataType,
138+
public CoreArrayMetadata(long[] shape, int[] chunkShape, DataType dataType,
139139
Object parsedFillValue) {
140140
this.shape = shape;
141141
this.chunkShape = chunkShape;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package dev.zarr.zarrjava.core.chunkkeyencoding;
2+
3+
public interface ChunkKeyEncoding {
4+
5+
String[] encodeChunkKey(long[] chunkCoords);
6+
7+
}

src/main/java/dev/zarr/zarrjava/v3/chunkkeyencoding/Separator.java renamed to src/main/java/dev/zarr/zarrjava/core/chunkkeyencoding/Separator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.zarr.zarrjava.v3.chunkkeyencoding;
1+
package dev.zarr.zarrjava.core.chunkkeyencoding;
22

33
import com.fasterxml.jackson.annotation.JsonValue;
44

src/main/java/dev/zarr/zarrjava/core/codec/CodecBuilder.java

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

3-
import dev.zarr.zarrjava.v3.DataType;
3+
import dev.zarr.zarrjava.core.DataType;
44

55
public abstract class CodecBuilder {
66

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

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
import com.fasterxml.jackson.annotation.JsonIgnore;
55
import com.fasterxml.jackson.annotation.JsonProperty;
66
import dev.zarr.zarrjava.ZarrException;
7+
import dev.zarr.zarrjava.core.chunkkeyencoding.ChunkKeyEncoding;
78
import dev.zarr.zarrjava.utils.MultiArrayUtils;
8-
import dev.zarr.zarrjava.v3.chunkkeyencoding.ChunkKeyEncoding;
9-
import dev.zarr.zarrjava.v3.chunkkeyencoding.Separator;
10-
import dev.zarr.zarrjava.v3.chunkkeyencoding.V2ChunkKeyEncoding;
9+
import dev.zarr.zarrjava.core.chunkkeyencoding.Separator;
10+
import dev.zarr.zarrjava.v2.chunkkeyencoding.V2ChunkKeyEncoding;
1111
import dev.zarr.zarrjava.v2.codec.Codec;
1212
import ucar.ma2.Array;
1313

@@ -26,9 +26,8 @@ public class ArrayMetadata implements dev.zarr.zarrjava.core.ArrayMetadata {
2626
public int[] chunks;
2727

2828
@JsonProperty("dtype")
29-
public DataType dataTypeV2;
30-
@JsonIgnore
31-
public final dev.zarr.zarrjava.v3.DataType dataType;
29+
public DataType dataType;
30+
3231
@JsonIgnore
3332
public final Endianness endianness;
3433

@@ -56,7 +55,7 @@ public ArrayMetadata(
5655
@JsonProperty(value = "zarr_format", required = true) int zarrFormat,
5756
@JsonProperty(value = "shape", required = true) long[] shape,
5857
@JsonProperty(value = "chunks", required = true) int[] chunks,
59-
@JsonProperty(value = "dtype", required = true) DataType dataTypeV2,
58+
@JsonProperty(value = "dtype", required = true) DataType dataType,
6059
@Nullable @JsonProperty(value = "fill_value", required = true) Object fillValue, //todo test when null
6160
@JsonProperty(value = "order", required = true) Order order,
6261
@Nullable @JsonProperty(value = "dimension_separator") Separator dimensionSeparator,
@@ -70,9 +69,8 @@ public ArrayMetadata(
7069
}
7170
this.shape = shape;
7271
this.chunks = chunks;
73-
this.dataTypeV2 = dataTypeV2;
74-
this.endianness = dataTypeV2.getEndianness();
75-
this.dataType = dataTypeV2.toV3();
72+
this.dataType = dataType;
73+
this.endianness = dataType.getEndianness();
7674
this.fillValue = fillValue;
7775
this.parsedFillValue = parseFillValue(fillValue, this.dataType);
7876
this.order = order;
@@ -102,7 +100,7 @@ public long[] shape() {
102100
}
103101

104102
@Override
105-
public dev.zarr.zarrjava.v3.DataType dataType() {
103+
public DataType dataType() {
106104
return dataType;
107105
}
108106

@@ -116,7 +114,7 @@ public Array allocateFillValueChunk() {
116114
@Override
117115
public ChunkKeyEncoding chunkKeyEncoding() {
118116
Separator separator = dimensionSeparator == null ? Separator.DOT : dimensionSeparator;
119-
return new V2ChunkKeyEncoding(new V2ChunkKeyEncoding.Configuration(separator));
117+
return new V2ChunkKeyEncoding(separator);
120118
}
121119

122120
@Override

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

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

33
import dev.zarr.zarrjava.ZarrException;
4-
import dev.zarr.zarrjava.v3.chunkkeyencoding.Separator;
4+
import dev.zarr.zarrjava.core.chunkkeyencoding.Separator;
55
import dev.zarr.zarrjava.v2.codec.Codec;
66
import dev.zarr.zarrjava.v2.codec.CodecBuilder;
77

@@ -10,7 +10,7 @@
1010
public class ArrayMetadataBuilder {
1111
long[] shape = null;
1212
int[] chunks = null;
13-
DataType dataTypeV2 = null;
13+
DataType dataType = null;
1414
Order order = Order.C;
1515
Separator dimensionSeparator = Separator.DOT;
1616
Object fillValue = 0;
@@ -25,7 +25,7 @@ protected static ArrayMetadataBuilder fromArrayMetadata(ArrayMetadata arrayMetad
2525
ArrayMetadataBuilder builder = new ArrayMetadataBuilder();
2626
builder.shape = arrayMetadata.shape;
2727
builder.chunks = arrayMetadata.chunks;
28-
builder.dataTypeV2 = arrayMetadata.dataTypeV2;
28+
builder.dataType = arrayMetadata.dataType;
2929
builder.order = arrayMetadata.order;
3030
builder.dimensionSeparator = arrayMetadata.dimensionSeparator;
3131
builder.fillValue = arrayMetadata.parsedFillValue;
@@ -45,13 +45,7 @@ public ArrayMetadataBuilder withChunks(int... chunks) {
4545
}
4646

4747
public ArrayMetadataBuilder withDataType(DataType dataTypeV2) {
48-
this.dataTypeV2 = dataTypeV2;
49-
return this;
50-
}
51-
52-
//TODO remove v3?
53-
public ArrayMetadataBuilder withDataType(dev.zarr.zarrjava.v3.DataType dataType) {
54-
this.dataTypeV2 = DataType.fromDataType(dataType);
48+
this.dataType = dataTypeV2;
5549
return this;
5650
}
5751

@@ -76,10 +70,10 @@ public ArrayMetadataBuilder withFilters(Codec... filters) {
7670
}
7771

7872
public ArrayMetadataBuilder withFilters(Function<CodecBuilder, CodecBuilder> codecBuilder) throws ZarrException {
79-
if (dataTypeV2 == null) {
73+
if (dataType == null) {
8074
throw new IllegalStateException("Please call `withDataType` first.");
8175
}
82-
CodecBuilder nestedCodecBuilder = new CodecBuilder(dataTypeV2.toV3());
76+
CodecBuilder nestedCodecBuilder = new CodecBuilder(dataType);
8377
this.filters = codecBuilder.apply(nestedCodecBuilder)
8478
.build();
8579
return this;
@@ -91,25 +85,17 @@ public ArrayMetadataBuilder withCompressor(Codec compressor) {
9185
}
9286

9387
public ArrayMetadataBuilder withBloscCompressor(String cname, String shuffle, int clevel) {
94-
try {
95-
this.compressor = new CodecBuilder(dataTypeV2.toV3())
88+
this.compressor = new CodecBuilder(dataType)
9689
.withBlosc(cname, shuffle, clevel)
9790
.build()[0];
98-
} catch (ZarrException e) {
99-
throw new RuntimeException(e);
100-
}
101-
return this;
91+
return this;
10292
}
10393

10494
public ArrayMetadataBuilder withZlibCompressor(int level) {
105-
try {
106-
this.compressor = new CodecBuilder(dataTypeV2.toV3())
95+
this.compressor = new CodecBuilder(dataType)
10796
.withZlib(level)
10897
.build()[0];
109-
} catch (ZarrException e) {
110-
throw new RuntimeException(e);
111-
}
112-
return this;
98+
return this;
11399
}
114100

115101
public ArrayMetadata build() throws ZarrException {
@@ -119,14 +105,14 @@ public ArrayMetadata build() throws ZarrException {
119105
if (chunks == null) {
120106
throw new IllegalStateException("Please call `withChunks` first.");
121107
}
122-
if (dataTypeV2 == null) {
108+
if (dataType == null) {
123109
throw new IllegalStateException("Please call `withDataType` first.");
124110
}
125111
return new ArrayMetadata(
126112
2,
127113
shape,
128114
chunks,
129-
dataTypeV2,
115+
dataType,
130116
fillValue,
131117
order,
132118
dimensionSeparator,

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

Lines changed: 0 additions & 5 deletions
This file was deleted.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package dev.zarr.zarrjava.v2.chunkkeyencoding;
2+
3+
import dev.zarr.zarrjava.core.chunkkeyencoding.ChunkKeyEncoding;
4+
import dev.zarr.zarrjava.core.chunkkeyencoding.Separator;
5+
6+
import javax.annotation.Nonnull;
7+
import java.util.Arrays;
8+
import java.util.stream.Collectors;
9+
import java.util.stream.Stream;
10+
11+
public class V2ChunkKeyEncoding implements ChunkKeyEncoding {
12+
13+
public final String name = "v2";
14+
@Nonnull
15+
public final Separator separator;
16+
17+
public V2ChunkKeyEncoding(
18+
@Nonnull Separator separator
19+
) {
20+
this.separator = separator;
21+
}
22+
23+
@Override
24+
public String[] encodeChunkKey(long[] chunkCoords) {
25+
Stream<String> keys = Arrays.stream(chunkCoords)
26+
.mapToObj(Long::toString);
27+
if (separator == Separator.SLASH) {
28+
return keys.toArray(String[]::new);
29+
}
30+
return new String[]{keys.collect(Collectors.joining(this.separator.getValue()))};
31+
}
32+
}
33+

src/main/java/dev/zarr/zarrjava/v2/codec/CodecBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.scalableminds.bloscjava.Blosc;
44
import dev.zarr.zarrjava.ZarrException;
55
import dev.zarr.zarrjava.v2.codec.core.ZlibCodec;
6-
import dev.zarr.zarrjava.v3.DataType;
6+
import dev.zarr.zarrjava.v2.DataType;
77
import dev.zarr.zarrjava.v2.codec.core.*;
88

99
import java.util.ArrayList;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import dev.zarr.zarrjava.v3.chunkgrid.RegularChunkGrid;
66
import dev.zarr.zarrjava.v3.chunkkeyencoding.ChunkKeyEncoding;
77
import dev.zarr.zarrjava.v3.chunkkeyencoding.DefaultChunkKeyEncoding;
8-
import dev.zarr.zarrjava.v3.chunkkeyencoding.Separator;
8+
import dev.zarr.zarrjava.core.chunkkeyencoding.Separator;
99
import dev.zarr.zarrjava.v3.chunkkeyencoding.V2ChunkKeyEncoding;
1010
import dev.zarr.zarrjava.v3.codec.Codec;
1111
import dev.zarr.zarrjava.v3.codec.CodecBuilder;

0 commit comments

Comments
 (0)