1 #include "../../include/freenet/messagelistxml.h"
\r
7 MessageListXML::MessageListXML()
\r
12 void MessageListXML::AddMessage(const std::string &date, const long index, const std::vector<std::string> &boards)
\r
14 m_messages.push_back(message(date,index,boards));
\r
17 void MessageListXML::AddExternalMessage(const std::string &identity, const std::string &date, const long index, const std::vector<std::string> &boards)
\r
19 m_externalmessages.push_back(externalmessage("Keyed",identity,date,index,boards));
\r
22 void MessageListXML::AddExternalMessage(const std::string &messagekey, const std::string &date, const std::vector<std::string> &boards)
\r
24 m_externalmessages.push_back(externalmessage("Anonymous",messagekey,date,boards));
\r
27 std::vector<std::string> MessageListXML::GetBoards(const long index)
\r
29 if(index>=0 && index<m_messages.size())
\r
31 return m_messages[index].m_boards;
\r
35 return std::vector<std::string>();
\r
39 std::string MessageListXML::GetDate(const long index)
\r
41 if(index>=0 && index<m_messages.size())
\r
43 return m_messages[index].m_date;
\r
51 std::vector<std::string> MessageListXML::GetExternalBoards(const long index)
\r
53 if(index>=0 && index<m_externalmessages.size())
\r
55 return m_externalmessages[index].m_boards;
\r
59 return std::vector<std::string>();
\r
63 std::string MessageListXML::GetExternalDate(const long index)
\r
65 if(index>=0 && index<m_externalmessages.size())
\r
67 return m_externalmessages[index].m_date;
\r
75 std::string MessageListXML::GetExternalIdentity(const long index)
\r
77 if(index>=0 && index<m_externalmessages.size())
\r
79 return m_externalmessages[index].m_identity;
\r
87 const long MessageListXML::GetExternalIndex(const long index)
\r
89 if(index>=0 && index<m_externalmessages.size())
\r
91 return m_externalmessages[index].m_index;
\r
99 std::string MessageListXML::GetExternalMessageKey(const long index)
\r
101 if(index>=0 && index<m_externalmessages.size())
\r
103 return m_externalmessages[index].m_messagekey;
\r
111 std::string MessageListXML::GetExternalType(const long index)
\r
113 if(index>=0 && index<m_externalmessages.size())
\r
115 return m_externalmessages[index].m_type;
\r
123 const long MessageListXML::GetIndex(const long index)
\r
125 if(index>=0 && index<m_messages.size())
\r
127 return m_messages[index].m_index;
\r
135 std::string MessageListXML::GetXML()
\r
137 Poco::AutoPtr<Poco::XML::Document> doc=new Poco::XML::Document;
\r
138 Poco::AutoPtr<Poco::XML::Element> root=doc->createElement("MessageList");
\r
140 doc->appendChild(root);
\r
142 for(std::vector<message>::iterator i=m_messages.begin(); i!=m_messages.end(); i++)
\r
144 Poco::AutoPtr<Poco::XML::Element> tr=doc->createElement("Message");
\r
145 root->appendChild(tr);
\r
146 tr->appendChild(XMLCreateTextElement(doc,"Date",(*i).m_date));
\r
147 tr->appendChild(XMLCreateTextElement(doc,"Index",(*i).m_index));
\r
149 Poco::AutoPtr<Poco::XML::Element> boards=doc->createElement("Boards");
\r
150 tr->appendChild(boards);
\r
151 for(std::vector<std::string>::iterator j=(*i).m_boards.begin(); j!=(*i).m_boards.end(); j++)
\r
153 boards->appendChild(XMLCreateCDATAElement(doc,"Board",(*j)));
\r
157 for(std::vector<externalmessage>::iterator i=m_externalmessages.begin(); i!=m_externalmessages.end(); i++)
\r
159 Poco::AutoPtr<Poco::XML::Element> tr=doc->createElement("ExternalMessage");
\r
160 root->appendChild(tr);
\r
161 tr->appendChild(XMLCreateTextElement(doc,"Type",(*i).m_type));
\r
162 if((*i).m_type=="Keyed")
\r
164 tr->appendChild(XMLCreateCDATAElement(doc,"Identity",(*i).m_identity));
\r
165 tr->appendChild(XMLCreateTextElement(doc,"Index",(*i).m_index));
\r
169 tr->appendChild(XMLCreateCDATAElement(doc,"MessageKey",(*i).m_messagekey));
\r
171 tr->appendChild(XMLCreateTextElement(doc,"Date",(*i).m_date));
\r
173 Poco::AutoPtr<Poco::XML::Element> boards=doc->createElement("Boards");
\r
174 tr->appendChild(boards);
\r
175 for(std::vector<std::string>::iterator j=(*i).m_boards.begin(); j!=(*i).m_boards.end(); j++)
\r
177 boards->appendChild(XMLCreateCDATAElement(doc,"Board",(*j)));
\r
181 return GenerateXML(doc);
\r
184 void MessageListXML::Initialize()
\r
186 m_messages.clear();
\r
187 m_externalmessages.clear();
\r
190 const bool MessageListXML::ParseXML(const std::string &xml)
\r
194 Poco::XML::DOMParser dp;
\r
200 Poco::AutoPtr<Poco::XML::Document> doc=dp.parseString(FixCDATA(xml));
\r
201 Poco::XML::Element *root=XMLGetFirstChild(doc,"MessageList");
\r
203 Poco::XML::Element *node=XMLGetFirstChild(root,"Message");
\r
206 std::string date="";
\r
208 std::vector<std::string> boards;
\r
210 Poco::XML::Element *node2=XMLGetFirstChild(node,"Date");
\r
211 if(node2 && node2->firstChild())
\r
213 date=SanitizeSingleString(node2->firstChild()->getNodeValue());
\r
215 node2=XMLGetFirstChild(node,"Index");
\r
216 if(node2 && node2->firstChild())
\r
218 std::string indexstr=SanitizeSingleString(node2->firstChild()->getNodeValue());
\r
219 StringFunctions::Convert(indexstr,index);
\r
221 node2=XMLGetFirstChild(node,"Boards");
\r
224 Poco::XML::Element *node3=XMLGetFirstChild(node2,"Board");
\r
227 if(node3 && node3->firstChild())
\r
229 std::string boardname=SanitizeSingleString(node3->firstChild()->getNodeValue());
\r
230 StringFunctions::LowerCase(boardname,boardname);
\r
231 if(boardname.size()>40)
\r
233 boardname.erase(40);
\r
235 boards.push_back(boardname);
\r
237 node3=XMLGetNextSibling(node3,"Board");
\r
241 m_messages.push_back(message(date,index,boards));
\r
243 node=XMLGetNextSibling(node,"Message");
\r
246 node=XMLGetFirstChild(root,"ExternalMessage");
\r
249 std::string type="";
\r
250 std::string identity="";
\r
251 std::string date="";
\r
253 std::vector<std::string> boards;
\r
255 Poco::XML::Element *node2=XMLGetFirstChild(node,"Type");
\r
256 if(node2 && node2->firstChild())
\r
258 type=SanitizeSingleString(node2->firstChild()->getNodeValue());
\r
263 node2=XMLGetFirstChild(node,"Identity");
\r
264 if(node2 && node2->firstChild())
\r
266 identity=SanitizeSingleString(node2->firstChild()->getNodeValue());
\r
268 node2=XMLGetFirstChild(node,"Date");
\r
269 if(node2 && node2->firstChild())
\r
271 date=SanitizeSingleString(node2->firstChild()->getNodeValue());
\r
273 node2=XMLGetFirstChild(node,"Index");
\r
274 if(node2 && node2->firstChild())
\r
276 std::string indexstr=SanitizeSingleString(node2->firstChild()->getNodeValue());
\r
277 StringFunctions::Convert(indexstr,index);
\r
279 node2=XMLGetFirstChild(node,"Boards");
\r
282 Poco::XML::Element *node3=XMLGetFirstChild(node2,"Board");
\r
285 if(node3 && node3->firstChild())
\r
287 std::string boardname=SanitizeSingleString(node3->firstChild()->getNodeValue());
\r
288 StringFunctions::LowerCase(boardname,boardname);
\r
289 if(boardname.size()>40)
\r
291 boardname.erase(40);
\r
293 boards.push_back(boardname);
\r
295 node3=XMLGetNextSibling(node3,"Board");
\r
298 m_externalmessages.push_back(externalmessage("Keyed",identity,date,index,boards));
\r
301 node=XMLGetNextSibling(node,"ExternalMessage");
\r