Keyple Card Calypso C++ Library 2.1.0
Reference Terminal Reader API for C++
FileHeaderAdapter.cpp
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#include "FileHeaderAdapter.h"
14
15/* Keyple Core Util */
16#include "KeypleStd.h"
17
18namespace keyple {
19namespace card {
20namespace calypso {
21
23
24/* FILE HEADER BUILDER -------------------------------------------------------------------------- */
25
26FileHeaderBuilder::FileHeaderBuilder() {}
27
29{
30 mLid = lid;
31
32 return *this;
33}
34
36{
37 mRecordsNumber = recordsNumber;
38
39 return *this;
40}
41
43{
44 mRecordSize = recordSize;
45
46 return *this;
47}
48
49FileHeaderBuilder FileHeaderBuilder::type(const ElementaryFile::Type type)
50{
51 mType = type;
52
53 return *this;
54}
55
56FileHeaderBuilder FileHeaderBuilder::accessConditions(const std::vector<uint8_t>& accessConditions)
57{
58 mAccessConditions = accessConditions;
59
60 return *this;
61}
62
63FileHeaderBuilder FileHeaderBuilder::keyIndexes(const std::vector<uint8_t>& keyIndexes)
64{
65 mKeyIndexes = keyIndexes;
66
67 return *this;
68}
69
71{
72 mDfStatus = std::make_shared<uint8_t>(dfStatus);
73
74 return *this;
75}
76
78{
79 mSharedReference = std::make_shared<uint16_t>(sharedReference);
80
81 return *this;
82}
83
84std::shared_ptr<FileHeaderAdapter> FileHeaderBuilder::build()
85{
86 return std::shared_ptr<FileHeaderAdapter>(new FileHeaderAdapter(this));
87}
88
89/* FILE HEADER ADAPTER -------------------------------------------------------------------------- */
90
92{
93 return mLid;
94}
95
97{
98 return mRecordsNumber;
99}
100
107{
108 return mRecordSize;
109}
110
111ElementaryFile::Type FileHeaderAdapter::getEfType() const
112{
113 return mType;
114}
115
116const std::vector<uint8_t>& FileHeaderAdapter::getAccessConditions() const
117{
118 return mAccessConditions;
119}
120
121const std::vector<uint8_t>& FileHeaderAdapter::getKeyIndexes() const
122{
123 return mKeyIndexes;
124}
125
126const std::shared_ptr<uint8_t> FileHeaderAdapter::getDfStatus() const
127{
128 return mDfStatus;
129}
130
131const std::shared_ptr<uint16_t> FileHeaderAdapter::getSharedReference() const
132{
133 return mSharedReference;
134}
135
136std::shared_ptr<FileHeaderBuilder> FileHeaderAdapter::builder()
137{
138 return std::shared_ptr<FileHeaderBuilder>(new FileHeaderBuilder());
139}
140
141FileHeaderAdapter::FileHeaderAdapter(const std::shared_ptr<FileHeader> source)
142: mLid(source->getLid()),
143 mRecordsNumber(source->getRecordsNumber()),
144 mRecordSize(source->getRecordSize()),
145 mType(source->getEfType()),
146 mAccessConditions(source->getAccessConditions()),
147 mKeyIndexes(source->getKeyIndexes()),
148 mDfStatus(source->getDfStatus()),
149 mSharedReference(source->getSharedReference()) {}
150
151void FileHeaderAdapter::updateMissingInfoFrom(const std::shared_ptr<FileHeader> source)
152{
153 if (mAccessConditions.empty()) {
154 mAccessConditions = source->getAccessConditions();
155 }
156
157 if (mKeyIndexes.empty()) {
158 mKeyIndexes = source->getKeyIndexes();
159 }
160
161 if (mDfStatus == nullptr) {
162 mDfStatus = source->getDfStatus();
163 }
164
165 if (mSharedReference == nullptr) {
166 mSharedReference = source->getSharedReference();
167 }
168}
169
171{
172 return mLid == o.mLid;
173}
174
175bool FileHeaderAdapter::operator==(const std::shared_ptr<FileHeaderAdapter> o) const
176{
177 if (o == nullptr) {
178 return false;
179 }
180
181 if (this == o.get()) {
182 return true;
183 }
184
185 return *this == *o.get();
186}
187
188std::ostream& operator<<(std::ostream& os, const FileHeaderAdapter& fha)
189{
190 os << "FILE_HEADER_ADAPTER: {"
191 << "LID = " << fha.mLid << ", "
192 << "RECORDS_NUMBER = " << fha.mRecordsNumber << ", "
193 << "RECORD_SIZE = " << fha.mRecordSize << ", "
194 << "TYPE = " << fha.mType << ", "
195 << "ACCESS_CONDITIONS = " << fha.mAccessConditions << ", "
196 << "KEY_INDEXES = " << fha.mKeyIndexes << ", "
197 << "DF_STATUS = " << fha.mDfStatus << ", "
198 << "SHARED_REFERENCE = " << fha.mSharedReference
199 << "}";
200
201 return os;
202}
203
204std::ostream& operator<<(std::ostream& os, const std::shared_ptr<FileHeaderAdapter> fha)
205{
206 if (fha == nullptr) {
207 os << "FILE_HEADER_ADAPTER: {null}";
208 } else {
209 os << *fha.get();
210 }
211
212 return os;
213}
214
216: mLid(builder->mLid),
217 mRecordsNumber(builder->mRecordsNumber),
218 mRecordSize(builder->mRecordSize),
219 mType(builder->mType),
220 mAccessConditions(builder->mAccessConditions),
221 mKeyIndexes(builder->mKeyIndexes),
222 mDfStatus(builder->mDfStatus),
223 mSharedReference(builder->mSharedReference) {}
224
225}
226}
227}
FileHeaderBuilder recordsNumber(const int recordsNumber)
FileHeaderBuilder type(const ElementaryFile::Type type)
FileHeaderBuilder keyIndexes(const std::vector< uint8_t > &keyIndexes)
FileHeaderBuilder sharedReference(const uint16_t sharedReference)
FileHeaderBuilder accessConditions(const std::vector< uint8_t > &accessConditions)
FileHeaderBuilder dfStatus(const uint8_t dfStatus)
ElementaryFile::Type getEfType() const override
void updateMissingInfoFrom(const std::shared_ptr< FileHeader > source)
FileHeaderAdapter(const std::shared_ptr< FileHeader > source)
bool operator==(const FileHeaderAdapter &o) const
const std::shared_ptr< uint16_t > getSharedReference() const override
const std::vector< uint8_t > & getKeyIndexes() const override
static std::shared_ptr< FileHeaderBuilder > builder()
const std::vector< uint8_t > & getAccessConditions() const override
const std::shared_ptr< uint8_t > getDfStatus() const override
FileHeaderAdapter::FileHeaderBuilder FileHeaderBuilder
std::ostream & operator<<(std::ostream &os, const std::shared_ptr< ApduRequestAdapter > ara)