version 0.3.2
[fms.git] / src / freenet / boardlistxml.cpp
1 #include "../../include/freenet/boardlistxml.h"\r
2 \r
3 #ifdef XMEM\r
4         #include <xmem.h>\r
5 #endif\r
6 \r
7 BoardListXML::BoardListXML()\r
8 {\r
9         Initialize();\r
10 }\r
11 \r
12 void BoardListXML::AddBoard(const std::string &name, const std::string &description)\r
13 {\r
14         if(name!="" && description!="")\r
15         {\r
16                 std::string lowername=name;\r
17                 StringFunctions::LowerCase(lowername,lowername);\r
18                 if(lowername.size()>40)\r
19                 {\r
20                         lowername.erase(40);\r
21                 }\r
22                 m_boards.push_back(board(lowername,description));\r
23         }\r
24 }\r
25 \r
26 const std::string BoardListXML::GetDescription(const long index)\r
27 {\r
28         if(index>=0 && index<GetCount())\r
29         {\r
30                 return m_boards[index].m_description;\r
31         }\r
32         else\r
33         {\r
34                 return "";\r
35         }\r
36 }\r
37 \r
38 const std::string BoardListXML::GetName(const long index)\r
39 {\r
40         if(index>=0 && index<GetCount())\r
41         {\r
42                 return m_boards[index].m_name;\r
43         }\r
44         else\r
45         {\r
46                 return "";\r
47         }\r
48 }\r
49 \r
50 std::string BoardListXML::GetXML()\r
51 {\r
52         Poco::AutoPtr<Poco::XML::Document> doc=new Poco::XML::Document;\r
53         Poco::AutoPtr<Poco::XML::Element> root=doc->createElement("BoardList");\r
54 \r
55         doc->appendChild(root);\r
56 \r
57         for(std::vector<board>::iterator i=m_boards.begin(); i!=m_boards.end(); i++)\r
58         {\r
59                 std::string boardname=(*i).m_name;\r
60                 StringFunctions::LowerCase(boardname,boardname);\r
61                 Poco::AutoPtr<Poco::XML::Element> tr=doc->createElement("Board");\r
62                 root->appendChild(tr);\r
63                 tr->appendChild(XMLCreateCDATAElement(doc,"Name",boardname));\r
64                 tr->appendChild(XMLCreateCDATAElement(doc,"Description",(*i).m_description));\r
65         }\r
66 \r
67         return GenerateXML(doc);\r
68 }\r
69 \r
70 void BoardListXML::Initialize()\r
71 {\r
72         m_boards.clear();\r
73 }\r
74 \r
75 const bool BoardListXML::ParseXML(const std::string &xml)\r
76 {\r
77         bool parsed=false;\r
78         Poco::XML::DOMParser dp;\r
79 \r
80         Initialize();\r
81 \r
82         try\r
83         {\r
84                 Poco::AutoPtr<Poco::XML::Document> doc=dp.parseString(FixCDATA(xml));\r
85                 Poco::XML::Element *root=XMLGetFirstChild(doc,"BoardList");\r
86                 Poco::XML::Element *boardel=NULL;\r
87 \r
88                 boardel=XMLGetFirstChild(root,"Board");\r
89                 while(boardel)\r
90                 {\r
91                         std::string name="";\r
92                         std::string description="";\r
93 \r
94                         Poco::XML::Element *txt=XMLGetFirstChild(boardel,"Name");\r
95                         if(txt && txt->firstChild())\r
96                         {\r
97                                 name=SanitizeSingleString(txt->firstChild()->getNodeValue());\r
98                                 StringFunctions::LowerCase(name,name);\r
99                                 if(name.size()>40)\r
100                                 {\r
101                                         name.erase(40);\r
102                                 }\r
103                         }\r
104                         txt=XMLGetFirstChild(boardel,"Description");\r
105                         if(txt && txt->firstChild())\r
106                         {\r
107                                 description=SanitizeSingleString(txt->firstChild()->getNodeValue());\r
108                         }\r
109 \r
110                         if(name!="" && description!="")\r
111                         {\r
112                                 m_boards.push_back(board(name,description));\r
113                         }\r
114 \r
115                         boardel=XMLGetNextSibling(boardel,"Board");\r
116                 }\r
117 \r
118                 parsed=true;\r
119 \r
120         }\r
121         catch(...)\r
122         {\r
123         }\r
124 \r
125         return parsed;\r
126 }\r