Exemple #1
0
        /// <summary>
        /// Возвращает метаданные файла по уникальному идентификатору.
        /// </summary>
        /// <param name="uniqueID">Уникальный идентификатор.</param>
        /// <param name="folderMetadata">Метаданные папки в которой располагается файл.</param>
        /// <returns></returns>
        internal FileMetadata GetFile(Guid uniqueID, IFolderMetadata folderMetadata)
        {
            if (uniqueID == Guid.Empty)
            {
                throw new ArgumentNullException("uniqueID");
            }

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

            FileMetadata metadata = null;

            string query     = String.Format("[UniqueID] = '{0}' AND Deleted != 1", uniqueID);
            string tableName = this.GetTableName(uniqueID, folderMetadata);
            DBObjectDistributedTable table        = this.MetadataAdapter.TableActivator.GetDistributedTable(this.DBSchemaAdapter, tableName);
            MetadataQueryBuilder     queryBuilder = new MetadataQueryBuilder(table.TablePartition.Table, this.TypeDefinition);

            string resultQuery = @"{SelectQuery} WHERE {Query}"
                                 .ReplaceKey("SelectQuery", queryBuilder.SelectQuery)
                                 .ReplaceKey("Query", query);

            DataRow resultRow = this.DataAdapter.GetDataRow(resultQuery);

            if (resultRow != null)
            {
                metadata = new FileMetadata(resultRow, this, folderMetadata);
            }

            return(metadata);
        }
        /// <summary>
        /// Возвращает метаданные всех версий файла.
        /// </summary>
        /// <param name="file">Метаданные файла.</param>
        /// <returns>Коллекцию метаданных версий файла.</returns>
        internal FileVersionsCollection GetFileVersions(FileMetadata file)
        {
            if (file == null)
            {
                throw new ArgumentNullException("file");
            }

            FileVersionsCollection versions = new FileVersionsCollection(file);

            string query     = String.Format("[FileID] = '{0}'", file.ID);
            string tableName = this.GetTableName(file);

            DBObjectDistributedTable table        = this.MetadataAdapter.TableActivator.GetDistributedTable(this.DBSchemaAdapter, tableName);
            MetadataQueryBuilder     queryBuilder = new MetadataQueryBuilder(table.TablePartition.Table, this.TypeDefinition);

            string resultQuery = @"{SelectQuery} WHERE {Query} ORDER BY [TimeCreated] ASC"
                                 .ReplaceKey("SelectQuery", queryBuilder.SelectQuery)
                                 .ReplaceKey("Query", query);

            DataTable resultTable = this.DataAdapter.GetDataTable(resultQuery);

            if (resultTable != null)
            {
                foreach (DataRow row in resultTable.Rows)
                {
                    FileVersionMetadata metadata = new FileVersionMetadata(row, versions);
                    versions.AddVersion(metadata);
                }
            }

            return(versions);
        }
Exemple #3
0
        /// <summary>
        /// Получение токена доступа к версии файла по уникальносму идентификатору.
        /// </summary>
        /// <param name="fileVersionMetadata">Метаданные версии файла.</param>
        /// <param name="tokenUniqueID">Уникальный идентификатор токена.</param>
        /// <returns></returns>
        public IFileToken GetToken(IFileVersionMetadata fileVersionMetadata, Guid tokenUniqueID)
        {
            FileToken token = null;

            this.Logger.WriteFormatMessage("GetToken: Начало операции получения токена.  tokenUniqueID='{0}' fileUniqueID='{1}' folderUrl='{2}'",
                                           tokenUniqueID, fileVersionMetadata.FileMetadata.UniqueID, fileVersionMetadata.FileMetadata.FolderMetadata.Url);

            string tableName = this.GetTableName(fileVersionMetadata.FileMetadata);
            DBObjectDistributedTable table = null;

            this.Logger.WriteMessage("GetToken: Получение таблицы.");
            try
            {
                table = this.TypedMetadataAdapter.TableActivator.GetDistributedTable(this.DBSchemaAdapter, tableName);
            }
            //В случае когда для данного файла и папки генерация токена не запрашивалась, таблица токенов могла быть не создана.
            //В данном случае ошибки нет, т.к. токен еще не генерировался.
            catch (DistributedTableNotFoundException notFoundEx)
            {
                return(null);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            this.Logger.WriteMessage("GetToken: Конец получения таблицы.");

            MetadataQueryBuilder queryBuilder = new MetadataQueryBuilder(table.TablePartition.Table, this.TypeDefinition);

            string query = @"
{SelectQuery}  
WHERE [UniqueID] = '{UniqueID}' AND [Expired] > GETDATE()"
                           .ReplaceKey("SelectQuery", queryBuilder.SelectQuery)
                           .ReplaceKey("UniqueID", tokenUniqueID);

            this.Logger.WriteFormatMessage("GetToken: Начало запроса в БД.  Запрос:'{0}'", query);
            DataRow resultRow = this.DataAdapter.GetDataRow(query);

            this.Logger.WriteMessage("GetToken: Конец запроса в БД.");

            if (resultRow != null)
            {
                token = new FileToken(resultRow, fileVersionMetadata);
            }

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

            return(token);
        }
Exemple #4
0
        /// <summary>
        /// Проверяет наличие уже выданного токена на файл и при отсутствии создает новый.
        /// </summary>
        /// <param name="fileVersionMetadata">Метаданные версии файла.</param>
        /// <returns>Токен доступа к версии файла.</returns>
        private FileToken EnsureFileToken(IFileVersionMetadata fileVersionMetadata)
        {
            if (fileVersionMetadata == null)
            {
                throw new ArgumentNullException("fileVersionMetadata");
            }

            this.Logger.WriteFormatMessage("EnsureFileToken: Начало операции. fileUniqueID: {0}, folderUrl: {1}",
                                           fileVersionMetadata.FileMetadata.UniqueID, fileVersionMetadata.FileMetadata.FolderMetadata.Url);

            FileToken fileToken = null;

            this.Logger.WriteMessage("EnsureFileToken: Получение таблицы.");

            string tableName = this.GetTableName(fileVersionMetadata.FileMetadata);
            DBObjectDistributedTable table        = this.TypedMetadataAdapter.TableActivator.EnsureDistributedTable(this.DBSchemaAdapter, tableName);
            MetadataQueryBuilder     queryBuilder = new MetadataQueryBuilder(table.TablePartition.Table, this.TypeDefinition);

            this.Logger.WriteMessage("EnsureFileToken: Конец получения таблицы.");

            string resultQuery = @"DELETE 
FROM {TableName} 
WHERE [Expired] < GETDATE()
{SelectQuery}
WHERE [FileID] = {FileID} AND [VersionID] = {VersionID} AND ([SecurityIdentifier] IS NULL OR [SecurityIdentifier] = '')"
                                 .ReplaceKey("TableName", tableName)
                                 .ReplaceKey("SelectQuery", queryBuilder.SelectQuery)
                                 .ReplaceKey("FileID", fileVersionMetadata.FileMetadata.ID)
                                 .ReplaceKey("VersionID", fileVersionMetadata.ID);

            this.Logger.WriteFormatMessage("EnsureFileToken: Начало запроса в БД. Запрос:{0}", resultQuery);
            DataRow tokenRow = this.DataAdapter.GetDataRow(resultQuery);

            this.Logger.WriteMessage("EnsureFileToken: Конец запроса в БД.");

            if (tokenRow != null)
            {
                fileToken = new FileToken(tokenRow, fileVersionMetadata);
            }
            else
            {
                fileToken = this.CreateToken(fileVersionMetadata, null);
            }

            this.Logger.WriteMessage("EnsureFileToken: Конец операции.");

            return(fileToken);
        }