From 19c9061faaa68912034ddc7a34c2c0ea48dc83f3 Mon Sep 17 00:00:00 2001 From: Rob Fellows Date: Mon, 12 Aug 2024 09:42:13 -0400 Subject: [PATCH 1/4] [NIFI-13641] - Remove parameter value from parameter context update request if there are referenced assets --- .../parameter-context-listing.effects.ts | 16 +++++++++++++++- .../parameter-table/parameter-table.component.ts | 7 ++++++- .../apps/nifi/src/app/state/shared/index.ts | 6 ++++++ .../edit-parameter-dialog.component.ts | 13 +++++++++++-- 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/state/parameter-context-listing/parameter-context-listing.effects.ts b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/state/parameter-context-listing/parameter-context-listing.effects.ts index f161e0305632..bc38713a813b 100644 --- a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/state/parameter-context-listing/parameter-context-listing.effects.ts +++ b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/state/parameter-context-listing/parameter-context-listing.effects.ts @@ -51,7 +51,9 @@ import { EditParameterRequest, EditParameterResponse, Parameter, - ParameterContextUpdateRequest + ParameterContextUpdateRequest, + ParameterEntity, + SubmitParameterContextUpdate } from '../../../../state/shared'; import { EditParameterDialog } from '../../../../ui/common/edit-parameter-dialog/edit-parameter-dialog.component'; import { OkDialog } from '../../../../ui/common/ok-dialog/ok-dialog.component'; @@ -401,6 +403,18 @@ export class ParameterContextListingEffects { this.actions$.pipe( ofType(ParameterContextListingActions.submitParameterContextUpdateRequest), map((action) => action.request), + map((request) => { + // The backend api doesn't support providing both a parameter value and referenced assets + // even though it returns both from the GET api. We must strip the value out if there are + // referenced assets. + const modifiedRequest: SubmitParameterContextUpdate = structuredClone(request); + modifiedRequest.payload.component.parameters.forEach((parameter: ParameterEntity) => { + if ((parameter.parameter.referencedAssets || []).length > 0) { + parameter.parameter.value = null; + } + }); + return modifiedRequest; + }), switchMap((request) => from(this.parameterContextService.submitParameterContextUpdate(request)).pipe( map((response) => diff --git a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.ts b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.ts index bfa87009ae1e..70f10fbb30c3 100644 --- a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.ts +++ b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.ts @@ -309,6 +309,10 @@ export class ParameterTable implements AfterViewInit, ControlValueAccessor { item.entity.parameter.valueRemoved = parameter.valueRemoved; item.dirty = true; + if (valueChanged) { + item.entity.parameter.referencedAssets = undefined; + } + this.handleChanged(); } }); @@ -368,7 +372,8 @@ export class ParameterTable implements AfterViewInit, ControlValueAccessor { sensitive: item.entity.parameter.sensitive, description: item.entity.parameter.description, value: item.entity.parameter.value, - valueRemoved: item.entity.parameter.valueRemoved + valueRemoved: item.entity.parameter.valueRemoved, + referencedAssets: item.entity.parameter.referencedAssets } }; } diff --git a/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts b/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts index 5deab78f2cd8..d3d02cd64e87 100644 --- a/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts +++ b/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts @@ -312,6 +312,11 @@ export interface BulletinEntity { }; } +export interface ReferencedAsset { + id?: string; + name: string; +} + export interface ParameterEntity { canWrite?: boolean; parameter: Parameter; @@ -327,6 +332,7 @@ export interface Parameter { referencingComponents?: AffectedComponentEntity[]; parameterContext?: ParameterContextReferenceEntity; inherited?: boolean; + referencedAssets?: ReferencedAsset[]; } export interface ParameterContextEntity { diff --git a/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/edit-parameter-dialog/edit-parameter-dialog.component.ts b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/edit-parameter-dialog/edit-parameter-dialog.component.ts index 01285214486c..171879375fcd 100644 --- a/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/edit-parameter-dialog/edit-parameter-dialog.component.ts +++ b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/edit-parameter-dialog/edit-parameter-dialog.component.ts @@ -17,7 +17,7 @@ import { Component, EventEmitter, Inject, Input, Output } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog'; -import { EditParameterRequest, EditParameterResponse, Parameter } from '../../../state/shared'; +import { EditParameterRequest, EditParameterResponse, Parameter, ReferencedAsset } from '../../../state/shared'; import { MatButtonModule } from '@angular/material/button'; import { AbstractControl, @@ -68,6 +68,8 @@ export class EditParameterDialog extends CloseOnEscapeDialog { editParameterForm: FormGroup; isNew: boolean; + private originalParameter: Parameter | undefined = undefined; + constructor( @Inject(MAT_DIALOG_DATA) public request: EditParameterRequest, private formBuilder: FormBuilder @@ -77,6 +79,7 @@ export class EditParameterDialog extends CloseOnEscapeDialog { // seed the form for the new parameter. when existingParameters are not specified, this is the // existing parameter that populates the form const parameter: Parameter | undefined = request.parameter; + this.originalParameter = parameter; const validators: any[] = [Validators.required]; if (request.existingParameters) { @@ -162,6 +165,11 @@ export class EditParameterDialog extends CloseOnEscapeDialog { okClicked(): void { const value: string = this.editParameterForm.get('value')?.value; const empty: boolean = this.editParameterForm.get('empty')?.value; + let referencedAssets: ReferencedAsset[] | undefined = undefined; + + if (this.originalParameter) { + referencedAssets = this.originalParameter.referencedAssets; + } this.editParameter.next({ parameter: { @@ -169,7 +177,8 @@ export class EditParameterDialog extends CloseOnEscapeDialog { value: value === '' && !empty ? null : value, valueRemoved: value === '' && !empty, sensitive: this.editParameterForm.get('sensitive')?.value, - description: this.editParameterForm.get('description')?.value + description: this.editParameterForm.get('description')?.value, + referencedAssets } }); } From f3ec1806e2feca8e3a51c061ae1adcf654da9d21 Mon Sep 17 00:00:00 2001 From: Rob Fellows Date: Wed, 14 Aug 2024 11:56:30 -0400 Subject: [PATCH 2/4] move parameter sanitization of referenced assets/value into the payload construction rather than in the effect --- .../parameter-context-listing.effects.ts | 18 ++---------------- .../edit-parameter-context.component.ts | 12 +++++++++++- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/state/parameter-context-listing/parameter-context-listing.effects.ts b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/state/parameter-context-listing/parameter-context-listing.effects.ts index bc38713a813b..6da70b863d9e 100644 --- a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/state/parameter-context-listing/parameter-context-listing.effects.ts +++ b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/state/parameter-context-listing/parameter-context-listing.effects.ts @@ -51,9 +51,7 @@ import { EditParameterRequest, EditParameterResponse, Parameter, - ParameterContextUpdateRequest, - ParameterEntity, - SubmitParameterContextUpdate + ParameterContextUpdateRequest } from '../../../../state/shared'; import { EditParameterDialog } from '../../../../ui/common/edit-parameter-dialog/edit-parameter-dialog.component'; import { OkDialog } from '../../../../ui/common/ok-dialog/ok-dialog.component'; @@ -61,7 +59,7 @@ import { ErrorHelper } from '../../../../service/error-helper.service'; import { HttpErrorResponse } from '@angular/common/http'; import { isDefinedAndNotNull, MEDIUM_DIALOG, SMALL_DIALOG, XL_DIALOG } from 'libs/shared/src'; import { BackNavigation } from '../../../../state/navigation'; -import { Storage, NiFiCommon } from '@nifi/shared'; +import { NiFiCommon, Storage } from '@nifi/shared'; @Injectable() export class ParameterContextListingEffects { @@ -403,18 +401,6 @@ export class ParameterContextListingEffects { this.actions$.pipe( ofType(ParameterContextListingActions.submitParameterContextUpdateRequest), map((action) => action.request), - map((request) => { - // The backend api doesn't support providing both a parameter value and referenced assets - // even though it returns both from the GET api. We must strip the value out if there are - // referenced assets. - const modifiedRequest: SubmitParameterContextUpdate = structuredClone(request); - modifiedRequest.payload.component.parameters.forEach((parameter: ParameterEntity) => { - if ((parameter.parameter.referencedAssets || []).length > 0) { - parameter.parameter.value = null; - } - }); - return modifiedRequest; - }), switchMap((request) => from(this.parameterContextService.submitParameterContextUpdate(request)).pipe( map((response) => diff --git a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts index bd4726901fea..ef96fdd08626 100644 --- a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts +++ b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts @@ -167,6 +167,16 @@ export class EditParameterContext extends TabbedDialog { this.parameters = []; } + // The backend api doesn't support providing both a parameter value and referenced assets + // even though it returns both from the GET api. We must strip the value out if there are + // referenced assets. + const sanitizedParameters: ParameterEntity[] = this.parameters.slice(); + sanitizedParameters.forEach((parameter: ParameterEntity) => { + if ((parameter.parameter.referencedAssets || []).length > 0) { + parameter.parameter.value = null; + } + }); + const payload: any = { revision: this.client.getRevision(pc), disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(), @@ -175,7 +185,7 @@ export class EditParameterContext extends TabbedDialog { id: pc.id, name: this.editParameterContextForm.get('name')?.value, description: this.editParameterContextForm.get('description')?.value, - parameters: this.parameters, + parameters: sanitizedParameters, inheritedParameterContexts: this.editParameterContextForm.get('inheritedParameterContexts')?.value } }; From f62de695ac51fd7efe8a680f0f84ae71a638b591 Mon Sep 17 00:00:00 2001 From: Rob Fellows Date: Wed, 14 Aug 2024 12:10:26 -0400 Subject: [PATCH 3/4] rename variable --- .../edit-parameter-context.component.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts index ef96fdd08626..328e35154f6e 100644 --- a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts +++ b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts @@ -170,8 +170,8 @@ export class EditParameterContext extends TabbedDialog { // The backend api doesn't support providing both a parameter value and referenced assets // even though it returns both from the GET api. We must strip the value out if there are // referenced assets. - const sanitizedParameters: ParameterEntity[] = this.parameters.slice(); - sanitizedParameters.forEach((parameter: ParameterEntity) => { + const updatedParameters: ParameterEntity[] = this.parameters.slice(); + updatedParameters.forEach((parameter: ParameterEntity) => { if ((parameter.parameter.referencedAssets || []).length > 0) { parameter.parameter.value = null; } @@ -185,7 +185,7 @@ export class EditParameterContext extends TabbedDialog { id: pc.id, name: this.editParameterContextForm.get('name')?.value, description: this.editParameterContextForm.get('description')?.value, - parameters: sanitizedParameters, + parameters: updatedParameters, inheritedParameterContexts: this.editParameterContextForm.get('inheritedParameterContexts')?.value } }; From a570bd41368168e2a0c92ea7796af7feb6ecade6 Mon Sep 17 00:00:00 2001 From: Rob Fellows Date: Wed, 14 Aug 2024 12:30:33 -0400 Subject: [PATCH 4/4] remove optionality of id from ReferencedAsset interface --- .../src/main/frontend/apps/nifi/src/app/state/shared/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts b/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts index d3d02cd64e87..3c1fddbbc339 100644 --- a/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts +++ b/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts @@ -313,7 +313,7 @@ export interface BulletinEntity { } export interface ReferencedAsset { - id?: string; + id: string; name: string; }