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:
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
00135 struct PkgFates {
00136 void add( PMSelectableVec & lhs, const PMSelectableVec & rhs ) {
00137 lhs.insert( rhs.begin(), rhs.end() );
00138 }
00139 public:
00140
00141 PMSelectableVec pkgToDelete;
00142 PMSelectableVec pkgToInstall;
00143
00144 PMSelectableVec pkgOnSystem;
00145
00146 PMSelectableVec pkgOffSystem;
00147
00148 PMSelectableVec pkgUnmodified;
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