libzypp 8.13.6
|
00001 /*---------------------------------------------------------------------\ 00002 | ____ _ __ __ ___ | 00003 | |__ / \ / / . \ . \ | 00004 | / / \ V /| _/ _/ | 00005 | / /__ | | | | | | | 00006 | /_____||_| |_| |_| | 00007 | | 00008 \---------------------------------------------------------------------*/ 00012 #include <iostream> 00013 //#include "zypp/base/Logger.h" 00014 00015 #include "zypp/ui/Selectable.h" 00016 #include "zypp/ui/SelectableImpl.h" 00017 #include "zypp/ResPool.h" 00018 00020 namespace zypp 00021 { 00022 00023 namespace ui 00024 { 00025 00026 IMPL_PTR_TYPE(Selectable); 00027 00028 Selectable::Ptr Selectable::get( const pool::ByIdent & ident_r ) 00029 { return ResPool::instance().proxy().lookup( ident_r ); } 00030 00032 // 00033 // METHOD NAME : Selectable::Selectable 00034 // METHOD TYPE : Ctor 00035 // 00036 Selectable::Selectable( Impl_Ptr pimpl_r ) 00037 : _pimpl( pimpl_r ) 00038 {} 00039 00041 // 00042 // METHOD NAME : Selectable::~Selectable 00043 // METHOD TYPE : Dtor 00044 // 00045 Selectable::~Selectable() 00046 {} 00047 00049 // 00050 // Forward to implementation. 00051 // Restrict PoolItems to ResObject::constPtr! 00052 // 00054 00055 IdString Selectable::ident() const 00056 { return _pimpl->ident(); } 00057 00058 ResObject::Kind Selectable::kind() const 00059 { return _pimpl->kind(); } 00060 00061 const std::string & Selectable::name() const 00062 { return _pimpl->name(); } 00063 00064 Status Selectable::status() const 00065 { return _pimpl->status(); } 00066 00067 bool Selectable::setStatus( Status state_r, ResStatus::TransactByValue causer_r ) 00068 { return _pimpl->setStatus( state_r, causer_r ); } 00069 00070 PoolItem Selectable::installedObj() const 00071 { return _pimpl->installedObj(); } 00072 00073 PoolItem Selectable::candidateObj() const 00074 { return _pimpl->candidateObj(); } 00075 00076 PoolItem Selectable::candidateObjFrom( Repository repo_r ) const 00077 { return _pimpl->candidateObjFrom( repo_r ); } 00078 00079 PoolItem Selectable::updateCandidateObj() const 00080 { return _pimpl->updateCandidateObj(); } 00081 00082 PoolItem Selectable::highestAvailableVersionObj() const 00083 { return _pimpl->highestAvailableVersionObj(); } 00084 00085 bool Selectable::identicalAvailable( const PoolItem & rhs ) const 00086 { return _pimpl->identicalAvailable( rhs ); } 00087 00088 bool Selectable::identicalInstalled( const PoolItem & rhs ) const 00089 { return _pimpl->identicalInstalled( rhs ); } 00090 00091 PoolItem Selectable::setCandidate( const PoolItem & newCandidate_r, ResStatus::TransactByValue causer_r ) 00092 { return _pimpl->setCandidate( newCandidate_r, causer_r ); } 00093 00094 PoolItem Selectable::setCandidate( ResObject::constPtr newCandidate_r, ResStatus::TransactByValue causer_r ) 00095 { return _pimpl->setCandidate( PoolItem( newCandidate_r ), causer_r ); } 00096 00097 bool Selectable::setOnSystem( const PoolItem & newCandidate_r, ResStatus::TransactByValue causer_r ) 00098 { 00099 if ( identicalInstalled( newCandidate_r ) ) 00100 return setFate( UNMODIFIED, causer_r ); 00101 return setCandidate( newCandidate_r, causer_r ) && setFate( TO_INSTALL, causer_r ); 00102 } 00103 00104 PoolItem Selectable::theObj() const 00105 { return _pimpl->theObj(); } 00106 00108 00109 bool Selectable::availableEmpty() const 00110 { return _pimpl->availableEmpty(); } 00111 00112 Selectable::available_size_type Selectable::availableSize() const 00113 { return _pimpl->availableSize(); } 00114 00115 Selectable::available_iterator Selectable::availableBegin() const 00116 { return _pimpl->availableBegin(); } 00117 00118 Selectable::available_iterator Selectable::availableEnd() const 00119 { return _pimpl->availableEnd(); } 00120 00122 00123 bool Selectable::installedEmpty() const 00124 { return _pimpl->installedEmpty(); } 00125 00126 Selectable::installed_size_type Selectable::installedSize() const 00127 { return _pimpl->installedSize(); } 00128 00129 Selectable::installed_iterator Selectable::installedBegin() const 00130 { return _pimpl->installedBegin(); } 00131 00132 Selectable::installed_iterator Selectable::installedEnd() const 00133 { return _pimpl->installedEnd(); } 00134 00136 00137 bool Selectable::picklistEmpty() const 00138 { return _pimpl->picklistEmpty(); } 00139 00140 Selectable::picklist_size_type Selectable::picklistSize() const 00141 { return _pimpl->picklistSize(); } 00142 00143 Selectable::picklist_iterator Selectable::picklistBegin() const 00144 { return _pimpl->picklistBegin(); } 00145 00146 Selectable::picklist_iterator Selectable::picklistEnd() const 00147 { return _pimpl->picklistEnd(); } 00148 00150 00151 bool Selectable::isUnmaintained() const 00152 { return _pimpl->isUnmaintained(); } 00153 00154 bool Selectable::multiversionInstall() const 00155 { return _pimpl->multiversionInstall(); } 00156 00157 bool Selectable::pickInstall( const PoolItem & pi_r, ResStatus::TransactByValue causer_r, bool yesno_r ) 00158 { return _pimpl->pickInstall( pi_r, causer_r, yesno_r ); } 00159 00160 bool Selectable::pickDelete( const PoolItem & pi_r, ResStatus::TransactByValue causer_r, bool yesno_r ) 00161 { return _pimpl->pickDelete( pi_r, causer_r, yesno_r ); } 00162 00163 Status Selectable::pickStatus( const PoolItem & pi_r ) const 00164 { return _pimpl->pickStatus( pi_r ); } 00165 00166 bool Selectable::setPickStatus( const PoolItem & pi_r, Status state_r, ResStatus::TransactByValue causer_r ) 00167 { return _pimpl->setPickStatus( pi_r, state_r, causer_r ); } 00168 00170 00171 bool Selectable::isUndetermined() const 00172 { return _pimpl->isUndetermined(); } 00173 00174 bool Selectable::isRelevant() const 00175 { return _pimpl->isRelevant(); } 00176 00177 bool Selectable::isSatisfied() const 00178 { return _pimpl->isSatisfied(); } 00179 00180 bool Selectable::isBroken() const 00181 { return _pimpl->isBroken(); } 00182 00183 bool Selectable::isNeeded() const 00184 { 00185 return fate() == TO_INSTALL || ( ! locked() && isBroken() ); 00186 } 00187 00188 bool Selectable::isUnwanted() const 00189 { 00190 return locked() && isBroken() ; 00191 } 00192 00193 ResStatus::TransactByValue Selectable::modifiedBy() const 00194 { return _pimpl->modifiedBy(); } 00195 00196 bool Selectable::hasLicenceConfirmed() const 00197 { return _pimpl->hasLicenceConfirmed(); } 00198 00199 void Selectable::setLicenceConfirmed( bool val_r ) 00200 { _pimpl->setLicenceConfirmed( val_r ); } 00201 00202 00203 Selectable::Fate Selectable::fate() const 00204 { 00205 switch ( status() ) { 00206 case S_Update: 00207 case S_Install: 00208 case S_AutoUpdate: 00209 case S_AutoInstall: 00210 return TO_INSTALL; 00211 break; 00212 00213 case S_Del: 00214 case S_AutoDel: 00215 return TO_DELETE; 00216 break; 00217 00218 case S_Protected: 00219 case S_Taboo: 00220 case S_KeepInstalled: 00221 case S_NoInst: 00222 break; 00223 } 00224 return UNMODIFIED; 00225 }; 00226 00227 bool Selectable::setFate( Fate fate_r, ResStatus::TransactByValue causer_r ) 00228 { 00229 switch ( fate_r ) 00230 { 00231 case TO_INSTALL: 00232 return setStatus( hasInstalledObj() ? S_Update : S_Install, causer_r ); 00233 break; 00234 00235 case TO_DELETE: 00236 return setStatus( S_Del, causer_r ); 00237 break; 00238 00239 case UNMODIFIED: 00240 switch ( status() ) { 00241 case S_Protected: 00242 case S_Taboo: 00243 return true; 00244 break; 00245 default: 00246 return setStatus( hasInstalledObj() ? S_KeepInstalled : S_NoInst, causer_r ); 00247 break; 00248 } 00249 break; 00250 } 00251 return false; 00252 } 00253 00254 bool Selectable::setInstalled( ResStatus::TransactByValue causer_r ) 00255 { 00256 return( hasInstalledObj() || setStatus( S_Install, causer_r ) ); 00257 } 00258 00259 bool Selectable::setUpToDate( ResStatus::TransactByValue causer_r ) 00260 { 00261 if ( ! hasInstalledObj() ) 00262 return setStatus( S_Install, causer_r ); 00263 00264 PoolItem cand( candidateObj() ); 00265 if ( ! cand ) 00266 return true; 00267 00268 return( installedObj()->edition() >= cand->edition() 00269 || setStatus( S_Update, causer_r ) ); 00270 } 00271 00272 bool Selectable::setDeleted( ResStatus::TransactByValue causer_r ) 00273 { 00274 return( ! hasInstalledObj() || setStatus( S_Del, causer_r ) ); 00275 } 00276 00277 /****************************************************************** 00278 ** 00279 ** FUNCTION NAME : operator<< 00280 ** FUNCTION TYPE : std::ostream & 00281 */ 00282 std::ostream & operator<<( std::ostream & str, const Selectable & obj ) 00283 { return str << *(obj._pimpl); } 00284 00285 std::ostream & dumpOn( std::ostream & str, const Selectable & obj ) 00286 { return dumpOn( str, *(obj._pimpl) ); } 00287 00289 } // namespace ui 00292 } // namespace zypp