00001 /*---------------------------------------------------------------------\ 00002 | | 00003 | __ __ ____ _____ ____ | 00004 | \ \ / /_ _/ ___|_ _|___ \ | 00005 | \ V / _` \___ \ | | __) | | 00006 | | | (_| |___) || | / __/ | 00007 | |_|\__,_|____/ |_| |_____| | 00008 | | 00009 | core system | 00010 | (C) 2002 SuSE AG | 00011 \----------------------------------------------------------------------/ 00012 00013 File: YUMPackageDataProvider.h 00014 Purpose: Implements PackageDataProvider for YUM 00015 Author: Michael Andres <ma@suse.de> 00016 Maintainer: Michael Andres <ma@suse.de> 00017 00018 /-*/ 00019 00020 #ifndef YUMPackageDataProvider_h 00021 #define YUMPackageDataProvider_h 00022 00023 #include <iosfwd> 00024 #include <vector> 00025 #include <map> 00026 00027 #include <y2util/YRpmGroupsTree.h> 00028 #include <y2util/Vendor.h> 00029 #include <y2util/FSize.h> 00030 #include <y2util/Date.h> 00031 00032 #include <y2pm/PMPackageDataProvider.h> 00033 #include <y2pm/PMPackageManager.h> 00034 #include <y2pm/PMPackage.h> 00035 #include <y2pm/InstSrcDataYUM.h> 00036 #include <y2pm/InstSrcDescr.h> 00037 #include <Y2PM.h> 00038 00039 #include "YUMPackageDataProviderPtr.h" 00040 #include "y2pm/InstSrcDataYUM.h" 00041 #include "YUMImpl.h" 00042 00043 00045 namespace YUM 00046 { 00047 00048 class PackageDataProvider : public PMPackageDataProvider 00049 { 00050 REP_BODY(PackageDataProvider); 00051 00052 friend class Impl; 00053 00054 public: 00055 00059 PackageDataProvider( const VarPtr<Impl> impl_r ); 00060 00061 virtual ~PackageDataProvider(); 00062 00063 public: 00064 00065 // PMObject attributes 00066 virtual std::string summary ( const PMPackage & pkg_r ) const 00067 { return _attr_SUMMARY; } 00068 virtual std::list<std::string> description ( const PMPackage & pkg_r ) const 00069 { return _attr_DESCRIPTION; } 00070 virtual FSize size ( const PMPackage & pkg_r ) const 00071 { return _attr_SIZE; } 00072 virtual bool providesSources( const PMPackage & pkg_r ) const 00073 { return !_sourcefile.empty(); } 00074 virtual std::string instSrcLabel ( const PMPackage & pkg_r ) const 00075 { 00076 if ( source(pkg_r) && source(pkg_r)->descr() ) 00077 return source(pkg_r)->descr()->label(); 00078 return PMPackageDataProvider::instSrcLabel(); 00079 } 00080 virtual Vendor instSrcVendor ( const PMPackage & pkg_r ) const 00081 { 00082 if ( source(pkg_r) && source(pkg_r)->descr() ) 00083 return source(pkg_r)->descr()->content_vendor(); 00084 return PMPackageDataProvider::instSrcVendor(); 00085 } 00086 virtual unsigned instSrcRank ( const PMPackage & pkg_r ) const 00087 { 00088 if ( source(pkg_r) && source(pkg_r)->descr() ) 00089 return source(pkg_r)->descr()->default_rank(); 00090 return PMPackageDataProvider::instSrcRank(); 00091 } 00092 00093 // PMPackage attributes 00094 virtual PkgSplitSet splitprovides( const PMPackage & pkg_r ) const 00095 { return _attr_SPLITPROVIDES; } 00096 virtual Date buildtime ( const PMPackage & pkg_r ) const 00097 { return Date( pkg_r.edition().buildtime() ); } 00098 //virtual std::string buildhost ( const PMPackage & pkg_r ) const; 00099 //virtual std::string distribution( const PMPackage & pkg_r ) const; 00100 virtual Vendor vendor ( const PMPackage & pkg_r ) const 00101 { return _attr_VENDOR; } 00102 virtual std::string license ( const PMPackage & pkg_r ) const 00103 { return _attr_LICENSE; } 00104 //virtual std::string packager ( const PMPackage & pkg_r ) const; 00105 virtual std::string group ( const PMPackage & pkg_r ) const 00106 { return _attr_GROUP ? Y2PM::packageManager().rpmGroup( _attr_GROUP ) : std::string(); } 00107 virtual YStringTreeItem * group_ptr ( const PMPackage & pkg_r ) const 00108 { return _attr_GROUP; } 00109 //virtual std::list<std::string> changelog ( const PMPackage & pkg_r ) const; 00110 //virtual std::string url ( const PMPackage & pkg_r ) const; 00111 //virtual std::string os ( const PMPackage & pkg_r ) const; 00112 //virtual std::list<std::string> prein ( const PMPackage & pkg_r ) const; 00113 //virtual std::list<std::string> postin ( const PMPackage & pkg_r ) const; 00114 //virtual std::list<std::string> preun ( const PMPackage & pkg_r ) const; 00115 //virtual std::list<std::string> postun ( const PMPackage & pkg_r ) const; 00116 virtual std::string sourceloc ( const PMPackage & pkg_r ) const 00117 { return _sourcefile.asString(); } 00118 virtual FSize sourcesize ( const PMPackage & pkg_r ) const 00119 { return _attr_SOURCESIZE; } 00120 virtual FSize archivesize ( const PMPackage & pkg_r ) const 00121 { return _attr_ARCHIVESIZE; } 00122 //virtual std::list<std::string> authors ( const PMPackage & pkg_r ) const; 00123 //virtual std::list<std::string> filenames ( const PMPackage & pkg_r ) const; 00124 00125 // suse packages values 00126 //virtual std::list<std::string> recommends ( const PMPackage & pkg_r ) const; 00127 //virtual std::list<std::string> suggests ( const PMPackage & pkg_r ) const; 00128 virtual std::string location ( const PMPackage & pkg_r ) const 00129 { return _pkgfile.asString(); } 00130 virtual unsigned int medianr ( const PMPackage & pkg_r ) const 00131 { return 1; } 00132 //virtual std::list<std::string> keywords ( const PMPackage & pkg_r ) const; 00133 //virtual std::string externalUrl ( const PMPackage & pkg_r ) const; 00134 //virtual std::list<PkgEdition> patchRpmBaseVersions( const PMPackage & pkg_r ) const; 00135 //virtual FSize patchRpmSize( const PMPackage & pkg_r ) const; 00136 00137 // physical access to the rpm file. 00138 virtual PMError providePkgToInstall( const PMPackage & pkg_r, Pathname& path_r ) const 00139 { return _impl->providePkgToInstall( _pkgfile, path_r ); } 00140 // physical access to the src.rpm file. 00141 virtual PMError provideSrcPkgToInstall( const PMPackage & pkg_r, Pathname& path_r ) const 00142 { return _impl->providePkgToInstall( _sourcefile, path_r );} 00143 00144 // source for this package, needed for callbacks 00145 virtual constInstSrcPtr source ( const PMPackage & pkg_r ) const 00146 { return _impl->instSrc(); } 00147 virtual bool isRemote ( const PMPackage & pkg_r ) const 00148 { return( source(pkg_r) ? source(pkg_r)->isRemote() : false ); } 00149 // dudata is special 00150 //virtual void du( const PMPackage & pkg_r, PkgDu & dudata_r ) const; 00151 00152 private: 00153 00154 // the source 00155 const VarPtr<Impl> _impl; 00156 00157 Pathname _pkgfile; 00158 Pathname _sourcefile; 00159 00160 std::string _attr_SUMMARY; 00161 std::list<std::string> _attr_DESCRIPTION; 00162 FSize _attr_SIZE; 00163 00164 PkgSplitSet _attr_SPLITPROVIDES; // provided by YUMImpl 00165 Vendor _attr_VENDOR; 00166 std::string _attr_LICENSE; 00167 YStringTreeItem * _attr_GROUP; 00168 FSize _attr_SOURCESIZE; 00169 FSize _attr_ARCHIVESIZE; 00170 00171 private: 00172 00173 void loadAttr( YUMPrimaryDataPtr pdata_r ) 00174 { 00175 _pkgfile = pdata_r->location; 00176 00177 _attr_SUMMARY = pdata_r->summary; 00178 _attr_DESCRIPTION = stringutil::splitToLines( pdata_r->description ); 00179 _attr_SIZE = FSize(pdata_r->sizeInstalled); 00180 00181 _attr_VENDOR = Vendor(pdata_r->vendor); 00182 _attr_LICENSE = pdata_r->license; 00183 _attr_GROUP = Y2PM::packageManager().addRpmGroup( pdata_r->group ); 00184 _attr_ARCHIVESIZE = FSize(pdata_r->sizePackage); 00185 } 00186 00187 }; 00188 00190 } // namespace YUM 00192 00193 #endif // YUMPackageDataProvider_h
1.4.4