diff --git a/lib/galaxy/tools/parameters/output_collect.py b/lib/galaxy/tools/parameters/output_collect.py
index 9b30b937abb..530e0400b52 100644
--- a/lib/galaxy/tools/parameters/output_collect.py
+++ b/lib/galaxy/tools/parameters/output_collect.py
@@ -93,8 +93,25 @@ class ToolProvidedMetadata(object):
def get_new_datasets(self, output_name):
datasets = self.tool_provided_job_metadata.get(output_name, {}).get("datasets", [])
+ if not datasets:
+ elements = self.tool_provided_job_metadata.get(output_name, {}).get("elements", [])
+ if elements:
+ datasets = self._elements_to_datasets(elements)
return datasets
+ def _elements_to_datasets(self, elements, level=0):
+ for element in elements:
+ extra_kwds = {"identifier_%d" % level: element["name"]}
+ if "elements" in element:
+ for inner_element in self._elements_to_datasets(element["elements"], level=level + 1):
+ dataset = extra_kwds.copy()
+ dataset.update(inner_element)
+ yield dataset
+ else:
+ dataset = extra_kwds
+ extra_kwds.update(element)
+ yield extra_kwds
+
def collect_dynamic_collections(
tool,
diff --git a/test/functional/tools/collection_creates_dynamic_nested_from_json_elements.xml b/test/functional/tools/collection_creates_dynamic_nested_from_json_elements.xml
new file mode 100644
index 00000000000..c0110ce6983
--- /dev/null
+++ b/test/functional/tools/collection_creates_dynamic_nested_from_json_elements.xml
@@ -0,0 +1,84 @@
+
+
+ echo "A" > oe1_ie1.fq ;
+ echo "B" > oe1_ie2.fq ;
+ echo "C" > oe2_ie1.fq ;
+ echo "D" > oe2_ie2.fq ;
+ echo "E" > oe3_ie1.fq ;
+ echo "F" > oe3_ie2.fq ;
+ cp $c1 galaxy.json
+
+
+ {"list_output": {
+ "elements": [
+ {"name": "oe1", "elements": [
+ {"name": "ie1", "filename": "oe1_ie1.fq"},
+ {"name": "ie2", "filename": "oe1_ie2.fq"}
+ ]},
+ {"name": "oe2", "elements": [
+ {"name": "ie1", "filename": "oe2_ie1.fq"},
+ {"name": "ie2", "filename": "oe2_ie2.fq"}
+ ]},
+ {"name": "oe3", "elements": [
+ {"name": "ie1", "filename": "oe3_ie1.fq"},
+ {"name": "ie2", "filename": "oe3_ie2.fq"}
+ ]}
+]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/functional/tools/samples_tool_conf.xml b/test/functional/tools/samples_tool_conf.xml
index 4fa4feee5f0..eb0f66eb36b 100644
--- a/test/functional/tools/samples_tool_conf.xml
+++ b/test/functional/tools/samples_tool_conf.xml
@@ -105,6 +105,7 @@
+