Skip to content

Commit dc07461

Browse files
committed
MinifiProcessContextGetControllerServiceFromProperty
1 parent 1d3a9b8 commit dc07461

8 files changed

Lines changed: 54 additions & 58 deletions

File tree

extension-framework/cpp-extension-lib/include/api/core/ProcessContext.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ class ProcessContext {
4040

4141
[[nodiscard]] virtual std::expected<std::string, std::error_code> getProperty(const minifi::core::PropertyReference& prop,
4242
const FlowFile* ff) const = 0;
43-
[[nodiscard]] virtual std::expected<MinifiControllerService*, std::error_code> getControllerService(std::string_view name,
44-
std::string_view type) const = 0;
43+
[[nodiscard]] virtual std::expected<MinifiControllerService*, std::error_code> getControllerService(const minifi::core::PropertyReference& prop) const = 0;
4544
[[nodiscard]] virtual bool hasNonEmptyProperty(std::string_view name) const = 0;
4645
[[nodiscard]] virtual std::map<std::string, std::string> getDynamicProperties(const FlowFile* flow_file) const = 0;
4746

@@ -55,8 +54,7 @@ class CffiProcessContext : public ProcessContext {
5554

5655
[[nodiscard]] std::expected<std::string, std::error_code> getProperty(const minifi::core::PropertyReference& property_reference,
5756
const FlowFile* flow_file) const override;
58-
[[nodiscard]] std::expected<MinifiControllerService*, std::error_code> getControllerService(std::string_view name,
59-
std::string_view type) const override;
57+
[[nodiscard]] std::expected<MinifiControllerService*, std::error_code> getControllerService(const minifi::core::PropertyReference& prop) const override;
6058
[[nodiscard]] std::map<std::string, std::string> getDynamicProperties(const FlowFile* flow_file) const override;
6159
[[nodiscard]] bool hasNonEmptyProperty(std::string_view name) const override;
6260

extension-framework/cpp-extension-lib/include/api/utils/ProcessorConfigUtils.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,12 +169,8 @@ std::optional<T> parseOptionalEnumProperty(const core::ProcessContext& context,
169169

170170
template<typename ControllerServiceType>
171171
ControllerServiceType* parseOptionalControllerService(const core::ProcessContext& context, const minifi::core::PropertyReference& prop) {
172-
const auto controller_service_name = context.getProperty(prop, nullptr);
173-
if (!controller_service_name || controller_service_name->empty()) {
174-
return nullptr;
175-
}
172+
auto service = context.getControllerService(prop.name, minifi::core::className<ControllerServiceType>());
176173

177-
auto service = context.getControllerService(*controller_service_name, minifi::core::className<ControllerServiceType>());
178174
if (!service) {
179175
return nullptr;
180176
}

extension-framework/cpp-extension-lib/mocklib/include/MockProcessContext.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ class MockProcessContext : public api::core::ProcessContext {
2929

3030
[[nodiscard]] std::expected<std::string, std::error_code> getProperty(const core::PropertyReference& property_reference,
3131
const api::core::FlowFile* flow_file) const override;
32-
[[nodiscard]] std::expected<MinifiControllerService*, std::error_code> getControllerService(std::string_view controller_service_name,
33-
std::string_view controller_service_class) const override;
32+
[[nodiscard]] std::expected<MinifiControllerService*, std::error_code> getControllerService(const minifi::core::PropertyReference& prop) const override;
3433
[[nodiscard]] std::map<std::string, std::string> getDynamicProperties(const api::core::FlowFile* flow_file) const override;
3534
[[nodiscard]] bool hasNonEmptyProperty(std::string_view name) const override;
3635

extension-framework/cpp-extension-lib/mocklib/src/MockProcessContext.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ std::expected<std::string, std::error_code> MockProcessContext::getProperty(cons
3232
return std::unexpected{make_error_code(core::PropertyErrorCode::PropertyNotSet)};
3333
}
3434

35-
std::expected<MinifiControllerService*, std::error_code> MockProcessContext::getControllerService(std::string_view, std::string_view) const {
35+
std::expected<MinifiControllerService*, std::error_code> MockProcessContext::getControllerService(const minifi::core::PropertyReference&) const {
3636
return nullptr;
3737
}
3838

extension-framework/cpp-extension-lib/mocklib/src/mock-minifi-c.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ MinifiBool MinifiProcessContextHasNonEmptyProperty(MinifiProcessContext*, Minifi
4343
throw std::runtime_error("Not implemented");
4444
}
4545

46-
MinifiStatus MinifiProcessContextGetControllerService(MinifiProcessContext*, MinifiStringView, MinifiStringView, MinifiControllerService**) {
46+
MinifiStatus MinifiProcessContextGetControllerServiceFromProperty(MinifiProcessContext*, MinifiStringView, MinifiStringView, MinifiControllerService**) {
4747
throw std::runtime_error("Not implemented");
4848
}
4949
void MinifiProcessContextGetDynamicProperties(MinifiProcessContext*, MinifiFlowFile*,

extension-framework/cpp-extension-lib/src/core/ProcessContext.cpp

Lines changed: 32 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,17 @@ bool CffiProcessContext::hasNonEmptyProperty(std::string_view name) const {
4444
return MinifiProcessContextHasNonEmptyProperty(impl_, utils::minifiStringView(name));
4545
}
4646

47-
std::expected<MinifiControllerService*, std::error_code> CffiProcessContext::getControllerService(const std::string_view name,
48-
const std::string_view type) const {
47+
std::expected<MinifiControllerService*, std::error_code> CffiProcessContext::getControllerService(const minifi::core::PropertyReference& prop) const {
4948
MinifiControllerService* controller_service = nullptr;
50-
if (const MinifiStatus status = MinifiProcessContextGetControllerService(impl_,
51-
utils::minifiStringView(name),
52-
utils::minifiStringView(type),
49+
gsl_Assert(prop.allowed_types.size() == 1);
50+
const MinifiStatus status = MinifiProcessContextGetControllerServiceFromProperty(impl_,
51+
utils::minifiStringView(prop.name),
52+
utils::minifiStringView(prop.allowed_types[0]),
5353
&controller_service);
54-
status != MINIFI_STATUS_SUCCESS) {
54+
if (status == MINIFI_STATUS_PROPERTY_NOT_SET) {
55+
return nullptr;
56+
}
57+
if (status != MINIFI_STATUS_SUCCESS) {
5558
return std::unexpected{utils::make_error_code(status)};
5659
}
5760
return controller_service;
@@ -90,35 +93,30 @@ std::expected<std::optional<utils::net::SslData>, std::error_code> CffiProcessCo
9093
}
9194

9295
std::expected<std::optional<utils::ProxyData>, std::error_code> CffiProcessContext::getProxyData(const minifi::core::PropertyReference& prop) const {
93-
const auto controller_name = getProperty(prop, nullptr);
94-
if (!controller_name) { return std::nullopt; }
95-
9696
auto proxy_data = utils::ProxyData{};
97-
if (const auto status = MinifiProcessContextGetProxyData(
98-
impl_,
99-
utils::minifiStringView(*controller_name),
100-
[](void* data, const MinifiProxyData* minifi_proxy_data) {
101-
auto* proxy = static_cast<utils::ProxyData*>(data);
102-
proxy->host = utils::toString(minifi_proxy_data->hostname);
103-
proxy->port = minifi_proxy_data->port;
104-
if (minifi_proxy_data->password && minifi_proxy_data->username) {
105-
proxy->proxy_credentials = utils::BasicAuthCredentials{.username = utils::toString(*minifi_proxy_data->username),
106-
.password = utils::toString(*minifi_proxy_data->password)};
107-
} else {
108-
proxy->proxy_credentials = std::nullopt;
109-
}
110-
if (minifi_proxy_data->proxy_type == MINIFI_PROXY_TYPE_HTTP) {
111-
proxy->proxy_type = utils::ProxyType::HTTP;
112-
} else {
113-
proxy->proxy_type = utils::ProxyType::DIRECT;
114-
}
115-
},
116-
&proxy_data);
117-
status != MINIFI_STATUS_SUCCESS) {
118-
return std::unexpected{utils::make_error_code(status)};
119-
}
120-
121-
return proxy_data;
97+
const auto status = MinifiProcessContextGetProxyDataFromProperty(
98+
impl_,
99+
utils::minifiStringView(prop.name),
100+
[](void* data, const MinifiProxyData* minifi_proxy_data) {
101+
auto* proxy = static_cast<utils::ProxyData*>(data);
102+
proxy->host = utils::toString(minifi_proxy_data->hostname);
103+
proxy->port = minifi_proxy_data->port;
104+
if (minifi_proxy_data->password && minifi_proxy_data->username) {
105+
proxy->proxy_credentials = utils::BasicAuthCredentials{.username = utils::toString(*minifi_proxy_data->username),
106+
.password = utils::toString(*minifi_proxy_data->password)};
107+
} else {
108+
proxy->proxy_credentials = std::nullopt;
109+
}
110+
if (minifi_proxy_data->proxy_type == MINIFI_PROXY_TYPE_HTTP) {
111+
proxy->proxy_type = utils::ProxyType::HTTP;
112+
} else {
113+
proxy->proxy_type = utils::ProxyType::DIRECT;
114+
}
115+
},
116+
&proxy_data);
117+
if (status == MINIFI_STATUS_PROPERTY_NOT_SET) { return std::nullopt; }
118+
if (status == MINIFI_STATUS_SUCCESS) { return proxy_data; }
119+
return std::unexpected{utils::make_error_code(status)};
122120
}
123121

124122
} // namespace org::apache::nifi::minifi::api::core

libminifi/src/minifi-c.cpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -589,9 +589,9 @@ MinifiStatus MinifiControllerServiceContextGetProperty(MinifiControllerServiceCo
589589
}
590590
}
591591

592-
MinifiStatus MinifiProcessContextGetControllerService(
592+
MinifiStatus MinifiProcessContextGetControllerServiceFromProperty(
593593
MinifiProcessContext* process_context,
594-
const MinifiStringView controller_service_name,
594+
const MinifiStringView property_name,
595595
const MinifiStringView controller_service_type,
596596
MinifiControllerService** controller_service_out) {
597597
if (!controller_service_out) {
@@ -600,8 +600,10 @@ MinifiStatus MinifiProcessContextGetControllerService(
600600

601601
gsl_Assert(process_context != MINIFI_NULL);
602602
const auto context = reinterpret_cast<minifi::core::ProcessContext*>(process_context);
603-
const auto name_str = std::string{toStringView(controller_service_name)};
604-
const auto service_shared_ptr = context->getControllerService(name_str, context->getProcessorInfo().getUUID());
603+
const auto property_name_str = std::string{toStringView(property_name)};
604+
const auto name_str = context->getProperty(property_name_str, nullptr);
605+
if (!name_str) { return MINIFI_STATUS_PROPERTY_NOT_SET; }
606+
const auto service_shared_ptr = context->getControllerService(*name_str, context->getProcessorInfo().getUUID());
605607
if (!service_shared_ptr) {
606608
return MINIFI_STATUS_VALIDATION_FAILED;
607609
}
@@ -651,12 +653,14 @@ MinifiStatus MinifiProcessContextGetSslData(MinifiProcessContext* process_contex
651653
}
652654

653655

654-
MinifiStatus MinifiProcessContextGetProxyData(MinifiProcessContext* process_context, MinifiStringView controller_service_name,
656+
MinifiStatus MinifiProcessContextGetProxyDataFromProperty(MinifiProcessContext* process_context, MinifiStringView property_name,
655657
void (*cb)(void* user_ctx, const MinifiProxyData* proxy_data), void* user_ctx) {
656658
gsl_Assert(process_context != MINIFI_NULL);
657659
const auto context = reinterpret_cast<minifi::core::ProcessContext*>(process_context);
658-
const auto name_str = std::string{toStringView(controller_service_name)};
659-
const auto service_shared_ptr = context->getControllerService(name_str, context->getProcessorInfo().getUUID());
660+
const auto property_name_str = std::string{toStringView(property_name)};
661+
const auto name_str = context->getProperty(property_name_str, nullptr);
662+
if (!name_str) { return MINIFI_STATUS_PROPERTY_NOT_SET; }
663+
const auto service_shared_ptr = context->getControllerService(*name_str, context->getProcessorInfo().getUUID());
660664
if (!service_shared_ptr) { return MINIFI_STATUS_VALIDATION_FAILED; }
661665
if (const auto proxy_service = dynamic_cast<minifi::controllers::ProxyConfigurationServiceInterface*>(service_shared_ptr.get())) {
662666
const std::string hostname = proxy_service->getHost();

minifi-api/include/minifi-c/minifi-c.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ extern "C" {
4444
/// To allow the proper usage of SSLContextServices set the MinifiPropertyDefinition::type to MINIFI_SSL_CONTEXT_SERVICE_PROPERTY_TYPE
4545
#define MINIFI_SSL_CONTEXT_SERVICE_PROPERTY_TYPE "org.apache.nifi.minifi.controllers.SSLContextServiceInterface"
4646

47-
/// To declare a processor property that expects an ProxyConfigurationService, use MINIFI_PROXY_CONFIGURATION_SERVICE_PROPERTY_TYPE in the type field of the property definition (MinifiPropertyDefinition::type)
47+
/// To declare a processor property that expects an ProxyConfigurationService,
48+
/// use MINIFI_PROXY_CONFIGURATION_SERVICE_PROPERTY_TYPE in the type field of the property definition (MinifiPropertyDefinition::type)
4849
#define MINIFI_PROXY_CONFIGURATION_SERVICE_PROPERTY_TYPE "org.apache.nifi.minifi.controllers.ProxyConfigurationServiceInterface"
4950

5051

@@ -236,8 +237,8 @@ MinifiStatus MinifiProcessContextGetProperty(MinifiProcessContext* context, Mini
236237
void(*cb)(void* user_ctx, MinifiStringView property_value), void* user_ctx);
237238
MinifiBool MinifiProcessContextHasNonEmptyProperty(MinifiProcessContext* context, MinifiStringView property_name);
238239

239-
MinifiStatus MinifiProcessContextGetControllerService(
240-
MinifiProcessContext* process_context, MinifiStringView controller_service_name, MinifiStringView controller_service_type, MinifiControllerService** controller_service_out);
240+
MinifiStatus MinifiProcessContextGetControllerServiceFromProperty(
241+
MinifiProcessContext* process_context, MinifiStringView property_name, MinifiStringView controller_service_type, MinifiControllerService** controller_service_out);
241242
void MinifiProcessContextGetDynamicProperties(MinifiProcessContext* context, MinifiFlowFile* minifi_flow_file,
242243
void (*cb)(void* user_ctx, MinifiStringView dynamic_property_name, MinifiStringView dynamic_property_value), void* user_ctx);
243244

@@ -300,7 +301,7 @@ typedef struct MinifiProxyData {
300301
MinifiProxyType proxy_type;
301302
} MinifiProxyData;
302303

303-
MinifiStatus MinifiProcessContextGetProxyData(MinifiProcessContext* process_context, MinifiStringView controller_service_name,
304+
MinifiStatus MinifiProcessContextGetProxyDataFromProperty(MinifiProcessContext* process_context, MinifiStringView property_name,
304305
void (*cb)(void* user_ctx, const MinifiProxyData* proxy_data), void* user_ctx);
305306

306307
#ifdef __cplusplus

0 commit comments

Comments
 (0)