From 8430c18c9163723f6463694839ab23ae2a627876 Mon Sep 17 00:00:00 2001 From: "Tobias Burdow [Kaleidox]" Date: Tue, 21 May 2024 22:00:56 +0200 Subject: [PATCH] add vector converters --- build.gradle | 2 +- src/main/java/org/comroid/api/attr/Index.java | 6 +- .../java/org/comroid/api/data/Vector.java | 57 +++++++++++++++++-- .../api/data/seri/type/EnumValueType.java | 2 +- .../comroid/api/data/seri/type/ValueType.java | 2 +- .../org/comroid/api/func/ValuePointer.java | 3 +- .../java/org/comroid/api/tree/Component.java | 6 +- 7 files changed, 65 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index 0d9bd37f..e648a0f5 100644 --- a/build.gradle +++ b/build.gradle @@ -100,7 +100,7 @@ dependencies { // annotations api 'org.jetbrains:annotations:24.1.0' compileOnly 'com.fasterxml.jackson.core:jackson-databind:2.+' - compileOnly 'javax.persistence:javax.persistence-api:2.+' + compileOnly 'jakarta.persistence:jakarta.persistence-api:3.+' compileOnly 'org.apache.tomcat:tomcat-annotations-api:10.+' compileOnly 'net.kyori:adventure-api:4.11.+' diff --git a/src/main/java/org/comroid/api/attr/Index.java b/src/main/java/org/comroid/api/attr/Index.java index 6e641420..625253ed 100644 --- a/src/main/java/org/comroid/api/attr/Index.java +++ b/src/main/java/org/comroid/api/attr/Index.java @@ -1,5 +1,9 @@ package org.comroid.api.attr; public interface Index { - int index(); + default int index() { + if (this instanceof Enum e) + return e.ordinal(); + throw new AbstractMethodError(); + } } diff --git a/src/main/java/org/comroid/api/data/Vector.java b/src/main/java/org/comroid/api/data/Vector.java index d4bd4269..ceb7abf7 100644 --- a/src/main/java/org/comroid/api/data/Vector.java +++ b/src/main/java/org/comroid/api/data/Vector.java @@ -1,14 +1,13 @@ package org.comroid.api.data; -import lombok.AccessLevel; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; +import jakarta.persistence.AttributeConverter; +import lombok.*; import lombok.experimental.FieldDefaults; import org.comroid.api.info.Assert; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Contract; +import java.nio.ByteBuffer; import java.util.Arrays; import java.util.function.BiFunction; import java.util.function.DoubleUnaryOperator; @@ -304,6 +303,30 @@ public double[] toArray() { public Vector.N2 ctor(double... dim) { return new N3(dim[0], dim[1], dim[2]); } + + @Value + @jakarta.persistence.Converter(autoApply = true) + public class Converter implements AttributeConverter { + @Override + public byte[] convertToDatabaseColumn(N3 attribute) { + var buf = ByteBuffer.allocate(n() */*byte count of double*/8); + var i = -8; + buf.putDouble(i += 8, x); + buf.putDouble(i += 8, y); + buf.putDouble(i, z); + return buf.array(); + } + + @Override + public N3 convertToEntityAttribute(byte[] dbData) { + var buf = ByteBuffer.wrap(dbData); + var i = -8; + var x = buf.getDouble(i += 8); + var y = buf.getDouble(i += 8); + var z = buf.getDouble(i); + return new N3(x, y, z); + } + } } @Data @@ -334,5 +357,31 @@ public double[] toArray() { public Vector.N2 ctor(double... dim) { return new N4(dim[0], dim[1], dim[2], dim[3]); } + + @Value + @jakarta.persistence.Converter(autoApply = true) + public class Converter implements AttributeConverter { + @Override + public byte[] convertToDatabaseColumn(N4 attribute) { + var buf = ByteBuffer.allocate(n() */*byte count of double*/8); + var i = -8; + buf.putDouble(i += 8, x); + buf.putDouble(i += 8, y); + buf.putDouble(i += 8, z); + buf.putDouble(i, w); + return buf.array(); + } + + @Override + public N4 convertToEntityAttribute(byte[] dbData) { + var buf = ByteBuffer.wrap(dbData); + var i = -8; + var x = buf.getDouble(i += 8); + var y = buf.getDouble(i += 8); + var z = buf.getDouble(i += 8); + var w = buf.getDouble(i); + return new N4(x, y, z, w); + } + } } } diff --git a/src/main/java/org/comroid/api/data/seri/type/EnumValueType.java b/src/main/java/org/comroid/api/data/seri/type/EnumValueType.java index 2326a719..8ec9b468 100644 --- a/src/main/java/org/comroid/api/data/seri/type/EnumValueType.java +++ b/src/main/java/org/comroid/api/data/seri/type/EnumValueType.java @@ -13,7 +13,7 @@ import org.comroid.api.func.util.Bitmask; import org.comroid.api.html.form.HtmlSelectDesc; -import javax.persistence.NamedAttributeNode; +import jakarta.persistence.NamedAttributeNode; import java.util.Arrays; import java.util.Map; import java.util.UUID; diff --git a/src/main/java/org/comroid/api/data/seri/type/ValueType.java b/src/main/java/org/comroid/api/data/seri/type/ValueType.java index 1e8b61fc..1b327c0e 100644 --- a/src/main/java/org/comroid/api/data/seri/type/ValueType.java +++ b/src/main/java/org/comroid/api/data/seri/type/ValueType.java @@ -12,7 +12,7 @@ import org.comroid.api.html.form.HtmlInputDesc; import org.jetbrains.annotations.Nullable; -import javax.persistence.Transient; +import jakarta.persistence.Transient; import java.util.function.Function; import java.util.function.Predicate; diff --git a/src/main/java/org/comroid/api/func/ValuePointer.java b/src/main/java/org/comroid/api/func/ValuePointer.java index 2acaadd3..146637e0 100644 --- a/src/main/java/org/comroid/api/func/ValuePointer.java +++ b/src/main/java/org/comroid/api/func/ValuePointer.java @@ -1,11 +1,10 @@ package org.comroid.api.func; import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.Transient; import org.comroid.annotations.Ignore; import org.comroid.api.data.seri.type.ValueType; -import javax.persistence.Transient; - @Ignore public interface ValuePointer { @Transient diff --git a/src/main/java/org/comroid/api/tree/Component.java b/src/main/java/org/comroid/api/tree/Component.java index aaedaf39..05214eb5 100644 --- a/src/main/java/org/comroid/api/tree/Component.java +++ b/src/main/java/org/comroid/api/tree/Component.java @@ -20,9 +20,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.persistence.PostLoad; -import javax.persistence.PostUpdate; -import javax.persistence.PreRemove; +import jakarta.persistence.PostLoad; +import jakarta.persistence.PostUpdate; +import jakarta.persistence.PreRemove; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy;