You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2021/08/03 15:52:09 UTC

[brooklyn-ui] 01/03: Duplicate parameters fix

This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-ui.git

commit 759ef1f5abc8ef852c90541315e76052acc0f5b2
Author: John Athanasiou <ja...@users.noreply.github.com>
AuthorDate: Tue Aug 3 13:34:34 2021 +0100

    Duplicate parameters fix
---
 .../app/components/dsl-editor/dsl-editor.js        | 59 +++++++++++++---------
 1 file changed, 34 insertions(+), 25 deletions(-)

diff --git a/ui-modules/blueprint-composer/app/components/dsl-editor/dsl-editor.js b/ui-modules/blueprint-composer/app/components/dsl-editor/dsl-editor.js
index c7b9e16..9e4812d 100644
--- a/ui-modules/blueprint-composer/app/components/dsl-editor/dsl-editor.js
+++ b/ui-modules/blueprint-composer/app/components/dsl-editor/dsl-editor.js
@@ -280,36 +280,45 @@ export function dslEditorDirective($rootScope, $filter, $log, brUtilsGeneral, bl
         }
     }
 
-    function getConfigItems(entity, definition) {
-        let config = entity.miscData.get('config').filter(config => config !== definition).map(config => {
-            return {
-                id: config.name,
+    function getEntityConfigPropertyItems (entity, definition, propertyName) {
+        return entity.miscData.get(propertyName)
+            .filter(item => item !== definition)
+            .map(({ name, description }) => ({
+                id: name,
                 type: DSL_KINDS.CONFIG,
-                entity: entity,
-                name: config.name,
-                description: config.description
-            };
-        });
+                entity,
+                name,
+                description,
+            }));
+    };
 
-        let params = entity.miscData.get('parameters').filter(param => param !== definition).map(param => {
-            return {
-                id: param.name,
-                type: DSL_KINDS.CONFIG,
-                entity: entity,
-                name: param.name,
-                description: param.description
-            };
+    function uniqueConfigItems(items) {
+        const IDs = new Set();
+
+        return items.filter(({ id }) => {
+            if (IDs.has(id)) return false;
+            IDs.add(id);
+            return true;
+        })
+    }
+
+    function getConfigItems(entity, definition, nested=false) {
+        const result = [
+            ...getEntityConfigPropertyItems(entity, definition, 'config'),
+            ...getEntityConfigPropertyItems(entity, definition, 'parameters'),
+        ];
+
+        Object.values(entity.getClusterMemberspecEntities() || {}).forEach(member => {
+            result.push(...getConfigItems(member, definition, true));
         });
-        
-        config = config.concat(params);
 
-        config = Object.values(entity.getClusterMemberspecEntities()).reduce((acc, spec) => {
-            return acc.concat(getConfigItems(spec, definition));
-        }, config);
+        (entity.children || []).forEach(child => {
+            result.push(...getConfigItems(child, definition, true));
+        });
 
-        return entity.children.reduce((acc, child) => {
-            return acc.concat(getConfigItems(child, definition));
-        }, config);
+        return nested
+            ? result
+            : uniqueConfigItems(result); // only need to check distinct items once, not in every recursion
     }
 
     function getSensorItems(entity) {