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 f0e6968c..b0e618ce 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 @@ -149,8 +149,7 @@ public class QInstanceHelpContentManager } else if(StringUtils.hasContent(widgetName)) { - processHelpContentForWidget(key, widgetName, slotName, helpContent); - + processHelpContentForWidget(key, widgetName, slotName, roles, helpContent); } } catch(Exception e) @@ -252,7 +251,7 @@ public class QInstanceHelpContentManager /******************************************************************************* ** *******************************************************************************/ - private static void processHelpContentForWidget(String key, String widgetName, String slotName, QHelpContent helpContent) + private static void processHelpContentForWidget(String key, String widgetName, String slotName, Set roles, QHelpContent helpContent) { QWidgetMetaDataInterface widget = QContext.getQInstance().getWidget(widgetName); if(!StringUtils.hasContent(slotName)) @@ -265,22 +264,14 @@ public class QInstanceHelpContentManager } else { - Map widgetHelpContent = widget.getHelpContent(); - if(widgetHelpContent == null) - { - widgetHelpContent = new HashMap<>(); - } - if(helpContent != null) { - widgetHelpContent.put(slotName, helpContent); + widget.withHelpContent(slotName, helpContent); } else { - widgetHelpContent.remove(slotName); + widget.removeHelpContent(slotName, roles); } - - widget.setHelpContent(widgetHelpContent); } } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QWidgetMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QWidgetMetaData.java index 03688222..e7793b03 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QWidgetMetaData.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QWidgetMetaData.java @@ -24,11 +24,15 @@ package com.kingsrook.qqq.backend.core.model.metadata.dashboard; import java.io.Serializable; import java.util.ArrayList; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; +import com.kingsrook.qqq.backend.core.instances.QInstanceHelpContentManager; import com.kingsrook.qqq.backend.core.model.dashboard.widgets.WidgetType; import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; +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.layout.QIcon; import com.kingsrook.qqq.backend.core.model.metadata.permissions.QPermissionRules; @@ -61,7 +65,7 @@ public class QWidgetMetaData implements QWidgetMetaDataInterface protected Map icons; - protected Map helpContent; + protected Map> helpContent; protected Map defaultValues = new LinkedHashMap<>(); @@ -691,10 +695,11 @@ public class QWidgetMetaData implements QWidgetMetaDataInterface } + /******************************************************************************* ** Getter for helpContent *******************************************************************************/ - public Map getHelpContent() + public Map> getHelpContent() { return (this.helpContent); } @@ -704,7 +709,7 @@ public class QWidgetMetaData implements QWidgetMetaDataInterface /******************************************************************************* ** Setter for helpContent *******************************************************************************/ - public void setHelpContent(Map helpContent) + public void setHelpContent(Map> helpContent) { this.helpContent = helpContent; } @@ -714,11 +719,49 @@ public class QWidgetMetaData implements QWidgetMetaDataInterface /******************************************************************************* ** Fluent setter for helpContent *******************************************************************************/ - public QWidgetMetaData withHelpContent(Map helpContent) + public QWidgetMetaData withHelpContent(Map> helpContent) { this.helpContent = helpContent; return (this); } + + /******************************************************************************* + ** Fluent setter for adding 1 helpContent (for a slot) + *******************************************************************************/ + public QWidgetMetaData withHelpContent(String slot, QHelpContent helpContent) + { + if(this.helpContent == null) + { + this.helpContent = new HashMap<>(); + } + + List listForSlot = this.helpContent.computeIfAbsent(slot, (k) -> new ArrayList<>()); + QInstanceHelpContentManager.putHelpContentInList(helpContent, listForSlot); + + return (this); + } + + + + /******************************************************************************* + ** remove a helpContent for a slot based on its set of roles + *******************************************************************************/ + public void removeHelpContent(String slot, Set roles) + { + if(this.helpContent == null) + { + return; + } + + List listForSlot = this.helpContent.get(slot); + if(listForSlot == null) + { + return; + } + + QInstanceHelpContentManager.removeHelpContentByRoleSetFromList(roles, listForSlot); + } + } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QWidgetMetaDataInterface.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QWidgetMetaDataInterface.java index 1c702e39..ed8af4e3 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QWidgetMetaDataInterface.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QWidgetMetaDataInterface.java @@ -25,10 +25,12 @@ package com.kingsrook.qqq.backend.core.model.metadata.dashboard; import java.io.Serializable; import java.util.List; import java.util.Map; +import java.util.Set; import com.kingsrook.qqq.backend.core.logging.QLogger; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; import com.kingsrook.qqq.backend.core.model.metadata.TopLevelMetaDataInterface; import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; +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.permissions.MetaDataWithPermissionRules; import com.kingsrook.qqq.backend.core.model.metadata.permissions.QPermissionRules; @@ -235,7 +237,7 @@ public interface QWidgetMetaDataInterface extends MetaDataWithPermissionRules, T /******************************************************************************* ** *******************************************************************************/ - default Map getHelpContent() + default Map> getHelpContent() { return (null); } @@ -244,11 +246,29 @@ public interface QWidgetMetaDataInterface extends MetaDataWithPermissionRules, T /******************************************************************************* ** *******************************************************************************/ - default void setHelpContent(Map helpContent) + default void setHelpContent(Map> helpContent) { LOG.debug("Setting help content in a widgetMetaData type that doesn't support it (because it didn't override the getter/setter)"); } + /******************************************************************************* + ** + *******************************************************************************/ + default QWidgetMetaDataInterface withHelpContent(String slot, QHelpContent helpContent) + { + LOG.debug("Setting help content in a widgetMetaData type that doesn't support it (because it didn't override the getter/setter)"); + return (this); + } + + /******************************************************************************* + ** remove a helpContent for a slot based on its set of roles + *******************************************************************************/ + default void removeHelpContent(String slot, Set roles) + { + LOG.debug("Setting help content in a widgetMetaData type that doesn't support it (because it didn't override the getter/setter)"); + } + + /******************************************************************************* ** *******************************************************************************/ diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/frontend/QFrontendWidgetMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/frontend/QFrontendWidgetMetaData.java index 4d5e5725..4312949f 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/frontend/QFrontendWidgetMetaData.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/frontend/QFrontendWidgetMetaData.java @@ -59,9 +59,9 @@ public class QFrontendWidgetMetaData private boolean showReloadButton = false; private boolean showExportButton = false; - protected Map icons; - protected Map helpContent; - protected Map defaultValues; + protected Map icons; + protected Map> helpContent; + protected Map defaultValues; private final boolean hasPermission; @@ -273,7 +273,7 @@ public class QFrontendWidgetMetaData ** Getter for helpContent ** *******************************************************************************/ - public Map getHelpContent() + public Map> getHelpContent() { return helpContent; } 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 6e52c49d..1015412c 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 @@ -216,7 +216,7 @@ class QInstanceHelpContentManagerTest extends BaseTest // now - post-insert customizer should have automatically added help content to the instance // /////////////////////////////////////////////////////////////////////////////////////////////// assertTrue(widget.getHelpContent().containsKey("label")); - assertEquals("i need somebody", widget.getHelpContent().get("label").getContent()); + assertEquals("i need somebody", widget.getHelpContent().get("label").get(0).getContent()); }