sfc-gh-rpaulin commented on code in PR #10916:
URL: https://github.com/apache/nifi/pull/10916#discussion_r2830198064


##########
nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/controller/StandardProcessorNode.java:
##########
@@ -1140,89 +1140,87 @@ protected Collection<ValidationResult> 
computeValidationErrors(final ValidationC
     }
 
     @Override
-    public List<ValidationResult> validateConfig() {
+    public List<ValidationResult> validateConfig(final ValidationContext 
validationContext) {
 
         final List<ValidationResult> results = new ArrayList<>();
-        final ParameterContext parameterContext = getParameterContext();
-
-        if (parameterContext == null && !this.parameterReferences.isEmpty()) {
-            results.add(new ValidationResult.Builder()
-                    .subject(RUN_SCHEDULE)
-                    .input("Parameter Context")
-                    .valid(false)
-                    .explanation("Processor configuration references one or 
more Parameters but no Parameter Context is currently set on the Process 
Group.")
-                    .build());
-        } else {
-            for (final ParameterReference paramRef : parameterReferences) {
-                final Optional<Parameter> parameterRef = 
parameterContext.getParameter(paramRef.getParameterName());
-                if (!parameterRef.isPresent()) {
-                    results.add(new ValidationResult.Builder()
-                            .subject(RUN_SCHEDULE)
-                            .input(paramRef.getParameterName())
-                            .valid(false)
-                            .explanation("Processor configuration references 
Parameter '" + paramRef.getParameterName() +
-                                    "' but the currently selected Parameter 
Context does not have a Parameter with that name")
-                            .build());
-                } else {
-                    final ParameterDescriptor parameterDescriptor = 
parameterRef.get().getDescriptor();
-                    if (parameterDescriptor.isSensitive()) {
-                        results.add(new ValidationResult.Builder()
-                                .subject(RUN_SCHEDULE)
-                                .input(parameterDescriptor.getName())
-                                .valid(false)
-                                .explanation("Processor configuration cannot 
reference sensitive parameters")
-                                .build());
-                    }
-                }
-            }
 
-            final String schedulingPeriod = getSchedulingPeriod();
-            final String evaluatedSchedulingPeriod = 
evaluateParameters(schedulingPeriod);
+        for (final ParameterReference paramRef : parameterReferences) {
+            final String paramName = paramRef.getParameterName();
 
-            if (evaluatedSchedulingPeriod != null) {
-                switch (schedulingStrategy) {
-                    case CRON_DRIVEN: {
-                        try {
-                            CronExpression.parse(evaluatedSchedulingPeriod);
-                        } catch (final Exception e) {
+            if (!validationContext.isParameterDefined(paramName)) {
+                results.add(new ValidationResult.Builder()
+                        .subject(RUN_SCHEDULE)
+                        .input(paramName)
+                        .valid(false)
+                        .explanation("Processor configuration references 
Parameter '" + paramName +
+                                "' but the currently selected Parameter 
Context does not have a Parameter with that name")
+                        .build());
+            } else {
+                final ParameterContext parameterContext = 
getParameterContext();
+                if (parameterContext != null) {
+                    final Optional<Parameter> parameterFromContext = 
parameterContext.getParameter(paramName);
+                    if (parameterFromContext.isPresent()) {
+                        final ParameterDescriptor parameterDescriptor = 
parameterFromContext.get().getDescriptor();
+                        if (parameterDescriptor.isSensitive()) {
                             results.add(new ValidationResult.Builder()
                                     .subject(RUN_SCHEDULE)
-                                    .input(schedulingPeriod)
+                                    .input(parameterDescriptor.getName())
                                     .valid(false)
-                                    .explanation("Scheduling Period is not a 
valid cron expression")
+                                    .explanation("Processor configuration 
cannot reference sensitive parameters")
                                     .build());
                         }
                     }

Review Comment:
   Good question.  I kept the ParameterContext there because it gave direct 
access to the Parameter which is needed to get the ParameterDescriptor which is 
needed to check the sensitivity.  I could have exposed another method on the 
ValidationContext to getParameter using the parameterLookup object in there.  
So what you're suggesting is possible with another nifi-api change.  I suppose 
I may have been being conservative in my change since I hadn't seem Parameter 
objects exposed directly from this interface.  Perhaps adding another method 
would be fine?
   
   ```
   public Optional<Parameter> getParameter(final String parameterName){
           return parameterLookup.getParameter(parameterName);
       }
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to