Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

PMSelectionManager.h

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                                                                      |
00003 |                      __   __    ____ _____ ____                      |
00004 |                      \ \ / /_ _/ ___|_   _|___ \                     |
00005 |                       \ V / _` \___ \ | |   __) |                    |
00006 |                        | | (_| |___) || |  / __/                     |
00007 |                        |_|\__,_|____/ |_| |_____|                    |
00008 |                                                                      |
00009 |                               core system                            |
00010 |                                                        (C) SuSE GmbH |
00011 \----------------------------------------------------------------------/
00012 
00013   File:       PMSelectionManager.h
00014 
00015   Author:     Michael Andres <ma@suse.de>
00016   Maintainer: Michael Andres <ma@suse.de>
00017 
00018 /-*/
00019 #ifndef PMSelectionManager_h
00020 #define PMSelectionManager_h
00021 
00022 #include <iosfwd>
00023 #include <list>
00024 #include <map>
00025 
00026 #include <y2pm/PMTypes.h>
00027 #include <y2pm/PMManager.h>
00028 #include <y2pm/PMSelection.h>
00029 #include <y2pm/PMSelectable.h>
00030 #include <y2pm/PMPackageManager.h>
00031 
00033 //
00034 //      CLASS NAME : PMSelectionManager
00038 class PMSelectionManager : public PMManager {
00039 
00040   friend std::ostream & operator<<( std::ostream & str, const PMSelectionManager & obj );
00041 
00042   PMSelectionManager & operator=( const PMSelectionManager & );
00043   PMSelectionManager            ( const PMSelectionManager & );
00044 
00045   private:
00049     virtual void postPSI();
00053     virtual void postPAC();
00057     virtual void postPRC();
00058 
00059   private:
00060 
00061     friend class Y2PM;
00062     PMSelectionManager();
00063     virtual ~PMSelectionManager();
00064 
00065     typedef std::map<PMSelectablePtr,PMSelectable::Fate> ActiveMap;
00066 
00070     ActiveMap _last_active;
00071 
00075     void setLast( const PMSelectablePtr & sel_r, PMSelectable::Fate val_r );
00076 
00080     PMSelectable::Fate lastState( const PMSelectablePtr & sel_r ) const;
00081 
00085     PMSelectable::Fate getState( const PMSelectablePtr & sel_r ) const;
00086 
00087   private:
00088 
00089     ActiveMap saved_last_active;
00090 
00091   public:
00092 
00096     virtual void SaveState() {
00097       saved_last_active = _last_active;
00098       PMManager::SaveState();
00099     }
00100 
00104     virtual bool RestoreState() {
00105       if ( !PMManager::RestoreState() ) {
00106         saved_last_active.clear();
00107         return false;
00108       }
00109       _last_active = saved_last_active;
00110       return true;
00111     }
00112 
00116     virtual void ClearSaveState() {
00117       saved_last_active.clear();
00118       PMManager::ClearSaveState();
00119     }
00120 
00121 
00122   private:
00123 
00128     virtual PMObjectPtr assertObjectType( const PMObjectPtr & object_r ) const;
00129 
00130   private:
00131 
00133     // Remember selection packages fate.
00135     struct PkgFates {
00136       void add( PMSelectableVec & lhs, const PMSelectableVec & rhs ) {
00137         lhs.insert( rhs.begin(), rhs.end() );
00138       }
00139       public:
00140         // selections to install:
00141         PMSelectableVec pkgToDelete;   // hard request: get rid of it (delpack)
00142         PMSelectableVec pkgToInstall;  // hard request: (re)install it
00143         // unmodified but installed selections: protect inspacks from deletion (except by a delpack)
00144         PMSelectableVec pkgOnSystem;   // soft request: Keep it OnSystem.
00145         // selections to delete:
00146         PMSelectableVec pkgOffSystem;  // soft request: if no one minds, bring it OffSystem
00147         // EVERYTHING ELSE:
00148         PMSelectableVec pkgUnmodified; // is set to unmodified
00149 
00150         void addToDelete  ( const PMSelectableVec & rhs ) { add( pkgToDelete, rhs ); }
00151         void addToInstall ( const PMSelectableVec & rhs ) { add( pkgToInstall, rhs ); }
00152         void addOnSystem  ( const PMSelectableVec & rhs ) { add( pkgOnSystem, rhs ); }
00153         void addOffSystem ( const PMSelectableVec & rhs ) { add( pkgOffSystem, rhs ); }
00154         void addUnmodified( const PMSelectableVec & rhs ) { add( pkgUnmodified, rhs ); }
00155       public:
00156         PMSelectableVec pkgProcessed;
00157 
00158         void setNothingProcessed() { pkgProcessed.clear(); }
00159 
00160         void setProcessed( PMSelectableVec rhs ) {
00161           add( pkgProcessed, rhs );
00162           rhs.clear();
00163         }
00164         void processedToDelete()   { setProcessed( pkgToDelete ); }
00165         void processedToInstall()  { setProcessed( pkgToInstall ); }
00166         void processedOnSystem()   { setProcessed( pkgOnSystem ); }
00167         void processedOffSystem()  { setProcessed( pkgOffSystem ); }
00168         void processedUnmodified() { setProcessed( pkgUnmodified ); }
00169 
00170         bool didProcess( PMSelectablePtr pkg_r ) const {
00171           return( pkgProcessed.find( pkg_r ) != pkgProcessed.end() );
00172         }
00173     };
00174 
00179     PMError syncToPkgMgr( PkgFates & fates_r );
00180 
00181   public:
00182 
00187     PMError activate( PMPackageManager & package_mgr );
00188 
00192     PMError activate();
00193 
00199     PMError requestedLocalesChanged( const PM::LocaleSet & addLocales_r,
00200                                      const PM::LocaleSet & delLocales_r );
00201 
00207     PMError installOnTarget();
00208 
00209 };
00210 
00212 
00213 #endif // PMSelectionManager_h

Generated on Mon Sep 12 21:52:13 2005 for yast2-packagemanager by  doxygen 1.4.4