From e82ebc78dc7bf410fe8e0c3c122734f7d6fde1f7 Mon Sep 17 00:00:00 2001 From: labkey-tchad Date: Wed, 15 Apr 2020 22:53:11 -0700 Subject: [PATCH 1/3] Make `CreateContainerAction` mirror UI behavior Inherit parent container's modules for Custom(NONE) folder type --- core/src/org/labkey/core/CoreController.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/src/org/labkey/core/CoreController.java b/core/src/org/labkey/core/CoreController.java index 477b9f8811d..37bd808ba6b 100644 --- a/core/src/org/labkey/core/CoreController.java +++ b/core/src/org/labkey/core/CoreController.java @@ -713,6 +713,8 @@ public ApiResponse execute(SimpleApiJsonForm form, BindException errors) String title = StringUtils.trimToNull(json.getString("title")); String description = StringUtils.trimToNull(json.getString("description")); String typeName = StringUtils.trimToNull(json.getString("type")); + // Inherit parent container's modules for Custom(NONE) folder type unless otherwise indicated + boolean inheritModules = !json.has("inheritModules") || json.isNull("inheritModules") || json.getBoolean("inheritModules"); boolean isWorkbook = false; if (typeName == null) { @@ -777,6 +779,10 @@ else if (module.getRequireSitePermission() && !getContainer().hasEnableRestricte } Container newContainer = ContainerManager.createContainer(getContainer(), name, title, description, typeName, getUser()); + if (folderType == FolderType.NONE && inheritModules) + { + ensureModules.addAll(newContainer.getActiveModules(getUser())); + } newContainer.setFolderType(folderType, ensureModules, getUser()); return new ApiSimpleResponse(newContainer.toJSON(getUser())); From 8670998c5ebe8fd25fc6fa1dc7c0e15cb691a135 Mon Sep 17 00:00:00 2001 From: labkey-tchad Date: Wed, 15 Apr 2020 23:11:42 -0700 Subject: [PATCH 2/3] Don't add a new parameter --- core/src/org/labkey/core/CoreController.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/core/src/org/labkey/core/CoreController.java b/core/src/org/labkey/core/CoreController.java index 37bd808ba6b..7b7d0e76da1 100644 --- a/core/src/org/labkey/core/CoreController.java +++ b/core/src/org/labkey/core/CoreController.java @@ -713,8 +713,6 @@ public ApiResponse execute(SimpleApiJsonForm form, BindException errors) String title = StringUtils.trimToNull(json.getString("title")); String description = StringUtils.trimToNull(json.getString("description")); String typeName = StringUtils.trimToNull(json.getString("type")); - // Inherit parent container's modules for Custom(NONE) folder type unless otherwise indicated - boolean inheritModules = !json.has("inheritModules") || json.isNull("inheritModules") || json.getBoolean("inheritModules"); boolean isWorkbook = false; if (typeName == null) { @@ -779,11 +777,10 @@ else if (module.getRequireSitePermission() && !getContainer().hasEnableRestricte } Container newContainer = ContainerManager.createContainer(getContainer(), name, title, description, typeName, getUser()); - if (folderType == FolderType.NONE && inheritModules) + if (folderType != FolderType.NONE || !ensureModules.isEmpty()) { - ensureModules.addAll(newContainer.getActiveModules(getUser())); + newContainer.setFolderType(folderType, ensureModules, getUser()); } - newContainer.setFolderType(folderType, ensureModules, getUser()); return new ApiSimpleResponse(newContainer.toJSON(getUser())); } From 650cc2e8fe2d9fbc3e95178ae5754747aa22e1a7 Mon Sep 17 00:00:00 2001 From: labkey-tchad Date: Thu, 16 Apr 2020 11:32:02 -0700 Subject: [PATCH 3/3] Retain original behavior when 'ensureModules' is not specified --- core/src/org/labkey/core/CoreController.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/core/src/org/labkey/core/CoreController.java b/core/src/org/labkey/core/CoreController.java index 7b7d0e76da1..ce4f521812c 100644 --- a/core/src/org/labkey/core/CoreController.java +++ b/core/src/org/labkey/core/CoreController.java @@ -760,7 +760,7 @@ public ApiResponse execute(SimpleApiJsonForm form, BindException errors) } Set ensureModules = new HashSet<>(); - if (json.has("ensureModules")) + if (json.has("ensureModules") && !json.isNull("ensureModules")) { List requestedModules = Arrays.stream(json.getJSONArray("ensureModules") .toArray()).map(Object::toString).collect(Collectors.toList()); @@ -777,10 +777,16 @@ else if (module.getRequireSitePermission() && !getContainer().hasEnableRestricte } Container newContainer = ContainerManager.createContainer(getContainer(), name, title, description, typeName, getUser()); - if (folderType != FolderType.NONE || !ensureModules.isEmpty()) + if (folderType != FolderType.NONE) { newContainer.setFolderType(folderType, ensureModules, getUser()); } + else if (!ensureModules.isEmpty()) + { + // Custom folder may inherit modules from parent. 'setFolderType' would remove them. + ensureModules.addAll(newContainer.getActiveModules()); + newContainer.setActiveModules(ensureModules); + } return new ApiSimpleResponse(newContainer.toJSON(getUser())); }