You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by sc...@apache.org on 2019/08/30 17:54:13 UTC

[nifi] 06/09: NIFI-6290: - Addressing timing issue when parameters listing request is not immediately resolved.

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

scottyaslan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nifi.git

commit e5850fa1a3e37daabd6b6596c869ac903daf340a
Author: Matt Gilman <ma...@gmail.com>
AuthorDate: Mon Jul 8 10:31:42 2019 -0400

    NIFI-6290:
    - Addressing timing issue when parameters listing request is not immediately resolved.
---
 .../nifi/web/api/entity/ProcessGroupEntity.java    | 11 +++
 .../org/apache/nifi/web/api/dto/EntityFactory.java |  5 ++
 .../webapp/js/jquery/nfeditor/languages/nfel.js    | 18 +++--
 .../webapp/js/jquery/nfeditor/languages/nfpr.js    | 18 +++--
 .../jquery/propertytable/jquery.propertytable.js   | 93 +++++++++++++++-------
 .../webapp/js/nf/canvas/nf-controller-service.js   | 66 +++++++--------
 .../js/nf/canvas/nf-processor-configuration.js     | 58 +++++++-------
 7 files changed, 167 insertions(+), 102 deletions(-)

diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/entity/ProcessGroupEntity.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/entity/ProcessGroupEntity.java
index fbc14b3..5defa7f 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/entity/ProcessGroupEntity.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/entity/ProcessGroupEntity.java
@@ -54,6 +54,8 @@ public class ProcessGroupEntity extends ComponentEntity implements Permissible<P
     private Integer publicInputPortCount;
     private Integer publicOutputPortCount;
 
+    private String parameterContextId;
+
     /**
      * The ProcessGroupDTO that is being serialized.
      *
@@ -317,4 +319,13 @@ public class ProcessGroupEntity extends ComponentEntity implements Permissible<P
     public void setSyncFailureCount(Integer syncFailureCount) {
         this.syncFailureCount = syncFailureCount;
     }
+
+    @ApiModelProperty("The ID of the Parameter Context, or null if no Parameter Context has been bound to the Process Group")
+    public String getParameterContextId() {
+        return parameterContextId;
+    }
+
+    public void setParameterContextId(String parameterContextId) {
+        this.parameterContextId = parameterContextId;
+    }
 }
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/EntityFactory.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/EntityFactory.java
index b55bfdb..20de5e5 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/EntityFactory.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/EntityFactory.java
@@ -269,6 +269,11 @@ public final class EntityFactory {
             entity.setLocallyModifiedAndStaleCount(dto.getLocallyModifiedAndStaleCount());
             entity.setSyncFailureCount(dto.getSyncFailureCount());
 
+            final ParameterContextReferenceDTO parameterContextReference = dto.getParameterContext();
+            if (parameterContextReference != null) {
+                entity.setParameterContextId(parameterContextReference.getId());
+            }
+
             if (dto.getVersionControlInformation() != null) {
                 entity.setVersionedFlowState(dto.getVersionControlInformation().getState());
             }
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/nfeditor/languages/nfel.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/nfeditor/languages/nfel.js
index 83feb71..1f23b08 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/nfeditor/languages/nfel.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/nfeditor/languages/nfel.js
@@ -375,22 +375,28 @@
     return {
 
         /**
-         * Sets the available parameters.
-         *
-         * @param parameterListing
+         * Enables parameter referencing.
          */
-        enableParameters: function (parameterListing) {
+        enableParameters: function () {
             parameters = [];
+            parameterRegex = new RegExp('^$');
             parameterDetails = {};
 
+            parametersSupported = true;
+        },
+
+        /**
+         * Sets the available parameters.
+         *
+         * @param parameterListing
+         */
+        setParameters: function (parameterListing) {
             parameterListing.forEach(function (parameter) {
                 parameters.push(parameter.name);
                 parameterDetails[parameter.name] = parameter;
             });
 
             parameterRegex = new RegExp('^((' + parameters.join(')|(') + '))$');
-
-            parametersSupported = true;
         },
 
         /**
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/nfeditor/languages/nfpr.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/nfeditor/languages/nfpr.js
index 60dbe8f..bf190ee 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/nfeditor/languages/nfpr.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/nfeditor/languages/nfpr.js
@@ -227,22 +227,28 @@
     return {
 
         /**
-         * Sets the available parameters.
-         *
-         * @param parameterListing
+         * Enables parameter referencing.
          */
-        enableParameters: function (parameterListing) {
+        enableParameters: function () {
             parameters = [];
+            parameterRegex = new RegExp('^$');
             parameterDetails = {};
 
+            parametersSupported = true;
+        },
+
+        /**
+         * Sets the available parameters.
+         *
+         * @param parameterListing
+         */
+        setParameters: function (parameterListing) {
             parameterListing.forEach(function (parameter) {
                 parameters.push(parameter.name);
                 parameterDetails[parameter.name] = parameter;
             });
 
             parameterRegex = new RegExp('^((' + parameters.join(')|(') + '))$');
-
-            parametersSupported = true;
         },
 
         /**
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/propertytable/jquery.propertytable.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/propertytable/jquery.propertytable.js
index 59816f0..9ab4d6b 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/propertytable/jquery.propertytable.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/propertytable/jquery.propertytable.js
@@ -444,6 +444,12 @@
                 value: undefined,
                 optionClass: 'unset'
             };
+            var LOADING_PARAMETERS_OPTION = {
+                text: 'Loading parameters...',
+                value: null,
+                optionClass: 'unset',
+                disabled: true
+            };
             var CREATE_CONTROLLER_SERVICE_OPTION = {
                 text: 'Create new service...',
                 value: undefined,
@@ -458,6 +464,8 @@
             var allowableValuesCombo;
             var parameterCombo;
             var propertyDescriptor;
+            var parametersLoading = true;
+            var parametersLoaded;
 
             this.init = function () {
                 var container = $('body');
@@ -575,28 +583,39 @@
                 }).appendTo(wrapper);
 
                 if (parametersSupported) {
+                    // create the parameter combo
+                    parameterCombo = $('<div class="value-combo combo"></div>')
+                        .combo({
+                            options: [LOADING_PARAMETERS_OPTION],
+                            maxHeight: maxHeight
+                        })
+                        .css({
+                            'margin-bottom': '10px',
+                            'width': comboWidth + 'px'
+                        })
+                        .appendTo(wrapper);
+
                     // load the parameters
-                    loadParameters(propertyDescriptor, function (parameterListing) {
-                        parameterListing.forEach(function (parameter) {
-                            parameterOptions.push({
-                                text: parameter.name,
-                                value: '#{' + parameter.name + '}',
-                                description: nfCommon.escapeHtml(parameter.description)
+                    parametersLoaded = new $.Deferred(function (deferred) {
+                        loadParameters(propertyDescriptor, function (parameterListing) {
+                            parameterListing.forEach(function (parameter) {
+                                parameterOptions.push({
+                                    text: parameter.name,
+                                    value: '#{' + parameter.name + '}',
+                                    description: nfCommon.escapeHtml(parameter.description)
+                                });
                             });
-                        });
 
-                        // create the parameter combo
-                        parameterCombo = $('<div class="value-combo combo"></div>')
-                            .combo({
+                            // create the parameter combo
+                            parameterCombo.combo('destroy').combo({
                                 options: parameterOptions,
                                 maxHeight: maxHeight
-                            })
-                            .css({
-                                'margin-bottom': '10px',
-                                'width': comboWidth + 'px'
-                            })
-                            .appendTo(wrapper);
-                    });
+                            });
+
+                            deferred.resolve();
+                            parametersLoading = false;
+                        });
+                    }).promise();
                 }
 
                 // add buttons for handling user input
@@ -691,10 +710,19 @@
                         // select the option for reference a parameter
                         allowableValuesCombo.combo('setSelectedOption', PARAMETER_REFERENCE_OPTION);
 
-                        // populate the parameter combo with the parameter reference
-                        parameterCombo.combo('setSelectedOption', {
+                        // construct the initial option
+                        var initialOption = {
                             value: initialValue
-                        });
+                        };
+
+                        // populate the parameter combo with the parameter reference
+                        if (parametersLoading) {
+                            parametersLoaded.then(function () {
+                                parameterCombo.combo('setSelectedOption', initialOption);
+                            });
+                        } else {
+                            parameterCombo.combo('setSelectedOption', initialOption);
+                        }
                     }
                 }
             };
@@ -705,7 +733,14 @@
 
                 // if the value is undefined, it indicates that the value in the editor references a parameter
                 if (parametersSupported && _.isUndefined(selectedValue)) {
-                    selectedValue = parameterCombo.combo('getSelectedOption').value;
+                    selectedOption = parameterCombo.combo('getSelectedOption');
+
+                    // if the parameters are still loading, revert to the initial value, otherwise use the selected parameter
+                    if (selectedOption === LOADING_PARAMETERS_OPTION) {
+                        selectedValue = initialValue;
+                    } else {
+                        selectedValue = selectedOption.value;
+                    }
                 }
 
                 return selectedValue;
@@ -1354,9 +1389,9 @@
             var propertyDescriptor = descriptors[item.property];
 
             // sets the available parameters for the specified property descriptor
-            var loadParameters = function (propertyDescriptor, parameterDeferred, enableParameters) {
-                parameterDeferred(propertyDescriptor).done(function (parameterContext) {
-                    enableParameters(parameterContext.parameters);
+            var loadParameters = function (propertyDescriptor, parameterDeferred, setParameters) {
+                parameterDeferred(propertyDescriptor, groupId).done(function (parameters) {
+                    setParameters(parameters);
                 });
             };
 
@@ -1370,7 +1405,8 @@
                             editor: getNfEditor(function (propertyDescriptor) {
                                 if (parametersSupported) {
                                     // set the available parameters
-                                    loadParameters(propertyDescriptor, options.parameterDeferred, nf.nfel.enableParameters);
+                                    nf.nfel.enableParameters();
+                                    loadParameters(propertyDescriptor, options.parameterDeferred, nf.nfel.setParameters);
                                 } else {
                                     nf.nfel.disableParameters();
                                 }
@@ -1386,10 +1422,10 @@
                     return {
                         columns: {
                             value: {
-                                editor: getComboEditor(parametersSupported, function (propertyDescriptor, enableParameters) {
+                                editor: getComboEditor(parametersSupported, function (propertyDescriptor, setParameters) {
                                     if (parametersSupported) {
                                         // set the available parameters
-                                        loadParameters(propertyDescriptor, options.parameterDeferred, enableParameters);
+                                        loadParameters(propertyDescriptor, options.parameterDeferred, setParameters);
                                     }
                                 })
                             }
@@ -1402,7 +1438,8 @@
                                 editor: getNfEditor(function (propertyDescriptor) {
                                     if (parametersSupported) {
                                         // set the available parameters
-                                        loadParameters(propertyDescriptor, options.parameterDeferred, nf.nfpr.enableParameters);
+                                        nf.nfpr.enableParameters()
+                                        loadParameters(propertyDescriptor, options.parameterDeferred, nf.nfpr.setParameters);
                                     } else {
                                         nf.nfpr.disableParameters();
                                     }
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js
index c533ac3..9017ce4 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js
@@ -1806,38 +1806,42 @@
                     supportsGoTo: true,
                     dialogContainer: '#new-controller-service-property-container',
                     descriptorDeferred: getControllerServicePropertyDescriptor,
-                    parameterDeferred: function (propertyDescriptor) {
-                        var sensitive = nfCommon.isSensitiveProperty(propertyDescriptor);
-
-                        // set the available parameters TODO - base on sensitive property
+                    parameterDeferred: function (propertyDescriptor, groupId) {
                         return $.Deferred(function (deferred) {
-                            deferred.resolve({
-                                'parameters': [
-                                    {
-                                        name: 'param 1',
-                                        sensitive: false,
-                                        description: 'this is the description for param 1',
-                                        value: 'value 1'
-                                    },
-                                    {
-                                        name: 'param 2',
-                                        sensitive: true,
-                                        description: 'this is the description for param 2',
-                                        value: 'value 2'
-                                    },
-                                    {
-                                        name: 'param 3',
-                                        sensitive: false,
-                                        value: 'value 3'
-                                    },
-                                    {
-                                        name: 'param 4',
-                                        sensitive: false,
-                                        description: 'this is the description for param 4',
-                                        value: 'value 4'
-                                    }
-                                ]
-                            });
+                            if (nfCommon.isDefinedAndNotNull(groupId)) {
+                                var parameterContextId;
+
+                                // attempt to identify the parameter context id, conditional based on whether
+                                // the user is configuring the current process group
+                                if (groupId === nfCanvasUtils.getGroupId()) {
+                                    parameterContextId = nfCanvasUtils.getParameterContextId();
+                                } else {
+                                    var parentProcessGroup = nfCanvasUtils.getComponentByType('ProcessGroup').get(groupId);
+                                    parameterContextId = parentProcessGroup.parameterContextId;
+                                }
+
+                                if (nfCommon.isDefinedAndNotNull(parameterContextId)) {
+                                    $.ajax({
+                                        type: 'GET',
+                                        url: '../nifi-api/parameter-contexts/' + parameterContextId,
+                                        dataType: 'json'
+                                    }).done(function (response) {
+                                        var sensitive = nfCommon.isSensitiveProperty(propertyDescriptor);
+
+                                        deferred.resolve(response.component.parameters.map(function (parameterEntity) {
+                                            return parameterEntity.parameter;
+                                        }).filter(function (parameter) {
+                                            return parameter.sensitive === sensitive;
+                                        }));
+                                    }).fail(function () {
+                                        deferred.resolve([]);
+                                    });
+                                } else {
+                                    deferred.resolve([]);
+                                }
+                            } else {
+                                deferred.resolve([]);
+                            }
                         }).promise();
                     },
                     controllerServiceCreatedDeferred: function (response) {
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-configuration.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-configuration.js
index 57b7d23..aaa45f4 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-configuration.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-configuration.js
@@ -629,38 +629,34 @@
                         dataType: 'json'
                     }).fail(nfErrorHandler.handleAjaxError);
                 },
-                parameterDeferred: function (propertyDescriptor) {
-                    var sensitive = nfCommon.isSensitiveProperty(propertyDescriptor);
-
-                    // set the available parameters TODO - base on sensitive property
+                parameterDeferred: function (propertyDescriptor, groupId) {
                     return $.Deferred(function (deferred) {
-                        deferred.resolve({
-                            'parameters': [
-                                {
-                                    name: 'param 1',
-                                    sensitive: false,
-                                    description: 'this is the description for param 1',
-                                    value: 'value 1'
-                                },
-                                {
-                                    name: 'param 2',
-                                    sensitive: true,
-                                    description: 'this is the description for param 2',
-                                    value: 'value 2'
-                                },
-                                {
-                                    name: 'param 3',
-                                    sensitive: false,
-                                    value: 'value 3'
-                                },
-                                {
-                                    name: 'param 4',
-                                    sensitive: false,
-                                    description: 'this is the description for param 4',
-                                    value: 'value 4'
-                                }
-                            ]
-                        });
+                        if (nfCommon.isDefinedAndNotNull(groupId)) {
+                            // processors being configured must be in the current group
+                            var parameterContextId = nfCanvasUtils.getParameterContextId();
+
+                            if (nfCommon.isDefinedAndNotNull(parameterContextId)) {
+                                $.ajax({
+                                    type: 'GET',
+                                    url: '../nifi-api/parameter-contexts/' + parameterContextId,
+                                    dataType: 'json'
+                                }).done(function (response) {
+                                    var sensitive = nfCommon.isSensitiveProperty(propertyDescriptor);
+
+                                    deferred.resolve(response.component.parameters.map(function (parameterEntity) {
+                                        return parameterEntity.parameter;
+                                    }).filter(function (parameter) {
+                                        return parameter.sensitive === sensitive;
+                                    }));
+                                }).fail(function () {
+                                    deferred.resolve([]);
+                                });
+                            } else {
+                                deferred.resolve([]);
+                            }
+                        } else {
+                            deferred.resolve([]);
+                        }
                     }).promise();
                 },
                 goToServiceDeferred: goToServiceFromProperty