Changeset 128
- Timestamp:
- 05/02/08 15:44:24 (8 months ago)
- Files:
-
- trunk/dba/dba.bkl (modified) (6 diffs)
- trunk/dba/dba/convspec.cpp (modified) (1 diff)
- trunk/dba/dba/convspec.h (modified) (1 diff)
- trunk/dba/dba/fileutils.cpp (added)
- trunk/dba/dba/fileutils.h (added)
- trunk/dba/dba/xmlarchive.cpp (modified) (4 diffs)
- trunk/dba/dba/xmlarchive.h (modified) (4 diffs)
- trunk/dba/dba/xmlerrorhandler.cpp (added)
- trunk/dba/dba/xmlerrorhandler.h (added)
- trunk/dba/test/xmltestcase.cpp (modified) (3 diffs)
- trunk/dba/test/xmltestcase.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/dba/dba.bkl
r127 r128 22 22 dba/double_filter.cpp 23 23 dba/exception.cpp 24 dba/fileutils.cpp 24 25 dba/genericfetcher.cpp 25 26 dba/idlocker.cpp … … 61 62 dba/double_filter.h 62 63 dba/exception.h 64 dba/fileutils.h 63 65 dba/genericfetcher.h 64 66 dba/idlocker.h … … 211 213 <sources> 212 214 dba/xmlarchive.cpp 215 dba/xmlerrorhandler.cpp 213 216 dba/xmlistream.cpp 214 217 dba/xmlostream.cpp … … 216 219 <msvc-headers> 217 220 dba/xmlarchive.h 221 dba/xmlerrorhandler.h 218 222 dba/xmlistream.h 219 223 dba/xmlostream.h … … 307 311 </lib> 308 312 309 <template id="dbaexe_base" template ="xml-exe">313 <template id="dbaexe_base" template_append="xml-exe"> 310 314 <app-type>console</app-type> 311 315 <include>$(SRCDIR)</include> … … 335 339 <exe id="dba_test_static" template="testbase" cond="SHARED=='0' and TESTS=='1'"> 336 340 <nameexe>dba_test_static</nameexe> 341 <library>dbaxml_static</library> 342 <library>dbacsv_static</library> 337 343 <library>libdba_static</library> 338 <library>dbacsv_static</library>339 <library>dbaxml_static</library>340 344 </exe> 341 345 trunk/dba/dba/convspec.cpp
r57 r128 136 136 }; 137 137 138 const char* 139 ConvSpec::getXmlEncodingName(dba::ConvSpec::charset pCharset) { 140 switch (pCharset) { 141 case dba::ConvSpec::ISO8859_1: return "iso-8859-1"; 142 case dba::ConvSpec::ISO8859_2: return "iso-8859-2"; 143 case dba::ConvSpec::ISO8859_3: return "iso-8859-3"; 144 case dba::ConvSpec::ISO8859_4: return "iso-8859-4"; 145 case dba::ConvSpec::ISO8859_5: return "iso-8859-5"; 146 case dba::ConvSpec::ISO8859_6: return "iso-8859-6"; 147 case dba::ConvSpec::ISO8859_7: return "iso-8859-7"; 148 case dba::ConvSpec::ISO8859_8: return "iso-8859-8"; 149 case dba::ConvSpec::ISO8859_9: return "iso-8859-9"; 150 case dba::ConvSpec::ISO8859_10: return "iso-8859-10"; 151 case dba::ConvSpec::ISO8859_11: return "iso-8859-11"; 152 case dba::ConvSpec::ISO8859_13: return "iso-8859-13"; 153 case dba::ConvSpec::ISO8859_14: return "iso-8859-14"; 154 case dba::ConvSpec::ISO8859_15: return "iso-8859-15"; 155 156 //case dba::ConvSpec::KOI8: return ?; 157 //case dba::ConvSpec::KOI8_U: return ?; 158 //case dba::ConvSpec::BULGARIAN: return ? 159 160 //case dba::ConvSpec::CP437: return ?; 161 //case dba::ConvSpec::CP850: return ?; 162 //case dba::ConvSpec::CP852: return ?; 163 //case dba::ConvSpec::CP855: return ?; 164 //case dba::ConvSpec::CP866: return ?; 165 //case dba::ConvSpec::CP874: return ?; 166 //case dba::ConvSpec::CP932: return ?; 167 //case dba::ConvSpec::CP936: return ?; 168 //case dba::ConvSpec::CP949: return ?; 169 //case dba::ConvSpec::CP950: return ?; 170 case dba::ConvSpec::CP1250: return "win-1250"; 171 case dba::ConvSpec::CP1251: return "win-1251"; 172 case dba::ConvSpec::CP1252: return "win-1252"; 173 case dba::ConvSpec::CP1254: return "win-1254"; 174 case dba::ConvSpec::CP1255: return "win-1255"; 175 case dba::ConvSpec::CP1256: return "win-1256"; 176 177 case dba::ConvSpec::UTF7: return "utf-7"; 178 case dba::ConvSpec::UTF8: return "utf-8"; 179 //case dba::ConvSpec::EUC_JP: return "?"; 180 default: return NULL; 181 }; 182 }; 183 138 184 139 185 } //namespace trunk/dba/dba/convspec.h
r56 r128 105 105 */ 106 106 static const char* getUnixLCType(charset pCharset); 107 /** 108 Convert debea charset to xml charset name 109 */ 110 static const char* getXmlEncodingName(charset pCharset); 107 111 }; 108 112 trunk/dba/dba/xmlarchive.cpp
r127 r128 11 11 // 12 12 #include "xmlarchive.h" 13 #include "fileutils.h" 13 14 14 15 namespace dba { … … 16 17 XMLArchive::XMLArchive() 17 18 : Archive(), 19 mRootNodeName((xmlChar*)"dba"), 18 20 mDocument(NULL), 19 21 mRootNode(NULL) … … 23 25 void 24 26 XMLArchive::open(const char* pOpenStr) { 25 //TODO 26 }; 27 28 void 29 XMLArchive::open(xmlNodePtr pRoot) { 30 //TODO 27 mFilename = pOpenStr; 28 ErrorContext c(this); 29 if (mDocument != NULL) { 30 xmlFreeDoc(mDocument); 31 }; 32 if (FileUtils::exists(pOpenStr)) { 33 mDocument = xmlParseFile(pOpenStr); 34 if (mDocument == NULL) { 35 if (c.wasError()) 36 throw c.createException(); 37 else 38 throw XMLException("Error reading file"); 39 }; 40 } else { 41 mDocument = xmlNewDoc((const xmlChar*)"1.0"); 42 xmlNodePtr node = xmlNewDocNode(mDocument,NULL,mRootNodeName,NULL); 43 xmlDocSetRootElement(mDocument,node); 44 }; 45 mRootNode = mDocument->children; 31 46 }; 32 47 … … 41 56 }; 42 57 58 void 59 XMLArchive::write() { 60 ErrorContext c(this); 61 int result = xmlSaveFileEnc(mFilename.c_str(), mDocument, ConvSpec::getXmlEncodingName(mConvSpecs.mDbCharset)); 62 if (result == -1) { 63 if (c.wasError()) 64 throw c.createException(); 65 else 66 throw XMLException("Unknown error when writing xml data to file"); 67 }; 68 }; 69 43 70 XMLArchive::~XMLArchive() 44 71 { 45 xmlFreeDoc(mDocument); 72 if (mDocument != NULL) { 73 write(); 74 xmlFreeDoc(mDocument); 75 }; 46 76 } 47 77 trunk/dba/dba/xmlarchive.h
r127 r128 14 14 15 15 #include "archive.h" 16 #include "xmlerrorhandler.h" 16 17 #include <libxml/tree.h> 17 18 … … 24 25 Archive for XML file format serialization 25 26 */ 26 class XMLArchive : public Archive {27 class XMLArchive : public Archive, public ConvSpecContainer, public XMLErrorHandler { 27 28 public: 28 29 XMLArchive(); 29 30 virtual void open(const char* pOpenStr); 30 void open(xmlNodePtr pRoot);31 31 virtual bool isOpen() const { return mRootNode != NULL; } 32 32 virtual IStream* getInputStream(); … … 34 34 virtual ~XMLArchive(); 35 35 private: 36 xmlChar* mRootNodeName; 36 37 /** 37 38 pointer to xml document. NULL if archive is open in external document … … 44 45 */ 45 46 xmlNodePtr mRootNode; 47 /** 48 name of file where mDocument is serialized 49 */ 50 std::string mFilename; 51 52 /** 53 Write contents of mDocument to file 54 */ 55 void write(); 56 57 /** 58 Convert ConvSpec::mDbEncoding constant to libxml2 encoding name 59 */ 60 const char* getLibxmlEncoding(); 61 /** 62 Convert libxml2 encoding name to ConvSpec constant 63 */ 64 ConvSpec::charset getDebeaEncoding(const char* pLibxmlEncoding); 46 65 }; 47 66 trunk/dba/test/xmltestcase.cpp
r127 r128 11 11 // 12 12 #include "xmltestcase.h" 13 #include "dba/fileutils.h" 13 14 14 15 namespace dba_tests { … … 18 19 void 19 20 XMLTestCase::setUp() { 20 mArchive = new dba::XMLArchive;21 21 }; 22 22 23 23 void 24 24 XMLTestCase::tearDown() { 25 delete mArchive;26 mArchive = NULL;27 25 }; 28 26 29 27 XMLTestCase::~XMLTestCase() { 30 delete mArchive;31 28 }; 32 29 … … 34 31 void 35 32 XMLTestCase::empty() { 36 //TODO 33 { 34 unlink("empty.xml"); 35 dba::XMLArchive ar; 36 ar.open("empty.xml"); 37 }; 38 CPPUNIT_ASSERT(dba::FileUtils::exists("empty.xml")); 37 39 }; 38 40 trunk/dba/test/xmltestcase.h
r127 r128 36 36 void empty(); 37 37 private: 38 dba::XMLArchive* mArchive;39 38 }; 40 39
