• Skip to content
  • Skip to link menu
KDE 4.1 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               (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 Library General Public
00009     License as published by the Free Software Foundation; either
00010     version 2 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     Library General Public License for more details.
00016 
00017     You should have received a copy of the GNU Library General Public License
00018     along with this library; see the file COPYING.LIB.  If not, write to
00019     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00020     Boston, MA 02110-1301, USA.
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     // FIXME: 'jabber' or 'im'? consult with kopete guys...
00104 
00105     (void)addElement(doc, el, "licence", entry.license()); // krazy:exclude=spelling
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") { // krazy:exclude=spelling
00196             entry.setLicense(e.text().trimmed());
00197         } else if (e.tagName() == "summary") {
00198             QString lang = e.attribute("lang");
00199             //kDebug() << "adding " << e.tagName() << " to summary as language " << lang;
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             //kDebug() << "got id number: " << idNumber;
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     // Validation
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     // Entry is valid
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 }

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
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.5.4
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