Digital Authentication Framework 6.0.1.33
|
00001 /* 00002 * (c) 2014 Good Technology Corporation. All rights reserved. 00003 */ 00004 00010 #ifndef BASIC_METADATA_H 00011 #define BASIC_METADATA_H 00012 00013 #include "DigitalAuthenticationFramework.h" 00014 00015 #include <map> 00016 00017 #include "basic_error.h" 00018 00025 class BasicMetaData : public DAMetaData 00026 { 00027 public: 00028 typedef std::vector<DAData> DADataList; 00029 00036 BasicMetaData(BasicError &err) 00037 : m_error(err) 00038 , m_strings() 00039 , m_flags() 00040 , m_datas() 00041 {} 00042 00047 void copyFrom(const DAMetaData &meta) 00048 { 00049 const BasicMetaData *other = dynamic_cast<const BasicMetaData *>(&meta); 00050 if (other) 00051 { 00052 m_strings = other->m_strings; 00053 m_flags = other->m_flags; 00054 m_datas = other->m_datas; 00055 } 00056 } 00057 00060 void setString(DAAttrib which, const std::string &value) 00061 { 00062 m_strings[which] = value; 00063 } 00064 00067 void setFlag(DAAttrib which, bool value=true) 00068 { 00069 m_flags[which] = value; 00070 } 00071 00074 void setData(DAAttrib which, const DAData &value) 00075 { 00076 DADataList dlist; 00077 dlist.push_back(value); 00078 m_datas[which] = dlist; 00079 } 00080 00083 void setData(DAAttrib which, const DADataList &values) 00084 { 00085 m_datas[which] = values; 00086 } 00087 00090 void setSize(DAAttrib which, size_t len) 00091 { 00092 m_sizes[which] = len; 00093 } 00094 00095 virtual bool getString(DAAttrib which, std::string &out) 00096 { 00097 string_map::iterator it = m_strings.find(which); 00098 00099 if (it != m_strings.end()) 00100 { 00101 out = it->second; 00102 m_error.clear(); 00103 return true; 00104 } 00105 00106 out = ""; 00107 m_error.setCode(DAError::ATTRIB_NOT_FOUND); 00108 return false; 00109 } 00110 00111 virtual bool getFlag(DAAttrib which) 00112 { 00113 flag_map::iterator it = m_flags.find(which); 00114 00115 if (it != m_flags.end()) 00116 { 00117 m_error.clear(); 00118 return it->second; 00119 } 00120 00121 m_error.setCode(DAError::ATTRIB_NOT_FOUND); 00122 return false; 00123 } 00124 00125 virtual bool getData(DAAttrib which, DAData &out, size_t index) 00126 { 00127 data_map::iterator it = m_datas.find(which); 00128 00129 out.clear(); 00130 if (it == m_datas.end()) 00131 { 00132 m_error.setCode(DAError::ATTRIB_NOT_FOUND); 00133 return false; 00134 } 00135 00136 DADataList &dlist = it->second; 00137 if ( index >= dlist.size() ) 00138 { 00139 m_error.setCode(DAError::ATTRIB_NOT_FOUND); 00140 return false; 00141 } 00142 00143 out = dlist.at(index); 00144 m_error.clear(); 00145 return true; 00146 } 00147 00148 virtual bool getSize(DAAttrib which, size_t &len_r) 00149 { 00150 size_map::iterator it = m_sizes.find(which); 00151 00152 if ( it != m_sizes.end() ) 00153 { 00154 m_error.clear(); 00155 len_r = it->second; 00156 return true; 00157 } 00158 00159 len_r = 0; 00160 m_error.setCode(DAError::ATTRIB_NOT_FOUND); 00161 return false; 00162 } 00163 00164 protected: 00165 BasicError &m_error; 00166 00167 typedef std::map<DAAttrib, std::string> string_map; 00168 typedef std::map<DAAttrib, bool> flag_map; 00169 typedef std::map<DAAttrib, DADataList> data_map; 00170 typedef std::map<DAAttrib, size_t> size_map; 00171 00172 string_map m_strings; 00173 flag_map m_flags; 00174 data_map m_datas; 00175 size_map m_sizes; 00176 }; 00177 00178 #endif