Main Page | Namespace List | Class Hierarchy | Class List | 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:
00046 
00047     friend class Y2PM;
00048     PMSelectionManager();
00049     virtual ~PMSelectionManager();
00050 
00051     typedef std::map<PMSelectablePtr,PMSelectable::Fate> ActiveMap;
00052 
00056     ActiveMap _last_active;
00057 
00061     void setLast( const PMSelectablePtr & sel_r, PMSelectable::Fate val_r );
00062 
00066     PMSelectable::Fate lastState( const PMSelectablePtr & sel_r ) const;
00067 
00071     PMSelectable::Fate getState( const PMSelectablePtr & sel_r ) const;
00072 
00073   private:
00074 
00075     ActiveMap saved_last_active;
00076 
00077   public:
00078 
00082     virtual void SaveState() {
00083       saved_last_active = _last_active;
00084       PMManager::SaveState();
00085     }
00086 
00090     virtual bool RestoreState() {
00091       if ( !PMManager::RestoreState() ) {
00092         saved_last_active.clear();
00093         return false;
00094       }
00095       _last_active = saved_last_active;
00096       return true;
00097     }
00098 
00102     virtual void ClearSaveState() {
00103       saved_last_active.clear();
00104       PMManager::ClearSaveState();
00105     }
00106 
00107 
00108   private:
00109 
00114     virtual PMObjectPtr assertObjectType( const PMObjectPtr & object_r ) const;
00115 
00116   private:
00117 
00119     // Remember selection packages fate.
00121     struct PkgFates {
00122       void add( PMSelectableVec & lhs, const PMSelectableVec & rhs ) {
00123         lhs.insert( rhs.begin(), rhs.end() );
00124       }
00125       public:
00126         // selections to install:
00127         PMSelectableVec pkgToDelete;   // hard request: get rid of it (delpack)
00128         PMSelectableVec pkgToInstall;  // hard request: (re)install it
00129         // unmodified but installed selections: protect inspacks from deletion (except by a delpack)
00130         PMSelectableVec pkgOnSystem;   // soft request: Keep it OnSystem.
00131         // selections to delete:
00132         PMSelectableVec pkgOffSystem;  // soft request: if no one minds, bring it OffSystem
00133         // EVERYTHING ELSE:
00134         PMSelectableVec pkgUnmodified; // is set to unmodified
00135 
00136         void addToDelete  ( const PMSelectableVec & rhs ) { add( pkgToDelete, rhs ); }
00137         void addToInstall ( const PMSelectableVec & rhs ) { add( pkgToInstall, rhs ); }
00138         void addOnSystem  ( const PMSelectableVec & rhs ) { add( pkgOnSystem, rhs ); }
00139         void addOffSystem ( const PMSelectableVec & rhs ) { add( pkgOffSystem, rhs ); }
00140         void addUnmodified( const PMSelectableVec & rhs ) { add( pkgUnmodified, rhs ); }
00141       public:
00142         PMSelectableVec pkgProcessed;
00143 
00144         void setNothingProcessed() { pkgProcessed.clear(); }
00145 
00146         void setProcessed( PMSelectableVec rhs ) {
00147           add( pkgProcessed, rhs );
00148           rhs.clear();
00149         }
00150         void processedToDelete()   { setProcessed( pkgToDelete ); }
00151         void processedToInstall()  { setProcessed( pkgToInstall ); }
00152         void processedOnSystem()   { setProcessed( pkgOnSystem ); }
00153         void processedOffSystem()  { setProcessed( pkgOffSystem ); }
00154         void processedUnmodified() { setProcessed( pkgUnmodified ); }
00155 
00156         bool didProcess( PMSelectablePtr pkg_r ) const {
00157           return( pkgProcessed.find( pkg_r ) != pkgProcessed.end() );
00158         }
00159     };
00160 
00165     PMError syncToPkgMgr( PkgFates & fates_r );
00166 
00167   public:
00168 
00173     PMError activate( PMPackageManager & package_mgr );
00174 
00178     PMError activate();
00179 
00185     PMError requestedLocalesChanged( const PM::LocaleSet & addLocales_r,
00186                                      const PM::LocaleSet & delLocales_r );
00187 
00193     PMError installOnTarget();
00194 
00195 };
00196 
00198 
00199 #endif // PMSelectionManager_h

Generated on Fri Nov 9 14:30:31 2007 for yast2-packagemanager by doxygen 1.3.6