2
Copyright (c) 2009 Volker Krause <vkrause@kde.org>
3
Copyright (c) 2009 Igor Trindade Oliveira <igor_trindade@yahoo.com.br>
5
This library is free software; you can redistribute it and/or modify it
6
under the terms of the GNU Library General Public License as published by
7
the Free Software Foundation; either version 2 of the License, or (at your
8
option) any later version.
10
This library is distributed in the hope that it will be useful, but WITHOUT
11
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13
License for more details.
15
You should have received a copy of the GNU Library General Public License
16
along with this library; see the file COPYING.LIB. If not, write to the
17
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21
#include "xmlwriter.h"
24
#include <akonadi/attribute.h>
25
#include <akonadi/collection.h>
26
#include <akonadi/item.h>
28
#include <QStringList>
30
using namespace Akonadi;
32
QDomElement XmlWriter::attributeToElement(Attribute* attr, QDomDocument& document)
34
if ( document.isNull() )
37
QDomElement top = document.createElement( Format::Tag::attribute() );
38
top.setAttribute( Format::Attr::attributeType(), QString::fromUtf8( attr->type() ) );
39
QDomText attrText = document.createTextNode( QString::fromUtf8( attr->serialized() ) );
40
top.appendChild( attrText );
45
void XmlWriter::writeAttributes(const Entity& entity, QDomElement& parentElem)
47
if ( parentElem.isNull() )
50
QDomDocument doc = parentElem.ownerDocument();
51
foreach ( Attribute *attr, entity.attributes() )
52
parentElem.appendChild( attributeToElement( attr, doc ) );
55
QDomElement XmlWriter::collectionToElement(const Akonadi::Collection& collection, QDomDocument& document)
57
if ( document.isNull() )
60
QDomElement top = document.createElement( Format::Tag::collection() );
61
top.setAttribute( Format::Attr::remoteId(), collection.remoteId() );
62
top.setAttribute( Format::Attr::collectionName(), collection.name() );
63
top.setAttribute( Format::Attr::collectionContentTypes(), collection.contentMimeTypes().join( QLatin1String(",") ) );
64
writeAttributes( collection, top );
69
QDomElement XmlWriter::writeCollection(const Akonadi::Collection& collection, QDomElement& parentElem)
71
if ( parentElem.isNull() )
74
QDomDocument doc = parentElem.ownerDocument();
75
const QDomElement elem = collectionToElement( collection, doc );
76
parentElem.insertBefore( elem, QDomNode() ); // collection need to be before items to pass schema validation
80
QDomElement XmlWriter::itemToElement(const Akonadi::Item& item, QDomDocument& document)
82
if ( document.isNull() )
85
QDomElement top = document.createElement( Format::Tag::item() );
86
top.setAttribute( Format::Attr::remoteId(), item.remoteId() );
87
top.setAttribute( Format::Attr::itemMimeType(), item.mimeType() );
89
if ( item.hasPayload() ) {
90
QDomElement payloadElem = document.createElement( Format::Tag::payload() );
91
QDomText payloadText = document.createTextNode( QString::fromUtf8( item.payloadData() ) );
92
payloadElem.appendChild( payloadText );
93
top.appendChild( payloadElem );
96
writeAttributes( item, top );
98
foreach ( const Item::Flag &flag, item.flags() ) {
99
QDomElement flagElem = document.createElement( Format::Tag::flag() );
100
QDomText flagText = document.createTextNode( QString::fromUtf8( flag ) );
101
flagElem.appendChild( flagText );
102
top.appendChild( flagElem );
108
QDomElement XmlWriter::writeItem(const Item& item, QDomElement& parentElem)
110
if ( parentElem.isNull() )
111
return QDomElement();
113
QDomDocument doc = parentElem.ownerDocument();
114
const QDomElement elem = itemToElement( item, doc );
115
parentElem.appendChild( elem );