X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=zypp%2FResObject.h;h=9bdb6bc7f9e6c775ea9942157bbbaa419e534cf7;hb=f2f36ebec8b34e01f91f190cbd0b9f4d3c2c4510;hp=17afa2b8b74abc8124fdd3067a26321fd79c23f2;hpb=d492bc6ff98c3a2917afcaad406ef9586a9ba8f5;p=platform%2Fupstream%2Flibzypp.git diff --git a/zypp/ResObject.h b/zypp/ResObject.h index 17afa2b..9bdb6bc 100644 --- a/zypp/ResObject.h +++ b/zypp/ResObject.h @@ -15,26 +15,32 @@ #include "zypp/APIConfig.h" #include "zypp/Resolvable.h" +#include "zypp/Date.h" +#include "zypp/Locale.h" #include "zypp/Vendor.h" +#include "zypp/ByteCount.h" +#include "zypp/OnMediaLocation.h" +#include "zypp/Repository.h" +#include "zypp/CpeId.h" #include "zypp/sat/LookupAttr.h" #include "zypp/sat/SolvableSet.h" /////////////////////////////////////////////////////////////////// namespace zypp -{ - /////////////////////////////////////////////////////////////////// - /// \class ResObject - /// \brief Base for resolvable objects - /// - /// \note \ref Resolvable is a SolvableType, which provides direct - /// access to many of the underlying sat::Solvables properties. - /// Don't add common properties here, but in \ref sat::Solvable - /// and extend \ref sat::SolvableType. - /// - /// \see \ref makeResObject for how to construct ResObjects. - /// \todo Merge with Resolvable +{ ///////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////// + // + // CLASS NAME : ResObject + // + /** + * Interface base for resolvable objects (common data). + * That is, all data not needed for solving, but common + * across all Resolvable kinds. + * + * \see \ref makeResObject for how to construct ResObjects. + */ class ResObject : public Resolvable { public: @@ -44,6 +50,7 @@ namespace zypp typedef TraitsType::constPtrType constPtr; public: + /** Convert \c this into a Ptr of a certain Kind. * This is a convenience to access type specific * attributes. @@ -56,20 +63,150 @@ namespace zypp * DBG << pi->asKind()->keywords() << endl; * \endcode */ - template - inline typename ResTraits::constPtrType asKind() const; + template + inline typename ResTraits<_Res>::constPtrType asKind() const; + + template + inline typename ResTraits<_Res>::PtrType asKind(); + + public: + /** \name Locale support. + * \see \ref sat::Solvable + */ + //@{ + /** \see \ref sat::Solvable::supportsLocales */ + bool supportsLocales() const + { return sat::Solvable::supportsLocales(); } + + /** \see \ref sat::Solvable::supportsLocale */ + bool supportsLocale( const Locale & locale_r ) const + { return sat::Solvable::supportsLocale( locale_r ); } + + bool supportsLocale( const LocaleSet & locales_r ) const + { return sat::Solvable::supportsLocale( locales_r ); } - template - inline typename ResTraits::PtrType asKind(); + /** \see \ref sat::Solvable::supportsRequestedLocales */ + bool supportsRequestedLocales() const + { return sat::Solvable::supportsRequestedLocales(); } + + /** \see \ref sat::Solvable::getSupportedLocales */ + LocaleSet getSupportedLocales() const + { return sat::Solvable::getSupportedLocales(); } + //@} public: /** + * \short Short text describing the resolvable. + * This attribute is usually displayed in columns. + */ + std::string summary( const Locale & lang_r = Locale() ) const; + + /** + * \short Long text describing the resolvable. + */ + std::string description( const Locale & lang_r = Locale() ) const; + + /** + * \short Installation Notification + * + * This text can be used to tell the user some notes + * When he selects the resovable for installation. + */ + std::string insnotify( const Locale & lang_r = Locale() ) const; + + /** + * \short De-Installation Notification + * + * This text can be used to tell the user some notes + * When he selects the resovable for deinstall. + */ + std::string delnotify( const Locale & lang_r = Locale() ) const; + + /** + * \short License or agreement to accept + * + * Agreement, warning or license the user should + * accept before installing the resolvable. + */ + std::string licenseToConfirm( const Locale & lang_r = Locale() ) const; + + /** + * \short Acceptance of Product License needed? + * + * Returns whether a product license has to be accepted + * (no acceptance is needed for openSUSE) + */ + bool needToAcceptLicense() const; + + /** * \short Vendor - * \deprecated Though typedef'ed to std::string, Vendor is actually an \ref IdString. + * + * For example "Novell Inc." */ Vendor vendor() const { return Resolvable::vendor().asString(); } + /** The distribution string. + * E.g. \c code-11. + */ + std::string distribution() const; + + /** The Common Platform Enumeration name for this product. */ + CpeId cpeId() const; + + /** Installed (unpacked) size. + * This is just a total number. Many objects provide even more detailed + * disk usage data. You can use \ref DiskUsageCounter to find out + * how objects data are distributed across partitions/directories. + * \code + * // Load directory set into ducounter + * DiskUsageCounter ducounter( { "/", "/usr", "/var" } ); + * + * // see how noch space the packages use + * for ( const PoolItem & pi : pool ) + * { + * cout << pi << ducounter.disk_usage( pi ) << endl; + * // I__s_(7)GeoIP-1.4.8-3.1.2.x86_64(@System) { + * // dir:[/] [ bs: 0 B ts: 0 B us: 0 B (+-: 1.0 KiB)] + * // dir:[/usr] [ bs: 0 B ts: 0 B us: 0 B (+-: 133.0 KiB)] + * // dir:[/var] [ bs: 0 B ts: 0 B us: 0 B (+-: 1.1 MiB)] + * // } + * } + * \endcode + * \see \ref DiskUsageCounter + */ + ByteCount installSize() const; + + /** Download size. */ + ByteCount downloadSize() const; + + /** \see \ref sat::Solvable::repository */ + Repository repository() const + { return sat::Solvable::repository(); } + + /** \ref RepoInfo associated with the repository + * providing this resolvable. + */ + RepoInfo repoInfo() const + { return repository().info(); } + + /** + * Media number where the resolvable is located + * 0 if no media access is required. + */ + unsigned mediaNr() const; + + /** + * \short build time of the resolvable + */ + Date buildtime() const; + + /** + * \short Installation time + * 0 if the resolvable is not installed. + */ + Date installtime() const; + protected: friend ResObject::Ptr makeResObject( const sat::Solvable & solvable_r ); /** Ctor */ @@ -78,9 +215,6 @@ namespace zypp virtual ~ResObject(); /** Helper for stream output */ virtual std::ostream & dumpOn( std::ostream & str ) const; - /** This is a \ref sat::SolvableType (allow implicit conversion in derived classes). */ - operator sat::Solvable() const - { return satSolvable(); } }; /////////////////////////////////////////////////////////////////// @@ -115,18 +249,18 @@ namespace zypp * \todo make<> was a poor choice (AFAIR because gcc had some trouble with * asKind<>(sat::Solvable)). Remove it in favour of asKind<>(sat::Solvable) */ - template - inline typename ResTraits::PtrType make( const sat::Solvable & solvable_r ) - { return( isKind( solvable_r ) ? new TRes( solvable_r ) : 0 ); } + template + inline typename ResTraits<_Res>::PtrType make( const sat::Solvable & solvable_r ) + { return( isKind<_Res>( solvable_r ) ? new _Res( solvable_r ) : 0 ); } /** \overload Specialisation for ResObject autodetecting the kind of resolvable. */ template<> inline ResObject::Ptr make( const sat::Solvable & solvable_r ) { return makeResObject( solvable_r ); } /** Directly create a certain kind of ResObject from \ref sat::Solvable. */ - template - inline typename ResTraits::PtrType asKind( const sat::Solvable & solvable_r ) - { return make( solvable_r ); } + template + inline typename ResTraits<_Res>::PtrType asKind( const sat::Solvable & solvable_r ) + { return make<_Res>( solvable_r ); } /** Convert ResObject::Ptr into Ptr of a certain Kind. * \return \c NULL iff \a p is \c NULL or points to a Resolvable @@ -136,22 +270,23 @@ namespace zypp * asKind(resPtr); * \endcode */ - template - inline typename ResTraits::PtrType asKind( const ResObject::Ptr & p ) - { return dynamic_pointer_cast(p); } + template + inline typename ResTraits<_Res>::PtrType asKind( const ResObject::Ptr & p ) + { return dynamic_pointer_cast<_Res>(p); } - template - inline typename ResTraits::constPtrType asKind( const ResObject::constPtr & p ) - { return dynamic_pointer_cast(p); } + template + inline typename ResTraits<_Res>::constPtrType asKind( const ResObject::constPtr & p ) + { return dynamic_pointer_cast(p); } - template - inline typename ResTraits::constPtrType ResObject::asKind() const - { return dynamic_cast( this ); } + template + inline typename ResTraits<_Res>::constPtrType ResObject::asKind() const + { return dynamic_cast( this ); } - template - inline typename ResTraits::PtrType ResObject::asKind() - { return dynamic_cast( this ); } + template + inline typename ResTraits<_Res>::PtrType ResObject::asKind() + { return dynamic_cast<_Res *>( this ); } + ///////////////////////////////////////////////////////////////// } // namespace zypp /////////////////////////////////////////////////////////////////// #endif // ZYPP_RESOBJECT_H