diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QInstanceHelpContentManager.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QInstanceHelpContentManager.java index b0e618ce..ed5d69da 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QInstanceHelpContentManager.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QInstanceHelpContentManager.java @@ -43,6 +43,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.help.HelpFormat; import com.kingsrook.qqq.backend.core.model.metadata.help.HelpRole; import com.kingsrook.qqq.backend.core.model.metadata.help.QHelpContent; import com.kingsrook.qqq.backend.core.model.metadata.help.QHelpRole; +import com.kingsrook.qqq.backend.core.model.metadata.processes.QFrontendStepMetaData; import com.kingsrook.qqq.backend.core.model.metadata.processes.QProcessMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.QFieldSection; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; @@ -111,6 +112,7 @@ public class QInstanceHelpContentManager String processName = nameValuePairs.get("process"); String fieldName = nameValuePairs.get("field"); String sectionName = nameValuePairs.get("section"); + String stepName = nameValuePairs.get("step"); String widgetName = nameValuePairs.get("widget"); String slotName = nameValuePairs.get("slot"); @@ -145,7 +147,7 @@ public class QInstanceHelpContentManager } else if(StringUtils.hasContent(processName)) { - processHelpContentForProcess(key, processName, fieldName, roles, helpContent); + processHelpContentForProcess(key, processName, fieldName, stepName, roles, helpContent); } else if(StringUtils.hasContent(widgetName)) { @@ -208,6 +210,10 @@ public class QInstanceHelpContentManager optionalSection.get().removeHelpContent(roles); } } + else + { + LOG.info("Unrecognized key format for table help content", logPair("key", key)); + } } @@ -215,7 +221,7 @@ public class QInstanceHelpContentManager /******************************************************************************* ** *******************************************************************************/ - private static void processHelpContentForProcess(String key, String processName, String fieldName, Set roles, QHelpContent helpContent) + private static void processHelpContentForProcess(String key, String processName, String fieldName, String stepName, Set roles, QHelpContent helpContent) { QProcessMetaData process = QContext.getQInstance().getProcess(processName); if(process == null) @@ -244,6 +250,30 @@ public class QInstanceHelpContentManager optionalField.get().removeHelpContent(roles); } } + else if(StringUtils.hasContent(stepName)) + { + ///////////////////////////// + // handle a process screen // + ///////////////////////////// + QFrontendStepMetaData frontendStep = process.getFrontendStep(stepName); + + if(frontendStep == null) + { + LOG.info("Unrecognized process step in help content", logPair("key", key)); + } + else if(helpContent != null) + { + frontendStep.withHelpContent(helpContent); + } + else + { + frontendStep.removeHelpContent(roles); + } + } + else + { + LOG.info("Unrecognized key format for process help content", logPair("key", key)); + } } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/processes/QFrontendStepMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/processes/QFrontendStepMetaData.java index 68b7c8db..9de7595a 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/processes/QFrontendStepMetaData.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/processes/QFrontendStepMetaData.java @@ -26,8 +26,12 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.kingsrook.qqq.backend.core.instances.QInstanceHelpContentManager; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.help.HelpRole; +import com.kingsrook.qqq.backend.core.model.metadata.help.QHelpContent; /******************************************************************************* @@ -43,6 +47,8 @@ public class QFrontendStepMetaData extends QStepMetaData private List recordListFields; private Map formFieldMap; + private List helpContents; + /******************************************************************************* @@ -340,4 +346,61 @@ public class QFrontendStepMetaData extends QStepMetaData return (rs); } + + + /******************************************************************************* + ** Getter for helpContents + *******************************************************************************/ + public List getHelpContents() + { + return (this.helpContents); + } + + + + /******************************************************************************* + ** Setter for helpContents + *******************************************************************************/ + public void setHelpContents(List helpContents) + { + this.helpContents = helpContents; + } + + + + /******************************************************************************* + ** Fluent setter for helpContents + *******************************************************************************/ + public QFrontendStepMetaData withHelpContents(List helpContents) + { + this.helpContents = helpContents; + return (this); + } + + + + /******************************************************************************* + ** Fluent setter for adding 1 helpContent + *******************************************************************************/ + public QFrontendStepMetaData withHelpContent(QHelpContent helpContent) + { + if(this.helpContents == null) + { + this.helpContents = new ArrayList<>(); + } + + QInstanceHelpContentManager.putHelpContentInList(helpContent, this.helpContents); + return (this); + } + + + + /******************************************************************************* + ** remove a single helpContent based on its set of roles + *******************************************************************************/ + public void removeHelpContent(Set roles) + { + QInstanceHelpContentManager.removeHelpContentByRoleSetFromList(roles, this.helpContents); + } + } diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/QInstanceHelpContentManagerTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/QInstanceHelpContentManagerTest.java index 1015412c..3148b508 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/QInstanceHelpContentManagerTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/QInstanceHelpContentManagerTest.java @@ -167,6 +167,36 @@ class QInstanceHelpContentManagerTest extends BaseTest QInstance qInstance = QContext.getQInstance(); new HelpContentMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, null); + HelpContent recordEntity = new HelpContent() + .withId(1) + .withKey("process:" + TestUtils.PROCESS_NAME_GREET_PEOPLE_INTERACTIVE + ";step:setup") + .withContent("v1") + .withRole(HelpContentRole.PROCESS_SCREEN.getId()); + new InsertAction().execute(new InsertInput(HelpContent.TABLE_NAME).withRecordEntity(recordEntity)); + + /////////////////////////////////////////////////////////////////////////////////////////////// + // now - post-insert customizer should have automatically added help content to the instance // + /////////////////////////////////////////////////////////////////////////////////////////////// + List helpContents = qInstance.getProcess(TestUtils.PROCESS_NAME_GREET_PEOPLE_INTERACTIVE).getFrontendStep("setup").getHelpContents(); + assertEquals(1, helpContents.size()); + assertEquals("v1", helpContents.get(0).getContent()); + assertEquals(Set.of(QHelpRole.PROCESS_SCREEN), helpContents.get(0).getRoles()); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testProcessStep() throws QException + { + ///////////////////////////////////// + // get the instance from base test // + ///////////////////////////////////// + QInstance qInstance = QContext.getQInstance(); + new HelpContentMetaDataProvider().defineAll(qInstance, TestUtils.MEMORY_BACKEND_NAME, null); + ////////////////////////////////////////////////////////// // first, assert there's no help content on the section // //////////////////////////////////////////////////////////