kpilot
idmapperxml.ccGo to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "idmapperxml.h"
00027
00028 #include "options.h"
00029
00030 IDMapperXml::IDMapperXml( const QString &file ) : fFile(file)
00031 , fCurrentMapping( 0l )
00032 {
00033 }
00034
00035 IDMapperXml::~IDMapperXml()
00036 {
00037 FUNCTIONSETUP;
00038 }
00039
00040 bool IDMapperXml::open()
00041 {
00042 FUNCTIONSETUP;
00043
00044 root = doc.createElement( CSL1("mappings") );
00045 QDomNode node = doc.createProcessingInstruction(CSL1("xml")
00046 ,CSL1("version=\"1.0\" encoding=\"UTF-8\""));
00047
00048 doc.appendChild( node );
00049 doc.appendChild( root );
00050
00051 if( !fFile.exists() )
00052 {
00053 DEBUGKPILOT << fname << ": Creating " << fFile.name() << endl;
00054
00055 if( fFile.open( IO_ReadWrite ) )
00056 {
00057 QTextStream out( &fFile );
00058 doc.save( out, 4 );
00059 fFile.close();
00060 return true;
00061 }
00062 else
00063 {
00064 DEBUGKPILOT << fname << ": Could not create " << fFile.name() << endl;
00065 return false;
00066 }
00067 }
00068 else
00069 {
00070 DEBUGKPILOT << fname << ": Parsing file " << fFile.name() << endl;
00071 QXmlSimpleReader reader;
00072 reader.setContentHandler( this );
00073
00074
00075 bool result = reader.parse( fFile );
00076 fFile.close();
00077
00078 return result;
00079 }
00080 }
00081
00082 void IDMapperXml::save()
00083 {
00084 FUNCTIONSETUP;
00085
00086 DEBUGKPILOT << fname << ": Saving " << fMappings.count()
00087 << " mappings..." << endl;
00088 DEBUGKPILOT << fname << ": ";
00089
00090 QValueList<IDMapping>::const_iterator it;
00091 for ( it = fMappings.begin(); it != fMappings.end(); ++it )
00092 {
00093 DEBUGKPILOT << ".";
00094
00095 IDMapping mapping = (*it);
00096
00097 DEBUGKPILOT << fname << ": " << mapping.conduit();
00098
00099 QDomElement mappingElement = doc.createElement( CSL1("mapping") );
00100 mappingElement.setAttribute( CSL1("conduit"), mapping.conduit() );
00101
00102 if( !mapping.uid().isNull() )
00103 {
00104 QDomElement uidElement = doc.createElement( CSL1("uid") );
00105 uidElement.setAttribute( CSL1("value"), mapping.uid() );
00106 mappingElement.appendChild( uidElement );
00107 }
00108
00109 if( mapping.pid() != 0 )
00110 {
00111 QDomElement uidElement = doc.createElement( CSL1("pid") );
00112 uidElement.setAttribute( CSL1("value"), mapping.pid() );
00113 mappingElement.appendChild( uidElement );
00114 }
00115
00116 if( !mapping.lastSyncTime().isNull() )
00117 {
00118 QDomElement uidElement = doc.createElement( CSL1("pid") );
00119 uidElement.setAttribute( CSL1("value"), QString::number( mapping.pid() ) );
00120 mappingElement.appendChild( uidElement );
00121 }
00122
00123 root.appendChild( mappingElement );
00124 }
00125
00126 if( fFile.open( IO_ReadWrite ) )
00127 {
00128 QTextStream out( &fFile );
00129 doc.save( out, 4 );
00130 fFile.close();
00131
00132 DEBUGKPILOT << endl << fname << ": finished saving." << endl;
00133 }
00134 }
00135
00136 void IDMapperXml::addMapping( const IDMapping &mapping )
00137 {
00138 FUNCTIONSETUP;
00139
00140 DEBUGKPILOT << fname << ": " << mapping.conduit() << endl;
00141
00142 fMappings.append( mapping );
00143
00144 DEBUGKPILOT << fname << ": " << fMappings.first().conduit() << endl;
00145 }
00146
00147 QValueList<IDMapping>& IDMapperXml::mappings()
00148 {
00149 return fMappings;
00150 }
00151
00152 bool IDMapperXml::startElement( const QString &namespaceURI
00153 , const QString &localName, const QString &qName
00154 , const QXmlAttributes &attribs )
00155 {
00156 FUNCTIONSETUP;
00157 Q_UNUSED(namespaceURI);
00158 Q_UNUSED(localName);
00159
00160 if( qName == CSL1("mapping") )
00161 {
00162 QString conduit( attribs.value( CSL1("conduit") ) );
00163
00164 fCurrentMapping = new IDMapping( conduit );
00165 }
00166 else if( qName == CSL1("uid") )
00167 {
00168 fCurrentMapping->setUid( attribs.value( CSL1("value") ) );
00169 }
00170 else if( qName == CSL1("pid") )
00171 {
00172 fCurrentMapping->setPid( attribs.value( CSL1("value") ).toULong() );
00173 }
00174 else if( qName == CSL1("lastsync") )
00175 {
00176
00177
00178 QString date = attribs.value( CSL1("value") );
00179 int day = date.left(2).toInt();
00180 int month = date.mid(3,2).toInt();
00181 int year = date.mid(6, 4).toInt();
00182
00183 int hour = date.mid(11,2).toInt();
00184 int minute = date.mid(14,2).toInt();
00185 int second = date.mid(17,2).toInt();
00186
00187 QDate tmpDate = QDate( year, month, day );
00188 QTime tmpTime = QTime( hour, minute, second );
00189
00190 fCurrentMapping->setLastSyncTime( QDateTime( tmpDate, tmpTime ) );
00191 }
00192
00193 return true;
00194 }
00195
00196 bool IDMapperXml::endElement( const QString &namespaceURI
00197 , const QString &localName, const QString &qName )
00198 {
00199 FUNCTIONSETUP;
00200
00201 Q_UNUSED(namespaceURI);
00202 Q_UNUSED(localName);
00203 Q_UNUSED(qName);
00204
00205 if( qName == CSL1("mapping") )
00206 {
00207 addMapping( *fCurrentMapping );
00208 delete fCurrentMapping;
00209 fCurrentMapping = 0l;
00210 }
00211
00212 return true;
00213 }
|