Gyoto
GyotoFactory.h
Go to the documentation of this file.
1 #ifdef GYOTO_USE_XERCES
2 
10 /*
11  Copyright 2011 Thibaut Paumard, Frederic Vincent
12 
13  This file is part of Gyoto.
14 
15  Gyoto is free software: you can redistribute it and/or modify
16  it under the terms of the GNU General Public License as published by
17  the Free Software Foundation, either version 3 of the License, or
18  (at your option) any later version.
19 
20  Gyoto is distributed in the hope that it will be useful,
21  but WITHOUT ANY WARRANTY; without even the implied warranty of
22  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23  GNU General Public License for more details.
24 
25  You should have received a copy of the GNU General Public License
26  along with Gyoto. If not, see <http://www.gnu.org/licenses/>.
27  */
28 
29 #ifndef __GyotoFactory_H_
30 #define __GyotoFactory_H_
31 
32 #ifndef XERCES_INCLUDE_WCHAR_H
33 #define XERCES_INCLUDE_WCHAR_H 0
34 #endif
35 
36 #include <xercesc/sax/ErrorHandler.hpp>
37 #include <xercesc/dom/DOM.hpp>
38 #include <xercesc/parsers/XercesDOMParser.hpp>
39 #include <GyotoScenery.h>
40 #include <GyotoPhoton.h>
41 #include <GyotoSpectrum.h>
42 #include <sstream>
43 #include <string>
44 
45 namespace Gyoto {
46  class Factory;
47  class FactoryMessenger;
48  class Spectrometer;
49 }
50 
98 {
99  friend class Gyoto::FactoryMessenger;
100 
101  protected:
102  // XERCES MACHINERY
103  xercesc::ErrorHandler *reporter_;
104  xercesc::DOMDocument *doc_;
105  xercesc::DOMElement *root_;
106  xercesc::XercesDOMParser *parser_;
107  xercesc::DOMXPathNSResolver* resolver_;
108  xercesc::DOMImplementation* impl_;
109 
110  // Elements which must happen only once in a file
111  // but may happen about anywhere
112  xercesc::DOMElement *gg_el_;
113  xercesc::DOMElement *obj_el_;
114  xercesc::DOMElement *ph_el_;
115 
116  // GYOTO elements
117  SmartPointer<Scenery> scenery_;
119  SmartPointer<Screen> screen_;
121  SmartPointer<Photon> photon_;
123 
124  // Factory stuff
125  std::string filename_;
126  std::string kind_;
127 
128  public:
129  // Constructor for READING
130  Factory(char * filename);
131 
132  // Constructors for SAVING
140 
141  // Destructor
142  ~Factory();
143 
144  private:
145  // Internal stuff
146  void setReporter(xercesc::ErrorHandler*);
147  xercesc::DOMElement * getRoot();
148  xercesc::DOMDocument* getDoc();
149 
150  public:
151  const std::string getKind();
153 
154  // Building and getting SmartPointer<OBJECTS>
162 
163  // XML OUTPUT
164  void write(const char* const fname=0);
165  std::string format();
166 
167  // Setting elements
168  void setMetric(SmartPointer<Metric::Generic> gg, xercesc::DOMElement *el);
169  void setAstrobj(SmartPointer<Astrobj::Generic> ao, xercesc::DOMElement *el);
170  void setScreen(SmartPointer<Screen> scr, xercesc::DOMElement *el);
171  void setContent(std::string content, xercesc::DOMElement *el);
172  void setParameter(std::string name, xercesc::DOMElement *pel);
173  void setParameter(std::string name, double value, xercesc::DOMElement *pel);
174  void setParameter(std::string name, int value, xercesc::DOMElement *pel);
175  void setParameter(std::string name, unsigned int value, xercesc::DOMElement *pel);
176  void setParameter(std::string name, long value, xercesc::DOMElement *pel);
177  void setParameter(std::string name, unsigned long value, xercesc::DOMElement *pel);
178  void setParameter(std::string name, std::string sval, xercesc::DOMElement*);
179  void setParameter(std::string , double val[], size_t, xercesc::DOMElement*,
180  FactoryMessenger **child = NULL);
181 
185  std::string fullPath(std::string relpath);
186 };
187 
188 #endif
189 #endif