00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "xercesc/util/PlatformUtils.hpp"
00034 #include <algorithm>
00035
00036 #include <list>
00037 #include <iterator>
00038 #include <iostream>
00039
00040
00041 #include "xercesc/dom/deprecated/DOM_Document.hpp"
00042 #include "xercesc/dom/deprecated/DOM_Element.hpp"
00043 #include "xercesc/dom/deprecated/DOMString.hpp"
00044 #include "xercesc/dom/deprecated/DOMParser.hpp"
00045 XERCES_CPP_NAMESPACE_USE
00046
00047 #include "LCD_DocListener.hh"
00048 #include "LCD_DocumentImpl.hh"
00049
00050 #include "LCD_DocumentUtil.hh"
00051 #include "LCD_DocErrorReporter.hh"
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061 LCD_DocumentImpl::LCD_DocumentImpl(std::string XMLfilespec) {
00062
00063 DOM_Element elt;
00064
00065 errReporter = new LCD_DocErrorReporter();
00066
00067 parser = new DOMParser();
00068 parser->setErrorHandler(errReporter);
00069
00070 listeners = new std::list<LCD_DocListener*>;
00071 filespec = XMLfilespec;
00072 }
00073
00074
00075
00076
00077
00078
00079 void LCD_DocumentImpl::parse() {
00080
00081
00082 const DOMString& descripString = DOMString("descrip");
00083 DOM_Element elt;
00084
00085 parser->parse(filespec.c_str());
00086 myDoc = parser->getDocument();
00087
00088
00089 firstRead = 0;
00090
00091 elt = myDoc.getDocumentElement();
00092
00093
00094 docTypeName = elt.getTagName();
00095
00096 descrip = elt.getAttribute(descripString);
00097
00098 }
00099
00100
00101
00102
00103
00104
00105
00106
00107 DOM_Element LCD_DocumentImpl::getElement(DOMString id,
00108 DOMString elementName) const {
00109 DOM_Element docElt = myDoc.getDocumentElement();
00110 DOMString idVal;
00111 DOMString idString = DOMString("id");
00112
00113 if ((elementName.equals(DOMString("*"))) ||
00114 (elementName.equals(docElt.getTagName()) ) ) {
00115 idVal = docElt.getAttribute(idString);
00116 if (idVal.equals(id)) return docElt;
00117 }
00118
00119 DOM_NodeList eltList = docElt.getElementsByTagName(elementName);
00120 int len = eltList.getLength();
00121 DOM_Node node;
00122
00123 for (int i = 0; i < len; i++) {
00124
00125 node = (eltList.item(i));
00126 DOM_Element elt = (DOM_Element &) node;
00127
00128
00129
00130
00131
00132
00133 idVal = elt.getAttribute(idString);
00134
00135 if (idVal.equals(id)) return elt;
00136 }
00137
00138 return DOM_Element();
00139 }
00140
00141
00142
00143
00144 void LCD_DocumentImpl::registerListener(LCD_DocListener* ls) {
00145 listeners->push_front(ls);
00146 }
00147
00148
00149
00150
00151 int LCD_DocumentImpl::deleteListener(LCD_DocListener* ls) {
00152
00153 std::list<LCD_DocListener*>::iterator
00154 which = std::find(listeners->begin(), listeners->end(), ls);
00155 if (which != listeners->end()) {
00156
00157
00158 listeners->erase(which);
00159 }
00160 else {
00161 return 1;
00162 }
00163 return 0;
00164 }
00165
00166
00167
00168
00169
00170
00171 void LCD_DocumentImpl::notifyListeners() {
00172
00173 return;
00174 }
00175
00176