Keyple Card Calypso C++ Library 2.2.2
Reference Terminal Reader API for C++
CommonSecuritySettingAdapter.h
Go to the documentation of this file.
1/**************************************************************************************************
2 * Copyright (c) 2022 Calypso Networks Association https://calypsonet.org/ *
3 * *
4 * See the NOTICE file(s) distributed with this work for additional information regarding *
5 * copyright ownership. *
6 * *
7 * This program and the accompanying materials are made available under the terms of the Eclipse *
8 * Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0 *
9 * *
10 * SPDX-License-Identifier: EPL-2.0 *
11 **************************************************************************************************/
12
13#pragma once
14
15/* Calypsonet Terminal Calypso */
16#include "CommonSecuritySetting.h"
17
18/* Calypsonet Terminal Card */
19#include "ProxyReaderApi.h"
20
21/* Keyple Card Calypso */
22#include "CalypsoSamAdapter.h"
23
24/* Keple Core Util */
25#include "IllegalArgumentException.h"
26#include "KeypleAssert.h"
27
28namespace keyple {
29namespace card {
30namespace calypso {
31
32using namespace calypsonet::terminal::calypso::transaction;
33using namespace calypsonet::terminal::card;
34using namespace keyple::core::util;
35using namespace keyple::core::util::cpp::exception;
36
44template <typename S>
45class CommonSecuritySettingAdapter : virtual public CommonSecuritySetting<S> {
46public:
52 S& setControlSamResource(const std::shared_ptr<CardReader> samReader,
53 const std::shared_ptr<CalypsoSam> calypsoSam) final
54 {
55 Assert::getInstance().notNull(samReader, "samReader")
56 .notNull(calypsoSam, "calypsoSam");
57
58 Assert::getInstance().isTrue(calypsoSam->getProductType() != CalypsoSam::ProductType::UNKNOWN,
59 "productType");
60
61 auto proxy = std::dynamic_pointer_cast<ProxyReaderApi>(samReader);
62 if (!proxy) {
63 throw IllegalArgumentException("The provided 'samReader' must implement 'ProxyReaderApi'");
64 }
65
66 auto adapter = std::dynamic_pointer_cast<CalypsoSamAdapter>(calypsoSam);
67 if (!adapter) {
68 throw IllegalArgumentException("The provided 'calypsoSam' must be an instance of " \
69 "'CalypsoSamAdapter'");
70 }
71
72 mControlSamReader = std::dynamic_pointer_cast<ProxyReaderApi>(samReader);
73 mControlSam = std::dynamic_pointer_cast<CalypsoSamAdapter>(calypsoSam);
74
75 return *mCurrentInstance;
76 }
77
83 S& setSamRevocationService(const std::shared_ptr<SamRevocationServiceSpi> service) final
84 {
85 Assert::getInstance().notNull(service, "service");
86
87 mSamRevocationServiceSpi = service;
88
89 return *mCurrentInstance;
90 }
91
99 std::shared_ptr<ProxyReaderApi> getControlSamReader() const
100 {
101 return mControlSamReader;
102 }
103
111 std::shared_ptr<CalypsoSamAdapter> getControlSam() const
112 {
113 return mControlSam;
114 }
115
123 std::shared_ptr<SamRevocationServiceSpi> getSamRevocationServiceSpi() const
124 {
125 return mSamRevocationServiceSpi;
126 }
127
128private:
132 S* mCurrentInstance = dynamic_cast<S*>(this);
133
137 std::shared_ptr<ProxyReaderApi> mControlSamReader;
138
142 std::shared_ptr<CalypsoSamAdapter> mControlSam;
143
147 std::shared_ptr<SamRevocationServiceSpi> mSamRevocationServiceSpi;
148};
149
150}
151}
152}
std::shared_ptr< CalypsoSamAdapter > getControlSam() const
std::shared_ptr< SamRevocationServiceSpi > getSamRevocationServiceSpi() const
S & setControlSamResource(const std::shared_ptr< CardReader > samReader, const std::shared_ptr< CalypsoSam > calypsoSam) final
S & setSamRevocationService(const std::shared_ptr< SamRevocationServiceSpi > service) final
std::shared_ptr< ProxyReaderApi > getControlSamReader() const