private RecordLockedData CreateLockData(OpenFileItemData itemParam, ref LogicFileInfoData logicFileInfo, Guid userID, DbTransaction trans) { RecordLockedData result = null; FileAccess access = itemParam.FileAccess; FileMode mode = itemParam.FileMode; long fileLength = -1; if (mode == FileMode.Truncate) { access |= FileAccess.Write; fileLength = 0; } bool canWrite = (access & FileAccess.Write) != 0; if (canWrite) { if (logicFileInfo == null) { logicFileInfo = CreateNewFile(itemParam, userID, trans); } else { logicFileInfo = UpdateFile(itemParam, logicFileInfo, fileLength, userID, trans); } if (logicFileInfo != null) { result = Lock(logicFileInfo.ID, userID); } } return(result); }
private LogicFileInfoItemData CreateFetchItemParam(OpenFileItemData itemParam) { LogicFileInfoItemData result = new LogicFileInfoItemData(); result.ID = itemParam.FileID; result.Version = itemParam.Version; result.WithPhysicalFileInfo = true; return(result); }
protected OpenFileResultItemData OpenFileItem(OpenFileItemData itemParam, Guid userID, DbTransaction trans) { OpenFileResultItemData item = new OpenFileResultItemData(); LogicFileInfoData logicFileInfo = this.DataProvider.FetchFileInfo(CreateFetchItemParam(itemParam), trans); item.LockedData = this.CreateLockData(itemParam, ref logicFileInfo, userID, trans); item.LogicFileInfo = logicFileInfo; return(item); }
private LogicFileInfoData UpdateFile(OpenFileItemData itemParam, LogicFileInfoData logicFileInfo, long fileLength, Guid userID, DbTransaction trans) { LogicFileInfoData result = logicFileInfo; UpdateMode updateMode = itemParam.UpdateMode; FileMode mode = itemParam.FileMode; long length = 0; if (updateMode == UpdateMode.None) { updateMode = UpdateMode.Override; } if (updateMode == UpdateMode.NewVersion) { PhysicalFileInfoData oldFileData = logicFileInfo.PhysicalFileInfos[logicFileInfo.PhysicalFileInfos.Count - 1]; Guid physcicalFileID = CombineGuid.NewComboGuid(); switch (mode) { case FileMode.Truncate: case FileMode.Create: FileStorageManager.SetFileLength(this.DataProvider, physcicalFileID, result.LogicFileExt, 0); break; default: length = FileStorageManager.CopyFile(this.DataProvider, oldFileData.ID, physcicalFileID, logicFileInfo.LogicFileExt); break; } PhysicalFileInfoData fileData = new PhysicalFileInfoData(); fileData.ID = physcicalFileID; fileData.LogicFileID = result.ID; fileData.FileLength = length; fileData.Version = GetFileVersion(logicFileInfo, trans); fileData.StoreModeID = FileStorageManager.GetCurrentStoreModeID(this.DataProvider); this.DataProvider.CreatePhysicalFileInfo(fileData, trans); result.PhysicalFileInfos.Add(fileData); result.LatestPhysicalFileID = physcicalFileID; this.DataProvider.UpdateFileInfo(logicFileInfo, trans); } else if (updateMode == UpdateMode.Override) { switch (mode) { case FileMode.Truncate: case FileMode.Create: FileStorageManager.SetFileLength(this.DataProvider, logicFileInfo.LatestPhysicalFileID, result.LogicFileExt, 0); break; } } return(result); }
private LogicFileInfoData CreateNewFile(OpenFileItemData itemParam, Guid userID, DbTransaction trans) { LogicFileInfoData result = new LogicFileInfoData(); Guid physcicalFileID = CombineGuid.NewComboGuid(); if (itemParam.FileID != Guid.Empty) { result.ID = itemParam.FileID; } else { result.ID = CombineGuid.NewComboGuid(); } if (!string.IsNullOrEmpty(itemParam.ClientFileName)) { result.LogicFileName = Path.GetFileName(itemParam.ClientFileName); result.LogicFileExt = Path.GetExtension(itemParam.ClientFileName); } result.LogicFileStatus = LogicFileStatus.Normal; result.IsReadOnly = false; result.LatestPhysicalFileID = physcicalFileID; result.CurrentUserID = userID; this.DataProvider.CreateFileInfo(result, trans); PhysicalFileInfoData fileData = new PhysicalFileInfoData(); fileData.ID = physcicalFileID; fileData.LogicFileID = result.ID; fileData.FileLength = 0; fileData.Version = 1; fileData.StoreModeID = FileStorageManager.GetCurrentStoreModeID(this.DataProvider); this.DataProvider.CreatePhysicalFileInfo(fileData, trans); result.PhysicalFileInfos.Add(fileData); FileStorageManager.CreateNewFile(this.DataProvider, physcicalFileID, result.LogicFileExt); return(result); }