18#include "StringUtils.h"
24using namespace keyple::core::util::cpp;
31: mInformation(information), mSuccessful(true), mExceptionClass(typeid(nullptr)) {}
34 const std::string& information,
const std::type_info& exceptionClass)
35: mInformation(information),
36 mSuccessful(exceptionClass == typeid(nullptr)),
37 mExceptionClass(exceptionClass) {}
51 return mExceptionClass;
56const std::map<const int, const std::shared_ptr<StatusProperties>>
58 {0x9000, std::make_shared<StatusProperties>(
"Success")},
62: mCommandRef(commandRef), mLe(le), mName(commandRef.
getName()) {}
66 mName.append(
"-").append(subName);
67 mApduRequest->setInfo(mName);
82 mApduRequest = apduRequest;
83 mApduRequest->setInfo(mName);
92 const std::shared_ptr<ApduResponseApi> apduResponse)
94 mApduResponse = apduResponse;
101 return mApduResponse;
104const std::map<const int, const std::shared_ptr<StatusProperties>>&
110const std::shared_ptr<StatusProperties> AbstractApduCommand::getStatusWordProperties()
const
112 const std::map<const int, const std::shared_ptr<StatusProperties>>& table =
getStatusTable();
114 const auto it =
getStatusTable().find(mApduResponse->getStatusWord());
116 return it != table.end() ? it->second :
nullptr;
121 const std::shared_ptr<StatusProperties> props = getStatusWordProperties();
123 return props !=
nullptr &&
124 props->isSuccessful() &&
126 (mLe == 0 ||
static_cast<int>(mApduResponse->getDataOut().size()) == mLe);
131 const std::shared_ptr<StatusProperties> props = getStatusWordProperties();
132 if (props !=
nullptr && props->isSuccessful()) {
135 if (mLe != 0 &&
static_cast<int>(mApduResponse->getDataOut().size()) != mLe) {
137 StringUtils::format(
"Incorrect APDU response length (expected: %d, actual: %d)",
139 mApduResponse->getDataOut().size()));
149 const std::type_info& exceptionClass = props !=
nullptr ? props->getExceptionClass()
153 const std::string message = props !=
nullptr ? props->getInformation() :
"Unknown status";
161 const std::shared_ptr<StatusProperties> props = getStatusWordProperties();
163 return props !=
nullptr ? props->getInformation() :
"";
StatusProperties(const std::string &information)
const std::string & getInformation() const
const std::type_info & getExceptionClass() const
bool isSuccessful() const
virtual const std::string & getName() const final
static const std::map< const int, const std::shared_ptr< StatusProperties > > STATUS_TABLE
virtual AbstractApduCommand & setApduResponse(const std::shared_ptr< ApduResponseApi > apduResponse)
virtual void addSubName(const std::string &subName) final
AbstractApduCommand(const CardCommand &commandRef, const int le)
virtual const std::map< const int, const std::shared_ptr< StatusProperties > > & getStatusTable() const
virtual const std::string getStatusInformation() const final
virtual const std::shared_ptr< ApduResponseApi > getApduResponse() const final
virtual bool isSuccessful() const final
virtual const std::shared_ptr< ApduRequestAdapter > getApduRequest() const final
virtual const CardCommand & getCommandRef() const
virtual void setApduRequest(const std::shared_ptr< ApduRequestAdapter > apduRequest) final
virtual const CalypsoApduCommandException buildUnexpectedResponseLengthException(const std::string &message) const =0
virtual void checkStatus()
virtual const CalypsoApduCommandException buildCommandException(const std::type_info &exceptionClass, const std::string &message) const =0
AbstractApduCommand::StatusProperties StatusProperties