libzypp  10.5.0
HistoryLogData.cc
Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                          ____ _   __ __ ___                          |
00003 |                         |__  / \ / / . \ . \                         |
00004 |                           / / \ V /|  _/  _/                         |
00005 |                          / /__ | | | | | |                           |
00006 |                         /_____||_| |_| |_|                           |
00007 |                                                                      |
00008 \---------------------------------------------------------------------*/
00009 
00013 #include <sstream>
00014 
00015 #include "zypp/base/PtrTypes.h"
00016 #include "zypp/base/String.h"
00017 #include "zypp/base/Logger.h"
00018 #include "zypp/parser/ParseException.h"
00019 
00020 #include "zypp/HistoryLogData.h"
00021 
00022 using namespace std;
00023 
00024 namespace zypp
00025 {
00026   using parser::ParseException;
00027 
00028 
00030   //
00031   //    CLASS NAME : HistoryActionID
00032   //
00034 
00035   static std::map<std::string,HistoryActionID::ID> _table;
00036 
00037   const HistoryActionID HistoryActionID::NONE(HistoryActionID::NONE_e);
00038   const HistoryActionID HistoryActionID::INSTALL(HistoryActionID::INSTALL_e);
00039   const HistoryActionID HistoryActionID::REMOVE(HistoryActionID::REMOVE_e);
00040   const HistoryActionID HistoryActionID::REPO_ADD(HistoryActionID::REPO_ADD_e);
00041   const HistoryActionID HistoryActionID::REPO_REMOVE(HistoryActionID::REPO_REMOVE_e);
00042   const HistoryActionID HistoryActionID::REPO_CHANGE_ALIAS(HistoryActionID::REPO_CHANGE_ALIAS_e);
00043   const HistoryActionID HistoryActionID::REPO_CHANGE_URL(HistoryActionID::REPO_CHANGE_URL_e);
00044 
00045   HistoryActionID::HistoryActionID(const std::string & strval_r)
00046     : _id(parse(strval_r))
00047   {}
00048 
00049   HistoryActionID::ID HistoryActionID::parse(const std::string & strval_r)
00050   {
00051     if (_table.empty())
00052     {
00053       // initialize it
00054       _table["install"] = INSTALL_e;
00055       _table["remove"]  = REMOVE_e;
00056       _table["radd"]    = REPO_ADD_e;
00057       _table["rremove"] = REPO_REMOVE_e;
00058       _table["ralias"]  = REPO_CHANGE_ALIAS_e;
00059       _table["rurl"]    = REPO_CHANGE_URL_e;
00060       _table["NONE"] = _table["none"] = HistoryActionID::NONE_e;
00061     }
00062 
00063     std::map<std::string,HistoryActionID::ID>::const_iterator it =
00064       _table.find(strval_r);
00065 
00066     if (it == _table.end())
00067       WAR << "Unknown history action ID '" + strval_r + "'";
00068 
00069     return it->second;
00070   }
00071 
00072 
00073   const std::string & HistoryActionID::asString(bool pad) const
00074   {
00075     static std::map<ID, std::string> _table;
00076     if ( _table.empty() )
00077     {
00078       // initialize it
00079       _table[INSTALL_e]           = "install";
00080       _table[REMOVE_e]            = "remove";
00081       _table[REPO_ADD_e]          = "radd";
00082       _table[REPO_REMOVE_e]       = "rremove";
00083       _table[REPO_CHANGE_ALIAS_e] = "ralias";
00084       _table[REPO_CHANGE_URL_e]   = "rurl";
00085       _table[NONE_e]              = "NONE";
00086     }
00087     // add spaces so that the size of the returned string is always 7 (for now)
00088     if (pad)
00089       return _table[_id].append(7 - _table[_id].size(), ' ');
00090     return _table[_id];
00091   }
00092 
00093   std::ostream & operator << (std::ostream & str, const HistoryActionID & id)
00094   { return str << id.asString(); }
00095 
00097 
00098 
00100   //
00101   // CLASS NAME: HistoryItem
00102   //
00104 
00105   HistoryItem::HistoryItem(FieldVector & fields)
00106   {
00107     if (fields.size() <= 2)
00108       ZYPP_THROW(ParseException(
00109         str::form("Bad number of fields. Got %zd, expected more than %d.",
00110           fields.size(), 2)));
00111 
00112     date = Date(fields[0], HISTORY_LOG_DATE_FORMAT);
00113     action = HistoryActionID(str::trim(fields[1]));
00114   }
00115 
00116   void HistoryItem::dumpTo(ostream & str) const
00117   {
00118     str << date.form(HISTORY_LOG_DATE_FORMAT) << "|" << action.asString();
00119   }
00120 
00121   ostream & operator<<(ostream & str, const HistoryItem & obj)
00122   {
00123     obj.dumpTo(str);
00124     return str;
00125   }
00126 
00127 
00129   //
00130   // CLASS NAME: HistoryItemInstall
00131   //
00133 
00134   HistoryItemInstall::HistoryItemInstall(FieldVector & fields)
00135     : HistoryItem(fields)
00136   {
00137     if (fields.size() != 8)
00138       ZYPP_THROW(ParseException(
00139         str::form("Bad number of fields. Got %zu, expected %u.",
00140           fields.size(), 8)));
00141 
00142     name      = fields[2];
00143     edition   = Edition(fields[3]);
00144     arch      = Arch(fields[4]);
00145     reqby     = fields[5];
00146     repoalias = fields[6];
00147     checksum  = CheckSum::sha(fields[7]);
00148   }
00149 
00150   void HistoryItemInstall::dumpTo(ostream & str) const
00151   {
00152     HistoryItem::dumpTo(str);
00153     str << "|"
00154       << name << "|"
00155       << edition << "|"
00156       << arch << "|"
00157       << reqby << "|"
00158       << repoalias << "|"
00159       << checksum;
00160   }
00161 
00162   ostream & operator<<(ostream & str, const HistoryItemInstall & obj)
00163   {
00164     obj.dumpTo(str);
00165     return str;
00166   }
00167 
00168 
00170   //
00171   // CLASS NAME: HistoryItemRemove
00172   //
00174 
00175   HistoryItemRemove::HistoryItemRemove(FieldVector & fields)
00176     : HistoryItem(fields)
00177   {
00178     if (fields.size() != 6)
00179       ZYPP_THROW(ParseException(
00180         str::form("Bad number of fields. Got %zu, expected %u.",
00181           fields.size(), 6)));
00182 
00183     name      = fields[2];
00184     edition   = Edition(fields[3]);
00185     arch      = Arch(fields[4]);
00186     reqby     = fields[5];
00187   }
00188 
00189   void HistoryItemRemove::dumpTo(ostream & str) const
00190   {
00191     HistoryItem::dumpTo(str);
00192     str << "|"
00193       << name << "|"
00194       << edition << "|"
00195       << arch << "|"
00196       << reqby;
00197   }
00198 
00199   ostream & operator<<(ostream & str, const HistoryItemRemove & obj)
00200   {
00201     obj.dumpTo(str);
00202     return str;
00203   }
00204 
00205 
00207   //
00208   // CLASS NAME: HistoryItemRepoAdd
00209   //
00211 
00212   HistoryItemRepoAdd::HistoryItemRepoAdd(FieldVector & fields)
00213     : HistoryItem(fields)
00214   {
00215     if (fields.size() != 4)
00216       ZYPP_THROW(ParseException(
00217         str::form("Bad number of fields. Got %zu, expected %u.",
00218           fields.size(), 4)));
00219 
00220     alias = fields[2];
00221     url = Url(fields[3]);
00222   }
00223 
00224   void HistoryItemRepoAdd::dumpTo(ostream & str) const
00225   {
00226     HistoryItem::dumpTo(str);
00227     str << "|"
00228       << alias << "|"
00229       << url;
00230   }
00231 
00232   ostream & operator<<(ostream & str, const HistoryItemRepoAdd & obj)
00233   {
00234     obj.dumpTo(str);
00235     return str;
00236   }
00237 
00238 
00240   //
00241   // CLASS NAME: HistoryItemRepoRemove
00242   //
00244 
00245   HistoryItemRepoRemove::HistoryItemRepoRemove(FieldVector & fields)
00246     : HistoryItem(fields)
00247   {
00248     if (fields.size() != 3)
00249       ZYPP_THROW(ParseException(
00250         str::form("Bad number of fields. Got %zu, expected %u.",
00251           fields.size(), 3)));
00252 
00253     alias = fields[2];
00254   }
00255 
00256   void HistoryItemRepoRemove::dumpTo(ostream & str) const
00257   {
00258     HistoryItem::dumpTo(str);
00259     str << "|" << alias;
00260   }
00261 
00262   ostream & operator<<(ostream & str, const HistoryItemRepoRemove & obj)
00263   {
00264     obj.dumpTo(str);
00265     return str;
00266   }
00267 
00268 
00270   //
00271   // CLASS NAME: HistoryItemRepoAliasChange
00272   //
00274 
00275   HistoryItemRepoAliasChange::HistoryItemRepoAliasChange(FieldVector & fields)
00276     : HistoryItem(fields)
00277   {
00278     if (fields.size() != 4)
00279       ZYPP_THROW(ParseException(
00280         str::form("Bad number of fields. Got %zu, expected %u.",
00281           fields.size(), 4)));
00282 
00283     oldalias = fields[2];
00284     newalias = fields[3];
00285   }
00286 
00287   void HistoryItemRepoAliasChange::dumpTo(ostream & str) const
00288   {
00289     HistoryItem::dumpTo(str);
00290     str << "|" << oldalias << "|" << newalias;
00291   }
00292 
00293   ostream & operator<<(ostream & str, const HistoryItemRepoAliasChange & obj)
00294   {
00295     obj.dumpTo(str);
00296     return str;
00297   }
00298 
00299 
00301   //
00302   // CLASS NAME: HistoryItemRepoUrlChange
00303   //
00305 
00306   HistoryItemRepoUrlChange::HistoryItemRepoUrlChange(FieldVector & fields)
00307     : HistoryItem(fields)
00308   {
00309     if (fields.size() != 4)
00310       ZYPP_THROW(ParseException(
00311         str::form("Bad number of fields. Got %zu, expected %u.",
00312           fields.size(), 4)));
00313 
00314     alias = fields[2];
00315     newurl = Url(fields[3]);
00316   }
00317 
00318   void HistoryItemRepoUrlChange::dumpTo(ostream & str) const
00319   {
00320     HistoryItem::dumpTo(str);
00321     str << "|" << alias << "|" << newurl;
00322   }
00323 
00324   ostream & operator<<(ostream & str, const HistoryItemRepoUrlChange & obj)
00325   {
00326     obj.dumpTo(str);
00327     return str;
00328   }
00329 
00330 
00331 }