Changeset 153

Show
Ignore:
Timestamp:
07/01/08 16:34:50 (6 months ago)
Author:
zork
Message:

allow to map object to root xml node

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/dba/dba/xmlarchive.cpp

    r152 r153  
    5151    if (root->name == NULL) 
    5252      throw DataException("Root node has no name"); 
    53     if (xmlStrcmp(mRootNodeName,root->name)) 
    54       throw DataException("Wrong root node name, forgot to call setRootNodeName?"); 
     53    if ((mRootNodeName != NULL) && (xmlStrcmp(mRootNodeName,root->name))) 
     54      throw DataException("Wrong root node name"); 
    5555  } else { 
    5656    mDocument = xmlNewDoc((const xmlChar*)"1.0"); 
    57     xmlNodePtr node = xmlNewDocNode(mDocument,NULL,mRootNodeName,NULL); 
    58     xmlDocSetRootElement(mDocument,node); 
     57    if (mRootNodeName != NULL) { 
     58      xmlNodePtr node = xmlNewDocNode(mDocument,NULL,mRootNodeName,NULL); 
     59      xmlDocSetRootElement(mDocument,node); 
     60    }; 
    5961  }; 
    6062  updateEncoding(); 
    61   mRootNode = mDocument->children; 
     63  if (mRootNodeName != NULL) { 
     64    mRootNode = mDocument->children; 
     65  } else { 
     66    mRootNode = xmlDocGetRootElement(mDocument); 
     67  }; 
    6268}; 
    6369 
     
    7379IStream*  
    7480XMLArchive::getInputStream() { 
    75   return new XMLIStream(mRootNode,mConvSpecs); 
     81  xmlNodePtr root = xmlDocGetRootElement(mDocument); 
     82  if (mRootNodeName != NULL) 
     83    root = root->children; 
     84  return new XMLIStream(root,mConvSpecs); 
    7685}; 
    7786 
    7887OStream*  
    7988XMLArchive::getOutputStream() { 
    80   return new XMLOStream(mRootNode,mConvSpecs); 
     89  return new XMLOStream(mDocument,mRootNode,mConvSpecs); 
    8190}; 
    8291 
    8392XMLIStream  
    8493XMLArchive::getIStream() { 
    85   XMLIStream ret(mRootNode,mConvSpecs); 
    86   return ret; 
     94  xmlNodePtr root = xmlDocGetRootElement(mDocument); 
     95  if (mRootNodeName != NULL) 
     96    root = root->children; 
     97  return XMLIStream(root,mConvSpecs); 
    8798}; 
    8899 
    89100XMLOStream  
    90101XMLArchive::getOStream() { 
    91   XMLOStream ret(mRootNode,mConvSpecs); 
     102  XMLOStream ret(mDocument,mRootNode,mConvSpecs); 
    92103  return ret; 
    93104}; 
  • trunk/dba/dba/xmlistream.cpp

    r150 r153  
    2121    mParentNode(pNode) 
    2222{ 
    23   mCurrentNode = findNonTextNode(mParentNode->children); 
     23  mCurrentNode = findNonTextNode(mParentNode); 
    2424} 
    2525 
  • trunk/dba/dba/xmlostream.cpp

    r149 r153  
    1616namespace dba { 
    1717 
    18 XMLOStream::XMLOStream(xmlNodePtr pNode, const ConvSpec& pSpecs) 
     18XMLOStream::XMLOStream(xmlDocPtr pDocument, xmlNodePtr pNode, const ConvSpec& pSpecs) 
    1919  : OStream(), 
    2020    ConvSpecContainer(pSpecs), 
     21    mDocument(pDocument), 
    2122    mParentNode(pNode) 
    2223{ 
    23   mCurrentNode = mParentNode->children; 
    2424} 
    2525 
     
    9999      break; 
    100100  }; 
    101   xmlAddChild(mParentNode, node); 
     101  if (mParentNode != NULL) 
     102    xmlAddChild(mParentNode, node); 
     103  else 
     104    xmlDocSetRootElement(mDocument,node); 
    102105  return true; 
    103106}; 
  • trunk/dba/dba/xmlostream.h

    r138 r153  
    2424class XMLOStream  : public OStream, public XMLErrorHandler, public ConvSpecContainer { 
    2525  public: 
    26     XMLOStream(xmlNodePtr pNode, const ConvSpec& pSpecs); 
     26    XMLOStream(xmlDocPtr pDocument, xmlNodePtr pNode, const ConvSpec& pSpecs); 
    2727    virtual void close(); 
    2828    virtual void destroy(); 
     
    4343    virtual void endMemberChildrenStore(const Storeable& pObject, const ColMemberEntry& pMember); 
    4444  private: 
     45    xmlDocPtr mDocument; 
    4546    xmlNodePtr mParentNode; 
    46     xmlNodePtr mCurrentNode; 
    4747     
    4848    void updateNodeFromVars(xmlNodePtr pNode, mt_class* pTable); 
  • trunk/dba/test/main.cpp

    r151 r153  
    144144  CppUnit::BriefTestProgressListener listener; 
    145145  runner.eventManager().addListener(&listener); 
    146   runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() ); 
     146  //runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() ); 
    147147  //runner.addTest(new CppUnit::TestCaller<SQLite3SQLArchiveTestCase>("debug_test",&SQLite3SQLArchiveTestCase::sqlError)); 
    148148  //runner.addTest(new CppUnit::TestCaller<PostgresSQLArchiveTestCase>("debug_test",&PostgresSQLArchiveTestCase::sqlError)); 
     
    150150  //runner.addTest(new CppUnit::TestCaller<dba_tests::CSVTestCase>("debug_test",&dba_tests::CSVTestCase::manual)); 
    151151  //runner.addTest(new CppUnit::TestCaller<SQLite3SQLArchiveTestCase>("debug_test",&SQLite3SQLArchiveTestCase::transactions_rollback)); 
    152   //runner.addTest(dba_tests::XMLTestCase::suite()); 
    153   //runner.addTest(new CppUnit::TestCaller<dba_tests::XMLTestCase>("debug_test",&dba_tests::XMLTestCase::sublist_tree_load)); 
     152  runner.addTest(dba_tests::XMLTestCase::suite()); 
     153  //runner.addTest(new CppUnit::TestCaller<dba_tests::XMLTestCase>("debug_test",&dba_tests::XMLTestCase::simpleOneLoad)); 
    154154  //runner.addTest(new CppUnit::TestCaller<OdbcPluginTestCase>("debug_test",&OdbcPluginTestCase::dbConnection)); 
    155155  //runner.addTest(new CppUnit::TestCaller<PostgresSQLArchiveTestCase>("debug_test",&PostgresSQLArchiveTestCase::sqlError)); 
  • trunk/dba/test/xmltestcase.cpp

    r145 r153  
    100100 
    101101void 
     102XMLTestCase::simpleOneStore() { 
     103  const char* result =  
     104"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" 
     105"<test_objects i_value=\"1\" f_value=\"1.1\" s_value=\"test\" d_value=\"2008-01-01Z00:00:00\"/>\n" 
     106; 
     107  { 
     108    dba::XMLArchive ar; 
     109    ar.setRootNodeName(NULL); 
     110    unlink("simpleonestore.xml"); 
     111    ar.open("simpleonestore.xml"); 
     112    TestObject obj1(1,1.1,"test",Utils::getDate(2008,1,1,0,0,0)); 
     113    dba::XMLOStream stream(ar.getOStream()); 
     114    stream.open(); 
     115    stream.put(&obj1); 
     116  } 
     117  CPPUNIT_ASSERT(compareXML("simpleonestore.xml",result)); 
     118}; 
     119 
     120void 
    102121XMLTestCase::storeVar() { 
    103122  const char* result =  
     
    155174  }; 
    156175}; 
     176 
     177void 
     178XMLTestCase::simpleOneLoad() { 
     179  const char* data =  
     180"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" 
     181"<test_objects i_value=\"1\" f_value=\"1.1\" s_value=\"test\" d_value=\"2008-01-01Z00:00:00\"/>\n" 
     182; 
     183  {  
     184    std::ofstream file("simpleoneload.xml"); 
     185    file << data; 
     186  }; 
     187  { 
     188    dba::XMLArchive ar; 
     189    ar.setRootNodeName(NULL); 
     190    ar.open("simpleoneload.xml"); 
     191    TestObject obj1; 
     192    dba::XMLIStream stream(ar.getIStream()); 
     193 
     194    stream.open(obj1); 
     195    CPPUNIT_ASSERT(stream.getNext(&obj1)); 
     196 
     197    TestObject expected(1,1.1,"test",Utils::getDate(2008,1,1,0,0,0)); 
     198    CPPUNIT_ASSERT(obj1 == expected); 
     199  }; 
     200}; 
     201 
    157202 
    158203void 
  • trunk/dba/test/xmltestcase.h

    r145 r153  
    2929      CPPUNIT_TEST(encodingChange); 
    3030      CPPUNIT_TEST(simpleStore); 
     31      CPPUNIT_TEST(simpleOneStore); 
    3132      CPPUNIT_TEST(storeVar); 
    3233      CPPUNIT_TEST(emptyLoad); 
    3334      CPPUNIT_TEST(simpleLoad); 
     35      CPPUNIT_TEST(simpleOneLoad); 
    3436      CPPUNIT_TEST(varLoad); 
    3537      CPPUNIT_TEST(sublist_one_store); 
     
    5355    void encodingChange(); 
    5456    void simpleStore(); 
     57    void simpleOneStore(); 
    5558    void storeVar(); 
    5659    void emptyLoad(); 
    5760    void simpleLoad(); 
     61    void simpleOneLoad(); 
    5862    void varLoad(); 
    5963    void sublist_one_store(); 
  • trunk/wxdba/wxdba/xmlarchive.cpp

    r150 r153  
    1212XMLArchive::SetRootNodeName(const wxString& pName) { 
    1313  try { 
    14     mHandle.setRootNodeName(Tools::ConvertToDbStr(pName,GetConversionSpecs().mDbCharset).c_str()); 
     14    if (pName.empty()) 
     15      mHandle.setRootNodeName(NULL); 
     16    else 
     17      mHandle.setRootNodeName(Tools::ConvertToDbStr(pName,GetConversionSpecs().mDbCharset).c_str()); 
    1518  } catch (const dba::Exception& pEx) { 
    1619    Exception::Rethrow(pEx);