lordgamez commented on code in PR #1503:
URL: https://github.com/apache/nifi-minifi-cpp/pull/1503#discussion_r1150922408


##########
controller/MiNiFiController.cpp:
##########
@@ -15,57 +15,52 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <fcntl.h>
-#include <cstdio>
-#include <semaphore.h>
-#include <csignal>
 #include <vector>
-#include <queue>
-#include <map>
 #include <iostream>
 
-#include "core/Core.h"
-
-#include "core/FlowConfiguration.h"
-#include "core/ConfigurationFactory.h"
-#include "core/RepositoryFactory.h"
-#include "FlowController.h"
 #include "MainHelper.h"
 #include "properties/Configure.h"
 #include "Controller.h"
 #include "c2/ControllerSocketProtocol.h"
+#include "core/controller/ControllerService.h"
+#include "core/extension/ExtensionManager.h"
+#include "io/StreamFactory.h"
+#include "core/ConfigurationFactory.h"
 
 #include "cxxopts.hpp"
 
 namespace minifi = org::apache::nifi::minifi;
 
-int main(int argc, char **argv) {
-  const auto logger = 
minifi::core::logging::LoggerConfiguration::getConfiguration().getLogger("controller");
+std::shared_ptr<minifi::core::controller::ControllerService> 
getControllerService(const std::shared_ptr<minifi::Configure> &configuration,
+    const std::string &service_name, const std::string& minifi_home) {
+  std::string nifi_configuration_class_name = "yamlconfiguration";
 
-  const std::string minifiHome = determineMinifiHome(logger);
-  if (minifiHome.empty()) {
-    // determineMinifiHome already logged everything we need
-    return -1;
-  }
+  minifi::core::extension::ExtensionManager::get().initialize(configuration);
 
-  const auto configuration = std::make_shared<minifi::Configure>();
-  configuration->setHome(minifiHome);
-  configuration->loadConfigureFile(DEFAULT_NIFI_PROPERTIES_FILE);
+  configuration->get(minifi::Configure::nifi_configuration_class_name, 
nifi_configuration_class_name);
+  const auto stream_factory = 
minifi::io::StreamFactory::getInstance(configuration);
+  auto flow_configuration = minifi::core::createFlowConfiguration(
+    minifi::core::ConfigurationContext{nullptr, nullptr, stream_factory, 
configuration, std::filesystem::path(minifi_home) / "conf" / "config.yml"}, 
nifi_configuration_class_name);
 
-  const auto log_properties = 
std::make_shared<minifi::core::logging::LoggerProperties>();
-  log_properties->setHome(minifiHome);
-  log_properties->loadConfigureFile(DEFAULT_LOG_PROPERTIES_FILE);
-  
minifi::core::logging::LoggerConfiguration::getConfiguration().initialize(log_properties);
+  auto root = flow_configuration->getRoot();
+  if (!root) {
+    return nullptr;
+  }
+  auto controller = root->findControllerService(service_name);
+  if (!controller) {
+    return nullptr;
+  }
+  return controller->getControllerServiceImplementation();
+}
 
+std::shared_ptr<minifi::controllers::SSLContextService> 
getSSLContextService(const std::shared_ptr<minifi::Configure>& configuration, 
const std::string& minifi_home) {
+  std::shared_ptr<minifi::controllers::SSLContextService> secure_context;
   std::string context_name;
-
-  std::shared_ptr<minifi::controllers::SSLContextService> secure_context = 
nullptr;
-
   // if the user wishes to use a controller service we need to instantiate the 
flow
-  if (configuration->get("controller.ssl.context.service", context_name)) {
-    const auto service = getControllerService(configuration, context_name);
+  if (configuration->get(minifi::Configure::controller_ssl_context_service, 
context_name)) {
+    const auto service = getControllerService(configuration, context_name, 
minifi_home);
     if (nullptr != service) {
-      secure_context = 
std::static_pointer_cast<minifi::controllers::SSLContextService>(service);
+      secure_context = 
std::dynamic_pointer_cast<minifi::controllers::SSLContextService>(service);

Review Comment:
   You are right, it's better that way updated in 
a582bd90b8f188e1cc20bc2e9e81d358250cb230



##########
controller/MiNiFiController.cpp:
##########
@@ -15,57 +15,52 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <fcntl.h>
-#include <cstdio>
-#include <semaphore.h>
-#include <csignal>
 #include <vector>
-#include <queue>
-#include <map>
 #include <iostream>
 
-#include "core/Core.h"
-
-#include "core/FlowConfiguration.h"
-#include "core/ConfigurationFactory.h"
-#include "core/RepositoryFactory.h"
-#include "FlowController.h"
 #include "MainHelper.h"
 #include "properties/Configure.h"
 #include "Controller.h"
 #include "c2/ControllerSocketProtocol.h"
+#include "core/controller/ControllerService.h"
+#include "core/extension/ExtensionManager.h"
+#include "io/StreamFactory.h"
+#include "core/ConfigurationFactory.h"
 
 #include "cxxopts.hpp"
 
 namespace minifi = org::apache::nifi::minifi;
 
-int main(int argc, char **argv) {
-  const auto logger = 
minifi::core::logging::LoggerConfiguration::getConfiguration().getLogger("controller");
+std::shared_ptr<minifi::core::controller::ControllerService> 
getControllerService(const std::shared_ptr<minifi::Configure> &configuration,
+    const std::string &service_name, const std::string& minifi_home) {
+  std::string nifi_configuration_class_name = "yamlconfiguration";
 
-  const std::string minifiHome = determineMinifiHome(logger);
-  if (minifiHome.empty()) {
-    // determineMinifiHome already logged everything we need
-    return -1;
-  }
+  minifi::core::extension::ExtensionManager::get().initialize(configuration);
 
-  const auto configuration = std::make_shared<minifi::Configure>();
-  configuration->setHome(minifiHome);
-  configuration->loadConfigureFile(DEFAULT_NIFI_PROPERTIES_FILE);
+  configuration->get(minifi::Configure::nifi_configuration_class_name, 
nifi_configuration_class_name);
+  const auto stream_factory = 
minifi::io::StreamFactory::getInstance(configuration);
+  auto flow_configuration = minifi::core::createFlowConfiguration(
+    minifi::core::ConfigurationContext{nullptr, nullptr, stream_factory, 
configuration, std::filesystem::path(minifi_home) / "conf" / "config.yml"}, 
nifi_configuration_class_name);
 
-  const auto log_properties = 
std::make_shared<minifi::core::logging::LoggerProperties>();
-  log_properties->setHome(minifiHome);
-  log_properties->loadConfigureFile(DEFAULT_LOG_PROPERTIES_FILE);
-  
minifi::core::logging::LoggerConfiguration::getConfiguration().initialize(log_properties);
+  auto root = flow_configuration->getRoot();
+  if (!root) {
+    return nullptr;
+  }
+  auto controller = root->findControllerService(service_name);
+  if (!controller) {
+    return nullptr;
+  }
+  return controller->getControllerServiceImplementation();
+}
 
+std::shared_ptr<minifi::controllers::SSLContextService> 
getSSLContextService(const std::shared_ptr<minifi::Configure>& configuration, 
const std::string& minifi_home) {
+  std::shared_ptr<minifi::controllers::SSLContextService> secure_context;
   std::string context_name;
-
-  std::shared_ptr<minifi::controllers::SSLContextService> secure_context = 
nullptr;
-
   // if the user wishes to use a controller service we need to instantiate the 
flow
-  if (configuration->get("controller.ssl.context.service", context_name)) {
-    const auto service = getControllerService(configuration, context_name);
+  if (configuration->get(minifi::Configure::controller_ssl_context_service, 
context_name)) {
+    const auto service = getControllerService(configuration, context_name, 
minifi_home);
     if (nullptr != service) {
-      secure_context = 
std::static_pointer_cast<minifi::controllers::SSLContextService>(service);
+      secure_context = 
std::dynamic_pointer_cast<minifi::controllers::SSLContextService>(service);

Review Comment:
   You are right, it's better that way, updated in 
a582bd90b8f188e1cc20bc2e9e81d358250cb230



-- 
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.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to