C# Class CmisSync.Lib.Database.Database

Database to cache remote information from the CMIS server. Implemented with SQLite.
Inheritance: IDisposable
Show file Open project: aegif/CmisSync Class Usage Examples

Public Methods

Method Description
AddFile ( SyncItem item, string objectId, System.DateTime serverSideModificationDate, string[]>.Dictionary metadata, byte filehash ) : void

Add a file to the database. If checksum is not null, it will be used for the database entry

AddFolder ( SyncItem item, string objectId, System.DateTime serverSideModificationDate ) : void

Add a folder to the database.

BeginTransaction ( ) : DbTransaction

Begins a Database transaction

Checksum ( SyncItem item ) : string

Calculate the SHA1 checksum of a syncitem. Code from http://stackoverflow.com/a/1993919/226958

Checksum ( string filePath ) : string

Calculate the SHA1 checksum of a file. Code from http://stackoverflow.com/a/1993919/226958

ContainsFolder ( SyncItem item ) : bool

Checks whether the database contains a given folder item.

ContainsFolder ( string path ) : bool

Checks whether the database contains a given folder.

ContainsLocalFile ( string localPath ) : bool

Checks whether the database contains a given item. Local filename is often different from remote document name.

ContainsLocalPath ( string localPath ) : bool

Checks whether the database contains a given folders's id.

ContainsRemoteFile ( string remoteRelativePath ) : bool

Checks whether the database contains a given item.

Database ( string databaseFileName, string localPathPrefix, string remotePathPrefix ) : System

Constructor. dataPath: Local path to the database file localPathPrefix: Path to the synchronized files, ex: C:\Users\win7pro32bit\CmisSync\agency remotePathPrefix: Path on the remote server, ex: /Sites/swsdp/documentLibrary/Agency Files

DeleteAllFailedOperations ( ) : void

Deletes all failed upload counter.

DeleteAllFailedOperations ( SyncItem item ) : void

Deletes the upload retry counter.

Dispose ( ) : void

Implement IDisposable interface.

GetAllFoldersWithCmisId ( string id ) : List
GetChangeLogToken ( ) : string

Get the ChangeLog token that was stored at the end of the last successful CmisSync synchronization. If no ChangeLog has ever been stored, return null.

GetChecksum ( string path ) : string

Get checksum from database. Public for debugging purposes only.

GetChecksummedFiles ( ) : List
GetDownloadServerSideModificationDate ( SyncItem item ) : DateTime?

Get the date at which the file was last download. This is the time on the CMIS server side, in UTC. Client-side time does not matter.

GetFilePath ( string id ) : string

path field in files table for id

GetFolderRemotePath ( string id ) : string

path field in folders table for id

GetFolderSyncItemFromLocalPath ( string localPath ) : SyncItem

Gets the syncitem from local path.

GetFolderSyncItemFromRemotePath ( string remotePath ) : SyncItem

Gets the syncitem from remote path.

GetLocalFolders ( ) : List
GetOperationRetryCounter ( SyncItem item, OperationType type ) : long

Gets the upload retry counter.

GetOperationRetryCounter ( string path, OperationType type ) : long

Gets the upload retry counter.

GetRemoteFilePath ( string id ) : string

GetSQLiteConnection ( ) : SQLiteConnection

Connection to the database. The sqliteConnection must not be used directly, used this method instead.

GetServerSideModificationDate ( SyncItem item ) : DateTime?

Get the time at which the file was last modified. This is the time on the CMIS server side, in UTC. Client-side time does not matter.

GetSyncItem ( string id ) : SyncItem

Gets the syncitem from id.

GetSyncItemFromLocalPath ( string localPath ) : SyncItem

Gets the syncitem from local path.

GetSyncItemFromRemotePath ( string remotePath ) : SyncItem

Gets the syncitem from remote path.

LocalFileHasChanged ( string path ) : bool

Check whether a file's content has changed locally since it was last synchronized. This happens when the user edits a file on the local computer. This method does not communicate with the CMIS server, it just checks whether the checksum has changed.

LocalToRemote ( string localPath, bool isFolder ) : string

Return the local path of an item identified by its remote path. If no such item exist yet in database (ex: new remote file), returns the local path it should be written to.

MoveFile ( SyncItem oldItem, SyncItem newItem ) : void

Move a file.

MoveFolder ( SyncItem oldItem, SyncItem newItem ) : void

Move a folder.

RecalculateChecksum ( SyncItem syncItem ) : void

Recalculate the checksum of a file and save it to database.

RemoteToLocal ( string remotePath, bool isFolder ) : string

Return the remote path of an item identified by its local path. If no such item exist yet in database (ex: new local file), returns the remote path it should be written to.

RemoveFile ( SyncItem item ) : void

Remove a file from the database.

RemoveFolder ( SyncItem item ) : void

Remove a folder from the database.

SetChangeLogToken ( string token ) : void

Set the stored ChangeLog token. This should be called after each successful CmisSync synchronization.

SetDownloadServerSideModificationDate ( SyncItem item, System.DateTime serverSideModificationDate ) : void

Set the last download date of a file. This is the time on the CMIS server side, in UTC. Client-side time does not matter.

SetFileServerSideModificationDate ( SyncItem item, System.DateTime serverSideModificationDate ) : void

Set the last modification date of a file. This is the time on the CMIS server side, in UTC. Client-side time does not matter. TODO Combine this method and the next in a new method ModifyFile, and find out if GetServerSideModificationDate is really needed.

SetOperationRetryCounter ( SyncItem item, long counter, OperationType type ) : void

Sets the upload retry counter.

Protected Methods

Method Description
Dispose ( bool disposing ) : void

Dispose pattern implementation.

Private Methods

Method Description
ChecksumToString ( byte hash ) : string

Transforms a given hash into a string

ComposeSQLCommand ( SQLiteCommand command, string text, object>.Dictionary parameters ) : void

Helper method to fill the parameters inside an SQL command.

Denormalize ( string path ) : string

Denormalize a path from the normalized one to a local path.

DenormalizeRemotePath ( string path ) : string

Denormalizes a remote path from the normalized one to a remote path.

ExecuteMultiRecordSQL ( string text, object>.Dictionary parameters ) : object>>.List

Executes the SQL and Return multiple results.

ExecuteOneRecordSQL ( string text, object>.Dictionary parameters ) : object>.Dictionary

Executes the SQL and Return one record results.

ExecuteSQLAction ( string text, object>.Dictionary parameters ) : void

Helper method to execute an SQL command that does not return anything.

ExecuteSQLFunction ( string text, object>.Dictionary parameters ) : object

Helper method to execute an SQL command that returns something.

GetGeneralTableValue ( string key ) : object
GetRemotePathPrefix ( ) : string

Gets the remote path prefix.

Json ( string[]>.Dictionary dictionary ) : string

Put all the values of a dictionary into a JSON string.

RemoveLocalPrefix ( string path ) : string

RemoveLocalPrefix a path. All paths stored in database must be normalized. Goals: - Make data smaller in database - Reduce OS-specific differences

RemoveRemotePrefix ( string path ) : string

Normalizes a remote path. All remote paths in database must be normalized.

SetGeneralTableValue ( string key, string value ) : void
SetRemotePathPrefix ( string pathprefix ) : void

Sets the reomte path prefix.

operationTypeToString ( OperationType type ) : string

Method Details

AddFile() public method

Add a file to the database. If checksum is not null, it will be used for the database entry
public AddFile ( SyncItem item, string objectId, System.DateTime serverSideModificationDate, string[]>.Dictionary metadata, byte filehash ) : void
item SyncItem
objectId string
serverSideModificationDate System.DateTime
metadata string[]>.Dictionary
filehash byte
return void

AddFolder() public method

Add a folder to the database.
public AddFolder ( SyncItem item, string objectId, System.DateTime serverSideModificationDate ) : void
item SyncItem
objectId string
serverSideModificationDate System.DateTime
return void

BeginTransaction() public method

Begins a Database transaction
public BeginTransaction ( ) : DbTransaction
return System.Data.Common.DbTransaction

Checksum() public static method

Calculate the SHA1 checksum of a syncitem. Code from http://stackoverflow.com/a/1993919/226958
public static Checksum ( SyncItem item ) : string
item SyncItem sync item
return string

Checksum() public static method

Calculate the SHA1 checksum of a file. Code from http://stackoverflow.com/a/1993919/226958
public static Checksum ( string filePath ) : string
filePath string
return string

ContainsFolder() public method

Checks whether the database contains a given folder item.
public ContainsFolder ( SyncItem item ) : bool
item SyncItem
return bool

ContainsFolder() public method

Checks whether the database contains a given folder.
public ContainsFolder ( string path ) : bool
path string
return bool

ContainsLocalFile() public method

Checks whether the database contains a given item. Local filename is often different from remote document name.
public ContainsLocalFile ( string localPath ) : bool
localPath string
return bool

ContainsLocalPath() public method

Checks whether the database contains a given folders's id.
public ContainsLocalPath ( string localPath ) : bool
localPath string
return bool

ContainsRemoteFile() public method

Checks whether the database contains a given item.
public ContainsRemoteFile ( string remoteRelativePath ) : bool
remoteRelativePath string
return bool

Database() public method

Constructor. dataPath: Local path to the database file localPathPrefix: Path to the synchronized files, ex: C:\Users\win7pro32bit\CmisSync\agency remotePathPrefix: Path on the remote server, ex: /Sites/swsdp/documentLibrary/Agency Files
public Database ( string databaseFileName, string localPathPrefix, string remotePathPrefix ) : System
databaseFileName string
localPathPrefix string
remotePathPrefix string
return System

DeleteAllFailedOperations() public method

Deletes all failed upload counter.
public DeleteAllFailedOperations ( ) : void
return void

DeleteAllFailedOperations() public method

Deletes the upload retry counter.
public DeleteAllFailedOperations ( SyncItem item ) : void
item SyncItem Path of the local file.
return void

Dispose() public method

Implement IDisposable interface.
public Dispose ( ) : void
return void

Dispose() protected method

Dispose pattern implementation.
protected Dispose ( bool disposing ) : void
disposing bool
return void

GetAllFoldersWithCmisId() public method

public GetAllFoldersWithCmisId ( string id ) : List
id string
return List

GetChangeLogToken() public method

Get the ChangeLog token that was stored at the end of the last successful CmisSync synchronization. If no ChangeLog has ever been stored, return null.
public GetChangeLogToken ( ) : string
return string

GetChecksum() public method

Get checksum from database. Public for debugging purposes only.
public GetChecksum ( string path ) : string
path string
return string

GetChecksummedFiles() public method

public GetChecksummedFiles ( ) : List
return List

GetDownloadServerSideModificationDate() public method

Get the date at which the file was last download. This is the time on the CMIS server side, in UTC. Client-side time does not matter.
public GetDownloadServerSideModificationDate ( SyncItem item ) : DateTime?
item SyncItem
return DateTime?

GetFilePath() public method

path field in files table for id
public GetFilePath ( string id ) : string
id string
return string

GetFolderRemotePath() public method

path field in folders table for id
public GetFolderRemotePath ( string id ) : string
id string
return string

GetFolderSyncItemFromLocalPath() public method

Gets the syncitem from local path.
public GetFolderSyncItemFromLocalPath ( string localPath ) : SyncItem
localPath string Local path.
return SyncItem

GetFolderSyncItemFromRemotePath() public method

Gets the syncitem from remote path.
public GetFolderSyncItemFromRemotePath ( string remotePath ) : SyncItem
remotePath string Remote path.
return SyncItem

GetLocalFolders() public method

public GetLocalFolders ( ) : List
return List

GetOperationRetryCounter() public method

Gets the upload retry counter.
public GetOperationRetryCounter ( SyncItem item, OperationType type ) : long
item SyncItem Path of the local file.
type OperationType
return long

GetOperationRetryCounter() public method

Gets the upload retry counter.
public GetOperationRetryCounter ( string path, OperationType type ) : long
path string Path of the local file.
type OperationType
return long

GetRemoteFilePath() public method

public GetRemoteFilePath ( string id ) : string
id string
return string

GetSQLiteConnection() public method

Connection to the database. The sqliteConnection must not be used directly, used this method instead.
public GetSQLiteConnection ( ) : SQLiteConnection
return System.Data.SQLite.SQLiteConnection

GetServerSideModificationDate() public method

Get the time at which the file was last modified. This is the time on the CMIS server side, in UTC. Client-side time does not matter.
public GetServerSideModificationDate ( SyncItem item ) : DateTime?
item SyncItem
return DateTime?

GetSyncItem() public method

Gets the syncitem from id.
public GetSyncItem ( string id ) : SyncItem
id string Identifier.
return SyncItem

GetSyncItemFromLocalPath() public method

Gets the syncitem from local path.
public GetSyncItemFromLocalPath ( string localPath ) : SyncItem
localPath string Local path.
return SyncItem

GetSyncItemFromRemotePath() public method

Gets the syncitem from remote path.
public GetSyncItemFromRemotePath ( string remotePath ) : SyncItem
remotePath string Remote path.
return SyncItem

LocalFileHasChanged() public method

Check whether a file's content has changed locally since it was last synchronized. This happens when the user edits a file on the local computer. This method does not communicate with the CMIS server, it just checks whether the checksum has changed.
public LocalFileHasChanged ( string path ) : bool
path string
return bool

LocalToRemote() public method

Return the local path of an item identified by its remote path. If no such item exist yet in database (ex: new remote file), returns the local path it should be written to.
public LocalToRemote ( string localPath, bool isFolder ) : string
localPath string
isFolder bool
return string

MoveFile() public method

Move a file.
public MoveFile ( SyncItem oldItem, SyncItem newItem ) : void
oldItem SyncItem
newItem SyncItem
return void

MoveFolder() public method

Move a folder.
public MoveFolder ( SyncItem oldItem, SyncItem newItem ) : void
oldItem SyncItem
newItem SyncItem
return void

RecalculateChecksum() public method

Recalculate the checksum of a file and save it to database.
public RecalculateChecksum ( SyncItem syncItem ) : void
syncItem SyncItem
return void

RemoteToLocal() public method

Return the remote path of an item identified by its local path. If no such item exist yet in database (ex: new local file), returns the remote path it should be written to.
public RemoteToLocal ( string remotePath, bool isFolder ) : string
remotePath string
isFolder bool
return string

RemoveFile() public method

Remove a file from the database.
public RemoveFile ( SyncItem item ) : void
item SyncItem
return void

RemoveFolder() public method

Remove a folder from the database.
public RemoveFolder ( SyncItem item ) : void
item SyncItem
return void

SetChangeLogToken() public method

Set the stored ChangeLog token. This should be called after each successful CmisSync synchronization.
public SetChangeLogToken ( string token ) : void
token string
return void

SetDownloadServerSideModificationDate() public method

Set the last download date of a file. This is the time on the CMIS server side, in UTC. Client-side time does not matter.
public SetDownloadServerSideModificationDate ( SyncItem item, System.DateTime serverSideModificationDate ) : void
item SyncItem
serverSideModificationDate System.DateTime
return void

SetFileServerSideModificationDate() public method

Set the last modification date of a file. This is the time on the CMIS server side, in UTC. Client-side time does not matter. TODO Combine this method and the next in a new method ModifyFile, and find out if GetServerSideModificationDate is really needed.
public SetFileServerSideModificationDate ( SyncItem item, System.DateTime serverSideModificationDate ) : void
item SyncItem
serverSideModificationDate System.DateTime
return void

SetOperationRetryCounter() public method

Sets the upload retry counter.
public SetOperationRetryCounter ( SyncItem item, long counter, OperationType type ) : void
item SyncItem Path of the local file.
counter long Counter.
type OperationType
return void