From aa07378a0322ca314524154066dc552739adbae5 Mon Sep 17 00:00:00 2001 From: Rob Fellows Date: Tue, 3 Sep 2019 12:31:03 -0400 Subject: [PATCH] NIFI-6505 - Addressing review feedback: reuse single method for getting parameter field values. --- .../js/nf/canvas/nf-parameter-contexts.js | 141 +++++++----------- 1 file changed, 56 insertions(+), 85 deletions(-) diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-parameter-contexts.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-parameter-contexts.js index e3eac2c9f9..49aa47ed52 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-parameter-contexts.js +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-parameter-contexts.js @@ -761,7 +761,7 @@ * Adds a new parameter. */ var addNewParameter = function () { - var param = getParameterFromFieldValues(); + var param = serializeParameter(); var parameterGrid = $('#parameter-table').data('gridInstance'); var parameterData = parameterGrid.getData(); @@ -809,25 +809,24 @@ /** * Builds a parameter object from the user-entered parameter inputs * + * @param originalParameter Optional parameter to compare value against to determine if it has changed * @return {{isEmptyStringSet: *, name: *, description: *, sensitive: *, value: *}} */ - var getParameterFromFieldValues = function () { + var serializeParameter = function (originalParameter) { var name = $.trim($('#parameter-name').val()); - var value = $('#parameter-value-field').val(); - var description = $('#parameter-description-field').val(); - var isSensitive = $('#parameter-dialog').find('input[name="sensitive"]:checked').val() === 'sensitive' ? true : false; var isEmptyStringSet = $('#parameter-set-empty-string-field').hasClass('checkbox-checked'); - if (_.isEmpty(value)) { - value = isEmptyStringSet ? '' : null; - } + var serializedValue = serializeValue($('#parameter-value-field'), originalParameter, isEmptyStringSet); + var description = $('#parameter-description-field').val(); + var isSensitive = $('#parameter-dialog').find('input[name="sensitive"]:checked').val() === 'sensitive' ? true : false; return { name: name, - value: value, + value: serializedValue.value, description: description, sensitive: isSensitive, - isEmptyStringSet: isEmptyStringSet + isEmptyStringSet: isEmptyStringSet, + hasValueChanged: serializedValue.hasChanged } }; @@ -835,9 +834,10 @@ * Checks the validity of a parameter * @param parameter Parameter to validate * @param existingParameters Existing parameters to verify there are no duplicates + * @param editMode boolean indicating if validation should account for editing an existing parameter * @return {boolean} */ - var validateParameter = function (parameter, existingParameters) { + var validateParameter = function (parameter, existingParameters, editMode) { if (parameter.name === '') { nfDialog.showOkDialog({ headerText: 'Configuration Error', @@ -859,7 +859,8 @@ // validate the parameter is not a duplicate var matchingParameter = _.find(existingParameters, { name: parameter.name }); - if (_.isNil(matchingParameter)) { + // Valid if no duplicate is found or it is edit mode and a matching parameter was found + if (_.isNil(matchingParameter) || (editMode === true && !_.isNil(matchingParameter))) { return true; } else { var matchingParamIsHidden = _.get(matchingParameter, 'hidden', false); @@ -889,7 +890,7 @@ var value = input.val(); if (!nfCommon.isBlank(value)) { // if the value is sensitive and the user has not made a change - if (parameter.sensitive === true && input.hasClass('sensitive') && parameter.isNew === false) { + if (!_.isEmpty(parameter) && parameter.sensitive === true && input.hasClass('sensitive') && parameter.isNew === false) { serializedValue = parameter.previousValue; hasChanged = false; } else { @@ -912,77 +913,53 @@ /** * Update a parameter. + * + * @param originalParameter that is being edited */ - var updateParameter = function () { - var parameterName = $('#parameter-name').val(); + var updateParameter = function (originalParameter) { + var serializedParam = serializeParameter(originalParameter); + var parameterGrid = $('#parameter-table').data('gridInstance'); + var parameterData = parameterGrid.getData(); - // ensure the parameter name is specified - if (parameterName !== '') { - var parameterGrid = $('#parameter-table').data('gridInstance'); - var parameterData = parameterGrid.getData(); + var isValid = validateParameter(serializedParam, parameterData.getItems(), true); - // ensure the parameter name is unique - var matchingParameter = null; - $.each(parameterData.getItems(), function (_, item) { - if (parameterName === item.name) { - matchingParameter = item; - return false; - } + if (isValid) { + var parameter = _.extend({}, originalParameter, { + id: originalParameter.id, + hidden: false, + type: 'Parameter', + sensitive: originalParameter.sensitive, + name: originalParameter.name, + description: serializedParam.description, + referencingComponents: originalParameter.referencingComponents, + previousValue: originalParameter.value, + previousDescription: originalParameter.description, + isEditable: originalParameter.isEditable, + isEmptyStringSet: serializedParam.isEmptyStringSet, + isNew: originalParameter.isNew, + hasValueChanged: serializedParam.hasValueChanged, + isModified: serializedParam.value !== originalParameter.value || serializedParam.description !== originalParameter.description }); - if (matchingParameter !== null) { - var isChecked = $('#parameter-set-empty-string-field').hasClass('checkbox-checked'); + // update row for the parameter + parameterData.updateItem(originalParameter.id, parameter); - var parameter = { - id: matchingParameter.id, - hidden: false, - type: 'Parameter', - sensitive: matchingParameter.sensitive, - name: parameterName, - description: $('#parameter-description-field').val(), - referencingComponents: matchingParameter.referencingComponents, - previousValue: matchingParameter.value, - previousDescription: matchingParameter.description, - isEditable: matchingParameter.isEditable, - isEmptyStringSet: isChecked, - isNew: matchingParameter.isNew - }; + // sort the data + parameterData.reSort(); - var input = $('#parameter-value-field'); - var serializedValue = serializeValue(input, parameter, isChecked); - parameter.value = serializedValue.value; - parameter.isModified = serializedValue.hasChanged || parameter.description !== parameter.previousDescription; - parameter.hasValueChanged = serializedValue.hasChanged; - - // update row for the parameter - parameterData.updateItem(matchingParameter.id, parameter); - - // sort the data - parameterData.reSort(); - - // select the parameter row - var row = parameterData.getRowById(matchingParameter.id); - parameterGrid.setActiveCell(row, parameterGrid.getColumnIndex('value')); - } else { - nfDialog.showOkDialog({ - headerText: 'Parameter Does Not Exists', - dialogContent: 'A parameter with this name does not exist.' - }); - } + // select the parameter row + var row = parameterData.getRowById(originalParameter.id); + parameterGrid.setActiveCell(row, parameterGrid.getColumnIndex('value')); // close the new parameter dialog $('#parameter-dialog').modal('hide'); - - // update the buttons to possibly trigger the disabled state - $('#parameter-context-dialog').modal('refreshButtons'); - } else { - nfDialog.showOkDialog({ - headerText: 'Create Parameter Error', - dialogContent: 'The name of the parameter must be specified.' - }); } + + // update the buttons to possibly trigger the disabled state + $('#parameter-context-dialog').modal('refreshButtons'); }; + /** * Updates parameter contexts by issuing an update request and polling until it's completion. * @@ -1598,19 +1575,12 @@ text: '#ffffff' }, disabled: function () { - var input = $('#parameter-value-field'); - var isChecked = $('#parameter-set-empty-string-field').hasClass('checkbox-checked'); - var serializedValue = serializeValue(input, parameter, isChecked); - - var description = $('#parameter-description-field').val(); - - var hasChanged = serializedValue.hasChanged || description !== parameter.previousDescription; - - return !hasChanged; + var param = serializeParameter(parameter); + return param.value === parameter.value && param.description === parameter.description; }, handler: { click: function () { - updateParameter(); + updateParameter(parameter); } } }, { @@ -1796,7 +1766,8 @@ text: '#ffffff' }, disabled: function () { - if ($('#parameter-name').val() !== '') { + var param = serializeParameter(); + if (param.name !== '') { return false; } return true; @@ -1875,14 +1846,14 @@ text: '#ffffff' }, disabled: function () { - var parameterName = $('#parameter-name').val(); + var param = serializeParameter(); var isUpdatingParameterContext = $('#parameter-context-updating-status').hasClass('show-status'); if (isUpdatingParameterContext) { return true; } - if (parameterName !== '') { + if (param.name !== '') { return false; } return true; @@ -2401,7 +2372,7 @@ showUpdateStatus(true); var existingParameters = parameterContextEntity.component.parameters.map(function(p) { return p.parameter }); - var parameter = getParameterFromFieldValues(); + var parameter = serializeParameter(); var isValid = validateParameter(parameter, existingParameters);