From e6190b4fe2fde1b259a5ed652a803d46e9bd31a6 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Mon, 20 May 2024 11:35:18 -0500 Subject: [PATCH] CE-938 Add getErrorsAsString; getWarningsAsString; withWarning --- .../qqq/backend/core/model/data/QRecord.java | 48 +++++++++++++++++++ .../backend/core/model/data/QRecordTest.java | 41 ++++++++++++++++ 2 files changed, 89 insertions(+) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/data/QRecord.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/data/QRecord.java index 7c42e98f..dffc5947 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/data/QRecord.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/data/QRecord.java @@ -35,12 +35,15 @@ import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.logging.QLogger; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import com.kingsrook.qqq.backend.core.model.statusmessages.QErrorMessage; import com.kingsrook.qqq.backend.core.model.statusmessages.QWarningMessage; +import com.kingsrook.qqq.backend.core.utils.CollectionUtils; +import com.kingsrook.qqq.backend.core.utils.StringUtils; import com.kingsrook.qqq.backend.core.utils.ValueUtils; import org.apache.commons.lang3.SerializationUtils; import static com.kingsrook.qqq.backend.core.logging.LogUtils.logPair; @@ -462,6 +465,7 @@ public class QRecord implements Serializable } + /******************************************************************************* ** Getter for a single field's value ** @@ -616,6 +620,22 @@ public class QRecord implements Serializable + /******************************************************************************* + ** Getter for errors + ** + *******************************************************************************/ + @JsonIgnore + public String getErrorsAsString() + { + if(CollectionUtils.nullSafeHasContents(errors)) + { + return StringUtils.join("; ", errors.stream().map(e -> e.getMessage()).toList()); + } + return (""); + } + + + /******************************************************************************* ** Setter for errors ** @@ -732,6 +752,22 @@ public class QRecord implements Serializable + /******************************************************************************* + ** Getter for warnings + ** + *******************************************************************************/ + @JsonIgnore + public String getWarningsAsString() + { + if(CollectionUtils.nullSafeHasContents(warnings)) + { + return StringUtils.join("; ", warnings.stream().map(e -> e.getMessage()).toList()); + } + return (""); + } + + + /******************************************************************************* ** Setter for warnings *******************************************************************************/ @@ -742,6 +778,18 @@ public class QRecord implements Serializable + /******************************************************************************* + ** Fluently Add one warning to this record + ** + *******************************************************************************/ + public QRecord withWarning(QWarningMessage warning) + { + addWarning(warning); + return (this); + } + + + /******************************************************************************* ** Fluent setter for warnings *******************************************************************************/ diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/data/QRecordTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/data/QRecordTest.java index 72f88d3e..0bd1ddf3 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/data/QRecordTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/data/QRecordTest.java @@ -31,13 +31,18 @@ import java.util.List; import java.util.Map; import com.kingsrook.qqq.backend.core.BaseTest; import com.kingsrook.qqq.backend.core.model.statusmessages.BadInputStatusMessage; +import com.kingsrook.qqq.backend.core.model.statusmessages.QWarningMessage; +import com.kingsrook.qqq.backend.core.model.statusmessages.SystemErrorStatusMessage; +import com.kingsrook.qqq.backend.core.utils.JsonUtils; import com.kingsrook.qqq.backend.core.utils.collections.MapBuilder; +import org.json.JSONObject; import org.junit.jupiter.api.Test; import static com.kingsrook.qqq.backend.core.model.data.QRecord.BACKEND_DETAILS_TYPE_HEAVY_FIELD_LENGTHS; import static com.kingsrook.qqq.backend.core.model.data.QRecord.BACKEND_DETAILS_TYPE_JSON_SOURCE_OBJECT; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertNull; @@ -250,4 +255,40 @@ class QRecordTest extends BaseTest assertNotEquals(originalMap, cloneWithMapValue.getValue("myMap")); } + + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testGetErrorsAndWarningsAsString() + { + assertEquals("", new QRecord().getErrorsAsString()); + assertEquals("one", new QRecord() + .withError(new BadInputStatusMessage("one")) + .getErrorsAsString()); + assertEquals("one; two", new QRecord() + .withError(new BadInputStatusMessage("one")) + .withError(new SystemErrorStatusMessage("two")) + .getErrorsAsString()); + + assertEquals("", new QRecord().getWarningsAsString()); + assertEquals("A", new QRecord() + .withWarning(new QWarningMessage("A")) + .getWarningsAsString()); + assertEquals("A; B; C", new QRecord() + .withWarning(new QWarningMessage("A")) + .withWarning(new QWarningMessage("B")) + .withWarning(new QWarningMessage("C")) + .getWarningsAsString()); + + /////////////////////////////////////////////////////////////////////////////////// + // make sure this AsString method doesn't get included in our json serialization // + /////////////////////////////////////////////////////////////////////////////////// + String json = JsonUtils.toJson(new QRecord() + .withError(new BadInputStatusMessage("one"))); + JSONObject jsonObject = new JSONObject(json); + assertFalse(jsonObject.has("errorsAsString")); + } + } \ No newline at end of file