Skip to content

Commit bb06e80

Browse files
committed
refactor code duplication
1 parent 56644d2 commit bb06e80

File tree

8 files changed

+60
-145
lines changed

8 files changed

+60
-145
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
cache: maven
3030

3131
- name: Set up Python
32-
uses: actions/setup-python@@v5
32+
uses: actions/setup-python@v5
3333
with:
3434
python-version: '3.11'
3535

@@ -41,6 +41,7 @@ jobs:
4141
uv venv && uv init
4242
uv add zarr
4343
uv add zarrita
44+
4445
- name: Download testdata
4546
run: |
4647
mkdir testoutput

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

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

33
import dev.zarr.zarrjava.ZarrException;
4-
import dev.zarr.zarrjava.v3.ArrayMetadata; //TODO remove v3 dependency
4+
import dev.zarr.zarrjava.core.ArrayMetadata;
55

66
public abstract class AbstractCodec implements Codec{
77
protected ArrayMetadata.CoreArrayMetadata arrayMetadata;
Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,51 @@
11
package dev.zarr.zarrjava.core.codec.core;
22

3+
import com.fasterxml.jackson.annotation.JsonValue;
34
import dev.zarr.zarrjava.core.codec.ArrayBytesCodec;
5+
import ucar.ma2.Array;
46

5-
public abstract class BytesCodec extends ArrayBytesCodec {}
7+
import java.nio.ByteBuffer;
8+
import java.nio.ByteOrder;
9+
10+
public abstract class BytesCodec extends ArrayBytesCodec {
11+
protected abstract ByteOrder getByteOrder();
12+
13+
@Override
14+
public Array decode(ByteBuffer chunkBytes) {
15+
chunkBytes.order(getByteOrder());
16+
return Array.factory(arrayMetadata.dataType.getMA2DataType(), arrayMetadata.chunkShape,
17+
chunkBytes);
18+
}
19+
20+
@Override
21+
public ByteBuffer encode(Array chunkArray) {
22+
return chunkArray.getDataAsByteBuffer(getByteOrder());
23+
}
24+
25+
public enum Endian {
26+
LITTLE("little"),
27+
BIG("big");
28+
private final String endian;
29+
30+
Endian(String endian) {
31+
this.endian = endian;
32+
}
33+
34+
@JsonValue
35+
public String getValue() {
36+
return endian;
37+
}
38+
39+
public ByteOrder getByteOrder() {
40+
switch (this) {
41+
case LITTLE:
42+
return ByteOrder.LITTLE_ENDIAN;
43+
case BIG:
44+
return ByteOrder.BIG_ENDIAN;
45+
default:
46+
throw new RuntimeException("Unreachable");
47+
}
48+
}
49+
}
50+
51+
}

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

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

33
import com.fasterxml.jackson.annotation.JsonValue;
4-
import dev.zarr.zarrjava.ZarrException;
54

65
public enum DataType implements dev.zarr.zarrjava.core.DataType {
76
BOOL("b1", Endianness.UNSPECIFIED),
@@ -25,67 +24,10 @@ public enum DataType implements dev.zarr.zarrjava.core.DataType {
2524
this.endianness = endianness;
2625
}
2726

28-
//todo remove?
29-
public static DataType fromDataType(dev.zarr.zarrjava.v3.DataType dataType) {
30-
switch (dataType) {
31-
case BOOL:
32-
return BOOL;
33-
case INT8:
34-
return INT8;
35-
case INT16:
36-
return INT16;
37-
case INT32:
38-
return INT32;
39-
case INT64:
40-
return INT64;
41-
case UINT8:
42-
return UINT8;
43-
case UINT16:
44-
return UINT16;
45-
case UINT32:
46-
return UINT32;
47-
case UINT64:
48-
return UINT64;
49-
case FLOAT32:
50-
return FLOAT32;
51-
case FLOAT64:
52-
return FLOAT64;
53-
default:
54-
throw new IllegalArgumentException("Unsupported DataType: " + dataType);
55-
}
56-
}
57-
5827
public Endianness getEndianness() {
5928
return endianness;
6029
}
6130

62-
//todo remove?
63-
public dev.zarr.zarrjava.v3.DataType toV3() throws ZarrException {
64-
if (this.dtype.equals(BOOL.dtype))
65-
return dev.zarr.zarrjava.v3.DataType.BOOL;
66-
if (this.dtype.equals(INT8.dtype))
67-
return dev.zarr.zarrjava.v3.DataType.INT8;
68-
if (this.dtype.equals(INT16.dtype))
69-
return dev.zarr.zarrjava.v3.DataType.INT16;
70-
if (this.dtype.equals(INT32.dtype))
71-
return dev.zarr.zarrjava.v3.DataType.INT32;
72-
if (this.dtype.equals(INT64.dtype))
73-
return dev.zarr.zarrjava.v3.DataType.INT64;
74-
if (this.dtype.equals(UINT8.dtype))
75-
return dev.zarr.zarrjava.v3.DataType.UINT8;
76-
if (this.dtype.equals(UINT16.dtype))
77-
return dev.zarr.zarrjava.v3.DataType.UINT16;
78-
if (this.dtype.equals(UINT32.dtype))
79-
return dev.zarr.zarrjava.v3.DataType.UINT32;
80-
if (this.dtype.equals(UINT64.dtype))
81-
return dev.zarr.zarrjava.v3.DataType.UINT64;
82-
if (this.dtype.equals(FLOAT32.dtype))
83-
return dev.zarr.zarrjava.v3.DataType.FLOAT32;
84-
if (this.dtype.equals(FLOAT64.dtype))
85-
return dev.zarr.zarrjava.v3.DataType.FLOAT64;
86-
throw new ZarrException("Unknown DataTypeV2: " + this.dtype);
87-
}
88-
8931
@JsonValue
9032
public String getValue() {
9133
return String.format("%s%s", endianness.getValue(), dtype);

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

Lines changed: 3 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,64 +2,25 @@
22

33
import com.fasterxml.jackson.annotation.JsonCreator;
44
import com.fasterxml.jackson.annotation.JsonProperty;
5-
import com.fasterxml.jackson.annotation.JsonValue;
6-
import dev.zarr.zarrjava.ZarrException;
7-
import dev.zarr.zarrjava.v2.ArrayMetadata;
85
import dev.zarr.zarrjava.v2.codec.Codec;
9-
import ucar.ma2.Array;
106

117
import javax.annotation.Nonnull;
12-
import java.nio.ByteBuffer;
138
import java.nio.ByteOrder;
149

15-
// TODO might move some of this to core
1610
public class BytesCodec extends dev.zarr.zarrjava.core.codec.core.BytesCodec implements Codec {
11+
public final String name = "bytes";
1712
@Nonnull
1813
public final Endian endian;
1914

20-
public final String name = "bytes";
21-
2215
@JsonCreator
2316
public BytesCodec(
2417
@JsonProperty(value = "endian", defaultValue = "little") Endian endian) {
2518
this.endian = endian;
2619
}
2720

28-
public Array decode(ByteBuffer chunkBytes) {
29-
chunkBytes.order(endian.getByteOrder());
30-
return Array.factory(arrayMetadata.dataType.getMA2DataType(), arrayMetadata.chunkShape,
31-
chunkBytes);
32-
}
33-
3421
@Override
35-
public ByteBuffer encode(Array chunkArray) {
36-
return chunkArray.getDataAsByteBuffer(endian.getByteOrder());
37-
}
38-
39-
public enum Endian {
40-
LITTLE("little"),
41-
BIG("big");
42-
private final String endian;
43-
44-
Endian(String endian) {
45-
this.endian = endian;
46-
}
47-
48-
@JsonValue
49-
public String getValue() {
50-
return endian;
51-
}
52-
53-
public ByteOrder getByteOrder() {
54-
switch (this) {
55-
case LITTLE:
56-
return ByteOrder.LITTLE_ENDIAN;
57-
case BIG:
58-
return ByteOrder.BIG_ENDIAN;
59-
default:
60-
throw new RuntimeException("Unreachable");
61-
}
62-
}
22+
protected ByteOrder getByteOrder() {
23+
return endian.getByteOrder();
6324
}
6425
}
6526

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import dev.zarr.zarrjava.v3.codec.Codec;
1111
import dev.zarr.zarrjava.v3.codec.CodecBuilder;
1212
import dev.zarr.zarrjava.v3.codec.core.BytesCodec;
13-
import dev.zarr.zarrjava.v3.codec.core.BytesCodec.Endian;
13+
import dev.zarr.zarrjava.core.codec.core.BytesCodec.Endian;
1414

1515
import java.util.HashMap;
1616
import java.util.Map;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import dev.zarr.zarrjava.v3.DataType;
99
import dev.zarr.zarrjava.v3.codec.core.*;
1010
import dev.zarr.zarrjava.v3.codec.core.BytesCodec.Configuration;
11-
import dev.zarr.zarrjava.v3.codec.core.BytesCodec.Endian;
11+
import dev.zarr.zarrjava.core.codec.core.BytesCodec.Endian;
1212

1313
import java.util.ArrayList;
1414
import java.util.Collections;

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

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@
22

33
import com.fasterxml.jackson.annotation.JsonCreator;
44
import com.fasterxml.jackson.annotation.JsonProperty;
5-
import com.fasterxml.jackson.annotation.JsonValue;
65
import dev.zarr.zarrjava.ZarrException;
76
import dev.zarr.zarrjava.v3.codec.Codec;
87
import dev.zarr.zarrjava.v3.ArrayMetadata;
9-
import dev.zarr.zarrjava.core.codec.ArrayBytesCodec;
10-
import java.nio.ByteBuffer;
8+
119
import java.nio.ByteOrder;
1210
import javax.annotation.Nonnull;
13-
import ucar.ma2.Array;
1411

1512
public class BytesCodec extends dev.zarr.zarrjava.core.codec.core.BytesCodec implements Codec {
1613

@@ -29,50 +26,18 @@ public BytesCodec(Endian endian) {
2926
this(new BytesCodec.Configuration(endian));
3027
}
3128

32-
@Override
33-
public Array decode(ByteBuffer chunkBytes) {
34-
chunkBytes.order(configuration.endian.getByteOrder());
35-
return Array.factory(arrayMetadata.dataType.getMA2DataType(), arrayMetadata.chunkShape,
36-
chunkBytes);
37-
}
38-
39-
@Override
40-
public ByteBuffer encode(Array chunkArray) {
41-
return chunkArray.getDataAsByteBuffer(configuration.endian.getByteOrder());
42-
}
43-
4429
@Override
4530
public long computeEncodedSize(long inputByteLength,
4631
ArrayMetadata.CoreArrayMetadata arrayMetadata) throws ZarrException {
4732
return inputByteLength;
4833
}
4934

50-
public enum Endian {
51-
LITTLE("little"),
52-
BIG("big");
53-
private final String endian;
54-
55-
Endian(String endian) {
56-
this.endian = endian;
57-
}
58-
59-
@JsonValue
60-
public String getValue() {
61-
return endian;
62-
}
63-
64-
public ByteOrder getByteOrder() {
65-
switch (this) {
66-
case LITTLE:
67-
return ByteOrder.LITTLE_ENDIAN;
68-
case BIG:
69-
return ByteOrder.BIG_ENDIAN;
70-
default:
71-
throw new RuntimeException("Unreachable");
72-
}
73-
}
35+
@Override
36+
protected ByteOrder getByteOrder() {
37+
return configuration.endian.getByteOrder();
7438
}
7539

40+
7641
public static final class Configuration{
7742

7843
@Nonnull

0 commit comments

Comments
 (0)