public void Delete(IEnumerable <DataSourceId> dataSourceIds)
        {
            foreach (DataSourceId dataSourceId in dataSourceIds)
            {
                if (dataSourceId == null)
                {
                    throw new ArgumentException("DataSourceIds must me non-null");
                }
            }

            foreach (DataSourceId dataSourceId in dataSourceIds)
            {
                MediaDataId dataId = dataSourceId.DataId as MediaDataId;

                if (dataId.MediaType == _fileType)
                {
                    if (IsReadOnlyFolder(dataId.Path))
                    {
                        throw new ArgumentException("Cannot delete read only file " + dataId.FileName);
                    }
                    C1File.Delete(GetAbsolutePath(dataId));
                }
                else
                {
                    if (IsReadOnlyFolder(dataId.Path))
                    {
                        throw new ArgumentException("Cannot delete read only folder " + dataId.Path);
                    }
                    C1Directory.Delete(GetAbsolutePath(dataId), true);
                }
            }
        }
        /// <exclude />
        public void Update(IEnumerable <IData> dataset)
        {
            if (dataset.Any(data => data == null))
            {
                throw new ArgumentException("Data in list to update must be non-null");
            }

            foreach (IData data in dataset)
            {
                MediaDataId dataId = data.DataSourceId.DataId as MediaDataId;
                if (dataId == null)
                {
                    throw new ArgumentException("Invalid IData");
                }

                if (dataId.MediaType == MediaElementType.File)
                {
                    UpdateMediaFile((IMediaFile)data);
                }
                else if (dataId.MediaType == MediaElementType.Folder)
                {
                    UpdateMediaFileFolder((IMediaFileFolder)data);
                }
                else
                {
                    throw new InvalidOperationException("Unexpected media type '{0}'".FormatWith(dataId.MediaType));
                }
            }
        }
        private IQueryable <IMediaFileFolder> GetMediaFileFolders()
        {
            IQueryable <IMediaFileFolder> mediaFoldersQuery = _mediaFoldersCachedQuery;

            if (mediaFoldersQuery == null)
            {
                lock (_syncRoot)
                {
                    if (_mediaFoldersCachedQuery == null)
                    {
                        var mediaFolderItems = new List <IMediaFileFolder>();

                        IQueryable <IMediaFolderData> folders = DataFacade.GetData <IMediaFolderData>();

                        var publicDataScope = DataScopeIdentifier.Public;
                        foreach (IMediaFolderData folder in folders)
                        {
                            var dataId = new MediaDataId {
                                MediaType = MediaElementType.Folder, Id = folder.Id
                            };
                            var dataSourceId = _context.CreateDataSourceId(dataId, typeof(IMediaFileFolder), publicDataScope, CultureInfo.InvariantCulture);
                            mediaFolderItems.Add(new MediaFileFolder(folder, Store.Id, dataSourceId));
                        }

                        _mediaFoldersCachedQuery = mediaFolderItems.AsQueryable();
                    }
                    mediaFoldersQuery = _mediaFoldersCachedQuery;
                }
            }

            return(mediaFoldersQuery);
        }
        /// <exclude />
        public T GetData <T>(IDataId dataId) where T : class, IData
        {
            if (dataId == null)
            {
                throw new ArgumentNullException("dataId");
            }
            CheckInterface(typeof(T));

            MediaDataId mediaDataId = dataId as MediaDataId;

            if (mediaDataId == null)
            {
                return(null);
            }


            if (mediaDataId.MediaType == MediaElementType.Folder)
            {
                if (typeof(T) != typeof(IMediaFileFolder))
                {
                    throw new ArgumentException("The dataId specifies a IMediaFileFolder, but the generic method was invoked with different type");
                }

                IMediaFolderData folder = DataFacade.GetData <IMediaFolderData>().FirstOrDefault(x => x.Id == mediaDataId.Id);
                if (folder == null)
                {
                    return(null);
                }
                return(new MediaFileFolder(folder, Store.Id,
                                           _context.CreateDataSourceId(new MediaDataId {
                    MediaType = MediaElementType.Folder, Id = folder.Id
                }, typeof(IMediaFileFolder))) as T);
            }

            if (mediaDataId.MediaType == MediaElementType.File)
            {
                if (typeof(T) != typeof(IMediaFile))
                {
                    throw new ArgumentException("The dataId specifies a IMediaFile, but the generic method was invoked with different type");
                }

                IMediaFileData file = DataFacade.GetData <IMediaFileData>().FirstOrDefault(x => x.Id == mediaDataId.Id);
                if (file == null)
                {
                    return(null);
                }

                string internalPath = Path.Combine(_workingDirectory, file.Id.ToString());
                return(new MediaFile(file, Store.Id,
                                     _context.CreateDataSourceId(new MediaDataId {
                    MediaType = MediaElementType.File, Id = file.Id
                }, typeof(IMediaFile)), internalPath) as T);
            }

            return(Store as T);
        }
 private string GetAbsolutePath(MediaDataId mediaData)
 {
     if (mediaData.MediaType == _fileType)
     {
         return(Path.Combine(Path.Combine(_rootDir, mediaData.Path.Remove(0, 1)), mediaData.FileName));
     }
     else
     {
         return(Path.Combine(_rootDir, mediaData.Path.Remove(0, 1)));
     }
 }
Пример #6
0
        private string GetAbsolutePath(MediaDataId mediaData)
        {
            string folderPath = Path.Combine(_rootDir, mediaData.Path.Remove(0, 1));

            if (mediaData.MediaType == _fileType)
            {
                return(Path.Combine(folderPath, mediaData.FileName));
            }

            return(folderPath);
        }
        public T GetData <T>(IDataId dataId) where T : class, IData
        {
            if (dataId == null)
            {
                throw new ArgumentNullException("dataId");
            }
            CheckInterface(typeof(T));
            MediaDataId mediaDataId = dataId as MediaDataId;

            if (mediaDataId == null)
            {
                return(null);
            }

            if (mediaDataId.MediaType == _folderType)
            {
                if (typeof(T) != typeof(IMediaFileFolder))
                {
                    throw new ArgumentException("The dataId specifies a IMediaFileFolder, but the generic method was invoked with different type");
                }

                FileSystemMediaFileFolder folder = (from dirInfo in C1Directory.GetDirectories(_rootDir, "*", SearchOption.AllDirectories)
                                                    where GetRelativePath(dirInfo) == mediaDataId.Path
                                                    select CreateFolder(dirInfo)).FirstOrDefault();
                return(folder as T);
            }
            else if (mediaDataId.MediaType == _fileType)
            {
                if (typeof(T) != typeof(IMediaFile))
                {
                    throw new ArgumentException("The dataId specifies a IMediaFile, but the generic method was invoked with different type");
                }

                FileSystemMediaFile file = (from fileInfo in C1Directory.GetFiles(_rootDir, "*", SearchOption.AllDirectories)
                                            where GetRelativePath(Path.GetDirectoryName(fileInfo)) == mediaDataId.Path && Path.GetFileName(fileInfo) == mediaDataId.FileName
                                            select CreateFile(fileInfo)).FirstOrDefault();

                return(file as T);
            }
            else
            {
                return(Store as T);
            }
        }
        /// <exclude />
        public void Delete(IEnumerable <DataSourceId> dataSourceIds)
        {
            if (dataSourceIds.Any(f => f == null))
            {
                throw new ArgumentException("DataSourceIds must be non-null");
            }

            foreach (DataSourceId dataSourceId in dataSourceIds)
            {
                MediaDataId dataId = dataSourceId.DataId as MediaDataId;
                if (dataId.MediaType == MediaElementType.Folder)
                {
                    DeleteMediaFolder(dataId.Id);
                }
                else if (dataId.MediaType == MediaElementType.File)
                {
                    DeleteMediaFile(dataId.Id);
                }
                else
                {
                    throw new InvalidOperationException("Unexpected media type '{0}'".FormatWith(dataId.MediaType));
                }
            }
        }
        public void Update(IEnumerable <IData> datas)
        {
            foreach (IData data in datas)
            {
                if (data == null)
                {
                    throw new ArgumentException("Data in list to update must be non-null");
                }
            }

            foreach (IData data in datas)
            {
                MediaDataId dataId = data.DataSourceId.DataId as MediaDataId;
                if (dataId == null)
                {
                    throw new ArgumentException("Invalid IData");
                }

                if (dataId.MediaType == _fileType)
                {
                    IMediaFile updatedFile = (IMediaFile)data;

                    if (updatedFile.StoreId != this.Store.Id)
                    {
                        continue;
                    }
                    if (updatedFile.IsReadOnly)
                    {
                        throw new ArgumentException("Cannot update read only media file " + dataId.FileName);
                    }

                    if (updatedFile.FileName != dataId.FileName || updatedFile.FolderPath != dataId.Path)
                    {
                        string oldPos = GetAbsolutePath(dataId);
                        string newPos = GetAbsolutePath(updatedFile);
                        C1File.Move(oldPos, newPos);
                    }

                    using (Stream readStream = updatedFile.GetReadStream())
                    {
                        using (Stream writeStream = C1File.Open(GetAbsolutePath(updatedFile), FileMode.Create))
                        {
                            readStream.CopyTo(writeStream);
                        }
                    }
                }
                else
                {
                    IMediaFileFolder updatedFolder = (IMediaFileFolder)data;
                    if (updatedFolder.StoreId != this.Store.Id)
                    {
                        continue;
                    }
                    if (updatedFolder.IsReadOnly)
                    {
                        throw new ArgumentException("Cannot update read only media folder " + dataId.Path);
                    }
                    C1Directory.Move(GetAbsolutePath(dataId), GetAbsolutePath(updatedFolder));
                }
            }
        }