Imported Upstream version 14.45.0
[platform/upstream/libzypp.git] / zypp / ui / Selectable.cc
index 9d24aef..6c87fc1 100644 (file)
@@ -14,6 +14,7 @@
 
 #include "zypp/ui/Selectable.h"
 #include "zypp/ui/SelectableImpl.h"
+#include "zypp/ResPool.h"
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
@@ -22,6 +23,11 @@ namespace zypp
   namespace ui
   { /////////////////////////////////////////////////////////////////
 
+    IMPL_PTR_TYPE(Selectable);
+
+    Selectable::Ptr Selectable::get( const pool::ByIdent & ident_r )
+    { return ResPool::instance().proxy().lookup( ident_r ); }
+
     ///////////////////////////////////////////////////////////////////
     //
     // METHOD NAME : Selectable::Selectable
@@ -46,6 +52,9 @@ namespace zypp
     //
     ///////////////////////////////////////////////////////////////////
 
+    IdString Selectable::ident() const
+    { return _pimpl->ident(); }
+
     ResObject::Kind Selectable::kind() const
     { return _pimpl->kind(); }
 
@@ -55,44 +64,138 @@ namespace zypp
     Status Selectable::status() const
     { return _pimpl->status(); }
 
-    bool Selectable::set_status( const Status state_r )
-    { return _pimpl->set_status( state_r ); }
-
-    ResObject::constPtr Selectable::installedObj() const
-    { return _pimpl->installedObj(); }
+    bool Selectable::setStatus( Status state_r, ResStatus::TransactByValue causer_r )
+    { return _pimpl->setStatus( state_r, causer_r ); }
 
-    PoolItem Selectable::installedPoolItem() const
+    PoolItem Selectable::installedObj() const
     { return _pimpl->installedObj(); }
 
-    ResObject::constPtr Selectable::candidateObj() const
+    PoolItem Selectable::candidateObj() const
     { return _pimpl->candidateObj(); }
 
-    PoolItem Selectable::candidatePoolItem() const
-    { return _pimpl->candidateObj(); }
+    PoolItem Selectable::candidateObjFrom( Repository repo_r ) const
+    { return _pimpl->candidateObjFrom( repo_r ); }
+
+    PoolItem Selectable::updateCandidateObj() const
+    { return _pimpl->updateCandidateObj(); }
+
+    PoolItem Selectable::highestAvailableVersionObj() const
+    { return _pimpl->highestAvailableVersionObj(); }
+
+    bool Selectable::identicalAvailable( const PoolItem & rhs ) const
+    { return _pimpl->identicalAvailable( rhs ); }
 
-    ResObject::constPtr Selectable::setCandidate( ResObject::constPtr byUser_r )
-    { return _pimpl->setCandidate( byUser_r ); }
+    bool Selectable::identicalInstalled( const PoolItem & rhs ) const
+    { return _pimpl->identicalInstalled( rhs ); }
 
-    ResObject::constPtr Selectable::theObj() const
+    PoolItem Selectable::identicalAvailableObj( const PoolItem & rhs ) const
+    { return _pimpl->identicalAvailableObj( rhs ); }
+
+    PoolItem Selectable::identicalInstalledObj( const PoolItem & rhs ) const
+    { return _pimpl->identicalInstalledObj( rhs ); }
+
+    PoolItem Selectable::setCandidate( const PoolItem & newCandidate_r, ResStatus::TransactByValue causer_r )
+    { return _pimpl->setCandidate( newCandidate_r, causer_r ); }
+
+    PoolItem Selectable::setCandidate( ResObject::constPtr newCandidate_r, ResStatus::TransactByValue causer_r )
+    { return _pimpl->setCandidate( PoolItem( newCandidate_r ), causer_r ); }
+
+    bool Selectable::setOnSystem( const PoolItem & newCandidate_r, ResStatus::TransactByValue causer_r )
+    {
+      if ( identicalInstalled( newCandidate_r ) )
+        return setFate( UNMODIFIED, causer_r );
+      return setCandidate( newCandidate_r, causer_r ) && setFate( TO_INSTALL, causer_r );
+    }
+
+    PoolItem Selectable::theObj() const
     { return _pimpl->theObj(); }
 
-    Selectable::size_type Selectable::availableObjs() const
-    { return _pimpl->availableObjs(); }
+    ////////////////////////////////////////////////////////////////////////
 
-    Selectable::available_iterator Selectable::availableBegin() const
-    { return make_transform_iterator( _pimpl->availableBegin(),
-                                      SelectableTraits::TransformToResObjectPtr() ); }
+    bool Selectable::availableEmpty() const
+    { return _pimpl->availableEmpty(); }
 
-    Selectable::available_iterator Selectable::availableEnd() const
-    { return make_transform_iterator( _pimpl->availableEnd(),
-                                      SelectableTraits::TransformToResObjectPtr() ); }
+    Selectable::available_size_type Selectable::availableSize() const
+    { return _pimpl->availableSize(); }
 
-    Selectable::availablePoolItem_iterator Selectable::availablePoolItemBegin() const
+    Selectable::available_iterator Selectable::availableBegin() const
     { return _pimpl->availableBegin(); }
 
-    Selectable::availablePoolItem_iterator Selectable::availablePoolItemEnd() const
+    Selectable::available_iterator Selectable::availableEnd() const
     { return _pimpl->availableEnd(); }
 
+    ////////////////////////////////////////////////////////////////////////
+
+    bool Selectable::installedEmpty() const
+    { return _pimpl->installedEmpty(); }
+
+    Selectable::installed_size_type Selectable::installedSize() const
+    { return _pimpl->installedSize(); }
+
+    Selectable::installed_iterator Selectable::installedBegin() const
+    { return _pimpl->installedBegin(); }
+
+    Selectable::installed_iterator Selectable::installedEnd() const
+    { return _pimpl->installedEnd(); }
+
+    ////////////////////////////////////////////////////////////////////////
+
+    bool Selectable::picklistEmpty() const
+    { return _pimpl->picklistEmpty();  }
+
+    Selectable::picklist_size_type Selectable::picklistSize() const
+    { return _pimpl->picklistSize(); }
+
+    Selectable::picklist_iterator Selectable::picklistBegin() const
+    { return _pimpl->picklistBegin(); }
+
+    Selectable::picklist_iterator Selectable::picklistEnd() const
+    { return _pimpl->picklistEnd(); }
+
+    ////////////////////////////////////////////////////////////////////////
+
+    bool Selectable::isUnmaintained() const
+    { return _pimpl->isUnmaintained(); }
+
+    bool Selectable::multiversionInstall() const
+    { return _pimpl->multiversionInstall(); }
+
+    bool Selectable::pickInstall( const PoolItem & pi_r, ResStatus::TransactByValue causer_r, bool yesno_r )
+    { return _pimpl->pickInstall( pi_r, causer_r, yesno_r ); }
+
+    bool Selectable::pickDelete( const PoolItem & pi_r, ResStatus::TransactByValue causer_r, bool yesno_r )
+    { return _pimpl->pickDelete( pi_r, causer_r, yesno_r ); }
+
+    Status Selectable::pickStatus( const PoolItem & pi_r ) const
+    { return _pimpl->pickStatus( pi_r ); }
+
+    bool Selectable::setPickStatus( const PoolItem & pi_r, Status state_r, ResStatus::TransactByValue causer_r )
+    { return _pimpl->setPickStatus( pi_r, state_r, causer_r ); }
+
+    ////////////////////////////////////////////////////////////////////////
+
+    bool Selectable::isUndetermined() const
+    { return _pimpl->isUndetermined(); }
+
+    bool Selectable::isRelevant() const
+    { return _pimpl->isRelevant(); }
+
+    bool Selectable::isSatisfied() const
+    { return _pimpl->isSatisfied(); }
+
+    bool Selectable::isBroken() const
+    { return _pimpl->isBroken(); }
+
+    bool Selectable::isNeeded() const
+    {
+      return fate() == TO_INSTALL || ( ! locked() && isBroken() );
+    }
+
+    bool Selectable::isUnwanted() const
+    {
+      return locked() && isBroken() ;
+    }
+
     ResStatus::TransactByValue Selectable::modifiedBy() const
     { return _pimpl->modifiedBy(); }
 
@@ -127,6 +230,55 @@ namespace zypp
       return UNMODIFIED;
     };
 
+    bool Selectable::setFate( Fate fate_r, ResStatus::TransactByValue causer_r )
+    {
+      switch ( fate_r )
+      {
+        case TO_INSTALL:
+          return setStatus( hasInstalledObj() ? S_Update : S_Install, causer_r );
+          break;
+
+        case TO_DELETE:
+          return setStatus( S_Del, causer_r );
+          break;
+
+        case UNMODIFIED:
+          switch ( status() ) {
+            case S_Protected:
+            case S_Taboo:
+              return true;
+              break;
+            default:
+              return setStatus( hasInstalledObj() ? S_KeepInstalled : S_NoInst, causer_r );
+              break;
+          }
+          break;
+      }
+      return false;
+    }
+
+    bool Selectable::setInstalled( ResStatus::TransactByValue causer_r )
+    {
+      return( hasInstalledObj() || setStatus( S_Install, causer_r ) );
+    }
+
+    bool Selectable::setUpToDate( ResStatus::TransactByValue causer_r )
+    {
+      if ( ! hasInstalledObj() )
+        return setStatus( S_Install, causer_r );
+
+      PoolItem cand( candidateObj() );
+      if ( ! cand )
+        return true;
+
+      return( installedObj()->edition() >= cand->edition()
+              || setStatus( S_Update, causer_r ) );
+    }
+
+    bool Selectable::setDeleted( ResStatus::TransactByValue causer_r )
+    {
+      return( ! hasInstalledObj() || setStatus( S_Del, causer_r ) );
+    }
 
     /******************************************************************
     **
@@ -134,9 +286,10 @@ namespace zypp
     ** FUNCTION TYPE : std::ostream &
     */
     std::ostream & operator<<( std::ostream & str, const Selectable & obj )
-    {
-      return str << *obj._pimpl;
-    }
+    { return str << *(obj._pimpl); }
+
+    std::ostream & dumpOn( std::ostream & str, const Selectable & obj )
+    { return dumpOn( str, *(obj._pimpl) ); }
 
     /////////////////////////////////////////////////////////////////
   } // namespace ui