Ejemplo n.º 1
0
        public IBlobFileVersionMetadata SaveFile(IBlobFileMetadata fileMetadata, DateTime versionTimeCreated)
        {
            if (fileMetadata == null)
            {
                throw new ArgumentNullException("fileMetadata");
            }

            if (versionTimeCreated == null)
            {
                throw new ArgumentNullException("versionTimeCreated");
            }

            FileMetadata typedFile = (FileMetadata)fileMetadata;

            if (typedFile.ID != 0 && typedFile.RemoteFile == null)
            {
                if (typedFile.OriginalVersionUniqueID == Guid.Empty || fileMetadata.VersionUniqueID == typedFile.OriginalVersionUniqueID)
                {
                    throw new Exception("Для обновления существующего файла необходимо вызвать резервирование параметров сохранения.");
                }
            }

            this.Logger.WriteMessage("SaveFile: Начало.");

            FileVersionMetadata version = this.FileAdapter.UpdateFile(typedFile, versionTimeCreated);

            this.Logger.WriteMessage("SaveFile: Конец.");

            return(version);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Добавление новой версии в коллекцию.
        /// </summary>
        /// <param name="version">Метаданные версии.</param>
        internal void AddVersion(FileVersionMetadata version)
        {
            if (version == null)
            {
                throw new ArgumentNullException("version");
            }

            if (!this.Versions.ContainsKey(version.UniqueID))
            {
                this.Add(version);
                this.Versions.Add(version.UniqueID, version);

                this.__init_VersionsStorages = false;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Обновляет метаданные файла в БД, либо создает новую запись.
        /// </summary>
        /// <param name="file">Метаданные файла.</param>
        internal FileVersionMetadata UpdateFile(FileMetadata file, DateTime versionTimeCreated)
        {
            if (file == null)
            {
                throw new ArgumentNullException("folder");
            }

            if (versionTimeCreated == null)
            {
                throw new ArgumentNullException("versionTimeCreated");
            }

            if (file.ID == 0)
            {
                file.TimeCreated    = versionTimeCreated;
                file.ModifiedUserID = 0;
                file.TimeModified   = versionTimeCreated;

                file.ID = this.InsertObject(file);
            }
            else
            {
                if (file.RemoteFile == null)
                {
                    file.TimeModified = versionTimeCreated;
                }

                //если не пришла более ранняя версия файла с удаленного узла,
                //либо пришла версия с локального хранилища, то сохраняем ее
                if (!file.PreventSavePreviousVersion)
                {
                    this.UpdateObject(file);
                }
            }

            //при создании/обновлении создаем новые метаданные версии.
            FileVersionMetadata version = this.VersionAdapter.CreateVerion(file);

            return(version);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Создает метаданные существующего файла.
        /// </summary>
        /// <param name="storageMetadata">Метаданные хранилища.</param>
        /// <param name="blobMetadata">Метаданные блоба.</param>
        /// <param name="folderMetadata">Метаданные папки.</param>
        /// <param name="fileHeader">Заголовок файла.</param>
        /// <param name="blobStartPosition">Начальная позиция файла в блобе.</param>
        /// <param name="blobEndPosition">Конечная позиция файла в блобе.</param>
        /// <returns></returns>
        public IBlobFileMetadata AddExistsFileVersion(IStorageMetadata storageMetadata, IBlobMetadata blobMetadata, IFolderMetadata folderMetadata, IFileHeader fileHeader, long blobStartPosition, long blobEndPosition)
        {
            if (storageMetadata == null)
            {
                throw new ArgumentNullException("storageMetadata");
            }

            if (blobMetadata == null)
            {
                throw new ArgumentNullException("blobMetadata");
            }

            if (folderMetadata == null)
            {
                throw new ArgumentNullException("folderMetadata");
            }

            if (fileHeader == null)
            {
                throw new ArgumentNullException("fileHeader");
            }

            if (blobStartPosition < 0)
            {
                throw new ArgumentNullException("blobStartPosition");
            }

            IBlobFileHeader blobHeader  = (IBlobFileHeader)((object)fileHeader);
            FileMetadata    file        = this.FileAdapter.GetFile(fileHeader.UniqueID, folderMetadata);
            bool            justCreated = false;

            if (file == null)
            {
                justCreated          = true;
                file                 = new FileMetadata(this.FileAdapter);
                file.UniqueID        = fileHeader.UniqueID;
                file.VersionUniqueID = fileHeader.VersionUniqueID;
                file.FolderID        = folderMetadata.ID;
                file.FolderMetadata  = folderMetadata;
                file.Name            = fileHeader.FileName;

                file.BlobID            = blobMetadata.ID;
                file.BlobStartPosition = blobStartPosition;
                file.BlobEndPosition   = blobEndPosition;
                file.Deleted           = false;
                file.Size         = blobHeader.ContentLength;
                file.TimeCreated  = fileHeader.TimeCreated;
                file.TimeModified = fileHeader.TimeCreated;

                this.FileAdapter.UpdateFileTransparent(file);
            }
            else
            {
                if (file.Versions.Any(x => x.UniqueID == fileHeader.VersionUniqueID))
                {
                    throw new Exception(String.Format("Версия с идентификатором [{0}] уже существует.", fileHeader.VersionUniqueID.ToString()));
                }
            }

            //создание версии файла
            FileVersionMetadata version = new FileVersionMetadata(file);

            version.UniqueID          = fileHeader.VersionUniqueID;
            version.BlobID            = blobMetadata.ID;
            version.BlobStartPosition = blobStartPosition;
            version.BlobEndPosition   = blobEndPosition;
            version.Size             = blobHeader.ContentLength;
            version.TimeCreated      = fileHeader.TimeCreated;
            version.CreatedStorageID = storageMetadata.ID;
            version.Name             = fileHeader.FileName;

            //сохранение версии
            this.FileAdapter.VersionAdapter.InsertVerion(file, version);
            file.ResetVersions();

            //обновление параметров существующего файла
            if (!justCreated)
            {
                bool fileUpdate = false;
                if (version.TimeCreated > file.TimeModified)
                {
                    file.TimeModified    = version.TimeCreated;
                    file.VersionUniqueID = version.UniqueID;
                    file.BlobID          = version.BlobID;
                    fileUpdate           = true;
                }

                if (version.TimeCreated < file.TimeCreated)
                {
                    file.TimeCreated = version.TimeCreated;
                    fileUpdate       = true;
                }

                //обновление файла
                if (fileUpdate)
                {
                    this.FileAdapter.UpdateFileTransparent(file);
                }
            }

            return(file);
        }