14#include "keyple/card/generic/GenericCardResourceProfileExtensionAdapter.hpp"
18#include "keyple/core/util/KeypleAssert.hpp"
19#include "keyple/core/util/cpp/exception/Exception.hpp"
20#include "keypop/reader/selection/CardSelectionManager.hpp"
21#include "keypop/reader/selection/CardSelectionResult.hpp"
22#include "keypop/reader/selection/spi/IsoSmartCard.hpp"
28using keyple::core::util::Assert;
29using keyple::core::util::cpp::exception::Exception;
30using keypop::reader::selection::CardSelectionManager;
31using keypop::reader::selection::CardSelectionResult;
32using keypop::reader::selection::spi::IsoSmartCard;
34GenericCardResourceProfileExtensionAdapter::
35 GenericCardResourceProfileExtensionAdapter(
36 std::shared_ptr<IsoCardSelector> cardSelector,
37 std::shared_ptr<GenericCardSelectionExtension>
38 genericCardSelectionExtension)
39: mGenericCardSelection(
40 std::dynamic_pointer_cast<GenericCardSelectionExtensionAdapter>(
41 genericCardSelectionExtension))
42, mCardSelector(cardSelector)
44 Assert::getInstance().notNull(
45 genericCardSelectionExtension,
"genericCardSelectionExtension");
48std::shared_ptr<SmartCard>
49GenericCardResourceProfileExtensionAdapter::matches(
50 std::shared_ptr<CardReader> reader,
51 std::shared_ptr<ReaderApiFactory> readerApiFactory)
53 if (!reader->isCardPresent()) {
57 std::shared_ptr<CardSelectionManager> genericCardSelectionManager(
58 readerApiFactory->createCardSelectionManager());
59 genericCardSelectionManager->prepareSelection(
60 mCardSelector, mGenericCardSelection);
61 std::shared_ptr<CardSelectionResult> genericCardSelectionResult =
nullptr;
64 genericCardSelectionResult
65 = genericCardSelectionManager->processCardSelectionScenario(reader);
66 }
catch (
const Exception& e) {
67 mLogger->error(
"Failed to select card [error=%]\n", e.getMessage());
70 if (genericCardSelectionResult !=
nullptr) {
71 return genericCardSelectionResult->getActiveSmartCard();
77std::shared_ptr<SmartCard>
78GenericCardResourceProfileExtensionAdapter::matches(
79 std::shared_ptr<SmartCard> smartCard)
81 if (std::dynamic_pointer_cast<IsoSmartCard>(smartCard) ==
nullptr) {