00001
00002
00014 #ifndef _XmlController_H_
00015 #define _XmlController_H_
00016
00017 #include "pattern/libhippo.h"
00018
00019
00020 #include <list>
00021 #include <map>
00022 #include <string>
00023 #include <vector>
00024
00025 namespace hippodraw {
00026 class DataRep;
00027 class DataRepXML;
00028 class DataSource;
00029 class FontBase;
00030 class HiNTupleXML;
00031 class PlotterBase;
00032 class TupleCut;
00033 class TupleCutXML;
00034 class ViewBase;
00035 class ViewBaseXML;
00036 class ViewFactory;
00037 class XmlDocument;
00038 class XmlElement;
00039
00053 class MDL_HIPPOPLOT_API XmlController
00054 {
00055
00056 public:
00057
00059 enum Status { Success, OpenError, ParseError, NTupleError };
00060
00061 private:
00062
00064 ViewFactory * m_view_factory;
00065
00067 XmlController ( const XmlController & );
00068
00071 std::list < std::string > m_missing_tuples;
00072
00075 std::vector < int > m_missing_ids;
00076
00079 void clearDataSourceMap ();
00080
00082 void fillNTupleMap ();
00083
00086 void fillTupleCutMap ( const std::vector < const ViewBase * > & views );
00087
00091 void saveToDocument ( const std::vector < const ViewBase * > & selviews );
00092
00094 const std::list < ViewBase * > &
00095 getFromDocument ( ViewFactory * facotry,
00096 const std::vector < const ViewBase * > & views );
00097
00099 XmlDocument * m_pasteboard;
00100
00102 XmlDocument * m_selectboard;
00103
00105 std::list < ViewBase * > m_views;
00106
00108 std::map < const DataSource *, XmlElement * > m_data;
00109
00112 std::map < const void *, int > m_addr_map;
00113
00116 typedef std::map < const void *, int >::iterator AddrMapIterator_t;
00117
00120 int m_id;
00121
00123 std::map < int, const DataSource * > m_tuple_map;
00124
00126 std::map < int, const TupleCut * > m_tuple_cut_map;
00127
00129 std::map < int, DataRep * > m_datarep_map;
00130
00132 std::map < int, PlotterBase * > m_plotter_map;
00133
00135 ViewBaseXML * m_view;
00136
00138 DataRepXML * m_datarep_xml;
00139
00141 HiNTupleXML * m_ntuple;
00142
00144 TupleCutXML * m_tuple_cut_xml;
00145
00147 XmlElement * m_element;
00148
00152 virtual void newDocument ( const std::string & name ) = 0;
00153
00160 virtual Status openDocument ( const std::string & filename );
00161
00165 virtual Status openNTuples ( );
00166
00167
00169 void getDataReps ();
00170
00172 void getTupleCuts ();
00173
00175 virtual void getViews ( );
00176
00178 void getViews ( const XmlElement * root );
00179
00180 protected:
00181
00184 XmlController();
00185
00186 public:
00187
00189 virtual ~XmlController();
00190
00194 static XmlDocument * m_xml_doc;
00195
00198 virtual void createDocument ( const std::string & doc_name );
00199
00201 virtual bool fileExists ( const std::string & filename ) const = 0;
00202
00206 Status openFile ( const std::string & filename );
00207
00210 virtual const std::list < ViewBase * > & getViews ( ViewFactory * );
00211
00214 bool areDataSourcesSaved ( const std::vector < const ViewBase * > & views );
00215
00219 virtual bool
00220 serializeViews ( const std::vector < const ViewBase * > & views );
00221
00223 bool isPasteboardEmpty ();
00224
00230 const std::list < ViewBase * > &
00231 getFromPasteboard ( ViewFactory * factory,
00232 const std::vector < const ViewBase * > & views );
00233
00236 const std::list < ViewBase * > &
00237 getFromSelectionCopy ( ViewFactory * factory,
00238 const std::vector < const ViewBase * > & views );
00239
00244 void saveToPasteboard ( const std::vector < const ViewBase * > & );
00245
00250 void saveToSelectionCopy ( const std::vector < const ViewBase * > & views );
00251
00254 Status saveToFile ( const std::vector < const ViewBase * > & views,
00255 const std::string & filename );
00256
00257
00259 PlotterBase * createDisplay ( );
00260
00262 void addViews ( const std::vector < const ViewBase * > & views );
00263
00267 ViewBase * createView ( PlotterBase * );
00268
00271 FontBase * createFont () const;
00272
00275 virtual XmlElement * addDataSource ( const DataSource * ntuple );
00276
00278 const DataSource * getDataSource ( int ref_id );
00279
00282 const TupleCut * getTupleCut ( int ref_id );
00283
00285 DataRep * getDataRep ( int ref );
00286
00290 PlotterBase * getPlotter ( int ref );
00291
00294 void registerPlotter ( int id, PlotterBase * plotter );
00295
00298 int getId ( const void * address );
00299
00303 std::list < std::string > & getMissingTuples ();
00304
00307 virtual Status openUpdatedNTuples ( );
00308
00309 };
00310
00311 }
00312
00313 #endif // _XmlController_H_