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.
