Keyple Card Calypso C++ Library - 3.2.2
Component of the Keyple C++ middleware
DirectoryHeaderAdapter.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/DirectoryHeaderAdapter.hpp"
15
16#include <memory>
17#include <string>
18#include <vector>
19
20#include "keyple/core/util/cpp/exception/IllegalStateException.hpp"
21
22namespace keyple {
23namespace card {
24namespace calypso {
25
26using keyple::core::util::cpp::exception::IllegalStateException;
27
28const std::string DirectoryHeaderAdapter::LEVEL_STR = "level";
29
30DirectoryHeaderAdapter::DirectoryHeaderBuilder::DirectoryHeaderBuilder()
31{
32}
33
34DirectoryHeaderAdapter::DirectoryHeaderBuilder&
35DirectoryHeaderAdapter::DirectoryHeaderBuilder::lid(std::uint16_t lid)
36{
37 mLid = lid;
38
39 return *this;
40}
41
42DirectoryHeaderAdapter::DirectoryHeaderBuilder&
43DirectoryHeaderAdapter::DirectoryHeaderBuilder::accessConditions(
44 const std::vector<std::uint8_t>& accessConditions)
45{
46 mAccessConditions = accessConditions;
47
48 return *this;
49}
50
51DirectoryHeaderAdapter::DirectoryHeaderBuilder&
52DirectoryHeaderAdapter::DirectoryHeaderBuilder::keyIndexes(
53 const std::vector<std::uint8_t>& keyIndexes)
54{
55 mKeyIndexes = keyIndexes;
56
57 return *this;
58}
59
60DirectoryHeaderAdapter::DirectoryHeaderBuilder&
61DirectoryHeaderAdapter::DirectoryHeaderBuilder::dfStatus(std::uint8_t dfStatus)
62{
63 mDfStatus = dfStatus;
64
65 return *this;
66}
67
68DirectoryHeaderAdapter::DirectoryHeaderBuilder&
69DirectoryHeaderAdapter::DirectoryHeaderBuilder::kif(
70 WriteAccessLevel level, std::uint8_t kif)
71{
72 mKif.insert({level, kif});
73
74 return *this;
75}
76
77DirectoryHeaderAdapter::DirectoryHeaderBuilder&
78DirectoryHeaderAdapter::DirectoryHeaderBuilder::kvc(
79 WriteAccessLevel level, std::uint8_t kvc)
80{
81 mKvc.insert({level, kvc});
82
83 return *this;
84}
85
86std::unique_ptr<DirectoryHeader>
87DirectoryHeaderAdapter::DirectoryHeaderBuilder::build()
88{
89 return std::unique_ptr<DirectoryHeaderAdapter>(
90 new DirectoryHeaderAdapter(this));
91}
92
93DirectoryHeaderAdapter::DirectoryHeaderAdapter(DirectoryHeaderBuilder* builder)
94: mLid(builder->mLid)
95, mAccessConditions(builder->mAccessConditions)
96, mKeyIndexes(builder->mKeyIndexes)
97, mDfStatus(builder->mDfStatus)
98, mKif(builder->mKif)
99, mKvc(builder->mKvc)
100{
101}
102
103std::uint16_t
104DirectoryHeaderAdapter::getLid() const
105{
106 return mLid;
107}
108
109const std::vector<std::uint8_t>&
110DirectoryHeaderAdapter::getAccessConditions() const
111{
112 return mAccessConditions;
113}
114
115const std::vector<std::uint8_t>&
116DirectoryHeaderAdapter::getKeyIndexes() const
117{
118 return mKeyIndexes;
119}
120
121std::uint8_t
122DirectoryHeaderAdapter::getDfStatus() const
123{
124 return mDfStatus;
125}
126
127std::uint8_t
128DirectoryHeaderAdapter::getKif(WriteAccessLevel writeAccessLevel) const
129{
130 const auto it = mKif.find(writeAccessLevel);
131 if (it != mKif.end()) {
132 return it->second;
133 } else {
134 throw IllegalStateException("writeAccessLevel should exist in map");
135 }
136}
137
138std::uint8_t
139DirectoryHeaderAdapter::getKvc(WriteAccessLevel writeAccessLevel) const
140{
141 const auto it = mKvc.find(writeAccessLevel);
142 if (it != mKvc.end()) {
143 return it->second;
144 } else {
145 throw IllegalStateException("writeAccessLevel should exist in map");
146 }
147}
148
149std::unique_ptr<DirectoryHeaderAdapter::DirectoryHeaderBuilder>
150DirectoryHeaderAdapter::builder()
151{
152 return std::unique_ptr<DirectoryHeaderAdapter::DirectoryHeaderBuilder>(
153 new DirectoryHeaderAdapter::DirectoryHeaderBuilder());
154}
155
156} /* namespace calypso */
157} /* namespace card */
158} /* namespace keyple */