• Skip to content
  • Skip to link menu
KDE 4.6 API Reference
  • KDE API Reference
  • kdelibs
  • KDE Home
  • Contact Us
 

KNewStuff

entryhandler.cpp

Go to the documentation of this file.
00001 /*
00002     This file is part of KNewStuff2.
00003     Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
00004     Copyright (c) 2003 - 2007 Josef Spillner <spillner@kde.org>
00005     Copyright (c) 2007 Dirk Mueller <mueller@kde.org>
00006 
00007     This library is free software; you can redistribute it and/or
00008     modify it under the terms of the GNU Lesser General Public
00009     License as published by the Free Software Foundation; either
00010     version 2.1 of the License, or (at your option) any later version.
00011 
00012     This library is distributed in the hope that it will be useful,
00013     but WITHOUT ANY WARRANTY; without even the implied warranty of
00014     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015     Lesser General Public License for more details.
00016 
00017     You should have received a copy of the GNU Lesser General Public
00018     License along with this library.  If not, see <http://www.gnu.org/licenses/>.
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     KTranslatable name = entry.name();
00095 
00096     QStringList::ConstIterator it;
00097     QDomElement e;
00098     QStringList langs;
00099 
00100     langs = name.languages();
00101     for (it = langs.constBegin(); it != langs.constEnd(); ++it) {
00102         e = addElement(doc, el, "name", name.translated(*it));
00103         e.setAttribute("lang", *it);
00104     }
00105 
00106     QDomElement author = addElement(doc, el, "author", entry.author().name());
00107     if (!entry.author().email().isEmpty())
00108         author.setAttribute("email", entry.author().email());
00109     if (!entry.author().homepage().isEmpty())
00110         author.setAttribute("homepage", entry.author().homepage());
00111     if (!entry.author().jabber().isEmpty())
00112         author.setAttribute("im", entry.author().jabber());
00113     // FIXME: 'jabber' or 'im'? consult with kopete guys...
00114 
00115     (void)addElement(doc, el, "licence", entry.license()); // krazy:exclude=spelling
00116     (void)addElement(doc, el, "version", entry.version());
00117     if (mCompat)
00118         (void)addElement(doc, el, "release", QString::number(entry.release()));
00119     if ((entry.rating() > 0) || (entry.downloads() > 0)) {
00120         (void)addElement(doc, el, "rating", QString::number(entry.rating()));
00121         (void)addElement(doc, el, "downloads", QString::number(entry.downloads()));
00122     }
00123     if (!entry.signature().isEmpty()) {
00124         (void)addElement(doc, el, "signature", entry.signature());
00125     }
00126     if (!entry.checksum().isEmpty()) {
00127         (void)addElement(doc, el, "checksum", entry.checksum());
00128     }
00129     foreach(const QString &file, entry.installedFiles()) {
00130         (void)addElement(doc, el, "installedfile", file);
00131     }
00132     if (entry.idNumber() > 0) {
00133         addElement(doc, el, "id", QString::number(entry.idNumber()));
00134     }
00135 
00136     (void)addElement(doc, el, "releasedate",
00137                      entry.releaseDate().toString(Qt::ISODate));
00138 
00139     KTranslatable summary = entry.summary();
00140     KTranslatable preview = entry.preview();
00141     KTranslatable payload = entry.payload();
00142 
00143     langs = summary.languages();
00144     for (it = langs.constBegin(); it != langs.constEnd(); ++it) {
00145         e = addElement(doc, el, "summary", summary.translated(*it));
00146         e.setAttribute("lang", *it);
00147     }
00148 
00149     langs = preview.languages();
00150     for (it = langs.constBegin(); it != langs.constEnd(); ++it) {
00151         e = addElement(doc, el, "preview", KUrl(preview.translated(*it)).fileName());
00152         e.setAttribute("lang", *it);
00153     }
00154 
00155     langs = payload.languages();
00156     for (it = langs.constBegin(); it != langs.constEnd(); ++it) {
00157         e = addElement(doc, el, "payload", KUrl(payload.translated(*it)).fileName());
00158         e.setAttribute("lang", *it);
00159     }
00160 
00161     return el;
00162 }
00163 
00164 Entry EntryHandler::deserializeElement(const QDomElement& entryxml)
00165 {
00166     Entry entry;
00167     KTranslatable name, summary, preview, payload;
00168     int idNumber = 0;
00169     QStringList installedFiles;
00170 
00171     if (entryxml.tagName() != "stuff") return entry;
00172 
00173     if (!mCompat) {
00174         QString category = entryxml.attribute("category");
00175         entry.setCategory(category);
00176     }
00177 
00178     QDomNode n;
00179     for (n = entryxml.firstChild(); !n.isNull(); n = n.nextSibling()) {
00180         QDomElement e = n.toElement();
00181         if (e.tagName() == "name") {
00182             QString lang = e.attribute("lang");
00183             name.addString(lang, e.text().trimmed());
00184         } else if (e.tagName() == "author") {
00185             Author author;
00186             QString email = e.attribute("email");
00187             QString jabber = e.attribute("im");
00188             QString homepage = e.attribute("homepage");
00189             author.setName(e.text().trimmed());
00190             author.setEmail(email);
00191             author.setJabber(jabber);
00192             author.setHomepage(homepage);
00193             entry.setAuthor(author);
00194         } else if (e.tagName() == "licence") { // krazy:exclude=spelling
00195             entry.setLicense(e.text().trimmed());
00196         } else if (e.tagName() == "summary") {
00197             QString lang = e.attribute("lang");
00198             //kDebug() << "adding " << e.tagName() << " to summary as language " << lang;
00199             summary.addString(lang, e.text().trimmed());
00200         } else if (e.tagName() == "version") {
00201             entry.setVersion(e.text().trimmed());
00202         } else if (e.tagName() == "release") {
00203             if (mCompat) {
00204                 entry.setRelease(e.text().toInt());
00205             }
00206         } else if (e.tagName() == "releasedate") {
00207             QDate date = QDate::fromString(e.text().trimmed(), Qt::ISODate);
00208             entry.setReleaseDate(date);
00209         } else if (e.tagName() == "preview") {
00210             QString lang = e.attribute("lang");
00211             preview.addString(lang, e.text().trimmed());
00212         } else if (e.tagName() == "payload") {
00213             QString lang = e.attribute("lang");
00214             payload.addString(lang, e.text().trimmed());
00215         } else if (e.tagName() == "rating") {
00216             entry.setRating(e.text().toInt());
00217         } else if (e.tagName() == "downloads") {
00218             entry.setDownloads(e.text().toInt());
00219         } else if (e.tagName() == "category") {
00220             if (mCompat) {
00221                 entry.setCategory(e.text());
00222             }
00223         } else if (e.tagName() == "signature") {
00224             entry.setSignature(e.text());
00225         } else if (e.tagName() == "checksum") {
00226             entry.setChecksum(e.text());
00227         } else if (e.tagName() == "installedfile") {
00228             installedFiles << e.text();
00229         } else if (e.tagName() == "id") {
00230             idNumber = e.text().toInt();
00231             //kDebug() << "got id number: " << idNumber;
00232         }
00233     }
00234 
00235     entry.setName(name);
00236     entry.setSummary(summary);
00237     entry.setPreview(preview);
00238     entry.setPayload(payload);
00239     entry.setInstalledFiles(installedFiles);
00240     entry.setIdNumber(idNumber);
00241 
00242     // Validation
00243 
00244     if (entry.name().isEmpty()) {
00245         kWarning(550) << "EntryHandler: no name given";
00246         return entry;
00247     }
00248 
00249     if (entry.payload().isEmpty()) {
00250         kWarning(550) << "EntryHandler: no payload URL given";
00251         return entry;
00252     }
00253 
00254     // Entry is valid
00255 
00256     mValid = true;
00257     return entry;
00258 }
00259 
00260 QDomElement EntryHandler::addElement(QDomDocument& doc, QDomElement& parent,
00261                                      const QString& tag, const QString& value)
00262 {
00263     QDomElement n = doc.createElement(tag);
00264     n.appendChild(doc.createTextNode(value));
00265     parent.appendChild(n);
00266 
00267     return n;
00268 }

KNewStuff

Skip menu "KNewStuff"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kdelibs

Skip menu "kdelibs"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • Kate
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.7.3
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal