00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#ifndef KSYNC_INCEDENCE_TEMPLATE_H
00022
#define KSYNC_INCEDENCE_TEMPLATE_H
00023
00024
#include "syncee.h"
00025
00026
#include <qmap.h>
00027
00028
#include <libkcal/incidence.h>
00029
00030
00031
00032
00033
00034
namespace KSync {
00035
template <
class Entry = KCal::Inc
idence>
00036
class IncidenceTemplate :
public SyncEntry {
00037
public:
00038
typedef QPtrList<Entry> PtrList;
00039 IncidenceTemplate( Entry *entry,
Syncee *parent )
00040 :
SyncEntry( parent ), mIncidence( entry ) {
00041
if (!entry )
00042 mIncidence =
new Entry;
00043
00044 };
00045 IncidenceTemplate(
const IncidenceTemplate& temp )
00046 :
SyncEntry( temp ){
00047 mIncidence = (Entry*)temp.mIncidence->clone();
00048
00049 }
00050 ~IncidenceTemplate() {
00051
delete mIncidence;
00052 }
00053
QString type()
const {
return mIncidence->type() +
"SyncEntry"; }
00054
QString name() {
return mIncidence->summary(); }
00055
QString id() {
return mIncidence->uid(); }
00056
void setId(
const QString&
id) { mIncidence->setUid(
id ); }
00057
QString timestamp() {
return mIncidence->lastModified().toString(); }
00058 Entry* incidence() {
return mIncidence; };
00059
bool equals(
SyncEntry* entry) {
00060 IncidenceTemplate* inEntry = dynamic_cast<IncidenceTemplate*> (entry );
00061
if (!inEntry )
00062
return false;
00063
if (mIncidence->uid() != inEntry->incidence()->uid() )
return false;
00064
if (mIncidence->lastModified() != inEntry->incidence()->lastModified() )
00065
return false;
00066
00067
return true;
00068 }
00069
SyncEntry* clone() {
00070
return new IncidenceTemplate<Entry>( *this );
00071 }
00072
private:
00073 Entry* mIncidence;
00074
00075 };
00076
00077
00078
00079
namespace Cal {
00080
template<
class T>
void mergeOrg( T*
const,
const T*
const );
00081
template<
class T>
void mergeRead( T*
const,
const T*
const );
00082
template<
class T>
void mergedtStart( T*
const,
const T*
const );
00083
template<
class T>
void mergeDur( T*
const,
const T*
const );
00084
template<
class T>
void mergeFloat( T*
const,
const T*
const );
00085
template<
class T>
void mergeAttend( T*
const,
const T*
const );
00086
template<
class T>
void mergeCreated( T*
const,
const T*
const );
00087
template<
class T>
void mergeRev( T*
const,
const T*
const );
00088
template<
class T>
void mergeDes( T*
const,
const T*
const );
00089
template<
class T>
void mergeSum( T*
const,
const T*
const );
00090
template<
class T>
void mergeCat( T*
const,
const T*
const );
00091
template<
class T>
void mergeRel( T*
const,
const T*
const );
00092
template<
class T>
void mergeExDates( T*
const,
const T*
const );
00093
template<
class T>
void mergeAtt( T*
const,
const T*
const );
00094
template<
class T>
void mergeSec( T*
const,
const T*
const );
00095
template<
class T>
void mergeRes( T*
const,
const T*
const );
00096
template<
class T>
void mergePrio( T*
const,
const T*
const );
00097
template<
class T>
void mergeAlarm( T*
const,
const T*
const );
00098
template<
class T>
void mergeRecur( T*
const,
const T*
const );
00099
template<
class T>
void mergeLoc( T*
const,
const T*
const );
00100 }
00101
00102
template <
class T,
class U>
00103
class MergeBase {
00104
public:
00105 MergeBase();
00106
virtual ~MergeBase();
00107
typedef void (*merge)(T*
const,
const T*
const );
00108
typedef QMap<int, merge> MergeMap;
00109
typedef typename QMap<int, merge>::Iterator Iterator;
00110
void invoke(
int, T*
const,
const T*
const );
00111
void add(
int, merge );
00112
protected:
00113
MergeMap map;
00114 };
00115
00116
00117
00118
00119
template <
class T,
class U> MergeBase<T, U>::MergeBase() {
00120 map.insert( U::Organizer, Cal::mergeOrg );
00121 map.insert( U::ReadOnly, Cal::mergeRead );
00122 map.insert( U::DtStart, Cal::mergedtStart );
00123 map.insert( U::Duration, Cal::mergeDur );
00124 map.insert( U::Float, Cal::mergeFloat );
00125 map.insert( U::Attendee, Cal::mergeAttend );
00126 map.insert( U::CreatedDate, Cal::mergeCreated );
00127 map.insert( U::Revision, Cal::mergeRev );
00128 map.insert( U::Description, Cal::mergeDes );
00129 map.insert( U::Summary, Cal::mergeSum );
00130 map.insert( U::Category, Cal::mergeCat );
00131 map.insert( U::Relations, Cal::mergeRel );
00132 map.insert( U::ExDates, Cal::mergeExDates );
00133 map.insert( U::Attachments, Cal::mergeAtt );
00134 map.insert( U::Secrecy, Cal::mergeSec );
00135 map.insert( U::Resources, Cal::mergeRes );
00136 map.insert( U::Priority, Cal::mergePrio );
00137 map.insert( U::Alarms, Cal::mergeAlarm );
00138 map.insert( U::Recurrence, Cal::mergeRecur );
00139 map.insert( U::Location, Cal::mergeLoc );
00140 }
00141
template <
class T,
class U> MergeBase<T, U>::~MergeBase() {
00142 }
00143
template <
class T,
class U>
void MergeBase<T, U>::invoke(
int i, T*
const dest,
const T*
const src) {
00144 Iterator it= map.find( i );
00145
if ( it != map.end() )
00146 (*it.data())(dest, src );
00147 }
00148
template<
class T,
class U>
00149
void MergeBase<T, U>::add(
int res, merge mer ) {
00150 map.insert( res, mer );
00151 }
00152
00153
namespace Cal {
00154
00155
template <
class Todo>
void mergeOrg( Todo*
const dest,
const Todo*
const src) {
00156 dest->setOrganizer( src->organizer() );
00157 }
00158
template <
class Todo>
void mergeRead( Todo*
const dest,
const Todo*
const src) {
00159 dest->setReadOnly( src->isReadOnly() );
00160 }
00161
template <
class Todo>
void mergedtStart( Todo*
const dest,
const Todo*
const src) {
00162 dest->setDtStart( src->dtStart() );
00163 }
00164
template <
class Todo>
void mergeDur( Todo*
const dest,
const Todo*
const src) {
00165 dest->setDuration( src->duration() );
00166 }
00167
template <
class Todo>
void mergeFloat( Todo*
const dest,
const Todo*
const src) {
00168 dest->setFloats( src->doesFloat() );
00169 }
00170
template <
class Todo>
void mergeAttend( Todo*
const dest,
const Todo*
const src) {
00171 KCal::Attendee::List att = src->attendees();
00172 KCal::Attendee::List::ConstIterator it;
00173
for ( it = att.begin(); it != att.end(); ++it )
00174 dest->addAttendee(
new KCal::Attendee( **it ) );
00175 }
00176
template <
class Todo>
void mergeCreated( Todo*
const dest,
const Todo*
const src) {
00177 dest->setCreated( src->created() );
00178 }
00179
template <
class Todo>
void mergeRev( Todo*
const dest,
const Todo*
const src) {
00180 dest->setRevision( src->revision() );
00181 }
00182
template <
class Todo>
void mergeDes( Todo*
const dest,
const Todo*
const src) {
00183 dest->setDescription( src->description() );
00184 }
00185
template <
class Todo>
void mergeSum( Todo*
const dest,
const Todo*
const src) {
00186 dest->setSummary( src->summary() );
00187 }
00188
template <
class Todo>
void mergeCat( Todo*
const dest,
const Todo*
const src) {
00189 dest->setCategories( src->categories() );
00190 }
00191
template <
class Todo>
void mergeRel( Todo*
const dest,
const Todo*
const src) {
00192 KCal::Incidence::List rel = src->relations();
00193 KCal::Incidence::List::ConstIterator it;
00194
for ( it = rel.begin(); it != rel.end(); ++it ) {
00195 dest->addRelation( (*it)->clone() );
00196 }
00197 }
00198
template <
class Todo>
void mergeExDates( Todo*
const dest,
const Todo*
const src) {
00199 dest->setExDates( src->exDates() );
00200 }
00201
template <
class Todo>
void mergeAtt( Todo*
const,
const Todo*
const ) {
00202
00203 }
00204
template <
class Todo>
void mergeSec( Todo*
const dest,
const Todo*
const src) {
00205 dest->setSecrecy( src->secrecy() );
00206 }
00207
template <
class Todo>
void mergeRes( Todo*
const dest,
const Todo*
const src) {
00208 dest->setResources( src->resources() );
00209 }
00210
template <
class Todo>
void mergePrio( Todo*
const dest,
const Todo*
const src) {
00211 dest->setPriority( src->priority() );
00212 }
00213
template <
class Todo>
void mergeAlarm( Todo*
const dest,
const Todo*
const src ) {
00214 KCal::Alarm::List als = src->alarms();
00215 KCal::Alarm::List::ConstIterator it;
00216
for ( it = als.begin(); it != als.end(); ++it ) {
00217 dest->addAlarm(
new KCal::Alarm( **it ) );
00218 }
00219 }
00220
template <
class Todo>
void mergeRecur( Todo*
const ,
const Todo*
const ) {
00221
00222 }
00223
template <
class Todo>
void mergeLoc( Todo*
const dest ,
const Todo*
const src) {
00224 dest->setLocation( src->location() );
00225 }
00226 }
00227 }
00228
00229
00230
#endif