Github user kevdoran commented on a diff in the pull request:
https://github.com/apache/nifi-minifi/pull/118#discussion_r175587202
--- Diff:
minifi-c2/minifi-c2-commons/src/main/java/org/apache/nifi/minifi/c2/model/extension/ExtensionComponent.java
---
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.minifi.c2.model.extension;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A component provided by an extension bundle
+ */
+@ApiModel
+public class ExtensionComponent extends DefinedType {
+
+ // TODO, does arch/binary/compiler metadata need to be added here?
+
+ private List<DefinedType> providedApiImplementations;
+
+ private String description;
+ private Set<String> tags;
+
+ private Boolean deprecated;
+ private String deprecationReason;
+
+ @ApiModelProperty("If this type represents a provider for an
interface, this lists the APIs it implements")
+ public List<DefinedType> getProvidedApiImplementations() {
+ return providedApiImplementations;
+ }
+
+ public void setProvidedApiImplementations(List<DefinedType>
providedApiImplementations) {
+ this.providedApiImplementations = providedApiImplementations;
--- End diff --
The intention of this field is to allow a component to declare that it
provides an implementation of an interface defined by another DefinedType.
The goal (the details of which can change) is to allow bundles to declare
interfaces/headers as DefinedTypes that other components can provide
implementations for.
This is used in the NiFi UI, so will also likely be useful in the [Flow
Designer](https://lists.apache.org/thread.html/b720ff7b6e4e88fb23163b279f2d71eb125df18d1be8a7fca1c9b28d@%3Cdev.nifi.apache.org%3E).
In NiFi, it is used so that property descriptors can mark a property as
requiring an API implementation selection as its value, so that those options
can be presented in a drop down selection. That is one thought of how this will
be used in this context.
Another possible use case of this is defining an interface in version 1.0
of and extension bundle and letting implementations of that interface
explicitly declare support for in future versions of the bundle. For example,
you could have:
MyBundle v1.0.0
apis: [org::apache:nifi:minifi::DatabaseService]
controllerServices: org::apache:nifi:minifi::DatabaseServiceImpl
provides:
[MyBundle/v1.0.0/org::apache:nifi:minifi::DatabaseService]
MyBundle v1.0.1
controllerServices: org::apache:nifi:minifi::DatabaseServiceImpl
provides:
[MyBundle/v1.0.0/org::apache:nifi:minifi::DatabaseService]
MyBundle v1.1.0
apis: [org::apache:nifi:minifi::DatabaseService]
controllerServices: org::apache:nifi:minifi::DatabaseServiceImpl
provides:
[MyBundle/v1.0.0/org::apache:nifi:minifi::DatabaseService,
MyBundle/v1.1.0/org::apache:nifi:minifi::DatabaseService]
MyBundle v2.0.0
apis: [org::apache:nifi:minifi::DatabaseService]
controllerServices: org::apache:nifi:minifi::DatabaseServiceImpl
provides:
[MyBundle/v2.0.0/org::apache:nifi:minifi::DatabaseService]
In this example, an API is defined in a 1.0, improved in a patch release,
evolved in a minor release, and then ultimately rethought with breaking changes
in a 2.0. The implementation of the ControllerService API, which happens to be
in the same bundle in this example, can declare compatibility with current or
previous versions.
---