00001
00012
00013
00014 #ifndef IMEDGINEDATA_VIEW_MEDIATOR_H
00015 #define IMEDGINEDATA_VIEW_MEDIATOR_H
00016
00017 #include "../global/global_definitions.h"
00018 #include "../datasets/dataset.h"
00019 #include "../viewer/view.h"
00020 #include "../viewer/view_factory.h"
00021 #include "../exceptions/null_pointer_exception.h"
00022 #include "../exceptions/invalid_cast_exception.h"
00023
00024 #include <map>
00025
00026 namespace imedgine
00027 {
00028
00044
00045
00046 class DataViewMediator
00047 {
00048 public:
00049
00050
00053
00054 DataViewMediator();
00055
00056
00059
00060 ~DataViewMediator();
00061
00062
00069
00070 view_pointer_type getViewOfDataset(dataset_pointer_type dataset,
00071 view_type type)
00072 throw(NullPointerException);
00073
00074
00079
00080 void getDependentViewIDsOfDataset(
00081 dataset_key_type dataset_key, view_id_container_type& target_container) const
00082 throw(NullPointerException);
00083
00084
00089
00090 bool deleteView(unsigned int view_id)
00091 throw(NullPointerException);
00092
00093
00099
00100 bool removeDataset(
00101 dataset_key_type dataset_key);
00102
00103
00112
00113 void lockDatasets(dataset_key_type dataset_left,
00114 dataset_key_type dataset_right);
00115
00116
00124
00125 void unlockDatasets(dataset_key_type dataset_left,
00126 dataset_key_type dataset_right);
00127
00128
00133
00134 bool areDatasetsLocked(dataset_key_type dataset_left,
00135 dataset_key_type dataset_right);
00136
00137
00138
00143
00144 void updateDependentViews(dataset_key_type dataset)
00145 throw(NullPointerException);
00146
00147
00152
00153 void updateDataChanged(dataset_key_type dataset,
00154 dataset_attribute_type changed_attribute)
00155 throw(NullPointerException, InvalidCastException);
00156
00157 protected:
00158
00159
00164
00165 void registerViewOfDataset(dataset_pointer_type dataset,
00166 view_pointer_type view)
00167 throw(NullPointerException);
00168
00169
00175 void registerHybridViewOfDatasets(
00176 dataset_pointer_type first_dataset, dataset_pointer_type second_dataset,
00177 view_pointer_type hybrid_view);
00178
00179 typedef std::multimap<dataset_key_type, view_pointer_type>
00180 dataset_to_view_mmap_type;
00181 typedef dataset_to_view_mmap_type::iterator
00182 dataset_to_view_mmap_iterator_type;
00183 typedef dataset_to_view_mmap_type::const_iterator
00184 dataset_to_view_mmap_const_iterator_type;
00185 typedef std::multimap<dataset_key_type, dataset_key_type>
00186 dataset_to_datset_mmap_type;
00187 typedef dataset_to_datset_mmap_type::iterator
00188 dataset_to_dataset_mmap_iterator_type;
00189
00190 dataset_to_view_mmap_type dataset_to_view_mmap_;
00191
00192 dataset_to_datset_mmap_type dataset_to_dataset_mmap_;
00193
00194 ViewFactory view_factory_;
00195
00196 private:
00197
00198 DataViewMediator(DataViewMediator const&)
00199 {}
00200
00201 DataViewMediator& operator = (DataViewMediator const&)
00202 {
00203 return(*this);
00204 }
00205 };
00206 }
00207
00208 #endif