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 ResObject::Kind 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( const 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::setCandidate( const PoolItem & newCandidate_r, ResStatus::TransactByValue causer_r )
92 { return _pimpl->setCandidate( newCandidate_r, causer_r ); }
94 PoolItem Selectable::setCandidate( ResObject::constPtr newCandidate_r, ResStatus::TransactByValue causer_r )
95 { return _pimpl->setCandidate( PoolItem( newCandidate_r ), causer_r ); }
97 bool Selectable::setOnSystem( const PoolItem & newCandidate_r, ResStatus::TransactByValue causer_r )
99 if ( identicalInstalled( newCandidate_r ) )
100 return setFate( UNMODIFIED, causer_r );
101 return setCandidate( newCandidate_r, causer_r ) && setFate( TO_INSTALL, causer_r );
104 PoolItem Selectable::theObj() const
105 { return _pimpl->theObj(); }
107 ////////////////////////////////////////////////////////////////////////
109 bool Selectable::availableEmpty() const
110 { return _pimpl->availableEmpty(); }
112 Selectable::available_size_type Selectable::availableSize() const
113 { return _pimpl->availableSize(); }
115 Selectable::available_iterator Selectable::availableBegin() const
116 { return _pimpl->availableBegin(); }
118 Selectable::available_iterator Selectable::availableEnd() const
119 { return _pimpl->availableEnd(); }
121 ////////////////////////////////////////////////////////////////////////
123 bool Selectable::installedEmpty() const
124 { return _pimpl->installedEmpty(); }
126 Selectable::installed_size_type Selectable::installedSize() const
127 { return _pimpl->installedSize(); }
129 Selectable::installed_iterator Selectable::installedBegin() const
130 { return _pimpl->installedBegin(); }
132 Selectable::installed_iterator Selectable::installedEnd() const
133 { return _pimpl->installedEnd(); }
135 ////////////////////////////////////////////////////////////////////////
137 bool Selectable::picklistEmpty() const
138 { return _pimpl->picklistEmpty(); }
140 Selectable::picklist_size_type Selectable::picklistSize() const
141 { return _pimpl->picklistSize(); }
143 Selectable::picklist_iterator Selectable::picklistBegin() const
144 { return _pimpl->picklistBegin(); }
146 Selectable::picklist_iterator Selectable::picklistEnd() const
147 { return _pimpl->picklistEnd(); }
149 ////////////////////////////////////////////////////////////////////////
151 bool Selectable::isUnmaintained() const
152 { return _pimpl->isUnmaintained(); }
154 bool Selectable::multiversionInstall() const
155 { return _pimpl->multiversionInstall(); }
157 bool Selectable::setPickStatus( const PoolItem & pi_r, const Status state_r, ResStatus::TransactByValue causer_r )
158 { return _pimpl->setPickStatus( pi_r, state_r, causer_r ); }
160 Status Selectable::pickStatus( const PoolItem & pi_r ) const
161 { return _pimpl->pickStatus( pi_r ); }
163 ////////////////////////////////////////////////////////////////////////
165 bool Selectable::isUndetermined() const
166 { return _pimpl->isUndetermined(); }
168 bool Selectable::isRelevant() const
169 { return _pimpl->isRelevant(); }
171 bool Selectable::isSatisfied() const
172 { return _pimpl->isSatisfied(); }
174 bool Selectable::isBroken() const
175 { return _pimpl->isBroken(); }
177 bool Selectable::isNeeded() const
179 return fate() == TO_INSTALL || isBroken() ;
182 ResStatus::TransactByValue Selectable::modifiedBy() const
183 { return _pimpl->modifiedBy(); }
185 bool Selectable::hasLicenceConfirmed() const
186 { return _pimpl->hasLicenceConfirmed(); }
188 void Selectable::setLicenceConfirmed( bool val_r )
189 { _pimpl->setLicenceConfirmed( val_r ); }
192 Selectable::Fate Selectable::fate() const
194 switch ( status() ) {
209 case S_KeepInstalled:
216 bool Selectable::setFate( Fate fate_r, ResStatus::TransactByValue causer_r )
221 return setStatus( hasInstalledObj() ? S_Update : S_Install, causer_r );
225 return setStatus( S_Del, causer_r );
229 switch ( status() ) {
235 return setStatus( hasInstalledObj() ? S_KeepInstalled : S_NoInst, causer_r );
243 bool Selectable::setInstalled( ResStatus::TransactByValue causer_r )
245 return( hasInstalledObj() || setStatus( S_Install, causer_r ) );
248 bool Selectable::setUpToDate( ResStatus::TransactByValue causer_r )
250 if ( ! hasInstalledObj() )
251 return setStatus( S_Install, causer_r );
253 PoolItem cand( candidateObj() );
257 return( installedObj()->edition() >= cand->edition()
258 || setStatus( S_Update, causer_r ) );
261 bool Selectable::setDeleted( ResStatus::TransactByValue causer_r )
263 return( ! hasInstalledObj() || setStatus( S_Del, causer_r ) );
266 /******************************************************************
268 ** FUNCTION NAME : operator<<
269 ** FUNCTION TYPE : std::ostream &
271 std::ostream & operator<<( std::ostream & str, const Selectable & obj )
272 { return str << *(obj._pimpl); }
274 std::ostream & dumpOn( std::ostream & str, const Selectable & obj )
275 { return dumpOn( str, *(obj._pimpl) ); }
277 /////////////////////////////////////////////////////////////////
279 ///////////////////////////////////////////////////////////////////
280 /////////////////////////////////////////////////////////////////
282 ///////////////////////////////////////////////////////////////////