1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/ui/Selectable.cc
13 //#include <zypp/base/Logger.h>
15 #include <zypp/ui/Selectable.h>
16 #include <zypp/ui/SelectableImpl.h>
17 #include <zypp/ResPool.h>
19 ///////////////////////////////////////////////////////////////////
21 { /////////////////////////////////////////////////////////////////
22 ///////////////////////////////////////////////////////////////////
24 { /////////////////////////////////////////////////////////////////
26 IMPL_PTR_TYPE(Selectable);
28 Selectable::Ptr Selectable::get( const pool::ByIdent & ident_r )
29 { return ResPool::instance().proxy().lookup( ident_r ); }
31 ///////////////////////////////////////////////////////////////////
33 // METHOD NAME : Selectable::Selectable
36 Selectable::Selectable( Impl_Ptr pimpl_r )
40 ///////////////////////////////////////////////////////////////////
42 // METHOD NAME : Selectable::~Selectable
45 Selectable::~Selectable()
48 ///////////////////////////////////////////////////////////////////
50 // Forward to implementation.
51 // Restrict PoolItems to ResObject::constPtr!
53 ///////////////////////////////////////////////////////////////////
55 IdString Selectable::ident() const
56 { return _pimpl->ident(); }
58 ResKind Selectable::kind() const
59 { return _pimpl->kind(); }
61 const std::string & Selectable::name() const
62 { return _pimpl->name(); }
64 Status Selectable::status() const
65 { return _pimpl->status(); }
67 bool Selectable::setStatus( Status state_r, ResStatus::TransactByValue causer_r )
68 { return _pimpl->setStatus( state_r, causer_r ); }
70 PoolItem Selectable::installedObj() const
71 { return _pimpl->installedObj(); }
73 PoolItem Selectable::candidateObj() const
74 { return _pimpl->candidateObj(); }
76 PoolItem Selectable::candidateObjFrom( Repository repo_r ) const
77 { return _pimpl->candidateObjFrom( repo_r ); }
79 PoolItem Selectable::updateCandidateObj() const
80 { return _pimpl->updateCandidateObj(); }
82 PoolItem Selectable::highestAvailableVersionObj() const
83 { return _pimpl->highestAvailableVersionObj(); }
85 bool Selectable::identIsAutoInstalled() const
86 { return _pimpl->identIsAutoInstalled(); }
88 bool Selectable::identicalAvailable( const PoolItem & rhs ) const
89 { return _pimpl->identicalAvailable( rhs ); }
91 bool Selectable::identicalInstalled( const PoolItem & rhs ) const
92 { return _pimpl->identicalInstalled( rhs ); }
94 PoolItem Selectable::identicalAvailableObj( const PoolItem & rhs ) const
95 { return _pimpl->identicalAvailableObj( rhs ); }
97 PoolItem Selectable::identicalInstalledObj( const PoolItem & rhs ) const
98 { return _pimpl->identicalInstalledObj( rhs ); }
100 PoolItem Selectable::setCandidate( const PoolItem & newCandidate_r, ResStatus::TransactByValue causer_r )
101 { return _pimpl->setCandidate( newCandidate_r, causer_r ); }
103 PoolItem Selectable::setCandidate( ResObject::constPtr newCandidate_r, ResStatus::TransactByValue causer_r )
104 { return _pimpl->setCandidate( PoolItem( newCandidate_r ), causer_r ); }
106 bool Selectable::setOnSystem( const PoolItem & newCandidate_r, ResStatus::TransactByValue causer_r )
108 if ( identicalInstalled( newCandidate_r ) )
109 return setFate( UNMODIFIED, causer_r );
110 return setCandidate( newCandidate_r, causer_r ) && setFate( TO_INSTALL, causer_r );
113 PoolItem Selectable::theObj() const
114 { return _pimpl->theObj(); }
116 ////////////////////////////////////////////////////////////////////////
118 bool Selectable::availableEmpty() const
119 { return _pimpl->availableEmpty(); }
121 Selectable::available_size_type Selectable::availableSize() const
122 { return _pimpl->availableSize(); }
124 Selectable::available_iterator Selectable::availableBegin() const
125 { return _pimpl->availableBegin(); }
127 Selectable::available_iterator Selectable::availableEnd() const
128 { return _pimpl->availableEnd(); }
130 ////////////////////////////////////////////////////////////////////////
132 bool Selectable::installedEmpty() const
133 { return _pimpl->installedEmpty(); }
135 Selectable::installed_size_type Selectable::installedSize() const
136 { return _pimpl->installedSize(); }
138 Selectable::installed_iterator Selectable::installedBegin() const
139 { return _pimpl->installedBegin(); }
141 Selectable::installed_iterator Selectable::installedEnd() const
142 { return _pimpl->installedEnd(); }
144 ////////////////////////////////////////////////////////////////////////
146 bool Selectable::picklistEmpty() const
147 { return _pimpl->picklistEmpty(); }
149 Selectable::picklist_size_type Selectable::picklistSize() const
150 { return _pimpl->picklistSize(); }
152 Selectable::picklist_iterator Selectable::picklistBegin() const
153 { return _pimpl->picklistBegin(); }
155 Selectable::picklist_iterator Selectable::picklistEnd() const
156 { return _pimpl->picklistEnd(); }
158 Selectable::picklist_size_type Selectable::picklistPos( const PoolItem & pi_r ) const
159 { return picklistPos( pi_r.satSolvable() ); }
161 Selectable::picklist_size_type Selectable::picklistPos( const sat::Solvable & solv_r ) const
163 picklist_size_type idx = picklist_size_type(0);
164 for ( const auto & pi : picklist() )
170 return picklistNoPos;
173 ////////////////////////////////////////////////////////////////////////
175 bool Selectable::hasRetracted() const
176 { return _pimpl->hasRetracted(); }
178 bool Selectable::hasRetractedInstalled() const
179 { return _pimpl->hasRetractedInstalled(); }
181 bool Selectable::isUnmaintained() const
182 { return _pimpl->isUnmaintained(); }
184 bool Selectable::multiversionInstall() const
185 { return _pimpl->multiversionInstall(); }
187 bool Selectable::pickInstall( const PoolItem & pi_r, ResStatus::TransactByValue causer_r, bool yesno_r )
188 { return _pimpl->pickInstall( pi_r, causer_r, yesno_r ); }
190 bool Selectable::pickDelete( const PoolItem & pi_r, ResStatus::TransactByValue causer_r, bool yesno_r )
191 { return _pimpl->pickDelete( pi_r, causer_r, yesno_r ); }
193 Status Selectable::pickStatus( const PoolItem & pi_r ) const
194 { return _pimpl->pickStatus( pi_r ); }
196 bool Selectable::setPickStatus( const PoolItem & pi_r, Status state_r, ResStatus::TransactByValue causer_r )
197 { return _pimpl->setPickStatus( pi_r, state_r, causer_r ); }
199 ////////////////////////////////////////////////////////////////////////
201 bool Selectable::isUndetermined() const
202 { return _pimpl->isUndetermined(); }
204 bool Selectable::isRelevant() const
205 { return _pimpl->isRelevant(); }
207 bool Selectable::isSatisfied() const
208 { return _pimpl->isSatisfied(); }
210 bool Selectable::isBroken() const
211 { return _pimpl->isBroken(); }
213 bool Selectable::isNeeded() const
215 return fate() == TO_INSTALL || ( ! locked() && isBroken() );
218 bool Selectable::isUnwanted() const
220 return locked() && isBroken() ;
223 ResStatus::TransactByValue Selectable::modifiedBy() const
224 { return _pimpl->modifiedBy(); }
226 bool Selectable::hasLicenceConfirmed() const
227 { return _pimpl->hasLicenceConfirmed(); }
229 void Selectable::setLicenceConfirmed( bool val_r )
230 { _pimpl->setLicenceConfirmed( val_r ); }
232 bool Selectable::hasLocks() const
233 { return _pimpl->hasLocks(); }
235 Selectable::Fate Selectable::fate() const
237 switch ( status() ) {
252 case S_KeepInstalled:
259 bool Selectable::setFate( Fate fate_r, ResStatus::TransactByValue causer_r )
264 return setStatus( hasInstalledObj() ? S_Update : S_Install, causer_r );
268 return setStatus( S_Del, causer_r );
272 switch ( status() ) {
278 return setStatus( hasInstalledObj() ? S_KeepInstalled : S_NoInst, causer_r );
286 bool Selectable::setInstalled( ResStatus::TransactByValue causer_r )
288 return( hasInstalledObj() || setStatus( S_Install, causer_r ) );
291 bool Selectable::setUpToDate( ResStatus::TransactByValue causer_r )
293 if ( ! hasInstalledObj() )
294 return setStatus( S_Install, causer_r );
296 PoolItem cand( candidateObj() );
300 return( installedObj()->edition() >= cand->edition()
301 || setStatus( S_Update, causer_r ) );
304 bool Selectable::setDeleted( ResStatus::TransactByValue causer_r )
306 return( ! hasInstalledObj() || setStatus( S_Del, causer_r ) );
309 /******************************************************************
311 ** FUNCTION NAME : operator<<
312 ** FUNCTION TYPE : std::ostream &
314 std::ostream & operator<<( std::ostream & str, const Selectable & obj )
315 { return str << *(obj._pimpl); }
317 std::ostream & dumpOn( std::ostream & str, const Selectable & obj )
318 { return dumpOn( str, *(obj._pimpl) ); }
320 /////////////////////////////////////////////////////////////////
322 ///////////////////////////////////////////////////////////////////
323 /////////////////////////////////////////////////////////////////
325 ///////////////////////////////////////////////////////////////////