Gyoto
Public Member Functions | Protected Attributes | Private Member Functions | Friends
Gyoto::Factory Class Reference

XML input/output. More...

#include <GyotoFactory.h>

List of all members.

Public Member Functions

 Factory (char *filename)
 Factory (SmartPointer< Scenery > sc)
 Factory (SmartPointer< Metric::Generic > gg)
 Factory (SmartPointer< Astrobj::Generic > ao)
 Factory (SmartPointer< Spectrum::Generic > sp)
 Factory (SmartPointer< Screen > screen)
 Factory (SmartPointer< Photon > photon)
 Factory (SmartPointer< Spectrometer > Spectrometer)
const std::string getKind ()
 Name of TOP-LEVEL object (Scenery, Metric, Astrobj...)
Gyoto::SmartPointer
< Gyoto::Scenery
getScenery ()
Gyoto::SmartPointer
< Gyoto::Metric::Generic
getMetric ()
Gyoto::SmartPointer
< Gyoto::Screen > 
getScreen ()
Gyoto::SmartPointer
< Gyoto::Astrobj::Generic
getAstrobj ()
Gyoto::SmartPointer
< Gyoto::Photon
getPhoton ()
Gyoto::SmartPointer
< Gyoto::Spectrum::Generic
getSpectrum ()
Gyoto::SmartPointer
< Gyoto::Astrobj::Properties
getAstrobjProperties ()
void write (const char *const fname=0)
std::string format ()
void setMetric (SmartPointer< Metric::Generic > gg, xercesc::DOMElement *el)
void setAstrobj (SmartPointer< Astrobj::Generic > ao, xercesc::DOMElement *el)
void setScreen (SmartPointer< Screen > scr, xercesc::DOMElement *el)
void setContent (std::string content, xercesc::DOMElement *el)
void setParameter (std::string name, xercesc::DOMElement *pel)
void setParameter (std::string name, double value, xercesc::DOMElement *pel)
void setParameter (std::string name, int value, xercesc::DOMElement *pel)
void setParameter (std::string name, unsigned int value, xercesc::DOMElement *pel)
void setParameter (std::string name, long value, xercesc::DOMElement *pel)
void setParameter (std::string name, unsigned long value, xercesc::DOMElement *pel)
void setParameter (std::string name, std::string sval, xercesc::DOMElement *)
void setParameter (std::string, double val[], size_t, xercesc::DOMElement *, FactoryMessenger **child=NULL)
std::string fullPath (std::string relpath)

Protected Attributes

xercesc::ErrorHandler * reporter_
xercesc::DOMDocument * doc_
xercesc::DOMElement * root_
xercesc::XercesDOMParser * parser_
xercesc::DOMXPathNSResolver * resolver_
xercesc::DOMImplementation * impl_
xercesc::DOMElement * gg_el_
xercesc::DOMElement * obj_el_
xercesc::DOMElement * ph_el_
SmartPointer< Sceneryscenery_
SmartPointer< Metric::Genericgg_
SmartPointer< Screen > screen_
SmartPointer< Astrobj::Genericobj_
SmartPointer< Photonphoton_
SmartPointer< Spectrometerspectro_
std::string filename_
std::string kind_

Private Member Functions

void setReporter (xercesc::ErrorHandler *)
xercesc::DOMElement * getRoot ()
xercesc::DOMDocument * getDoc ()

Friends

class Gyoto::FactoryMessenger

Detailed Description

XML input/output.

The Factory is responsible from building objects from their XML description, and from saving an XML description of existing objects. Since the Factory doesn't know how to build the variety of objects available in Gyoto and in external plug-ins, the Factory orders Metric, Astrobj and Spectrum objects from registered subcontractors (see SmartPointee::Subcontractor_t). The factory an the various subcontractors communicate through a FactoryMessenger.

To read an XML file, you simply create an instance of the Factory with a filename, and get whichever object type you are interested in:

Gyoto::Factory * factory = new Gyoto::Factory("some/input/file.xml");
const std::string kind = factory->getKind();
if (kind.compare("Scenery")) Gyoto::throwError("I wan't a Scenery");
Gyoto::SmartPointer<Gyoto::Scenery> scenery = factory -> getScenery();
Gyoto::SmartPointer<Gyoto::Astrobj::Generic> object = scenery->getAstrobj();
delete factory; factory=NULL;

or, for a single object and without checking the kind (getKind()) first:

Gyoto::SmartPointer<Gyoto::Scenery> scenery = Factory("some/input/file.xml").getScenery();

Writing an object to a fie is even easier. Assuming "object" below is a Gyoto::SmartPointer<class> where "class" is one of Scenery, Metric::Generic, Astrobj::Generic, Spectrum::Generic, Screen, Photon or Spectrometer:

Gyoto::Factory * factory = new Gyoto::Factory(object);
factory -> write("some/output/file.xml");
delete factory; factory=NULL;

or, for short:

Gyoto::Factory(object).write("some/output/file.xml");

Member Function Documentation

std::string Gyoto::Factory::fullPath ( std::string  relpath)

Input is path relative to XML file. Output is absolute path to same file.


The documentation for this class was generated from the following file: