markap14 commented on a change in pull request #5113:
URL: https://github.com/apache/nifi/pull/5113#discussion_r658276451
##########
File path:
nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/main/java/org/apache/nifi/stateless/engine/StandardStatelessEngine.java
##########
@@ -182,6 +197,98 @@ public StatelessDataflow createFlow(final
DataflowDefinition<VersionedFlowSnapsh
return dataflow;
}
+ private ParameterProvider createParameterProvider(final
DataflowDefinition<?> dataflowDefinition) {
+ // Create a Provider for each definition
+ final List<ParameterProvider> providers = new ArrayList<>();
+ for (final ParameterProviderDefinition definition :
dataflowDefinition.getParameterProviderDefinitions()) {
+ providers.add(createParameterProvider(definition));
+ }
+
+ // Create a Composite Parameter Provider that wraps all of the others.
+ final CompositeParameterProvider provider = new
CompositeParameterProvider(providers);
+ final ParameterProviderInitializationContext initializationContext =
new StandardParameterProviderInitializationContext(provider,
Collections.emptyMap(), UUID.randomUUID().toString());
+ provider.initialize(initializationContext);
+ return provider;
+ }
+
+ private ParameterProvider createParameterProvider(final
ParameterProviderDefinition definition) {
+ final BundleCoordinate bundleCoordinate =
determineBundleCoordinate(definition, "Parameter Provider");
+ final Bundle bundle = extensionManager.getBundle(bundleCoordinate);
+ if (bundle == null) {
+ throw new IllegalStateException("Unable to find bundle for
coordinate " + bundleCoordinate.getCoordinate());
+ }
+
+ final String providerType = definition.getType();
+
+ final String providerId = UUID.randomUUID().toString();
+ final InstanceClassLoader classLoader =
extensionManager.createInstanceClassLoader(providerType, providerId, bundle,
Collections.emptySet());
+
+ try {
+ final Class<?> rawClass = Class.forName(providerType, true,
classLoader);
+ Thread.currentThread().setContextClassLoader(classLoader);
+
+ final ParameterProvider parameterProvider = (ParameterProvider)
rawClass.newInstance();
+
+ // Initialize the provider
+ final Map<String, String> properties =
resolveProperties(definition.getPropertyValues(), parameterProvider,
parameterProvider.getPropertyDescriptors());
+ final ParameterProviderInitializationContext initializationContext
= new StandardParameterProviderInitializationContext(parameterProvider,
properties, providerId);
+ parameterProvider.initialize(initializationContext);
+
+ // Ensure that the Parameter Provider is valid.
+ final List<ValidationResult> validationResults =
validate(parameterProvider, properties, providerId);
+ if (!validationResults.isEmpty()) {
+ throw new IllegalStateException("Parameter Provider with name
<" + definition.getName() + "> is not valid: " + validationResults);
+ }
+
+ return parameterProvider;
+ } catch (final Exception e) {
+ throw new IllegalStateException("Could not create Parameter
Provider " + definition.getName() + " of type " + definition.getType(), e);
+ }
+ }
+
+ private List<ValidationResult> validate(final ConfigurableComponent
component, final Map<String, String> properties, final String componentId) {
+ final Map<PropertyDescriptor, PropertyConfiguration>
explicitlyConfiguredPropertyMap = new HashMap<>();
+
+ for (final Map.Entry<String, String> property : properties.entrySet())
{
+ final String propertyName = property.getKey();
+ final String propertyValue = property.getValue();
+
+ final PropertyDescriptor descriptor =
component.getPropertyDescriptor(propertyName);
+ final PropertyConfiguration propertyConfiguration = new
PropertyConfiguration(propertyValue, null, Collections.emptyList());
Review comment:
Ah yes, now that I have fixed the validation, I need that provider to
actually be valid :( Will fix.
--
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.
For queries about this service, please contact Infrastructure at:
[email protected]