Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

rdbModel::XercesBuilder Class Reference

#include <XercesBuilder.h>

Inheritance diagram for rdbModel::XercesBuilder:

rdbModel::Builder rdbModel::Builder List of all members.

Public Member Functions

virtual int buildRdb ()
virtual int buildRdb ()
RdbgetRdb ()
RdbgetRdb ()
virtual unsigned int parseInput (const std::string &inputPath)
virtual unsigned int parseInput (const std::string &inputPath)
void setRdb (Rdb *pRdb)
void setRdb (Rdb *pRdb)
 XercesBuilder ()
 XercesBuilder ()
virtual ~XercesBuilder ()
virtual ~XercesBuilder ()

Protected Attributes

Rdbm_currentRdb
Rdbm_currentRdb

Private Member Functions

AssertionbuildAssertion (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
AssertionbuildAssertion (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
ColumnbuildColumn (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
ColumnbuildColumn (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
DatatypebuildDatatype (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e)
DatatypebuildDatatype (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e)
IndexbuildIndex (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, bool primary, Table *t)
IndexbuildIndex (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, bool primary, Table *t)
InsertNewbuildInsertNew (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
InsertNewbuildInsertNew (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
InterRowbuildInterRow (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
InterRowbuildInterRow (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
Assertion::OperatorbuildOperator (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
Assertion::OperatorbuildOperator (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
QuerybuildQuery (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
QuerybuildQuery (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
SetbuildSet (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
SetbuildSet (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
SupersedebuildSupersede (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
SupersedebuildSupersede (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e, Table *t)
TablebuildTable (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e)
TablebuildTable (XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *e)

Private Attributes

XERCES_CPP_NAMESPACE_QUALIFIER
DOMDocument * 
m_doc
XERCES_CPP_NAMESPACE_QUALIFIER
DOMDocument * 
m_doc
Rdbm_rdb
Rdbm_rdb

Detailed Description

This class is a concrete Builder that use the Xerces parser and the DOM functionalities to parse the xml file and build the generic model hierarchy
Author:
D.Favretto & R.Giannitrapani


Constructor & Destructor Documentation

rdbModel::XercesBuilder::XercesBuilder  ) 
 

The constructor

00027                                : Builder(), m_doc(0), m_rdb(0) {
00028   }

virtual rdbModel::XercesBuilder::~XercesBuilder  )  [inline, virtual]
 

00034 {};

rdbModel::XercesBuilder::XercesBuilder  ) 
 

The constructor

virtual rdbModel::XercesBuilder::~XercesBuilder  )  [inline, virtual]
 

00034 {};


Member Function Documentation

Assertion* rdbModel::XercesBuilder::buildAssertion XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

Assertion* rdbModel::XercesBuilder::buildAssertion XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

Column* rdbModel::XercesBuilder::buildColumn XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

build a Column from its xml description

Column* rdbModel::XercesBuilder::buildColumn XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

build a Column from its xml description

Datatype* rdbModel::XercesBuilder::buildDatatype XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e  )  [private]
 

Datatype* rdbModel::XercesBuilder::buildDatatype XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e  )  [private]
 

Index* rdbModel::XercesBuilder::buildIndex XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
bool  primary,
Table t
[private]
 

build an Index object (corresponding to MySQL index or key) from its xml description

Index* rdbModel::XercesBuilder::buildIndex XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
bool  primary,
Table t
[private]
 

build an Index object (corresponding to MySQL index or key) from its xml description

InsertNew* rdbModel::XercesBuilder::buildInsertNew XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

InsertNew * rdbModel::XercesBuilder::buildInsertNew XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

00593                                           {
00594     using xmlBase::Dom;
00595 
00596     std::string internalStr = Dom::getAttribute(e, "internalCond");
00597     Assertion* internal = t->getAssertionByName(internalStr);
00598 
00599     std::string officialStr = Dom::getAttribute(e, "official");
00600     Assertion* official = t->getAssertionByName(officialStr);
00601 
00602     InsertNew* in = new InsertNew(t, internal, official);
00603     e = Dom::findFirstChildByName(e, "*");
00604     while (e != 0) {  // process <interRow>
00605       InterRow* ir = buildInterRow(e, t);
00606       
00607       in->addInterRow(ir);
00608       e = Dom::getSiblingElement(e);
00609     }
00610     return in;
00611   }

InterRow* rdbModel::XercesBuilder::buildInterRow XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

InterRow * rdbModel::XercesBuilder::buildInterRow XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

00615                                          {
00616     using xmlBase::Dom;
00617 
00618 
00619     XERCES_CPP_NAMESPACE_QUALIFIER DOMElement* queryElt =
00620       Dom::findFirstChildByName(e, "*");
00621     Query* q = buildQuery(queryElt, t);
00622 
00623     XERCES_CPP_NAMESPACE_QUALIFIER DOMElement* sib = 
00624       Dom::getSiblingElement(queryElt);
00625     bool quit = Dom::checkTagName(sib, "quit");
00626 
00627     InterRow* inter = new InterRow(t, q, quit);
00628     if (quit) return inter;
00629     
00630     // else we have one or more <set>
00631     while (sib != 0) {
00632       Set* s = buildSet(sib, t);
00633       inter->addSet(*s);
00634       sib  = Dom::getSiblingElement(sib);
00635       
00636     }
00637     return inter;
00638   }

Assertion::Operator* rdbModel::XercesBuilder::buildOperator XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

Assertion::Operator* rdbModel::XercesBuilder::buildOperator XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

Query* rdbModel::XercesBuilder::buildQuery XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

Query * rdbModel::XercesBuilder::buildQuery XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

00577                                       {
00578     using xmlBase::Dom;
00579     std::string whereStr = Dom::getAttribute(e, "assertRef");
00580     Assertion* where = t->getAssertionByName(whereStr);
00581 
00582     Query* q = new Query(t, 0, where);
00583     e = Dom::findFirstChildByName(e, "*");
00584     while (e != 0) {
00585       q->addSelect(Dom::getTextContent(e));
00586       e = Dom::getSiblingElement(e);
00587     }
00588     return q;
00589   }

virtual int rdbModel::XercesBuilder::buildRdb  )  [virtual]
 

Concrete implementation of pure virtual Builder::buildRdb

Implements rdbModel::Builder.

int rdbModel::XercesBuilder::buildRdb  )  [virtual]
 

Concrete implementation of pure virtual Builder::buildRdb

Implements rdbModel::Builder.

00041                               {
00042     using xmlBase::Dom;
00043 
00044     Manager* man = Manager::getManager();
00045 
00046     if (m_doc == 0 ) return 0;
00047     m_rdb = man->getRdb();
00048     DOMElement* docElt = m_doc->getDocumentElement();
00049 
00050     
00051     //  save attribute information associated with outermost (rdbms) element.
00052     m_rdb->m_dbName = Dom::getAttribute(docElt, "dbs");
00053     m_rdb->m_majorVersion = 0;
00054     m_rdb->m_minorVersion = 0;
00055 
00056     std::string versionString = Dom::getAttribute(docElt, "SchemaVersion");
00057     if (!versionString.size()) {
00058       versionString = Dom::getAttribute(docElt, "DTDversion");
00059     }
00060 
00061     unsigned dotPos = versionString.find('.');
00062 
00063     std::string minorStr = std::string(versionString, dotPos+1);
00064     //                               versionString.size() - (dotPos+1));
00065     versionString.resize(dotPos);    // now contains just major #
00066 
00067     try {
00068       m_rdb->m_majorVersion = facilities::Util::stringToInt(versionString);
00069       m_rdb->m_minorVersion = facilities::Util::stringToInt(minorStr);
00070     }
00071     catch (facilities::WrongType ex) {
00072       std::cerr << "rdbModel::XercesBuilder: Bad version string " << std::endl;
00073     }
00074     m_rdb->m_CVSid = Dom::getAttribute(docElt, "CVSid");
00075     if (m_rdb->m_majorVersion != SCHEMA_MAJOR_VERSION) {
00076       std::cerr << "Schema major version " << m_rdb->m_majorVersion 
00077                 << " doesn't match expected " << SCHEMA_MAJOR_VERSION 
00078                 << std::endl;
00079       std::cerr << "Bye for now";
00080       std::cerr.flush();
00081       exit(1);
00082     }
00083 
00084     // Get vector of table elements.  
00085     std::vector<DOMElement*> tables;
00086     Dom::getChildrenByTagName(docElt, "table", tables);
00087     unsigned int nTable = tables.size();
00088     unsigned int processed = 0;
00089 
00090     for (unsigned int iTable = 0; iTable < nTable; iTable++) {
00091       Table* newTable = buildTable(tables[iTable]);
00092 
00093       if (newTable) {
00094         m_rdb->addTable(newTable);
00095         processed++;
00096       }
00097     }
00098     return nTable - processed;
00099   }

Set* rdbModel::XercesBuilder::buildSet XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

Set * rdbModel::XercesBuilder::buildSet XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

00510                                          {
00511     using xmlBase::Dom;
00512 
00513     std::string destCol = Dom::getAttribute(e, "destCol");
00514 
00515     std::string destRow = Dom::getAttribute(e, "destRow");
00516     FIELDTYPE destType = (destRow == std::string("old") ) ? FIELDTYPEold :
00517       FIELDTYPEtoBe;
00518 
00519     // Now find out what kind of source there is for the <set>
00520     FIELDTYPE srcType;
00521     std::string srcValue;
00522     std::string interp("");
00523     DOMElement* srcElt = Dom::findFirstChildByName(e, "*"); 
00524     std::string tag = Dom::getTagName(srcElt);
00525     if (tag == std::string("ask")) {
00526       srcType = FIELDTYPEask;
00527       srcValue = "";
00528     }
00529     else if (tag == std::string("value") ) {
00530       srcType = FIELDTYPElit;
00531       srcValue = Dom::getTextContent(srcElt);
00532       interp = Dom::getAttribute(srcElt, "interp");
00533     }
00534     else { // it's a setColRef element
00535       std::string forceStr= Dom::getAttribute(srcElt, "force"); 
00536       bool force = (forceStr == std::string("true"));
00537       srcValue = Dom::getAttribute(srcElt, "col");
00538       std::string which = Dom::getAttribute(srcElt, "which");
00539       srcType = (which == std::string("old")) ? FIELDTYPEold 
00540         : FIELDTYPEtoBe;
00541       if (!force) {
00542         if  (srcType == FIELDTYPEold) srcType = FIELDTYPEoldDef;
00543         else srcType = FIELDTYPEtoBeDef;
00544       }
00545     }
00546     return new Set(t, destCol, destType, srcValue, srcType, interp);
00547   }

Supersede* rdbModel::XercesBuilder::buildSupersede XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

Supersede * rdbModel::XercesBuilder::buildSupersede XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e,
Table t
[private]
 

00552                                           {
00553     using xmlBase::Dom;
00554 
00555     // <supersede> has an optional attribute which is a reference to
00556     // an assertion.  If the attribute is there, it refers to an
00557     // assertion which will already have been processed by XercesBuilder,
00558     // so we can look it up by name.
00559     std::string onlyIfStr = Dom::getAttribute(e, "onlyIf");
00560     Assertion* onlyIf = t->getAssertionByName(onlyIfStr);
00561     Supersede* super = new Supersede(t, onlyIf);
00562 
00563     // Now handle child elements:  a bunch of <set>s.  Sort into two
00564     // lists, depending on whether destination is old row or new
00565     e = Dom::findFirstChildByName(e, "*");
00566     while (e != 0) {
00567       Set* s = buildSet(e, t);
00568       super->addSet(s);
00569       e = Dom::getSiblingElement(e);
00570     }
00571     super->normalize();
00572     return super;
00573   }

Table* rdbModel::XercesBuilder::buildTable XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e  )  [private]
 

Build an individual Table object from its xml description

Table* rdbModel::XercesBuilder::buildTable XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *  e  )  [private]
 

Build an individual Table object from its xml description

Rdb* rdbModel::Builder::getRdb  )  [inline, inherited]
 

This method return a pointer to the internal Rdb

00045 { return m_currentRdb; };

Rdb* rdbModel::Builder::getRdb  )  [inline, inherited]
 

This method return a pointer to the internal Rdb

00045 { return m_currentRdb; };

virtual unsigned int rdbModel::XercesBuilder::parseInput const std::string &  inputPath  )  [virtual]
 

Invoke xml parser to produce DOM (in-memory) representation Concrete implementation of Builder::parseInput

Implements rdbModel::Builder.

unsigned int rdbModel::XercesBuilder::parseInput const std::string &  inputPath  )  [virtual]
 

Invoke xml parser to produce DOM (in-memory) representation Concrete implementation of Builder::parseInput

Implements rdbModel::Builder.

00030                                                                   {
00031     xmlBase::XmlParser parser;
00032 
00033     parser.doSchema(true);
00034 
00035     //    m_doc = parser.parse(filename.c_str(), "rdbms");
00036     m_doc = parser.parse(filename.c_str());
00037 
00038     return (m_doc == 0) ? 0xffffffff : 0;
00039   }

void rdbModel::Builder::setRdb Rdb pRdb  )  [inline, inherited]
 

00040 {m_currentRdb = pRdb;}

void rdbModel::Builder::setRdb Rdb pRdb  )  [inline, inherited]
 

00040 {m_currentRdb = pRdb;}


Member Data Documentation

Rdb* rdbModel::Builder::m_currentRdb [protected, inherited]
 

This is a private pointer to an Rdb used during the building

Rdb* rdbModel::Builder::m_currentRdb [protected, inherited]
 

This is a private pointer to an Rdb used during the building

XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* rdbModel::XercesBuilder::m_doc [private]
 

XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* rdbModel::XercesBuilder::m_doc [private]
 

Rdb* rdbModel::XercesBuilder::m_rdb [private]
 

Rdb* rdbModel::XercesBuilder::m_rdb [private]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 19:22:57 2011 for BOSS6.5.5 by  doxygen 1.3.9.1