From bd8e3b284b0838111b5f59887e9e9e5be5163b1f Mon Sep 17 00:00:00 2001 From: Braydon Date: Sat, 16 Dec 2023 18:36:59 -0500 Subject: [PATCH] Use @RawData for fetching too, oops --- src/main/java/me/braydon/feather/data/Document.java | 2 +- .../java/me/braydon/feather/database/Repository.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/braydon/feather/data/Document.java b/src/main/java/me/braydon/feather/data/Document.java index 5564376..8da2c88 100644 --- a/src/main/java/me/braydon/feather/data/Document.java +++ b/src/main/java/me/braydon/feather/data/Document.java @@ -61,7 +61,7 @@ public class Document { public Document(@NonNull Object element) { Class clazz = element.getClass(); // Get the element class String idKey = null; // The key for the id field - java.lang.reflect.Field rawDataField = null; + java.lang.reflect.Field rawDataField = null; // The raw data field if defined for (java.lang.reflect.Field field : clazz.getDeclaredFields()) { // Raw data field, save it for later if (field.isAnnotationPresent(RawData.class)) { diff --git a/src/main/java/me/braydon/feather/database/Repository.java b/src/main/java/me/braydon/feather/database/Repository.java index 4307ae7..d3e1f48 100644 --- a/src/main/java/me/braydon/feather/database/Repository.java +++ b/src/main/java/me/braydon/feather/database/Repository.java @@ -10,6 +10,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NonNull; import me.braydon.feather.FeatherSettings; +import me.braydon.feather.annotation.RawData; import me.braydon.feather.annotation.Serializable; import me.braydon.feather.common.FieldUtils; @@ -121,7 +122,14 @@ public abstract class Repository, ID, E> { E entity = constructor.newInstance(); // Create the entity // Get the field tagged with @Field + java.lang.reflect.Field rawDataField = null; // The raw data field if defined for (Field field : entityClass.getDeclaredFields()) { + // Raw data field, save it for later + if (field.isAnnotationPresent(RawData.class)) { + rawDataField = field; + continue; + } + // Not the field we're looking for if (!field.isAnnotationPresent(me.braydon.feather.annotation.Field.class)) { continue; @@ -141,6 +149,10 @@ public abstract class Repository, ID, E> { field.setAccessible(true); field.set(entity, value); } + if (rawDataField != null) { // We have a raw data field, set it + rawDataField.setAccessible(true); // Make our field accessible + rawDataField.set(entity, mappedData); // Set the raw data field to our mapped document + } return entity; } catch (NoSuchMethodException ex) { // We need our no args constructor throw new IllegalStateException("Entity " + entityClass.getName() + " is missing no args constructor");