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