00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "entryhandler.h"
00024
00025 #include <kdebug.h>
00026
00027 using namespace KNS;
00028
00029 EntryHandler::EntryHandler(const Entry& entry)
00030 {
00031 init();
00032 mEntry = entry;
00033 mEntryXML = serializeElement(entry);
00034 }
00035
00036 EntryHandler::EntryHandler(const QDomElement& entryxml)
00037 {
00038 init();
00039 mEntryXML = entryxml;
00040 mEntry = deserializeElement(entryxml);
00041 }
00042
00043 void EntryHandler::init()
00044 {
00045 mValid = false;
00046 mCompat = false;
00047 }
00048
00049 void EntryHandler::setCompatibilityFormat()
00050 {
00051 mCompat = true;
00052 }
00053
00054 bool EntryHandler::isValid()
00055 {
00056 return mValid;
00057 }
00058
00059 QDomElement EntryHandler::entryXML()
00060 {
00061 return mEntryXML;
00062 }
00063
00064 Entry EntryHandler::entry()
00065 {
00066 return mEntry;
00067 }
00068
00069 Entry *EntryHandler::entryptr()
00070 {
00071 Entry *entry = new Entry();
00072 entry->setName(mEntry.name());
00073 entry->setAuthor(mEntry.author());
00074 entry->setCategory(mEntry.category());
00075 entry->setLicense(mEntry.license());
00076 entry->setSummary(mEntry.summary());
00077 entry->setVersion(mEntry.version());
00078 entry->setRelease(mEntry.release());
00079 entry->setReleaseDate(mEntry.releaseDate());
00080 entry->setPayload(mEntry.payload());
00081 entry->setPreview(mEntry.preview());
00082 entry->setRating(mEntry.rating());
00083 entry->setDownloads(mEntry.downloads());
00084 entry->setInstalledFiles(mEntry.installedFiles());
00085 entry->setIdNumber(mEntry.idNumber());
00086 return entry;
00087 }
00088
00089 QDomElement EntryHandler::serializeElement(const Entry& entry)
00090 {
00091 QDomDocument doc;
00092
00093 QDomElement el = doc.createElement("stuff");
00094 el.setAttribute("category", entry.category());
00095
00096 QDomElement author = addElement(doc, el, "author", entry.author().name());
00097 if (!entry.author().email().isEmpty())
00098 author.setAttribute("email", entry.author().email());
00099 if (!entry.author().homepage().isEmpty())
00100 author.setAttribute("homepage", entry.author().homepage());
00101 if (!entry.author().jabber().isEmpty())
00102 author.setAttribute("im", entry.author().jabber());
00103
00104
00105 (void)addElement(doc, el, "licence", entry.license());
00106 (void)addElement(doc, el, "version", entry.version());
00107 if (mCompat)
00108 (void)addElement(doc, el, "release", QString::number(entry.release()));
00109 if ((entry.rating() > 0) || (entry.downloads() > 0)) {
00110 (void)addElement(doc, el, "rating", QString::number(entry.rating()));
00111 (void)addElement(doc, el, "downloads", QString::number(entry.downloads()));
00112 }
00113 if (!entry.signature().isEmpty()) {
00114 (void)addElement(doc, el, "signature", entry.signature());
00115 }
00116 if (!entry.checksum().isEmpty()) {
00117 (void)addElement(doc, el, "checksum", entry.checksum());
00118 }
00119 foreach(const QString &file, entry.installedFiles()) {
00120 (void)addElement(doc, el, "installedfile", file);
00121 }
00122 if (entry.idNumber() > 0) {
00123 addElement(doc, el, "id", QString::number(entry.idNumber()));
00124 }
00125
00126 (void)addElement(doc, el, "releasedate",
00127 entry.releaseDate().toString(Qt::ISODate));
00128
00129 KTranslatable name = entry.name();
00130 KTranslatable summary = entry.summary();
00131 KTranslatable preview = entry.preview();
00132 KTranslatable payload = entry.payload();
00133
00134 QStringList::ConstIterator it;
00135 QDomElement e;
00136 QStringList langs;
00137
00138 langs = name.languages();
00139 for (it = langs.begin(); it != langs.end(); ++it) {
00140 e = addElement(doc, el, "name", name.translated(*it));
00141 e.setAttribute("lang", *it);
00142 }
00143
00144 langs = summary.languages();
00145 for (it = langs.begin(); it != langs.end(); ++it) {
00146 e = addElement(doc, el, "summary", summary.translated(*it));
00147 e.setAttribute("lang", *it);
00148 }
00149
00150 langs = preview.languages();
00151 for (it = langs.begin(); it != langs.end(); ++it) {
00152 e = addElement(doc, el, "preview", preview.translated(*it));
00153 e.setAttribute("lang", *it);
00154 }
00155
00156 langs = payload.languages();
00157 for (it = langs.begin(); it != langs.end(); ++it) {
00158 e = addElement(doc, el, "payload", payload.translated(*it));
00159 e.setAttribute("lang", *it);
00160 }
00161
00162 return el;
00163 }
00164
00165 Entry EntryHandler::deserializeElement(const QDomElement& entryxml)
00166 {
00167 Entry entry;
00168 KTranslatable name, summary, preview, payload;
00169 int idNumber;
00170 QStringList installedFiles;
00171
00172 if (entryxml.tagName() != "stuff") return entry;
00173
00174 if (!mCompat) {
00175 QString category = entryxml.attribute("category");
00176 entry.setCategory(category);
00177 }
00178
00179 QDomNode n;
00180 for (n = entryxml.firstChild(); !n.isNull(); n = n.nextSibling()) {
00181 QDomElement e = n.toElement();
00182 if (e.tagName() == "name") {
00183 QString lang = e.attribute("lang");
00184 name.addString(lang, e.text().trimmed());
00185 } else if (e.tagName() == "author") {
00186 Author author;
00187 QString email = e.attribute("email");
00188 QString jabber = e.attribute("im");
00189 QString homepage = e.attribute("homepage");
00190 author.setName(e.text().trimmed());
00191 author.setEmail(email);
00192 author.setJabber(jabber);
00193 author.setHomepage(homepage);
00194 entry.setAuthor(author);
00195 } else if (e.tagName() == "licence") {
00196 entry.setLicense(e.text().trimmed());
00197 } else if (e.tagName() == "summary") {
00198 QString lang = e.attribute("lang");
00199
00200 summary.addString(lang, e.text().trimmed());
00201 } else if (e.tagName() == "version") {
00202 entry.setVersion(e.text().trimmed());
00203 } else if (e.tagName() == "release") {
00204 if (mCompat) {
00205 entry.setRelease(e.text().toInt());
00206 }
00207 } else if (e.tagName() == "releasedate") {
00208 QDate date = QDate::fromString(e.text().trimmed(), Qt::ISODate);
00209 entry.setReleaseDate(date);
00210 } else if (e.tagName() == "preview") {
00211 QString lang = e.attribute("lang");
00212 preview.addString(lang, e.text().trimmed());
00213 } else if (e.tagName() == "payload") {
00214 QString lang = e.attribute("lang");
00215 payload.addString(lang, e.text().trimmed());
00216 } else if (e.tagName() == "rating") {
00217 entry.setRating(e.text().toInt());
00218 } else if (e.tagName() == "downloads") {
00219 entry.setDownloads(e.text().toInt());
00220 } else if (e.tagName() == "category") {
00221 if (mCompat) {
00222 entry.setCategory(e.text());
00223 }
00224 } else if (e.tagName() == "signature") {
00225 entry.setSignature(e.text());
00226 } else if (e.tagName() == "checksum") {
00227 entry.setChecksum(e.text());
00228 } else if (e.tagName() == "installedfile") {
00229 installedFiles << e.text();
00230 } else if (e.tagName() == "id") {
00231 idNumber = e.text().toInt();
00232
00233 }
00234 }
00235
00236 entry.setName(name);
00237 entry.setSummary(summary);
00238 entry.setPreview(preview);
00239 entry.setPayload(payload);
00240 entry.setInstalledFiles(installedFiles);
00241 entry.setIdNumber(idNumber);
00242
00243
00244
00245 if (entry.name().isEmpty()) {
00246 kWarning(550) << "EntryHandler: no name given";
00247 return entry;
00248 }
00249
00250 if (entry.payload().isEmpty()) {
00251 kWarning(550) << "EntryHandler: no payload URL given";
00252 return entry;
00253 }
00254
00255
00256
00257 mValid = true;
00258 return entry;
00259 }
00260
00261 QDomElement EntryHandler::addElement(QDomDocument& doc, QDomElement& parent,
00262 const QString& tag, const QString& value)
00263 {
00264 QDomElement n = doc.createElement(tag);
00265 n.appendChild(doc.createTextNode(value));
00266 parent.appendChild(n);
00267
00268 return n;
00269 }