22 #include "contactgrouptool.h"
23 #include "contactgroup.h"
25 #include <QtCore/QIODevice>
26 #include <QtCore/QString>
27 #include <QtCore/QDebug>
29 #include <QtCore/QXmlStreamReader>
30 #include <QtCore/QXmlStreamWriter>
34 class XmlContactGroupWriter :
public QXmlStreamWriter
37 XmlContactGroupWriter();
39 void write(
const ContactGroup &group, QIODevice *device );
40 void write(
const QList<ContactGroup> &groupLis, QIODevice *device );
49 XmlContactGroupWriter::XmlContactGroupWriter()
51 setAutoFormatting(
true );
54 void XmlContactGroupWriter::write(
const ContactGroup &group, QIODevice *device )
65 void XmlContactGroupWriter::write(
const QList<ContactGroup> &groupList, QIODevice *device )
71 writeStartElement( QLatin1String(
"contactGroupList" ) );
82 void XmlContactGroupWriter::writeGroup(
const ContactGroup &group )
84 writeStartElement( QLatin1String(
"contactGroup" ) );
85 writeAttribute( QLatin1String(
"uid" ), group.
id() );
86 writeAttribute( QLatin1String(
"name" ), group.
name() );
96 for ( uint i = 0; i < group.
dataCount(); ++i ) {
97 writeData( group.
data( i ) );
105 writeStartElement( QLatin1String(
"contactReference" ) );
106 writeAttribute( QLatin1String(
"uid" ), reference.
uid() );
108 writeAttribute( QLatin1String(
"preferredEmail" ), reference.
preferredEmail() );
116 void XmlContactGroupWriter::writeContactGroupReference(
119 writeStartElement( QLatin1String(
"contactGroupReference" ) );
120 writeAttribute( QLatin1String(
"uid" ), reference.
uid() );
129 writeStartElement( QLatin1String(
"contactData" ) );
130 writeAttribute( QLatin1String(
"name" ), data.
name() );
131 writeAttribute( QLatin1String(
"email" ), data.
email() );
138 class XmlContactGroupReader :
public QXmlStreamReader
141 XmlContactGroupReader();
144 bool read( QIODevice *device, QList<ContactGroup> &groupList );
153 XmlContactGroupReader::XmlContactGroupReader()
157 bool XmlContactGroupReader::read( QIODevice *device,
ContactGroup &group )
163 if ( isStartElement() ) {
164 if ( name() == QLatin1String(
"contactGroup" ) ) {
165 return readGroup( group );
167 raiseError( QLatin1String(
"The document does not describe a ContactGroup" ) );
172 return error() == NoError;
175 bool XmlContactGroupReader::read( QIODevice *device, QList<ContactGroup> &groupList )
183 if ( isStartElement() ) {
186 if ( name() == QLatin1String(
"contactGroupList" ) ) {
189 raiseError( QLatin1String(
"The document does not describe a list of ContactGroup" ) );
191 }
else if ( depth == 2 ) {
192 if ( name() == QLatin1String(
"contactGroup" ) ) {
194 if ( !readGroup( group ) ) {
198 groupList.append( group );
200 raiseError( QLatin1String(
"The document does not describe a list of ContactGroup" ) );
205 if ( isEndElement() ) {
210 return error() == NoError;
213 bool XmlContactGroupReader::readGroup(
ContactGroup &group )
215 const QXmlStreamAttributes elementAttributes = attributes();
216 const QStringRef uid = elementAttributes.value( QLatin1String(
"uid" ) );
217 if ( uid.isEmpty() ) {
218 raiseError( QLatin1String(
"ContactGroup is missing a uid" ) );
222 const QStringRef groupName = elementAttributes.value( QLatin1String(
"name" ) );
223 if ( groupName.isEmpty() ) {
224 raiseError( QLatin1String(
"ContactGroup is missing a name" ) );
228 group.
setId( uid.toString() );
229 group.
setName( groupName.toString() );
233 if ( isStartElement() ) {
234 if ( name() == QLatin1String(
"contactData" ) ) {
236 if ( !readData( data ) ) {
240 }
else if ( name() == QLatin1String(
"contactReference" ) ) {
242 if ( !readContactReference( reference ) ) {
245 group.
append( reference );
246 }
else if ( name() == QLatin1String(
"contactGroupReference" ) ) {
248 if ( !readContactGroupReference( reference ) ) {
251 group.
append( reference );
253 raiseError( QLatin1String(
"The document does not describe a ContactGroup" ) );
257 if ( isEndElement() ) {
258 if ( name() == QLatin1String(
"contactGroup" ) ) {
269 const QXmlStreamAttributes elementAttributes = attributes();
270 const QStringRef email = elementAttributes.value( QLatin1String(
"email" ) );
271 if ( email.isEmpty() ) {
272 raiseError( QLatin1String(
"ContactData is missing an email address" ) );
276 const QStringRef name = elementAttributes.value( QLatin1String(
"name" ) );
278 data.
setName( name.toString() );
286 const QXmlStreamAttributes elementAttributes = attributes();
287 const QStringRef uid = elementAttributes.value( QLatin1String(
"uid" ) );
288 if ( uid.isEmpty() ) {
289 raiseError( QLatin1String(
"ContactReference is missing a uid" ) );
292 const QStringRef preferredEmail = elementAttributes.value( QLatin1String(
"preferredEmail" ) );
294 reference.
setUid( uid.toString() );
300 bool XmlContactGroupReader::readContactGroupReference(
303 const QXmlStreamAttributes elementAttributes = attributes();
304 const QStringRef uid = elementAttributes.value( QLatin1String(
"uid" ) );
305 if ( uid.isEmpty() ) {
306 raiseError( QLatin1String(
"ContactGroupReference is missing a uid" ) );
310 reference.
setUid( uid.toString() );
316 QString *errorMessage )
318 Q_UNUSED( errorMessage );
320 XmlContactGroupReader reader;
322 bool ok = reader.read( device, group );
324 if ( !ok && errorMessage != 0 ) {
325 *errorMessage = reader.errorString();
332 QString *errorMessage )
334 Q_UNUSED( errorMessage );
336 XmlContactGroupWriter writer;
337 writer.write( group, device );
343 QString *errorMessage )
345 Q_UNUSED( errorMessage );
347 XmlContactGroupReader reader;
349 bool ok = reader.read( device, groupList );
351 if ( !ok && errorMessage != 0 ) {
352 *errorMessage = reader.errorString();
359 QIODevice *device, QString *errorMessage )
361 Q_UNUSED( errorMessage );
363 XmlContactGroupWriter writer;
364 writer.write( groupList, device );