Skip to content

Commit 56644d2

Browse files
committed
change multi-inheritance:
- codecs in core are abstrac classes - parent codec per v2/v3 (used for serialization) is interface
1 parent 8124a5b commit 56644d2

21 files changed

Lines changed: 61 additions & 99 deletions
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package dev.zarr.zarrjava.core.codec;
2+
3+
import dev.zarr.zarrjava.ZarrException;
4+
import dev.zarr.zarrjava.v3.ArrayMetadata; //TODO remove v3 dependency
5+
6+
public abstract class AbstractCodec implements Codec{
7+
protected ArrayMetadata.CoreArrayMetadata arrayMetadata;
8+
9+
public ArrayMetadata.CoreArrayMetadata resolveArrayMetadata() throws ZarrException {
10+
if (arrayMetadata == null) {
11+
throw new ZarrException("arrayMetadata needs to get set in for every codec");
12+
}
13+
return this.arrayMetadata;
14+
}
15+
16+
public void setCoreArrayMetadata(ArrayMetadata.CoreArrayMetadata arrayMetadata) throws ZarrException{
17+
this.arrayMetadata = arrayMetadata;
18+
}
19+
}
20+

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
import dev.zarr.zarrjava.ZarrException;
44
import ucar.ma2.Array;
55

6-
public interface ArrayArrayCodec {
6+
public abstract class ArrayArrayCodec extends AbstractCodec {
77

8-
Array encode(Array chunkArray)
8+
public abstract Array encode(Array chunkArray)
99
throws ZarrException;
1010

11-
Array decode(Array chunkArray)
11+
public abstract Array decode(Array chunkArray)
1212
throws ZarrException;
1313

1414
}

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,22 @@
55
import java.nio.ByteBuffer;
66
import ucar.ma2.Array;
77

8-
public interface ArrayBytesCodec {
8+
public abstract class ArrayBytesCodec extends AbstractCodec {
99

10-
ByteBuffer encode(Array chunkArray)
10+
public abstract ByteBuffer encode(Array chunkArray)
1111
throws ZarrException;
1212

13-
Array decode(ByteBuffer chunkBytes)
13+
public abstract Array decode(ByteBuffer chunkBytes)
1414
throws ZarrException;
1515

16-
interface WithPartialDecode extends ArrayBytesCodec {
16+
public abstract static class WithPartialDecode extends ArrayBytesCodec {
1717

1818
public abstract Array decode(ByteBuffer shardBytes) throws ZarrException;
1919
public abstract ByteBuffer encode(Array shardArray) throws ZarrException;
2020

21-
Array decodePartial(
22-
StoreHandle handle, long[] offset, int[] shape
23-
) throws ZarrException;
21+
protected abstract Array decodePartial(
22+
StoreHandle handle, long[] offset, int[] shape
23+
) throws ZarrException;
2424
}
2525
}
2626

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
import java.io.OutputStream;
88
import java.nio.ByteBuffer;
99

10-
public interface BytesBytesCodec {
10+
public abstract class BytesBytesCodec extends AbstractCodec {
1111

12-
ByteBuffer encode(ByteBuffer chunkBytes) throws ZarrException;
12+
public abstract ByteBuffer encode(ByteBuffer chunkBytes) throws ZarrException;
1313

14-
ByteBuffer decode(ByteBuffer chunkBytes) throws ZarrException;
14+
public abstract ByteBuffer decode(ByteBuffer chunkBytes) throws ZarrException;
1515

16-
default void copy(InputStream inputStream, OutputStream outputStream) throws IOException {
16+
protected void copy(InputStream inputStream, OutputStream outputStream) throws IOException {
1717
byte[] buffer = new byte[4096];
1818
int len;
1919
while ((len = inputStream.read(buffer)) > 0) {
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package dev.zarr.zarrjava.core.codec;
22

33
import dev.zarr.zarrjava.ZarrException;
4-
import dev.zarr.zarrjava.v3.ArrayMetadata;
4+
import dev.zarr.zarrjava.core.ArrayMetadata;
55

66
public interface Codec {
7-
ArrayMetadata.CoreArrayMetadata resolveArrayMetadata() throws ZarrException;
7+
void setCoreArrayMetadata(ArrayMetadata.CoreArrayMetadata codecArrayMetadata) throws ZarrException;
88

9-
long computeEncodedSize(long inputByteLength, ArrayMetadata.CoreArrayMetadata arrayMetadata)
10-
throws ZarrException;
9+
ArrayMetadata.CoreArrayMetadata resolveArrayMetadata() throws ZarrException;
1110

12-
void setCoreArrayMetadata(ArrayMetadata.CoreArrayMetadata arrayMetadata) throws ZarrException;
11+
default long computeEncodedSize(long inputByteLength, ArrayMetadata.CoreArrayMetadata arrayMetadata) throws ZarrException{
12+
throw new ZarrException("Not implemented for " + this.getClass());
13+
}
1314
}
14-

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
import java.io.IOException;
1616
import java.nio.ByteBuffer;
1717

18-
public interface BloscCodec extends BytesBytesCodec {
18+
public abstract class BloscCodec extends BytesBytesCodec {
1919

2020
@Override
21-
default ByteBuffer decode(ByteBuffer chunkBytes)
21+
public ByteBuffer decode(ByteBuffer chunkBytes)
2222
throws ZarrException {
2323
try {
2424
return ByteBuffer.wrap(Blosc.decompress(Utils.toArray(chunkBytes)));
@@ -27,7 +27,7 @@ default ByteBuffer decode(ByteBuffer chunkBytes)
2727
}
2828
}
2929

30-
final class CustomCompressorDeserializer extends StdDeserializer<Blosc.Compressor> {
30+
public static final class CustomCompressorDeserializer extends StdDeserializer<Blosc.Compressor> {
3131

3232
public CustomCompressorDeserializer() {
3333
this(null);
@@ -53,7 +53,7 @@ public Blosc.Compressor deserialize(JsonParser jsonParser, DeserializationContex
5353
}
5454
}
5555

56-
final class CustomCompressorSerializer extends StdSerializer<Blosc.Compressor> {
56+
public static final class CustomCompressorSerializer extends StdSerializer<Blosc.Compressor> {
5757

5858
public CustomCompressorSerializer() {
5959
super(Blosc.Compressor.class);

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,4 @@
22

33
import dev.zarr.zarrjava.core.codec.ArrayBytesCodec;
44

5-
public interface BytesCodec extends ArrayBytesCodec {
6-
7-
/*
8-
TODO: better style would be to make this a class and dev.zarr.zarrjava.v3.codec.Codec an interface
9-
Would this work with the serialization?
10-
*/
11-
}
5+
public abstract class BytesCodec extends ArrayBytesCodec {}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ protected Array(StoreHandle storeHandle, ArrayMetadata arrayMetadata) throws IOE
2828
this.storeHandle = storeHandle;
2929
this.metadata = arrayMetadata;
3030
this.codecPipeline = new CodecPipeline(Utils.concatArrays(
31-
new dev.zarr.zarrjava.core.codec.Codec[]{},
31+
new Codec[]{},
3232
metadata.filters == null ? new Codec[]{} : metadata.filters,
33-
new dev.zarr.zarrjava.core.codec.Codec[]{new BytesCodec(arrayMetadata.endianness.toEndian())},
33+
new Codec[]{new BytesCodec(arrayMetadata.endianness.toEndian())},
3434
metadata.compressor == null ? new Codec[]{} : new Codec[]{metadata.compressor}
3535
), metadata.coreArrayMetadata);
3636
}
Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,7 @@
11
package dev.zarr.zarrjava.v2.codec;
22

33
import com.fasterxml.jackson.annotation.JsonTypeInfo;
4-
import dev.zarr.zarrjava.ZarrException;
5-
import dev.zarr.zarrjava.v2.ArrayMetadata;
64

75
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "id")
8-
public abstract class Codec implements dev.zarr.zarrjava.core.codec.Codec {
9-
10-
protected ArrayMetadata.CoreArrayMetadata arrayMetadata;
11-
12-
public ArrayMetadata.CoreArrayMetadata resolveArrayMetadata() throws ZarrException {
13-
if (arrayMetadata == null) {
14-
throw new ZarrException("arrayMetadata needs to get set in for every codec");
15-
}
16-
return this.arrayMetadata;
17-
}
18-
19-
public abstract long computeEncodedSize(long inputByteLength, ArrayMetadata.CoreArrayMetadata arrayMetadata)
20-
throws ZarrException;
21-
22-
public void setCoreArrayMetadata(ArrayMetadata.CoreArrayMetadata arrayMetadata) throws ZarrException{
23-
this.arrayMetadata = arrayMetadata;
24-
}
25-
}
6+
public interface Codec extends dev.zarr.zarrjava.core.codec.Codec {}
267

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,12 @@
1414
import dev.zarr.zarrjava.ZarrException;
1515
import dev.zarr.zarrjava.utils.Utils;
1616
import dev.zarr.zarrjava.v2.codec.Codec;
17-
import dev.zarr.zarrjava.v2.ArrayMetadata;
1817

1918
import javax.annotation.Nonnull;
2019
import java.io.IOException;
2120
import java.nio.ByteBuffer;
2221

23-
public class BloscCodec extends Codec implements dev.zarr.zarrjava.core.codec.core.BloscCodec {
22+
public class BloscCodec extends dev.zarr.zarrjava.core.codec.core.BloscCodec implements Codec {
2423

2524
public final String id = "blosc";
2625

@@ -74,12 +73,6 @@ public ByteBuffer encode(ByteBuffer chunkBytes)
7473
}
7574
}
7675

77-
@Override
78-
public long computeEncodedSize(long inputByteLength,
79-
ArrayMetadata.CoreArrayMetadata arrayMetadata) throws ZarrException {
80-
throw new ZarrException("Not implemented for Blosc codec.");
81-
}
82-
8376
public static final class CustomShuffleSerializer extends StdSerializer<Blosc.Shuffle> {
8477

8578
public CustomShuffleSerializer() {

0 commit comments

Comments
 (0)