Digital Authentication Framework 6.0.1.33

basic_metadata.h

Go to the documentation of this file.
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