libzypp  16.22.5
Selectable.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_UI_SELECTABLE_H
13 #define ZYPP_UI_SELECTABLE_H
14 
15 #include <iosfwd>
16 
18 #include "zypp/base/NonCopyable.h"
19 #include "zypp/base/PtrTypes.h"
20 #include "zypp/base/Iterator.h"
21 
23 #include "zypp/ui/Status.h"
24 
26 namespace zypp
27 {
28 
30  namespace ui
31  {
32 
33  DEFINE_PTR_TYPE(Selectable);
34 
36  //
37  // CLASS NAME : Selectable
38  //
52  {
53  friend std::ostream & operator<<( std::ostream & str, const Selectable & obj );
54  friend std::ostream & dumpOn( std::ostream & str, const Selectable & obj );
55 
56  public:
57  typedef intrusive_ptr<Selectable> Ptr;
58  typedef intrusive_ptr<const Selectable> constPtr;
59 
63 
66 
69 
70  public:
81  static Ptr get( const pool::ByIdent & ident_r );
82 
84  static Ptr get( IdString ident_r )
85  { return get( pool::ByIdent( ident_r ) ); }
86 
88  static Ptr get( ResKind kind_r, const std::string & name_r )
89  { return get( pool::ByIdent( kind_r, name_r ) ); }
90 
92  static Ptr get( const std::string & name_r )
93  { return get( pool::ByIdent( ResKind::package, name_r ) ); }
94 
96  static Ptr get( const sat::Solvable & solv_r )
97  { return get( pool::ByIdent( solv_r ) ); }
98 
100  static Ptr get( const ResObject::constPtr & resolvable_r )
101  { return resolvable_r ? get( resolvable_r->satSolvable() ) : Ptr(); }
102 
104  static Ptr get( const PoolItem & pi_r )
105  { return get( pi_r.satSolvable() ); }
107 
108  public:
114  IdString ident() const;
115 
117  ResKind kind() const;
118 
120  const std::string & name() const;
121 
123  PoolItem installedObj() const;
124 
131  PoolItem candidateObj() const;
132 
139  PoolItem candidateObjFrom( Repository repo_r ) const;
140 
149 
157 
159  bool identIsAutoInstalled() const;
160 
165  bool identicalAvailable( const PoolItem & rhs ) const;
166 
171  bool identicalInstalled( const PoolItem & rhs ) const;
172 
177  { return identicalInstalled( candidateObj() ); }
178 
183  { return identicalInstalled( updateCandidateObj() ); }
184 
189  PoolItem identicalAvailableObj( const PoolItem & rhs ) const;
190 
195  PoolItem identicalInstalledObj( const PoolItem & rhs ) const;
196 
203  template<class TRes>
205  { return asKind<TRes>( candidateObj() ); }
206 
213  template<class TRes>
215  { return asKind<TRes>( candidateObj() ); }
216 
225  PoolItem setCandidate( const PoolItem & newCandidate_r, ResStatus::TransactByValue causer_r = ResStatus::USER );
228 
235  bool setOnSystem( const PoolItem & newCandidate_r, ResStatus::TransactByValue causer_r = ResStatus::USER );
236 
242  PoolItem theObj() const;
243 
245 
250  bool availableEmpty() const;
255  { return makeIterable( availableBegin(), availableEnd() ); }
257 
259 
264  bool installedEmpty() const;
269  { return makeIterable( installedBegin(), installedEnd() ); }
271 
273 
279  bool picklistEmpty() const;
284  { return makeIterable( picklistBegin(), picklistEnd() ); }
286 
288 
289  public:
294  bool hasObject() const
295  { return (! installedEmpty()) || candidateObj(); }
296 
298  bool hasInstalledObj() const
299  { return ! installedEmpty(); }
300 
302  bool hasCandidateObj() const
303  { return bool(candidateObj()); }
304 
306  bool hasBothObjects() const
307  { return (! installedEmpty()) && candidateObj(); }
308 
310  bool hasInstalledObjOnly() const
311  { return (! installedEmpty()) && ! candidateObj(); }
312 
314  bool hasCandidateObjOnly() const
315  { return ( installedEmpty() ) && candidateObj(); }
316 
317 
319  bool hasBlacklisted() const;
320 
322  bool hasBlacklistedInstalled() const;
323 
325  bool hasRetracted() const;
326 
328  bool hasRetractedInstalled() const;
329 
331  bool hasPtf() const;
332 
334  bool hasPtfInstalled() const;
336 
341  bool isUnmaintained() const;
342 
354  bool multiversionInstall() const;
355 
358  bool pickInstall( const PoolItem & pi_r, ResStatus::TransactByValue causer_r = ResStatus::USER, bool yesno_r = true );
359 
363  { return pickInstall( pi_r, causer_r, false ); }
364 
367  bool pickDelete( const PoolItem & pi_r, ResStatus::TransactByValue causer_r = ResStatus::USER, bool yesno_r = true );
368 
372  { return pickDelete( pi_r, causer_r, false ); }
373 
397  Status pickStatus( const PoolItem & pi_r ) const;
398 
400  bool setPickStatus( const PoolItem & pi_r, Status state_r, ResStatus::TransactByValue causer_r = ResStatus::USER );
402 
412  bool isUndetermined() const;
413 
417  bool isRelevant() const;
418 
420  bool isSatisfied() const;
421 
423  bool isBroken() const;
424 
430  bool isNeeded() const;
431 
433  bool isUnwanted() const;
435 
436  public:
440  enum Fate {
441  TO_DELETE = -1,
444  };
446  Fate fate() const;
447 
449  bool unmodified() const
450  { return fate() == UNMODIFIED; }
451 
458  bool locked() const
459  { Status st( status() ); return( st == S_Protected || st == S_Taboo ); }
460 
466  bool hasLocks() const;
467 
469  bool toModify() const
470  { return fate() != UNMODIFIED; }
471 
473  bool toDelete() const
474  { return fate() == TO_DELETE; }
475 
477  bool toInstall() const
478  { return fate() == TO_INSTALL; }
479 
481  bool onSystem() const
482  { return( ( hasInstalledObj() && !toDelete() )
483  ||( hasCandidateObj() && toInstall() ) ); }
484 
486  bool offSystem() const
487  { return ! onSystem(); }
488 
490  bool setFate( Fate fate_r, ResStatus::TransactByValue causer_r = ResStatus::USER );
491 
494  { return setFate( TO_INSTALL, causer_r ); }
495 
498 
501 
504  { return setFate( TO_DELETE, causer_r ); }
505 
508 
511  { return setFate( UNMODIFIED, causer_r ); }
513 
514  public:
523  Status status() const;
524 
529  bool setStatus( Status state_r, ResStatus::TransactByValue causer_r = ResStatus::USER );
530 
533 
535  bool hasLicenceConfirmed() const;
536 
538  void setLicenceConfirmed( bool val_r = true );
540 
541  public:
543  class Impl;
544  typedef shared_ptr<Impl> Impl_Ptr;
546  Selectable( Impl_Ptr pimpl_r );
547  private:
549  ~Selectable();
550  private:
553  };
555 
557  std::ostream & operator<<( std::ostream & str, const Selectable & obj );
558 
560  std::ostream & dumpOn( std::ostream & str, const Selectable & obj );
561 
567  {
568  typedef Selectable_Ptr result_type;
569 
570  Selectable_Ptr operator()( const sat::Solvable & solv_r ) const;
571 
572  Selectable_Ptr operator()( const PoolItem & pi_r ) const
573  { return operator()( pi_r.satSolvable() ); }
574  };
575 
577  } // namespace ui
580 } // namespace zypp
582 #endif // ZYPP_UI_SELECTABLE_H
Selectable_Ptr operator()(const PoolItem &pi_r) const
Definition: Selectable.h:572
available_iterator availableEnd() const
Definition: Selectable.cc:127
PoolItem updateCandidateObj() const
The best candidate for update, if there is one.
Definition: Selectable.cc:79
PickList::const_iterator picklist_iterator
A Solvable object within the sat Pool.
Definition: Solvable.h:53
IdString ident() const
The identifier.
Definition: Selectable.cc:55
installed_iterator installedEnd() const
Definition: Selectable.cc:141
Status
UI status Status values calculated by Selectable.
Definition: Status.h:34
intrusive_ptr< const TRes > constPtrType
Definition: ResTraits.h:83
bool isSatisfied() const
Whether a relevant patchs requirements are met.
Definition: Selectable.cc:205
picklist_iterator picklistBegin() const
Definition: Selectable.cc:152
bool identicalAvailable(const PoolItem &rhs) const
True if rhs is installed and one with the same content is available.
Definition: Selectable.cc:88
ResStatus::TransactByValue modifiedBy() const
Return who caused the modification.
Definition: Selectable.cc:221
static const ResKind package
Definition: ResKind.h:40
Collects PoolItems of same kind and name.
Definition: Selectable.h:51
bool isUnwanted() const
Broken (needed) but locked patches.
Definition: Selectable.cc:216
PoolItem installedObj() const
The last Installed object.
Definition: Selectable.cc:70
PoolItem setCandidate(const PoolItem &newCandidate_r, ResStatus::TransactByValue causer_r=ResStatus::USER)
Set a candidate (out of available objects).
Definition: Selectable.cc:100
bool hasRetractedInstalled() const
True if this Selectable contains an installed retracted item.
Definition: Selectable.cc:169
intrusive_ptr< Selectable > Ptr
Definition: Selectable.h:57
SelectableTraits::installed_iterator installed_iterator
Definition: Selectable.h:64
bool hasInstalledObjOnly() const
True if installed object is present but no candidate.
Definition: Selectable.h:310
bool hasObject() const
True if either installed or candidate object is present.
Definition: Selectable.h:294
Status status() const
Return the current Status.
Definition: Selectable.cc:64
PoolItem identicalAvailableObj(const PoolItem &rhs) const
Return an available Object with the same content as rhs.
Definition: Selectable.cc:94
bool hasPtf() const
True if this Selectable contains available ptf items.
Definition: Selectable.cc:172
Access to the sat-pools string space.
Definition: IdString.h:41
bool hasLicenceConfirmed() const
Return value of LicenceConfirmed bit.
Definition: Selectable.cc:224
bool setToInstall(ResStatus::TransactByValue causer_r=ResStatus::USER)
Set the item to be installed (new- or re-install).
Definition: Selectable.h:493
bool onSystem() const
True if would be on system after commit.
Definition: Selectable.h:481
Fate fate() const
Definition: Selectable.cc:233
bool identIsAutoInstalled() const
Whether this ident is flagged as AutoInstalled.
Definition: Selectable.cc:85
bool hasInstalledObj() const
True if installed object is present.
Definition: Selectable.h:298
TraitsType::constPtrType constPtr
Definition: ResObject.h:44
bool unmodified() const
True if neither to delete or to install.
Definition: Selectable.h:449
Selectable_Ptr operator()(const sat::Solvable &solv_r) const
PoolItem theObj() const
An object you could use as pars pro toto.
Definition: Selectable.cc:113
Iterable< installed_iterator > installed() const
Definition: Selectable.h:268
available_size_type availableSize() const
Definition: Selectable.cc:121
bool pickNoInstall(const PoolItem &pi_r, ResStatus::TransactByValue causer_r=ResStatus::USER)
Deselect a specific available item from installation.
Definition: Selectable.h:362
bool hasRetracted() const
True if this Selectable contains available retracted items.
Definition: Selectable.cc:166
PoolItem identicalInstalledObj(const PoolItem &rhs) const
an installed Object with the same content as rhs.
Definition: Selectable.cc:97
bool setStatus(Status state_r, ResStatus::TransactByValue causer_r=ResStatus::USER)
Try to set a new Status.
Definition: Selectable.cc:67
bool isUnmaintained() const
True if this package has no replacement from the available repositories.
Definition: Selectable.cc:179
bool hasBothObjects() const
True if installed and candidate object is present.
Definition: Selectable.h:306
bool isBroken() const
Whether a relevant patchs requirements are broken.
Definition: Selectable.cc:208
void setLicenceConfirmed(bool val_r=true)
Set LicenceConfirmed bit.
Definition: Selectable.cc:227
bool setOnSystem(const PoolItem &newCandidate_r, ResStatus::TransactByValue causer_r=ResStatus::USER)
Arrange the specified candidate (out of available objects) to be on system after commit.
Definition: Selectable.cc:106
boost::noncopyable NonCopyable
Ensure derived classes cannot be copied.
Definition: NonCopyable.h:26
bool setInstalled(ResStatus::TransactByValue causer_r=ResStatus::USER)
Take care the item gets installed if it is not.
Definition: Selectable.cc:284
bool identicalInstalled(const PoolItem &rhs) const
True if rhs has the same content as an installed one.
Definition: Selectable.cc:91
bool locked() const
True if locked (subclass of unmodified).
Definition: Selectable.h:458
bool hasBlacklisted() const
True if this Selectable contains available blacklisted items (retracted,ptf,...). ...
Definition: Selectable.cc:160
bool toModify() const
True if either to delete or to install.
Definition: Selectable.h:469
bool isUndetermined() const
Returns true for packages, because packages are not classified by the solver.
Definition: Selectable.cc:199
bool hasPtfInstalled() const
True if this Selectable contains an installed ptf item.
Definition: Selectable.cc:175
bool toInstall() const
True if to install.
Definition: Selectable.h:477
bool picklistEmpty() const
Definition: Selectable.cc:146
available_iterator availableBegin() const
Definition: Selectable.cc:124
bool isNeeded() const
This includes unlocked broken patches, as well as those already selected to be installed.
Definition: Selectable.cc:211
PoolItem candidateObjFrom(Repository repo_r) const
The best candidate provided by a specific Repository, if there is one.
Definition: Selectable.cc:76
bool setToDelete(ResStatus::TransactByValue causer_r=ResStatus::USER)
Set the item to be deleted (must be installed).
Definition: Selectable.h:503
std::ostream & operator<<(std::ostream &str, const Selectable &obj)
Definition: Selectable.cc:312
Iterable< available_iterator > available() const
Definition: Selectable.h:254
std::ostream & dumpOn(std::ostream &str, const Selectable &obj)
Definition: Selectable.cc:315
installed_size_type installedSize() const
Definition: Selectable.cc:135
bool isRelevant() const
Returns true if the patch is relevant which means that at least one package of the patch is installed...
Definition: Selectable.cc:202
Status pickStatus(const PoolItem &pi_r) const
Compute the ui::Status for an individual PoolItem.
Definition: Selectable.cc:191
friend std::ostream & operator<<(std::ostream &str, const Selectable &obj)
Definition: Selectable.cc:312
bool setDeleted(ResStatus::TransactByValue causer_r=ResStatus::USER)
Take care the item gets deleted if it is installed.
Definition: Selectable.cc:302
bool multiversionInstall() const
Whether at least one of the available packages has multiversionInstall set.
Definition: Selectable.cc:182
shared_ptr< Impl > Impl_Ptr
Definition: Selectable.h:543
bool availableEmpty() const
Definition: Selectable.cc:118
Base class for reference counted objects.
SelectableTraits::available_iterator available_iterator
Iterates over ResObject::constPtr.
Definition: Selectable.h:61
bool setPickStatus(const PoolItem &pi_r, Status state_r, ResStatus::TransactByValue causer_r=ResStatus::USER)
Assign a new status to a specific item.
Definition: Selectable.cc:194
bool installedEmpty() const
Definition: Selectable.cc:132
intrusive_ptr< const Selectable > constPtr
Definition: Selectable.h:58
PoolItem candidateObj() const
The 'best' or 'most interesting' among all available objects.
Definition: Selectable.cc:73
picklist_size_type picklistSize() const
Definition: Selectable.cc:149
PoolItem highestAvailableVersionObj() const
Simply the highest available version, ignoring priorities and policies.
Definition: Selectable.cc:82
bool hasLocks() const
True if it includes locked items (don't mix this with the locked status).
Definition: Selectable.cc:230
bool hasBlacklistedInstalled() const
True if this Selectable contains an installed blacklisted item (retracted,ptf,...).
Definition: Selectable.cc:163
bool hasCandidateObjOnly() const
True if candidate object is present but no installed.
Definition: Selectable.h:314
Selectable implementation.
PickList::size_type picklist_size_type
ResKind kind() const
The ResObjects kind.
Definition: Selectable.cc:58
bool offSystem() const
True if would be off system after commit.
Definition: Selectable.h:486
bool unset(ResStatus::TransactByValue causer_r=ResStatus::USER)
Set the item to stay unmodified.
Definition: Selectable.h:510
Iterable< picklist_iterator > picklist() const
Definition: Selectable.h:283
bool identicalInstalledUpdateCandidate() const
True if the updateCandidateObj is installed (same content).
Definition: Selectable.h:182
DEFINE_PTR_TYPE(Selectable)
AvailableItemSet::iterator installed_iterator
bool pickInstall(const PoolItem &pi_r, ResStatus::TransactByValue causer_r=ResStatus::USER, bool yesno_r=true)
Select a specific available item for installation.
Definition: Selectable.cc:185
Solvable satSolvable() const
Return the corresponding sat::Solvable.
Definition: SolvableType.h:57
Selectable(Impl_Ptr pimpl_r)
Default ctor.
Definition: Selectable.cc:36
bool toDelete() const
True if to delete.
Definition: Selectable.h:473
bool setUpToDate(ResStatus::TransactByValue causer_r=ResStatus::USER)
Take care the item gets installed if it is not, or is older.
Definition: Selectable.cc:289
AvailableItemSet::size_type installed_size_type
SelectableTraits::picklist_iterator picklist_iterator
Definition: Selectable.h:67
Selectable_Ptr result_type
Definition: Selectable.h:568
Combining sat::Solvable and ResStatus.
Definition: PoolItem.h:50
bool setFate(Fate fate_r, ResStatus::TransactByValue causer_r=ResStatus::USER)
Definition: Selectable.cc:257
ResTraits< TRes >::constPtrType candidateAsKind() const
Return the candidateObj resolvable casted to a specific kind.
Definition: Selectable.h:214
bool hasCandidateObj() const
True if candidate object is present.
Definition: Selectable.h:302
picklist_iterator picklistEnd() const
Definition: Selectable.cc:155
Resolvable kinds.
Definition: ResKind.h:32
const std::string & name() const
The ResObjects name.
Definition: Selectable.cc:61
bool identicalInstalledCandidate() const
True if the candidateObj is installed (same content).
Definition: Selectable.h:176
SelectableTraits::picklist_size_type picklist_size_type
Definition: Selectable.h:68
friend std::ostream & dumpOn(std::ostream &str, const Selectable &obj)
Definition: Selectable.cc:315
bool pickNoDelete(const PoolItem &pi_r, ResStatus::TransactByValue causer_r=ResStatus::USER)
Deselect a specific installed item from deletion.
Definition: Selectable.h:371
Solvable to Selectable transform functor.
Definition: Selectable.h:566
bool pickDelete(const PoolItem &pi_r, ResStatus::TransactByValue causer_r=ResStatus::USER, bool yesno_r=true)
Select a specific installed item for deletion.
Definition: Selectable.cc:188
SelectableTraits::installed_size_type installed_size_type
Definition: Selectable.h:65
Main filter selecting PoolItems by name and kind.
Definition: ByIdent.h:26
RW_pointer< Impl > _pimpl
Pointer to implementation.
Definition: Selectable.h:552
AvailableItemSet::size_type available_size_type
AvailableItemSet::iterator available_iterator
SelectableTraits::available_size_type available_size_type
Definition: Selectable.h:62
installed_iterator installedBegin() const
Definition: Selectable.cc:138
ResTraits< TRes >::constPtrType installedAsKind() const
Return the installedObj resolvable casted to a specific kind.
Definition: Selectable.h:204