Keyple Card Calypso C++ Library - 3.2.2
Component of the Keyple C++ middleware
FileHeaderAdapter.cpp
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright (c) 2025 Calypso Networks Association https://calypsonet.org/ *
3 * *
4 * See the NOTICE file(s) distributed with this work for additional *
5 * information regarding copyright ownership. *
6 * *
7 * This program and the accompanying materials are made available under the *
8 * terms of the Eclipse Public License 2.0 which is available at *
9 * http://www.eclipse.org/legal/epl-2.0 *
10 * *
11 * SPDX-License-Identifier: EPL-2.0 *
12 ******************************************************************************/
13
14#include "keyple/card/calypso/FileHeaderAdapter.hpp"
15
16#include "keyple/card/calypso/FileHeaderAdapter.hpp"
17#include "keyple/core/util/cpp/KeypleStd.hpp"
18
19namespace keyple {
20namespace card {
21namespace calypso {
22
23FileHeaderAdapter::FileHeaderBuilder::FileHeaderBuilder()
24{
25}
26
27FileHeaderAdapter::FileHeaderBuilder&
28FileHeaderAdapter::FileHeaderBuilder::lid(std::uint16_t lid)
29{
30 mLid = lid;
31
32 return *this;
33}
34
35FileHeaderAdapter::FileHeaderBuilder&
36FileHeaderAdapter::FileHeaderBuilder::recordsNumber(int recordsNumber)
37{
38 mRecordsNumber = recordsNumber;
39
40 return *this;
41}
42
43FileHeaderAdapter::FileHeaderBuilder&
44FileHeaderAdapter::FileHeaderBuilder::FileHeaderBuilder::recordSize(
45 int recordSize)
46{
47 mRecordSize = recordSize;
48
49 return *this;
50}
51
52FileHeaderAdapter::FileHeaderBuilder&
53FileHeaderAdapter::FileHeaderBuilder::type(ElementaryFile::Type type)
54{
55 mType = type;
56
57 return *this;
58}
59
60FileHeaderAdapter::FileHeaderBuilder&
61FileHeaderAdapter::FileHeaderBuilder::accessConditions(
62 const std::vector<uint8_t>& accessConditions)
63{
64 mAccessConditions = accessConditions;
65
66 return *this;
67}
68
69FileHeaderAdapter::FileHeaderBuilder&
70FileHeaderAdapter::FileHeaderBuilder::keyIndexes(
71 const std::vector<uint8_t>& keyIndexes)
72{
73 mKeyIndexes = keyIndexes;
74
75 return *this;
76}
77
78FileHeaderAdapter::FileHeaderBuilder&
79FileHeaderAdapter::FileHeaderBuilder::dfStatus(std::uint8_t dfStatus)
80{
81 mDfStatus = std::make_shared<uint8_t>(dfStatus);
82
83 return *this;
84}
85
86FileHeaderAdapter::FileHeaderBuilder&
87FileHeaderAdapter::FileHeaderBuilder::sharedReference(
88 std::uint16_t sharedReference)
89{
90 mSharedReference = std::make_shared<uint16_t>(sharedReference);
91
92 return *this;
93}
94
95std::shared_ptr<FileHeaderAdapter>
96FileHeaderAdapter::FileHeaderBuilder::build()
97{
98 return std::shared_ptr<FileHeaderAdapter>(new FileHeaderAdapter(this));
99}
100
101std::uint16_t
102FileHeaderAdapter::getLid() const
103{
104 return mLid;
105}
106
107int
108FileHeaderAdapter::getRecordsNumber() const
109{
110 return mRecordsNumber;
111}
112
113int
114FileHeaderAdapter::getRecordSize() const
115{
116 return mRecordSize;
117}
118
119ElementaryFile::Type
120FileHeaderAdapter::getEfType() const
121{
122 return mType;
123}
124
125const std::vector<std::uint8_t>&
126FileHeaderAdapter::getAccessConditions() const
127{
128 return mAccessConditions;
129}
130
131const std::vector<std::uint8_t>&
132FileHeaderAdapter::getKeyIndexes() const
133{
134 return mKeyIndexes;
135}
136
137const std::shared_ptr<std::uint8_t>&
138FileHeaderAdapter::getDfStatus() const
139{
140 return mDfStatus;
141}
142
143const std::shared_ptr<std::uint16_t>
144FileHeaderAdapter::getSharedReference() const
145{
146 return mSharedReference;
147}
148
149std::shared_ptr<FileHeaderAdapter::FileHeaderBuilder>
150FileHeaderAdapter::builder()
151{
152 return std::shared_ptr<FileHeaderBuilder>(new FileHeaderBuilder());
153}
154
155FileHeaderAdapter::FileHeaderAdapter(const std::shared_ptr<FileHeader>& source)
156: mLid(source->getLid())
157, mRecordsNumber(source->getRecordsNumber())
158, mRecordSize(source->getRecordSize())
159, mType(source->getEfType())
160, mAccessConditions(source->getAccessConditions())
161, mKeyIndexes(source->getKeyIndexes())
162, mDfStatus(source->getDfStatus())
163, mSharedReference(source->getSharedReference())
164{
165}
166
167void
168FileHeaderAdapter::updateMissingInfoFrom(const FileHeader& source)
169{
170 if (mAccessConditions.empty()) {
171 mAccessConditions = source.getAccessConditions();
172 }
173
174 if (mKeyIndexes.empty()) {
175 mKeyIndexes = source.getKeyIndexes();
176 }
177
178 if (mDfStatus == nullptr) {
179 mDfStatus = source.getDfStatus();
180 }
181
182 if (mSharedReference == nullptr) {
183 mSharedReference = source.getSharedReference();
184 }
185}
186
187bool
188FileHeaderAdapter::operator==(const FileHeaderAdapter& o) const
189{
190 return mLid == o.mLid;
191}
192
193bool
194FileHeaderAdapter::operator==(const std::shared_ptr<FileHeaderAdapter> o) const
195{
196 if (o == nullptr) {
197 return false;
198 }
199
200 if (this == o.get()) {
201 return true;
202 }
203
204 return *this == *o.get();
205}
206
207std::ostream&
208operator<<(std::ostream& os, const FileHeaderAdapter& fha)
209{
210 os << "FILE_HEADER_ADAPTER: {"
211 << "LID = " << fha.mLid << ", "
212 << "RECORDS_NUMBER = " << fha.mRecordsNumber << ", "
213 << "RECORD_SIZE = " << fha.mRecordSize << ", "
214 << "TYPE = " << fha.mType << ", "
215 << "ACCESS_CONDITIONS = " << fha.mAccessConditions << ", "
216 << "KEY_INDEXES = " << fha.mKeyIndexes << ", "
217 << "DF_STATUS = " << fha.mDfStatus << ", "
218 << "SHARED_REFERENCE = " << fha.mSharedReference << "}";
219
220 return os;
221}
222
223std::ostream&
224operator<<(std::ostream& os, const std::shared_ptr<FileHeaderAdapter> fha)
225{
226 if (fha == nullptr) {
227 os << "FILE_HEADER_ADAPTER: {null}";
228 } else {
229 os << *fha.get();
230 }
231
232 return os;
233}
234
235FileHeaderAdapter::FileHeaderAdapter(FileHeaderBuilder* builder)
236: mLid(builder->mLid)
237, mRecordsNumber(builder->mRecordsNumber)
238, mRecordSize(builder->mRecordSize)
239, mType(builder->mType)
240, mAccessConditions(builder->mAccessConditions)
241, mKeyIndexes(builder->mKeyIndexes)
242, mDfStatus(builder->mDfStatus)
243, mSharedReference(builder->mSharedReference)
244{
245}
246
247} /* namespace calypso */
248} /* namespace card */
249} /* namespace keyple */
std::ostream & operator<<(std::ostream &os, const std::shared_ptr< FileHeaderAdapter > fha)