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::identicalAvailable( const PoolItem & rhs ) const
86 { return _pimpl->identicalAvailable( rhs ); }
88 bool Selectable::identicalInstalled( const PoolItem & rhs ) const
89 { return _pimpl->identicalInstalled( rhs ); }
91 PoolItem Selectable::identicalAvailableObj( const PoolItem & rhs ) const
92 { return _pimpl->identicalAvailableObj( rhs ); }
94 PoolItem Selectable::identicalInstalledObj( const PoolItem & rhs ) const
95 { return _pimpl->identicalInstalledObj( rhs ); }
97 PoolItem Selectable::setCandidate( const PoolItem & newCandidate_r, ResStatus::TransactByValue causer_r )
98 { return _pimpl->setCandidate( newCandidate_r, causer_r ); }
100 PoolItem Selectable::setCandidate( ResObject::constPtr newCandidate_r, ResStatus::TransactByValue causer_r )
101 { return _pimpl->setCandidate( PoolItem( newCandidate_r ), causer_r ); }
103 bool Selectable::setOnSystem( const PoolItem & newCandidate_r, ResStatus::TransactByValue causer_r )
105 if ( identicalInstalled( newCandidate_r ) )
106 return setFate( UNMODIFIED, causer_r );
107 return setCandidate( newCandidate_r, causer_r ) && setFate( TO_INSTALL, causer_r );
110 PoolItem Selectable::theObj() const
111 { return _pimpl->theObj(); }
113 ////////////////////////////////////////////////////////////////////////
115 bool Selectable::availableEmpty() const
116 { return _pimpl->availableEmpty(); }
118 Selectable::available_size_type Selectable::availableSize() const
119 { return _pimpl->availableSize(); }
121 Selectable::available_iterator Selectable::availableBegin() const
122 { return _pimpl->availableBegin(); }
124 Selectable::available_iterator Selectable::availableEnd() const
125 { return _pimpl->availableEnd(); }
127 ////////////////////////////////////////////////////////////////////////
129 bool Selectable::installedEmpty() const
130 { return _pimpl->installedEmpty(); }
132 Selectable::installed_size_type Selectable::installedSize() const
133 { return _pimpl->installedSize(); }
135 Selectable::installed_iterator Selectable::installedBegin() const
136 { return _pimpl->installedBegin(); }
138 Selectable::installed_iterator Selectable::installedEnd() const
139 { return _pimpl->installedEnd(); }
141 ////////////////////////////////////////////////////////////////////////
143 bool Selectable::picklistEmpty() const
144 { return _pimpl->picklistEmpty(); }
146 Selectable::picklist_size_type Selectable::picklistSize() const
147 { return _pimpl->picklistSize(); }
149 Selectable::picklist_iterator Selectable::picklistBegin() const
150 { return _pimpl->picklistBegin(); }
152 Selectable::picklist_iterator Selectable::picklistEnd() const
153 { return _pimpl->picklistEnd(); }
155 ////////////////////////////////////////////////////////////////////////
157 bool Selectable::isUnmaintained() const
158 { return _pimpl->isUnmaintained(); }
160 bool Selectable::multiversionInstall() const
161 { return _pimpl->multiversionInstall(); }
163 bool Selectable::pickInstall( const PoolItem & pi_r, ResStatus::TransactByValue causer_r, bool yesno_r )
164 { return _pimpl->pickInstall( pi_r, causer_r, yesno_r ); }
166 bool Selectable::pickDelete( const PoolItem & pi_r, ResStatus::TransactByValue causer_r, bool yesno_r )
167 { return _pimpl->pickDelete( pi_r, causer_r, yesno_r ); }
169 Status Selectable::pickStatus( const PoolItem & pi_r ) const
170 { return _pimpl->pickStatus( pi_r ); }
172 bool Selectable::setPickStatus( const PoolItem & pi_r, Status state_r, ResStatus::TransactByValue causer_r )
173 { return _pimpl->setPickStatus( pi_r, state_r, causer_r ); }
175 ////////////////////////////////////////////////////////////////////////
177 bool Selectable::isUndetermined() const
178 { return _pimpl->isUndetermined(); }
180 bool Selectable::isRelevant() const
181 { return _pimpl->isRelevant(); }
183 bool Selectable::isSatisfied() const
184 { return _pimpl->isSatisfied(); }
186 bool Selectable::isBroken() const
187 { return _pimpl->isBroken(); }
189 bool Selectable::isNeeded() const
191 return fate() == TO_INSTALL || ( ! locked() && isBroken() );
194 bool Selectable::isUnwanted() const
196 return locked() && isBroken() ;
199 ResStatus::TransactByValue Selectable::modifiedBy() const
200 { return _pimpl->modifiedBy(); }
202 bool Selectable::hasLicenceConfirmed() const
203 { return _pimpl->hasLicenceConfirmed(); }
205 void Selectable::setLicenceConfirmed( bool val_r )
206 { _pimpl->setLicenceConfirmed( val_r ); }
209 Selectable::Fate Selectable::fate() const
211 switch ( status() ) {
226 case S_KeepInstalled:
233 bool Selectable::setFate( Fate fate_r, ResStatus::TransactByValue causer_r )
238 return setStatus( hasInstalledObj() ? S_Update : S_Install, causer_r );
242 return setStatus( S_Del, causer_r );
246 switch ( status() ) {
252 return setStatus( hasInstalledObj() ? S_KeepInstalled : S_NoInst, causer_r );
260 bool Selectable::setInstalled( ResStatus::TransactByValue causer_r )
262 return( hasInstalledObj() || setStatus( S_Install, causer_r ) );
265 bool Selectable::setUpToDate( ResStatus::TransactByValue causer_r )
267 if ( ! hasInstalledObj() )
268 return setStatus( S_Install, causer_r );
270 PoolItem cand( candidateObj() );
274 return( installedObj()->edition() >= cand->edition()
275 || setStatus( S_Update, causer_r ) );
278 bool Selectable::setDeleted( ResStatus::TransactByValue causer_r )
280 return( ! hasInstalledObj() || setStatus( S_Del, causer_r ) );
283 /******************************************************************
285 ** FUNCTION NAME : operator<<
286 ** FUNCTION TYPE : std::ostream &
288 std::ostream & operator<<( std::ostream & str, const Selectable & obj )
289 { return str << *(obj._pimpl); }
291 std::ostream & dumpOn( std::ostream & str, const Selectable & obj )
292 { return dumpOn( str, *(obj._pimpl) ); }
294 /////////////////////////////////////////////////////////////////
296 ///////////////////////////////////////////////////////////////////
297 /////////////////////////////////////////////////////////////////
299 ///////////////////////////////////////////////////////////////////