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
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef INCL_FILE_SYNC_SOURCE
00037 #define INCL_FILE_SYNC_SOURCE
00038
00042 #include "base/fscapi.h"
00043 #include "spds/constants.h"
00044 #include "spds/SyncItem.h"
00045 #include "spds/SyncMap.h"
00046 #include "spds/SyncStatus.h"
00047 #include "spds/SyncSource.h"
00048 #include "spdm/ManagementNode.h"
00049 #include "base/util/ItemContainer.h"
00050
00051
00052 #define ERR_FILE_SYSTEM 1
00053 #define ERR_NO_FILES_TO_SYNC 2
00054 #define ERR_BAD_FILE_CONTENT 3
00055
00064 class FileSyncSource : public SyncSource {
00065
00066 protected:
00067
00068
00069 char* dir;
00070
00071
00072 FileSyncSource(SyncSource& s);
00073
00074
00075
00076
00077 virtual bool setItemData(SyncItem* syncItem);
00078
00086 int addedItem(SyncItem& item, const WCHAR* key);
00087
00088 public:
00089 FileSyncSource(const WCHAR* name, SyncSourceConfig* sc);
00090 virtual ~FileSyncSource();
00091
00097 void setDir(const char* p);
00098 const char* getDir();
00099
00110 void setFileNode(ManagementNode *mn) { fileNode = mn; }
00111 ManagementNode *getFileNode() { return fileNode; }
00112
00113
00114
00115 SyncItem* getFirstItem() { return getFirst(allItems); }
00116 SyncItem* getNextItem() { return getNext(allItems); }
00117 SyncItem* getFirstNewItem() { return getFirst(newItems); }
00118 SyncItem* getNextNewItem() { return getNext(newItems); }
00119 SyncItem* getFirstUpdatedItem() { return getFirst(updatedItems); }
00120 SyncItem* getNextUpdatedItem() { return getNext(updatedItems); }
00121 SyncItem* getFirstDeletedItem() { return getFirst(deletedItems, FALSE); }
00122 SyncItem* getNextDeletedItem() { return getNext(deletedItems, FALSE); }
00123 SyncItem* getFirstItemKey() { return getFirst(allItems, FALSE); }
00124 SyncItem* getNextItemKey() { return getNext(allItems, FALSE); }
00125 int addItem(SyncItem& item);
00126 int updateItem(SyncItem& item);
00127 int deleteItem(SyncItem& item);
00128 void setItemStatus(const WCHAR* key, int status);
00129 int beginSync();
00130 int endSync();
00131 void assign(FileSyncSource& s);
00132 ArrayElement* clone();
00133
00134 private:
00135
00136
00137 struct ItemIteratorContainer {
00138 ArrayList items;
00139 int index;
00140 } allItems, newItems, updatedItems, deletedItems;
00141
00142
00143 ManagementNode* fileNode;
00144
00146 unsigned long getServerModTime(const char* keystr);
00147
00148 SyncItem* getFirst(ItemIteratorContainer& container, BOOL getData = TRUE);
00149 SyncItem* getNext(ItemIteratorContainer& container, BOOL getData = TRUE);
00150 };
00151
00154 #endif