00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
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
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
00121 struct PkgFates {
00122 void add( PMSelectableVec & lhs, const PMSelectableVec & rhs ) {
00123 lhs.insert( rhs.begin(), rhs.end() );
00124 }
00125 public:
00126
00127 PMSelectableVec pkgToDelete;
00128 PMSelectableVec pkgToInstall;
00129
00130 PMSelectableVec pkgOnSystem;
00131
00132 PMSelectableVec pkgOffSystem;
00133
00134 PMSelectableVec pkgUnmodified;
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