From e9e029d8e99096d0717ab36a45e3de8815f23582 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Thu, 12 Jun 2025 16:04:11 -0500 Subject: [PATCH] Add setRecordLinksToRecordsFromTableDynamicForPostQuery --- .../model/tables/QQQTableTableManager.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/tables/QQQTableTableManager.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/tables/QQQTableTableManager.java index d15aabb7..17dd4a38 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/tables/QQQTableTableManager.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/tables/QQQTableTableManager.java @@ -22,18 +22,29 @@ package com.kingsrook.qqq.backend.core.model.tables; +import java.io.Serializable; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; import com.kingsrook.qqq.backend.core.actions.tables.GetAction; import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.logging.QLogger; +import com.kingsrook.qqq.backend.core.model.actions.tables.QueryOrGetInputInterface; import com.kingsrook.qqq.backend.core.model.actions.tables.get.GetInput; import com.kingsrook.qqq.backend.core.model.actions.tables.get.GetOutput; import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertOutput; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterCriteria; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter; import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; +import com.kingsrook.qqq.backend.core.model.metadata.fields.AdornmentType; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; +import com.kingsrook.qqq.backend.core.processes.utils.GeneralProcessUtils; import com.kingsrook.qqq.backend.core.utils.collections.MapBuilder; import static com.kingsrook.qqq.backend.core.logging.LogUtils.logPair; @@ -89,4 +100,41 @@ public class QQQTableTableManager return getOutput.getRecord().getValueInteger("id"); } + + + + /*************************************************************************** + ** + ***************************************************************************/ + public static List setRecordLinksToRecordsFromTableDynamicForPostQuery(QueryOrGetInputInterface queryInput, List records, String tableIdField, String recordIdField) throws QException + { + ///////////////////////////////////////////////////////////////////////////////////////// + // note, this is a second copy of this logic (first being in standard process traces). // + // let the rule of 3 apply if we find ourselves copying it again // + ///////////////////////////////////////////////////////////////////////////////////////// + if(queryInput.getShouldGenerateDisplayValues()) + { + /////////////////////////////////////////////////////////////////////////////////////////// + // for records with a table id value - look up that table name, then set a display-value // + // for the Link type adornment, to the inputRecordId record within that table. // + /////////////////////////////////////////////////////////////////////////////////////////// + Set tableIds = records.stream().map(r -> r.getValue(tableIdField)).filter(Objects::nonNull).collect(Collectors.toSet()); + if(!tableIds.isEmpty()) + { + Map tableMap = GeneralProcessUtils.loadTableToMap(QQQTable.TABLE_NAME, "id", new QQueryFilter(new QFilterCriteria("id", QCriteriaOperator.IN, tableIds))); + + for(QRecord record : records) + { + QRecord qqqTableRecord = tableMap.get(record.getValue(tableIdField)); + if(qqqTableRecord != null && record.getValue(recordIdField) != null) + { + record.setDisplayValue(recordIdField + ":" + AdornmentType.LinkValues.TO_RECORD_FROM_TABLE_DYNAMIC, qqqTableRecord.getValueString("name")); + } + } + } + } + + return (records); + } + }