I believe NIFI-1121 [1] covers the ability for properties to depend on
each other, it is still an open issue.  I think the workaround is to
override onPropertyModified(), and rebuild the dependent property
based on the change in value(s). The user will have to hit the Apply
button on the dialog after selecting the controller service, then when
the config dialog is re-opened, the dependent property would be
populated with the corresponding values.  See the code for
RouteOnAttribute [2] as an example, it updates the Relationships but I
think you could use it to update the properties as well. I'm not sure
if you'd get a re-entrant (or extra) call to onPropertyModified if you
change a PropertyDescriptor, so beware of that as a possibility.


Regards,
Matt

[1] https://issues.apache.org/jira/browse/NIFI-1121
[2] 
https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/RouteOnAttribute.java#L149

On Mon, May 15, 2017 at 3:31 PM, Russell Bateman <[email protected]> wrote:
> I've written a controller service that depends on another controller
> service. One of the properties in the first service builds itself using
> .identifiesControllerService( Service2.class ), but no
> .allowableValues()because it was unclear what to put.
>
> In my test code, I'm struggling as to how to reflect this relationship.
>
>    TestRunner runner = TestRunners.newTestRunner( SomeProcessor.class );
>    Service1 service1 = new Service1();
>    Service2 service2 = new Service2();
>
>    runner.addControllerService( "foo",  service1 );
>    runner.setProperty( service1, ..., "" );              // typical
>    setProperty() call
>    *runner.setProperty( service1, ..., service2 );  // this won't
>    compile; it's not an allowable value*
>
>    runner.enableControllerService( service1 );
>    runner.assertValid( service1 );
>    etc.
>
> How is this really done?
>
> Thanks.

Reply via email to