• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • kdelibs
  • Sitemap
  • 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     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     // FIXME: 'jabber' or 'im'? consult with kopete guys...
00102 
00103     (void)addElement(doc, el, "licence", entry.license()); // krazy:exclude=spelling
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") { // krazy:exclude=spelling
00194             entry.setLicense(e.text().trimmed());
00195         } else if (e.tagName() == "summary") {
00196             QString lang = e.attribute("lang");
00197             //kDebug() << "adding " << e.tagName() << " to summary as language " << lang;
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             //kDebug() << "got id number: " << idNumber;
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     // Validation
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     // Entry is valid
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 }

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
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • Kross
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.5.7
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