00001 /*---------------------------------------------------------------------\ 00002 | | 00003 | __ __ ____ _____ ____ | 00004 | \ \ / /_ _/ ___|_ _|___ \ | 00005 | \ V / _` \___ \ | | __) | | 00006 | | | (_| |___) || | / __/ | 00007 | |_|\__,_|____/ |_| |_____| | 00008 | | 00009 | core system | 00010 | (C) 2002 SuSE AG | 00011 \----------------------------------------------------------------------/ 00012 00013 File: PMRpmPackageDataProvider.h 00014 Purpose: Implements PackageDataProvider for installed rpms 00015 Author: Ludwig Nussel <lnussel@suse.de> 00016 Maintainer: Ludwig Nussel <lnussel@suse.de> 00017 00018 /-*/ 00019 00020 #ifndef PMRpmPackageDataProvider_h 00021 #define PMRpmPackageDataProvider_h 00022 00023 #include <iosfwd> 00024 #include <map> 00025 #include <vector> 00026 00027 #include <y2util/YRpmGroupsTree.h> 00028 #include <y2util/FSize.h> 00029 #include <y2util/Date.h> 00030 #include <y2util/Vendor.h> 00031 00032 #include <y2pm/RpmDbPtr.h> 00033 #include <y2pm/RpmHeaderPtr.h> 00034 00035 #include <y2pm/PMRpmPackageDataProviderPtr.h> 00036 #include <y2pm/PMPackageDataProvider.h> 00037 #include <y2pm/PMPackage.h> 00038 #include <y2pm/PMObject.h> 00039 00040 class PMRpmPackageDataProvider : public PMPackageDataProvider 00041 { 00042 REP_BODY(PMRpmPackageDataProvider); 00043 00044 friend class RpmDb; 00045 00046 private: 00047 // back pointer to RpmDb for on-demand rpm access 00048 RpmDbPtr _rpmdb; 00049 00050 // cached values per package 00051 // !!! RpmDb uses a per Package DataProvider, so it's always the 00052 // same PMPackage that calls the inteface. So it makes sense to 00053 // store data here. 00054 Date _attr_INSTALLTIME; // referenced from rpmdb during setup 00055 std::string _attr_SUMMARY; 00056 FSize _attr_SIZE; 00057 YStringTreeItem * _attr_GROUP; 00058 Vendor _attr_VENDOR; 00059 00060 00064 void loadStaticData( constRpmHeaderPtr h ); 00065 00072 static PMPackagePtr _cachedPkg; 00073 static constRpmHeaderPtr _cachedData; 00074 00075 constRpmHeaderPtr fillCache( PMPackagePtr package ) const; 00076 00077 public: 00078 00082 PMRpmPackageDataProvider( RpmDbPtr rpmdb ); 00083 00084 virtual ~PMRpmPackageDataProvider(); 00085 00086 public: 00087 00092 // PMObject attributes 00093 virtual std::string summary ( const PMPackage & pkg_r ) const; 00094 virtual std::list<std::string> description ( const PMPackage & pkg_r ) const; 00095 virtual FSize size ( const PMPackage & pkg_r ) const; 00096 00097 // PMPackage attributes 00098 virtual Date buildtime ( const PMPackage & pkg_r ) const; 00099 virtual std::string buildhost ( const PMPackage & pkg_r ) const; 00100 virtual Date installtime ( const PMPackage & pkg_r ) const; 00101 virtual std::string distribution( const PMPackage & pkg_r ) const; 00102 virtual Vendor vendor ( const PMPackage & pkg_r ) const; 00103 virtual std::string license ( const PMPackage & pkg_r ) const; 00104 virtual std::string packager ( const PMPackage & pkg_r ) const; 00105 virtual std::string group ( const PMPackage & pkg_r ) const; 00106 virtual YStringTreeItem * group_ptr ( const PMPackage & pkg_r ) const; 00107 virtual std::list<std::string> changelog ( const PMPackage & pkg_r ) const; 00108 virtual std::string url ( const PMPackage & pkg_r ) const; 00109 virtual std::string os ( const PMPackage & pkg_r ) const; 00110 virtual std::list<std::string> prein ( const PMPackage & pkg_r ) const; 00111 virtual std::list<std::string> postin ( const PMPackage & pkg_r ) const; 00112 virtual std::list<std::string> preun ( const PMPackage & pkg_r ) const; 00113 virtual std::list<std::string> postun ( const PMPackage & pkg_r ) const; 00114 virtual std::list<std::string> filenames ( const PMPackage & pkg_r ) const; 00115 00116 // dudata is special 00117 virtual void du( const PMPackage & pkg_r, PkgDu & dudata_r ) const; 00118 }; 00119 00120 #endif // PMRpmPackageDataProvider_h 00121 00122 // vim:sw=4