14#include "keyple/core/service/AbstractObservableLocalPluginAdapter.hpp"
21#include "keyple/core/service/PluginEventAdapter.hpp"
22#include "keyple/core/util/cpp/exception/Exception.hpp"
28using keyple::core::util::cpp::exception::Exception;
33AbstractObservableLocalPluginAdapter::ObservableLocalPluginAdapterJob ::
34 ObservableLocalPluginAdapterJob(
35 std::shared_ptr<PluginObserverSpi> observer,
36 const std::shared_ptr<PluginEvent> event,
37 AbstractObservableLocalPluginAdapter* parent)
38: Job(
"AbstractObservableLocalPluginAdapter")
46AbstractObservableLocalPluginAdapter::ObservableLocalPluginAdapterJob::execute()
48 mParent->notifyObserver(mObserver, mEvent);
54AbstractObservableLocalPluginAdapter::AbstractObservableLocalPluginAdapter(
55 std::shared_ptr<PluginSpi> pluginSpi)
56: LocalPluginAdapter(pluginSpi)
58 std::make_shared<ObservationManagerAdapter<
60 PluginObservationExceptionHandlerSpi>>(
"",
""))
64std::shared_ptr<ObservationManagerAdapter<
66 PluginObservationExceptionHandlerSpi>>
67AbstractObservableLocalPluginAdapter::getObservationManager()
const
69 return mObservationManager;
73AbstractObservableLocalPluginAdapter::notifyObservers(
74 const std::shared_ptr<PluginEvent> event)
77 "Plugin [%] notifies event [%] to % observer(s)\n",
82 for (
const auto& observer : mObservationManager->getObservers()) {
83 notifyObserver(observer, event);
88AbstractObservableLocalPluginAdapter::notifyObserver(
89 std::shared_ptr<PluginObserverSpi> observer,
90 const std::shared_ptr<PluginEvent> event)
93 observer->onPluginEvent(event);
95 }
catch (
const Exception& e) {
96 auto _e(std::unique_ptr<Exception>(
new Exception(e)));
98 mObservationManager->getObservationExceptionHandler()
99 ->onPluginObservationError(getName(), std::move(_e));
101 }
catch (
const Exception& e2) {
102 mLogger->error(
"Event notification error: %\n", e2.getMessage());
103 mLogger->error(
"Original cause: %\n", e.getMessage());
109AbstractObservableLocalPluginAdapter::doUnregister()
111 const std::vector<std::string>& unregisteredReaderNames = getReaderNames();
114 std::make_shared<PluginEventAdapter>(
116 unregisteredReaderNames,
117 PluginEvent::Type::UNAVAILABLE));
120 LocalPluginAdapter::doUnregister();
124AbstractObservableLocalPluginAdapter::addObserver(
125 const std::shared_ptr<PluginObserverSpi> observer)
128 mObservationManager->addObserver(observer);
132AbstractObservableLocalPluginAdapter::removeObserver(
133 const std::shared_ptr<PluginObserverSpi> observer)
135 Assert::getInstance().notNull(observer,
"observer");
137 const auto& observers = mObservationManager->getObservers();
138 const auto it = std::find(observers.begin(), observers.end(), observer);
140 if (it != observers.end()) {
141 mObservationManager->removeObserver(observer);
146AbstractObservableLocalPluginAdapter::clearObservers()
148 mObservationManager->clearObservers();
152AbstractObservableLocalPluginAdapter::countObservers()
const
154 return mObservationManager->countObservers();
158AbstractObservableLocalPluginAdapter::setPluginObservationExceptionHandler(
159 std::shared_ptr<PluginObservationExceptionHandlerSpi> exceptionHandler)
162 mObservationManager->setObservationExceptionHandler(exceptionHandler);