From 22644b6a3657ef9874bf73dbd42ba0cc465a624a Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Fri, 24 Feb 2023 15:30:23 -0600 Subject: [PATCH] Initial WIP on record scripts --- .../model/dashboard/widgets/WidgetType.java | 3 +- .../qqq/backend/core/model/data/QRecord.java | 23 ++++++++++++ .../backend/core/model/scripts/Script.java | 35 ++++++++++++++++++ .../scripts/ScriptsMetaDataProvider.java | 36 ++++++++++++++++++- 4 files changed, 95 insertions(+), 2 deletions(-) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/WidgetType.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/WidgetType.java index 76b8f918..5ea38183 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/WidgetType.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/WidgetType.java @@ -48,7 +48,8 @@ public enum WidgetType STEPPER("stepper"), TABLE("table"), USA_MAP("usaMap"), - DATA_BAG_VIEWER("dataBagViewer"); + DATA_BAG_VIEWER("dataBagViewer"), + SCRIPT_VIEWER("scriptViewer"); private final String type; 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 e5fc5505..49d310f8 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 @@ -159,6 +159,29 @@ public class QRecord implements Serializable + /******************************************************************************* + ** Added when QRecords got exposed in scripts, and passing a constant String + ** raised a class-cast exception, because it was some nashorn non-serializable + ** type (though once inside *this* method, the value was a java.lang.String...) + *******************************************************************************/ + public void setValue(String fieldName, Object value) + { + if(value == null) + { + setValue(fieldName, null); + } + else if(value instanceof Serializable s) + { + setValue(fieldName, s); + } + else + { + setValue(fieldName, ValueUtils.getValueAsString(value)); + } + } + + + /******************************************************************************* ** *******************************************************************************/ diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/scripts/Script.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/scripts/Script.java index 232938d3..430abb0f 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/scripts/Script.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/scripts/Script.java @@ -27,6 +27,7 @@ import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.model.data.QField; import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; +import com.kingsrook.qqq.backend.core.model.metadata.tables.TablesPossibleValueSourceMetaDataProvider; /******************************************************************************* @@ -51,6 +52,9 @@ public class Script extends QRecordEntity @QField(possibleValueSourceName = "scriptType") private Integer scriptTypeId; + @QField(possibleValueSourceName = TablesPossibleValueSourceMetaDataProvider.NAME) + private String tableName; + @QField(possibleValueSourceName = "scriptRevision") private Integer currentScriptRevisionId; @@ -279,4 +283,35 @@ public class Script extends QRecordEntity return (this); } + + + /******************************************************************************* + ** Getter for tableName + *******************************************************************************/ + public String getTableName() + { + return (this.tableName); + } + + + + /******************************************************************************* + ** Setter for tableName + *******************************************************************************/ + public void setTableName(String tableName) + { + this.tableName = tableName; + } + + + + /******************************************************************************* + ** Fluent setter for tableName + *******************************************************************************/ + public Script withTableName(String tableName) + { + this.tableName = tableName; + return (this); + } + } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/scripts/ScriptsMetaDataProvider.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/scripts/ScriptsMetaDataProvider.java index 68cea99c..7029df3c 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/scripts/ScriptsMetaDataProvider.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/scripts/ScriptsMetaDataProvider.java @@ -26,10 +26,14 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; import com.kingsrook.qqq.backend.core.actions.dashboard.widgets.ChildRecordListRenderer; +import com.kingsrook.qqq.backend.core.actions.dashboard.widgets.DefaultWidgetRenderer; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterOrderBy; +import com.kingsrook.qqq.backend.core.model.dashboard.widgets.WidgetType; import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; +import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; +import com.kingsrook.qqq.backend.core.model.metadata.dashboard.QWidgetMetaData; import com.kingsrook.qqq.backend.core.model.metadata.fields.AdornmentType; import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldAdornment; import com.kingsrook.qqq.backend.core.model.metadata.joins.JoinOn; @@ -37,10 +41,14 @@ import com.kingsrook.qqq.backend.core.model.metadata.joins.JoinType; import com.kingsrook.qqq.backend.core.model.metadata.joins.QJoinMetaData; import com.kingsrook.qqq.backend.core.model.metadata.layout.QIcon; import com.kingsrook.qqq.backend.core.model.metadata.possiblevalues.QPossibleValueSource; +import com.kingsrook.qqq.backend.core.model.metadata.processes.QBackendStepMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.processes.QProcessMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.Capability; import com.kingsrook.qqq.backend.core.model.metadata.tables.QFieldSection; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.tables.TablesPossibleValueSourceMetaDataProvider; import com.kingsrook.qqq.backend.core.model.metadata.tables.Tier; +import com.kingsrook.qqq.backend.core.processes.implementations.scripts.StoreScriptRevisionProcessStep; /******************************************************************************* @@ -58,6 +66,23 @@ public class ScriptsMetaDataProvider defineStandardScriptsPossibleValueSources(instance); defineStandardScriptsJoins(instance); defineStandardScriptsWidgets(instance); + instance.addPossibleValueSource(TablesPossibleValueSourceMetaDataProvider.defineTablesPossibleValueSource(instance)); + instance.addProcess(defineStoreScriptRevisionProcess()); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private QProcessMetaData defineStoreScriptRevisionProcess() + { + return (new QProcessMetaData() + .withName("storeScriptRevision") + .withStepList(List.of( + new QBackendStepMetaData() + .withCode(new QCodeReference(StoreScriptRevisionProcessStep.class)) + ))); } @@ -70,9 +95,17 @@ public class ScriptsMetaDataProvider instance.addWidget(ChildRecordListRenderer.widgetMetaDataBuilder(instance.getJoin(QJoinMetaData.makeInferredJoinName(ScriptLog.TABLE_NAME, ScriptLogLine.TABLE_NAME))) .withLabel("Log Lines") .getWidgetMetaData()); + + instance.addWidget(new QWidgetMetaData() + .withName("scriptViewer") + .withLabel("Contents") + .withIsCard(true) + .withType(WidgetType.SCRIPT_VIEWER.getType()) + .withCodeReference(new QCodeReference(DefaultWidgetRenderer.class, null))); } + /******************************************************************************* ** *******************************************************************************/ @@ -182,7 +215,8 @@ public class ScriptsMetaDataProvider private QTableMetaData defineScriptTable(String backendName) throws QException { return (defineStandardTable(backendName, Script.TABLE_NAME, Script.class) - .withSection(new QFieldSection("identity", new QIcon().withName("badge"), Tier.T1, List.of("id", "name", "scriptTypeId", "currentScriptRevisionId"))) + .withSection(new QFieldSection("identity", new QIcon().withName("badge"), Tier.T1, List.of("id", "name", "scriptTypeId", "tableName", "currentScriptRevisionId"))) + .withSection(new QFieldSection("contents", new QIcon().withName("data_object"), Tier.T2).withWidgetName("scriptViewer")) .withSection(new QFieldSection("dates", new QIcon().withName("calendar_month"), Tier.T3, List.of("createDate", "modifyDate")))); }