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