00001 /*---------------------------------------------------------------------\ 00002 | | 00003 | __ __ ____ _____ ____ | 00004 | \ \ / /_ _/ ___|_ _|___ \ | 00005 | \ V / _` \___ \ | | __) | | 00006 | | | (_| |___) || | / __/ | 00007 | |_|\__,_|____/ |_| |_____| | 00008 | | 00009 | core system | 00010 | (C) 2002 SuSE AG | 00011 \----------------------------------------------------------------------/ 00012 00013 File: PMPLAINPackageDataProvider.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 PMPLAINPackageDataProvider_h 00021 #define PMPLAINPackageDataProvider_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/InstSrcDataPLAINPtr.h> 00033 #include <y2pm/RpmHeaderPtr.h> 00034 00035 #include <y2pm/PMPLAINPackageDataProviderPtr.h> 00036 #include <y2pm/PMPackageDataProvider.h> 00037 #include <y2pm/PMPackage.h> 00038 00039 class PMPLAINPackageDataProvider : public PMPackageDataProvider 00040 { 00041 REP_BODY(PMPLAINPackageDataProvider); 00042 00043 friend class InstSrcDataPLAIN; 00044 00045 private: 00046 00047 // back pointer to InstSrc for on-demand data access 00048 constInstSrcDataPLAINPtr _instSrcData; 00049 00050 // cached values per package 00051 unsigned _cachepos; 00052 Pathname _pkgfile; 00053 00054 PkgSplitSet _attr_SPLITPROVIDES; 00055 std::string _attr_SUMMARY; 00056 FSize _attr_SIZE; 00057 YStringTreeItem * _attr_GROUP; 00058 Vendor _attr_VENDOR; 00059 00060 Pathname _attr_SOURCELOC; // empty if no source 00061 FSize _attr_SOURCESIZE; // 0 if no source 00065 void loadStaticData( constRpmHeaderPtr h ); 00066 00073 static PMPackagePtr _cachedPkg; 00074 static constRpmHeaderPtr _cachedData; 00075 00076 constRpmHeaderPtr fillCache( PMPackagePtr package ) const; 00077 00078 public: 00079 00083 PMPLAINPackageDataProvider( constInstSrcDataPLAINPtr instSrc_r, 00084 unsigned cachepos_r, const Pathname & pkgfile_r ); 00085 00086 virtual ~PMPLAINPackageDataProvider(); 00087 00088 public: 00089 00094 // PMObject attributes 00095 virtual std::string summary ( const PMPackage & pkg_r ) const; 00096 virtual std::list<std::string> description ( const PMPackage & pkg_r ) const; 00097 virtual FSize size ( const PMPackage & pkg_r ) const; 00098 virtual bool providesSources( const PMPackage & pkg_r ) const; 00099 virtual std::string instSrcLabel ( const PMPackage & pkg_r ) const; 00100 virtual Vendor instSrcVendor ( const PMPackage & pkg_r ) const; 00101 virtual unsigned instSrcRank ( const PMPackage & pkg_r ) const; 00102 00103 // PMPackage attributes 00104 virtual PkgSplitSet splitprovides( const PMPackage & pkg_r ) const; 00105 virtual Date buildtime ( const PMPackage & pkg_r ) const; 00106 virtual std::string buildhost ( const PMPackage & pkg_r ) const; 00107 virtual std::string distribution( const PMPackage & pkg_r ) const; 00108 virtual Vendor vendor ( const PMPackage & pkg_r ) const; 00109 virtual std::string license ( const PMPackage & pkg_r ) const; 00110 virtual std::string packager ( const PMPackage & pkg_r ) const; 00111 virtual std::string group ( const PMPackage & pkg_r ) const; 00112 virtual YStringTreeItem * group_ptr ( const PMPackage & pkg_r ) const; 00113 virtual std::list<std::string> changelog ( const PMPackage & pkg_r ) const; 00114 virtual std::string url ( const PMPackage & pkg_r ) const; 00115 virtual std::string os ( const PMPackage & pkg_r ) const; 00116 virtual std::list<std::string> prein ( const PMPackage & pkg_r ) const; 00117 virtual std::list<std::string> postin ( const PMPackage & pkg_r ) const; 00118 virtual std::list<std::string> preun ( const PMPackage & pkg_r ) const; 00119 virtual std::list<std::string> postun ( const PMPackage & pkg_r ) const; 00120 virtual std::string sourceloc ( const PMPackage & pkg_r ) const; 00121 virtual FSize sourcesize ( const PMPackage & pkg_r ) const; 00122 virtual FSize archivesize ( const PMPackage & pkg_r ) const; 00123 //virtual std::list<std::string> authors ( const PMPackage & pkg_r ) const; 00124 virtual std::list<std::string> filenames ( const PMPackage & pkg_r ) const; 00125 00126 // suse packages values 00127 //virtual std::list<std::string> recommends ( const PMPackage & pkg_r ) const; 00128 //virtual std::list<std::string> suggests ( const PMPackage & pkg_r ) const; 00129 virtual std::string location ( const PMPackage & pkg_r ) const; 00130 virtual unsigned int medianr ( const PMPackage & pkg_r ) const; 00131 //virtual std::list<std::string> keywords ( const PMPackage & pkg_r ) const; 00132 //virtual std::string externalUrl ( const PMPackage & pkg_r ) const; 00133 //virtual std::list<PkgEdition> patchRpmBaseVersions( const PMPackage & pkg_r ) const; 00134 //virtual FSize patchRpmSize( const PMPackage & pkg_r ) const; 00135 00136 // physical access to the rpm file. 00137 virtual PMError providePkgToInstall( const PMPackage & pkg_r, Pathname& path_r ) const; 00138 // physical access to the src.rpm file. 00139 virtual PMError provideSrcPkgToInstall( const PMPackage & pkg_r, Pathname& path_r ) const; 00140 00141 // source for this package, needed for callbacks 00142 virtual constInstSrcPtr source ( const PMPackage & pkg_r ) const; 00143 virtual bool isRemote ( const PMPackage & pkg_r ) const; 00144 00145 // dudata is special 00146 virtual void du( const PMPackage & pkg_r, PkgDu & dudata_r ) const; 00147 }; 00148 00149 #endif // PMPLAINPackageDataProvider_h 00150 00151 // vim:sw=4