14#include "keyple/core/service/resource/PluginsConfigurator.hpp"
16#include "keyple/core/service/PoolPlugin.hpp"
17#include "keyple/core/service/spi/PluginObservationExceptionHandlerSpi.hpp"
18#include "keyple/core/util/KeypleAssert.hpp"
19#include "keyple/core/util/cpp/Arrays.hpp"
20#include "keyple/core/util/cpp/exception/IllegalArgumentException.hpp"
21#include "keyple/core/util/cpp/exception/IllegalStateException.hpp"
28using keyple::core::service::PoolPlugin;
29using keyple::core::service::spi::PluginObservationExceptionHandlerSpi;
30using keyple::core::util::Assert;
31using keyple::core::util::cpp::Arrays;
32using keyple::core::util::cpp::exception::IllegalArgumentException;
33using keyple::core::util::cpp::exception::IllegalStateException;
42, mAllocationStrategyConfigured(false)
43, mUsageTimeoutMillis(0)
44, mUsageTimeoutMillisConfigured(false)
49PluginsConfigurator::Builder::withAllocationStrategy(
52 if (mAllocationStrategyConfigured ==
true) {
53 throw IllegalStateException(
"Allocation strategy already configured");
56 mAllocationStrategy = allocationStrategy;
57 mAllocationStrategyConfigured =
true;
63PluginsConfigurator::Builder::withUsageTimeout(
const int usageTimeoutMillis)
65 Assert::getInstance().greaterOrEqual(
66 usageTimeoutMillis, 1,
"usageTimeoutMillis");
68 if (mUsageTimeoutMillisConfigured ==
true) {
69 throw IllegalStateException(
"Usage timeout already configured");
72 mUsageTimeoutMillis = usageTimeoutMillis;
73 mUsageTimeoutMillisConfigured =
true;
79PluginsConfigurator::Builder::addPlugin(
80 std::shared_ptr<Plugin> plugin,
81 std::shared_ptr<ReaderConfiguratorSpi> readerConfiguratorSpi)
83 return addPluginWithMonitoring(
84 plugin, readerConfiguratorSpi,
nullptr,
nullptr);
88PluginsConfigurator::Builder::addPluginWithMonitoring(
89 std::shared_ptr<Plugin> plugin,
90 std::shared_ptr<ReaderConfiguratorSpi> readerConfiguratorSpi,
91 std::shared_ptr<PluginObservationExceptionHandlerSpi>
92 pluginObservationExceptionHandlerSpi,
93 std::shared_ptr<CardReaderObservationExceptionHandlerSpi>
94 readerObservationExceptionHandlerSpi)
97 .notNull(plugin,
"plugin")
98 .notNull(readerConfiguratorSpi,
"readerConfiguratorSpi");
100 const auto pool = std::dynamic_pointer_cast<PoolPlugin>(plugin);
101 if (pool !=
nullptr) {
102 throw IllegalArgumentException(
103 "Plugin must be an instance of Plugin or ObservablePlugin");
106 if (Arrays::contains(mPlugins, plugin)) {
107 throw IllegalStateException(
"Plugin already configured");
110 mPlugins.push_back(plugin);
111 mConfiguredPlugins.push_back(std::make_shared<ConfiguredPlugin>(
113 readerConfiguratorSpi,
114 pluginObservationExceptionHandlerSpi,
115 readerObservationExceptionHandlerSpi));
120std::shared_ptr<PluginsConfigurator>
121PluginsConfigurator::Builder::build()
123 if (mPlugins.empty()) {
124 throw IllegalStateException(
"No plugin was configured");
127 if (mAllocationStrategyConfigured ==
false) {
128 mAllocationStrategy = AllocationStrategy::FIRST;
129 mAllocationStrategyConfigured =
true;
132 if (mUsageTimeoutMillisConfigured ==
false) {
134 mUsageTimeoutMillis = 0;
135 mUsageTimeoutMillisConfigured =
true;
138 return std::make_shared<PluginsConfigurator>(
this);
144 std::shared_ptr<Plugin> plugin,
145 std::shared_ptr<ReaderConfiguratorSpi> readerConfiguratorSpi,
146 std::shared_ptr<PluginObservationExceptionHandlerSpi>
147 pluginObservationExceptionHandlerSpi,
148 std::shared_ptr<CardReaderObservationExceptionHandlerSpi>
149 readerObservationExceptionHandlerSpi)
151, mReaderConfiguratorSpi(readerConfiguratorSpi)
152, mWithPluginMonitoring(false)
153, mPluginObservationExceptionHandlerSpi(nullptr)
154, mWithReaderMonitoring(false)
155, mReaderObservationExceptionHandlerSpi(nullptr)
157 if (pluginObservationExceptionHandlerSpi !=
nullptr) {
158 mWithPluginMonitoring =
true;
159 mPluginObservationExceptionHandlerSpi
160 = pluginObservationExceptionHandlerSpi;
163 if (readerObservationExceptionHandlerSpi !=
nullptr) {
164 mWithReaderMonitoring =
true;
165 mReaderObservationExceptionHandlerSpi
166 = readerObservationExceptionHandlerSpi;
170std::shared_ptr<Plugin>
171PluginsConfigurator::ConfiguredPlugin::getPlugin()
const
176std::shared_ptr<ReaderConfiguratorSpi>
177PluginsConfigurator::ConfiguredPlugin::getReaderConfiguratorSpi()
const
179 return mReaderConfiguratorSpi;
183PluginsConfigurator::ConfiguredPlugin::isWithPluginMonitoring()
const
185 return mWithPluginMonitoring;
188std::shared_ptr<PluginObservationExceptionHandlerSpi>
189PluginsConfigurator::ConfiguredPlugin::getPluginObservationExceptionHandlerSpi()
192 return mPluginObservationExceptionHandlerSpi;
196PluginsConfigurator::ConfiguredPlugin::isWithReaderMonitoring()
const
198 return mWithReaderMonitoring;
201std::shared_ptr<CardReaderObservationExceptionHandlerSpi>
202PluginsConfigurator::ConfiguredPlugin::getReaderObservationExceptionHandlerSpi()
205 return mReaderObservationExceptionHandlerSpi;
211PluginsConfigurator::getAllocationStrategy()
const
213 return mAllocationStrategy;
217PluginsConfigurator::getUsageTimeoutMillis()
const
219 return mUsageTimeoutMillis;
222const std::vector<std::shared_ptr<Plugin>>&
223PluginsConfigurator::getPlugins()
const
228const std::vector<std::shared_ptr<ConfiguredPlugin>>&
229PluginsConfigurator::getConfiguredPlugins()
const
231 return mConfiguredPlugins;
235PluginsConfigurator::builder()
241: mAllocationStrategy(builder->mAllocationStrategy)
242, mUsageTimeoutMillis(builder->mUsageTimeoutMillis)
243, mPlugins(builder->mPlugins)
244, mConfiguredPlugins(builder->mConfiguredPlugins)
PluginsConfigurator::AllocationStrategy AllocationStrategy
PluginsConfigurator::ConfiguredPlugin ConfiguredPlugin
CardResourceProfileConfigurator::Builder Builder