Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/main/java/dev/zarr/zarrjava/core/Group.java
Original file line number Diff line number Diff line change
Expand Up @@ -83,4 +83,6 @@ public Node[] listAsArray() {
return nodeStream.toArray(Node[]::new);
}
}

public abstract GroupMetadata metadata();
}
10 changes: 9 additions & 1 deletion src/main/java/dev/zarr/zarrjava/core/GroupMetadata.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
package dev.zarr.zarrjava.core;

public abstract class GroupMetadata {}
import javax.annotation.Nonnull;

import dev.zarr.zarrjava.ZarrException;

public abstract class GroupMetadata {

public @Nonnull abstract Attributes attributes() throws ZarrException;

}
26 changes: 22 additions & 4 deletions src/main/java/dev/zarr/zarrjava/v2/Group.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,17 @@ protected Group(@Nonnull StoreHandle storeHandle, @Nonnull GroupMetadata groupMe
}

public static Group open(@Nonnull StoreHandle storeHandle) throws IOException {
StoreHandle metadataHandle = storeHandle.resolve(ZGROUP);
ByteBuffer metadataBytes = metadataHandle.readNonNull();
return new Group(storeHandle, makeObjectMapper()
.readValue(Utils.toArray(metadataBytes), GroupMetadata.class));
ObjectMapper mapper = makeObjectMapper();
GroupMetadata metadata = mapper.readValue(
Utils.toArray(storeHandle.resolve(ZGROUP).readNonNull()),
GroupMetadata.class
);
if (storeHandle.resolve(ZATTRS).exists())
metadata.attributes = mapper.readValue(
Utils.toArray(storeHandle.resolve(ZATTRS).readNonNull()),
dev.zarr.zarrjava.core.Attributes.class
);
return new Group(storeHandle, metadata);
}

public static Group open(Path path) throws IOException {
Expand All @@ -44,6 +51,12 @@ public static Group create(
ObjectMapper objectMapper = makeObjectMapper();
ByteBuffer metadataBytes = ByteBuffer.wrap(objectMapper.writeValueAsBytes(groupMetadata));
storeHandle.resolve(ZGROUP).set(metadataBytes);
if (groupMetadata.attributes != null) {
StoreHandle attrsHandle = storeHandle.resolve(ZATTRS);
ByteBuffer attrsBytes = ByteBuffer.wrap(
objectMapper.writeValueAsBytes(groupMetadata.attributes));
attrsHandle.set(attrsBytes);
}
return new Group(storeHandle, groupMetadata);
}

Expand Down Expand Up @@ -87,4 +100,9 @@ public Array createArray(String key, Function<ArrayMetadataBuilder, ArrayMetadat
public String toString() {
return String.format("<v2.Group {%s}>", storeHandle);
}

@Override
public dev.zarr.zarrjava.core.GroupMetadata metadata() {
return metadata;
}
}
19 changes: 17 additions & 2 deletions src/main/java/dev/zarr/zarrjava/v2/GroupMetadata.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,42 @@
package dev.zarr.zarrjava.v2;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import dev.zarr.zarrjava.ZarrException;
import dev.zarr.zarrjava.core.Attributes;

public final class GroupMetadata extends dev.zarr.zarrjava.core.GroupMetadata {

static final int ZARR_FORMAT = 2;
@JsonProperty("zarr_format")
public final int zarrFormat = ZARR_FORMAT;

@Nullable
@JsonIgnore
public Attributes attributes;

@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public GroupMetadata(
@JsonProperty(value = "zarr_format", required = true) int zarrFormat
@JsonProperty(value = "zarr_format", required = true) int zarrFormat,
@JsonProperty(value = "attributes", required = false) @Nullable Attributes attributes
) throws ZarrException {
if (zarrFormat != this.zarrFormat) {
throw new ZarrException(
"Expected zarr format '" + this.zarrFormat + "', got '" + zarrFormat + "'.");
}
this.attributes = attributes;
}

public GroupMetadata() throws ZarrException {
this(ZARR_FORMAT);
this(ZARR_FORMAT, null);
}

@Override
public @Nonnull Attributes attributes() throws ZarrException {
return attributes;
}
}
6 changes: 5 additions & 1 deletion src/main/java/dev/zarr/zarrjava/v3/Group.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import java.nio.ByteBuffer;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Map;
import java.util.function.Function;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
Expand Down Expand Up @@ -136,4 +135,9 @@ public Group updateAttributes(Function<Attributes, Attributes> attributeMapper)
public String toString() {
return String.format("<v3.Group {%s}>", storeHandle);
}

@Override
public GroupMetadata metadata() {
return metadata;
}
}
9 changes: 9 additions & 0 deletions src/main/java/dev/zarr/zarrjava/v3/GroupMetadata.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import dev.zarr.zarrjava.ZarrException;
import dev.zarr.zarrjava.core.Attributes;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

public final class GroupMetadata extends dev.zarr.zarrjava.core.GroupMetadata {
Expand Down Expand Up @@ -43,4 +44,12 @@ public GroupMetadata(
public static GroupMetadata defaultValue() throws ZarrException {
return new GroupMetadata(ZARR_FORMAT, NODE_TYPE, new Attributes());
}

@Override
public @Nonnull Attributes attributes() throws ZarrException {
if (attributes == null) {
throw new ZarrException("Group attributes have not been set.");
}
return attributes;
}
}