PackagesLangFileReader.cc

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                          ____ _   __ __ ___                          |
00003 |                         |__  / \ / / . \ . \                         |
00004 |                           / / \ V /|  _/  _/                         |
00005 |                          / /__ | | | | | |                           |
00006 |                         /_____||_| |_| |_|                           |
00007 |                                                                      |
00008 \---------------------------------------------------------------------*/
00012 #include <iostream>
00013 #include "zypp/base/Easy.h"
00014 #include "zypp/base/Logger.h"
00015 #include "zypp/base/LogTools.h"
00016 #include "zypp/parser/susetags/PackagesLangFileReader.h"
00017 #include "zypp/parser/susetags/FileReaderBaseImpl.h"
00018 
00019 using std::endl;
00020 #undef  ZYPP_BASE_LOGGER_LOGGROUP
00021 #define ZYPP_BASE_LOGGER_LOGGROUP "parser::susetags"
00022 
00024 namespace zypp
00025 { 
00026 
00027   namespace parser
00028   { 
00029 
00030     namespace susetags
00031     { 
00032 
00034       //
00035       //        CLASS NAME : PackagesLangFileReader::Impl
00036       //
00038       class PackagesLangFileReader::Impl : public BaseImpl
00039       {
00040         public:
00041           Impl( const PackagesLangFileReader & parent_r,
00042                 const Locale & locale_r )
00043           : BaseImpl( parent_r ), _locale( locale_r )
00044           {}
00045 
00046           virtual ~Impl()
00047           {}
00048 
00049           bool hasPackage() const
00050           { return _pkgData; }
00051 
00052           bool hasSourcepackage() const
00053           { return _srcpkgData; }
00054 
00055           data::Package_Ptr handoutPackage()
00056           {
00057             data::Package_Ptr ret;
00058             ret.swap( _pkgData );
00059             _srcpkgData = 0;
00060             _data       = 0;
00061             return ret;
00062           }
00063 
00064           data::SrcPackage_Ptr handoutSourcepackage()
00065           {
00066             data::SrcPackage_Ptr ret;
00067             ret.swap( _srcpkgData );
00068             _pkgData = 0;
00069             _data    = 0;
00070             return ret;
00071           }
00072 
00073         public: // single tags
00075           void consumeVer( const SingleTagPtr & tag_r )
00076           { /*NOP*/ }
00077 
00079           void consumePkg( const SingleTagPtr & tag_r )
00080           {
00081             std::vector<std::string> words;
00082             if ( str::split( tag_r->value, std::back_inserter(words) ) != 4 )
00083             {
00084               ZYPP_THROW( error( tag_r, "Expected [name version release arch]") );
00085             }
00086 
00087             if ( words[3] == "src" || words[3] == "nosrc")
00088             {
00089               ++_c_srcpkg;
00090               _data = _srcpkgData = new data::SrcPackage;
00091               _pkgData = 0;
00092               // _data->arch is arch_noarch per default
00093             }
00094             else
00095             {
00096               ++_c_pkg;
00097               _data = _pkgData = new data::Package;
00098               _srcpkgData = 0;
00099               _data->arch = Arch( words[3] );
00100             }
00101             _data->name    = words[0];
00102             _data->edition = Edition( words[1],words[2] );
00103           }
00104 
00106           void consumeSum( const SingleTagPtr & tag_r )
00107           {
00108             _data->summary.setText( tag_r->value, _locale );
00109           }
00110 
00111         public: // multi tags
00113           void consumeDes( const MultiTagPtr & tag_r )
00114           {
00115             _data->description.setText( tag_r->value, _locale );
00116           }
00117 
00119           void consumeEul( const MultiTagPtr & tag_r )
00120           {
00121             _data->licenseToConfirm.setText( tag_r->value, _locale );
00122           }
00123 
00125           void consumeIns( const MultiTagPtr & tag_r )
00126           {
00127             _data->insnotify.setText( tag_r->value, _locale );
00128           }
00129 
00131           void consumeDel( const MultiTagPtr & tag_r )
00132           {
00133             _data->delnotify.setText( tag_r->value, _locale );
00134           }
00135 
00136         public:
00137           DefaultIntegral<unsigned,0> _c_pkg;
00138           DefaultIntegral<unsigned,0> _c_srcpkg;
00139 
00140         private:
00141           Locale                  _locale;
00142           data::Packagebase_Ptr   _data;
00143           data::Package_Ptr       _pkgData;
00144           data::SrcPackage_Ptr    _srcpkgData;
00145       };
00147 
00149       //
00150       //        CLASS NAME : PackagesLangFileReader
00151       //
00153 
00155       //
00156       //        METHOD NAME : PackagesLangFileReader::PackagesLangFileReader
00157       //        METHOD TYPE : Ctor
00158       //
00159       PackagesLangFileReader::PackagesLangFileReader()
00160       {}
00161 
00163       //
00164       //        METHOD NAME : PackagesLangFileReader::~PackagesLangFileReader
00165       //        METHOD TYPE : Dtor
00166       //
00167       PackagesLangFileReader::~PackagesLangFileReader()
00168       {}
00169 
00171       //
00172       //        METHOD NAME : PackagesLangFileReader::beginParse
00173       //        METHOD TYPE : void
00174       //
00175       void PackagesLangFileReader::beginParse()
00176       {
00177         _pimpl.reset( new Impl( *this, _locale ) );
00178       }
00179 
00181       //
00182       //        METHOD NAME : PackagesLangFileReader::consume
00183       //        METHOD TYPE : void
00184       //
00185       void PackagesLangFileReader::consume( const SingleTagPtr & tag_r )
00186       {
00187 #define TAGN(V)   tag_r->name == #V
00188 #define TAGFWD(V) ( TAGN(V) ) _pimpl->consume##V( tag_r )
00189 
00190         if ( TAGN( Pkg ) )
00191         {
00192           // consume old data
00193           if ( _pimpl->hasPackage() )
00194           {
00195             if ( _pkgConsumer )
00196               _pkgConsumer( _pimpl->handoutPackage() );
00197           }
00198           else if ( _pimpl->hasSourcepackage() )
00199           {
00200             if ( _srcPkgConsumer )
00201               _srcPkgConsumer( _pimpl->handoutSourcepackage() );
00202           }
00203           // start new data
00204           _pimpl->consumePkg( tag_r );
00205         }
00206         else if TAGFWD( Sum );
00207         else if TAGFWD( Ver );
00208         else
00209         { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; }
00210       }
00211 
00213       //
00214       //        METHOD NAME : PackagesLangFileReader::consume
00215       //        METHOD TYPE : void
00216       //
00217       void PackagesLangFileReader::consume( const MultiTagPtr & tag_r )
00218       {
00219         if TAGFWD( Des );
00220         else if TAGFWD( Eul );
00221         else if TAGFWD( Ins );
00222         else if TAGFWD( Del );
00223         else
00224         { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; }
00225       }
00226 
00228       //
00229       //        METHOD NAME : PackagesLangFileReader::lastData
00230       //        METHOD TYPE : void
00231       //
00232       void PackagesLangFileReader::endParse()
00233       {
00234         // consume oldData
00235         if ( _pimpl->hasPackage() )
00236         {
00237           if ( _pkgConsumer )
00238             _pkgConsumer( _pimpl->handoutPackage() );
00239         }
00240         else if ( _pimpl->hasSourcepackage() )
00241         {
00242           if ( _srcPkgConsumer )
00243             _srcPkgConsumer( _pimpl->handoutSourcepackage() );
00244         }
00245         MIL << "[PackagesLang]" << "(" << _pimpl->_c_pkg << "|" << _pimpl->_c_srcpkg << ")" << endl;
00246         _pimpl.reset();
00247       }
00248 
00250     } // namespace susetags
00253   } // namespace parser
00256 } // namespace zypp

Generated on Tue Sep 25 19:23:03 2007 for libzypp by  doxygen 1.5.3