예제 #1
0
        public FileManager(IVirtualDisk virtualDisk, FileSystemNodeStorage fileSystemNodeStorage, IEqualityComparer <string> namesComparer, NodeResolver nodeResolver, IFreeBlockManager freeBlockManager, IFolderEnumeratorRegistry folderEnumeratorRegistry, IFileSystemObjectLockingManager lockingManager, BlockReferenceListsEditor blockReferenceListsEditor, PathBuilder pathBuilder, IFileSystemArtifactNamesValidator nameValidator, IPathValidator pathValidator)
        {
            if (virtualDisk == null)
            {
                throw new ArgumentNullException("virtualDisk");
            }
            if (fileSystemNodeStorage == null)
            {
                throw new ArgumentNullException("fileSystemNodeStorage");
            }
            if (namesComparer == null)
            {
                throw new ArgumentNullException("namesComparer");
            }
            if (nodeResolver == null)
            {
                throw new ArgumentNullException("nodeResolver");
            }
            if (freeBlockManager == null)
            {
                throw new ArgumentNullException("freeBlockManager");
            }
            if (folderEnumeratorRegistry == null)
            {
                throw new ArgumentNullException("folderEnumeratorRegistry");
            }
            if (lockingManager == null)
            {
                throw new ArgumentNullException("lockingManager");
            }
            if (blockReferenceListsEditor == null)
            {
                throw new ArgumentNullException("blockReferenceListsEditor");
            }
            if (pathBuilder == null)
            {
                throw new ArgumentNullException("pathBuilder");
            }
            if (nameValidator == null)
            {
                throw new ArgumentNullException("nameValidator");
            }
            if (pathValidator == null)
            {
                throw new ArgumentNullException("pathValidator");
            }

            _virtualDisk               = virtualDisk;
            _pathValidator             = pathValidator;
            _nameValidator             = nameValidator;
            _pathBuilder               = pathBuilder;
            _blockReferenceListsEditor = blockReferenceListsEditor;
            _lockingManager            = lockingManager;
            _folderEnumeratorRegistry  = folderEnumeratorRegistry;
            _freeBlockManager          = freeBlockManager;
            _nodeResolver              = nodeResolver;
            _namesComparer             = namesComparer;
            _fileSystemNodeStorage     = fileSystemNodeStorage;
        }
예제 #2
0
        public NewArtifactNameViewModel(IFileSystemArtifactNamesValidator namesValidator)
        {
            if (namesValidator == null)
            {
                throw new ArgumentNullException("namesValidator");
            }

            _namesValidator = namesValidator;
        }
        public ArtifactRenamingVisitor(VirtualFileSystem fileSystem, IUserInteractionService userInteractionService, IFileSystemArtifactNamesValidator artifactNamesValidator)
        {
            if (fileSystem == null)
            {
                throw new ArgumentNullException("fileSystem");
            }
            if (userInteractionService == null)
            {
                throw new ArgumentNullException("userInteractionService");
            }
            if (artifactNamesValidator == null)
            {
                throw new ArgumentNullException("artifactNamesValidator");
            }

            _fileSystem             = fileSystem;
            _artifactNamesValidator = artifactNamesValidator;
            _userInteractionService = userInteractionService;
        }
        public AllCollaborators(IVirtualDisk disk, IFileSystemNodeStorage diskStructuresManager, IFileSystemArtifactNamesValidator nameValidator, IPathValidator pathValidator, NodeResolver nodeResolver, VirtualFileSystem virtualFileSystem, FileInfo fileNodeFake, Stream stream)
        {
            if (disk == null)
            {
                throw new ArgumentNullException("disk");
            }
            if (diskStructuresManager == null)
            {
                throw new ArgumentNullException("diskStructuresManager");
            }
            if (nameValidator == null)
            {
                throw new ArgumentNullException("nameValidator");
            }
            if (pathValidator == null)
            {
                throw new ArgumentNullException("pathValidator");
            }
            if (nodeResolver == null)
            {
                throw new ArgumentNullException("nodeResolver");
            }
            if (virtualFileSystem == null)
            {
                throw new ArgumentNullException("virtualFileSystem");
            }
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            Disk = disk;
            DiskStructuresManager = diskStructuresManager;
            NameValidator         = nameValidator;
            PathValidator         = pathValidator;
            NodeResolver          = nodeResolver;
            VirtualFileSystem     = virtualFileSystem;
            FileNodeFake          = fileNodeFake;
            Stream = stream;
        }
예제 #5
0
        public PathValidator(string rootPath, IEnumerable <char> illegalCharactersForPath, IFileSystemArtifactNamesValidator nameValidator, char directorySeparatorChar)
        {
            if (illegalCharactersForPath == null)
            {
                throw new ArgumentNullException("illegalCharactersForPath");
            }
            if (nameValidator == null)
            {
                throw new ArgumentNullException("nameValidator");
            }

            if (String.IsNullOrEmpty(rootPath))
            {
                throw new ArgumentNullException("rootPath");
            }

            if (illegalCharactersForPath.ContainsLetters())
            {
                throw new ArgumentException("В текущей версии не поддерживаются буквы в качестве элементов множества, определяющего символы, которые можно использовать в именах файлов, папок, путях файловой системы");
            }

            if (illegalCharactersForPath.Any(character => character.Equals(directorySeparatorChar)))
            {
                throw new ArgumentException("Набор элементов, составляющих недопустимые символы для задания путей, не может содержать символ разделения папок(\"{0}\")".FormatWith(directorySeparatorChar));
            }

            Nullable <char> illegalChar;

            if (rootPath.ContainsAny(illegalCharactersForPath, out illegalChar))
            {
                throw new ArgumentException("Путь к корневой папке содержит как минимум один из запрещенных для путей символов, этот: \"{0}\"".FormatWith(illegalChar.Value));
            }

            _rootPath = rootPath;
            _illegalCharactersForPath = illegalCharactersForPath;
            _nameValidator            = nameValidator;
            _directorySeparatorChar   = directorySeparatorChar;
        }
 public NewArtifactViewModel(IFileSystemArtifactNamesValidator namesValidator) : base(namesValidator)
 {
 }
예제 #7
0
        private VirtualFileSystem(
            IVirtualDisk virtualDisk,
            VirtualFileSystemInfo fileSystemInfo,
            FileSystemNodeStorage fileSystemNodeStorage,
            IEqualityComparer <string> namesComparer,
            NodeResolver nodeResolver,
            IFreeBlockManager freeBlockManager,
            IFolderEnumeratorRegistry folderEnumeratorRegistry,
            BlockReferenceListsEditor blockReferenceListsEditor,
            PathBuilder pathBuilder,
            IFileSystemArtifactNamesValidator nameValidator,
            IPathValidator pathValidator,
            FileManager fileManager,
            FolderManager folderManager)
        {
            if (fileSystemInfo == null)
            {
                throw new ArgumentNullException("fileSystemInfo");
            }
            if (fileSystemNodeStorage == null)
            {
                throw new ArgumentNullException("fileSystemNodeStorage");
            }
            if (namesComparer == null)
            {
                throw new ArgumentNullException("namesComparer");
            }
            if (nodeResolver == null)
            {
                throw new ArgumentNullException("nodeResolver");
            }
            if (freeBlockManager == null)
            {
                throw new ArgumentNullException("freeBlockManager");
            }
            if (folderEnumeratorRegistry == null)
            {
                throw new ArgumentNullException("folderEnumeratorRegistry");
            }
            if (blockReferenceListsEditor == null)
            {
                throw new ArgumentNullException("blockReferenceListsEditor");
            }
            if (pathBuilder == null)
            {
                throw new ArgumentNullException("pathBuilder");
            }
            if (nameValidator == null)
            {
                throw new ArgumentNullException("nameValidator");
            }
            if (pathValidator == null)
            {
                throw new ArgumentNullException("pathValidator");
            }
            if (folderManager == null)
            {
                throw new ArgumentNullException("folderManager");
            }

            _virtualDisk              = virtualDisk;
            _folderManager            = folderManager;
            _folderManager            = folderManager;
            _folderManager            = folderManager;
            _folderManager            = folderManager;
            _fileManager              = fileManager;
            _pathBuilder              = pathBuilder;
            _folderEnumeratorRegistry = folderEnumeratorRegistry;
            _nodeResolver             = nodeResolver;
            _freeBlockManager         = freeBlockManager;
            _fileSystemInfo           = fileSystemInfo;
            _namesComparer            = namesComparer;
        }
        public BrowserWindowViewModel(
            VirtualFileSystem virtualSystemCurrentlyBrowsed,
            IApplicationController applicationController,
            IComparer <FileSystemArtifactViewModel> viewModelSortingComparer,
            IUserInteractionService userInteractionService,
            string diskBrowsedLocation,
            IEqualityComparer <string> fileSystemArtifactNameComparer,
            IFileSystemArtifactViewModelVisitor deletingVisitor,
            IFileSystemArtifactNamesValidator artifactNamesValidator,
            IFileSystemArtifactViewModelVisitor renamingVisitor,
            INewArtifactCreator newArtifactCreator,
            IVirtualFileSystemInstanceManager virtualFileSystemInstanceManager,
            IFileSystemArtifactViewModelVisitor movingVisitor,
            IArtifactImporter artifactImporter,
            TaskCounter taskCounter,
            IDispatcher dispatcher)
        {
            if (virtualSystemCurrentlyBrowsed == null)
            {
                throw new ArgumentNullException("virtualSystemCurrentlyBrowsed");
            }
            if (applicationController == null)
            {
                throw new ArgumentNullException("applicationController");
            }
            if (viewModelSortingComparer == null)
            {
                throw new ArgumentNullException("viewModelSortingComparer");
            }
            if (userInteractionService == null)
            {
                throw new ArgumentNullException("userInteractionService");
            }
            if (diskBrowsedLocation == null)
            {
                throw new ArgumentNullException("diskBrowsedLocation");
            }
            if (fileSystemArtifactNameComparer == null)
            {
                throw new ArgumentNullException("fileSystemArtifactNameComparer");
            }
            if (deletingVisitor == null)
            {
                throw new ArgumentNullException("deletingVisitor");
            }
            if (artifactNamesValidator == null)
            {
                throw new ArgumentNullException("artifactNamesValidator");
            }
            if (renamingVisitor == null)
            {
                throw new ArgumentNullException("renamingVisitor");
            }
            if (newArtifactCreator == null)
            {
                throw new ArgumentNullException("newArtifactCreator");
            }
            if (virtualFileSystemInstanceManager == null)
            {
                throw new ArgumentNullException("virtualFileSystemInstanceManager");
            }
            if (movingVisitor == null)
            {
                throw new ArgumentNullException("movingVisitor");
            }
            if (artifactImporter == null)
            {
                throw new ArgumentNullException("artifactImporter");
            }
            if (dispatcher == null)
            {
                throw new ArgumentNullException("dispatcher");
            }

            this.CurrentFolderContents     = new ObservableCollection <FileSystemArtifactViewModel>();
            _virtualSystemCurrentlyBrowsed = virtualSystemCurrentlyBrowsed;
            _taskCounter        = taskCounter;
            _dispatcher         = dispatcher;
            _artifactImporter   = artifactImporter;
            _movingVisitor      = movingVisitor;
            _renamingVisitor    = renamingVisitor;
            _newArtifactCreator = newArtifactCreator;
            _virtualFileSystemInstanceManager = virtualFileSystemInstanceManager;
            _userInteractionService           = userInteractionService;
            _diskBrowsedLocation            = diskBrowsedLocation;
            _fileSystemArtifactNameComparer = fileSystemArtifactNameComparer;
            _deletingVisitor          = deletingVisitor;
            _artifactNamesValidator   = artifactNamesValidator;
            _applicationController    = applicationController;
            _viewModelSortingComparer = viewModelSortingComparer;

            this.CurrentFolderPath = VirtualFileSystem.Root;

            _tasks = new ObservableCollection <TaskViewModel>();

            this.Tasks = new ReadOnlyObservableCollection <TaskViewModel>(_tasks);

            this.RefreshCurrentFolderContentsFallingBackToRootIfNecessary();

            this.FileSearchPattern = new FileSearchPatternViewModel();

            this.IsRefreshEnabled = true;
        }
예제 #9
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="disk"></param>
        /// <param name="namesComparer"></param>
        /// <param name="nodeResolver"></param>
        /// <param name="pathBuilder"></param>
        /// <param name="namesValidator"></param>
        /// <param name="pathValidator"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="InconsistentDataDetectedException"></exception>
        internal static VirtualFileSystem CreateFromDisk(IVirtualDisk disk, IEqualityComparer <string> namesComparer, NodeResolver nodeResolver, PathBuilder pathBuilder, IFileSystemArtifactNamesValidator namesValidator, IPathValidator pathValidator)
        {
            if (disk == null)
            {
                throw new ArgumentNullException("disk");
            }
            if (namesComparer == null)
            {
                throw new ArgumentNullException("namesComparer");
            }
            if (nodeResolver == null)
            {
                throw new ArgumentNullException("nodeResolver");
            }
            if (pathBuilder == null)
            {
                throw new ArgumentNullException("pathBuilder");
            }
            if (namesValidator == null)
            {
                throw new ArgumentNullException("namesValidator");
            }
            if (pathValidator == null)
            {
                throw new ArgumentNullException("pathValidator");
            }

            VirtualFileSystemInfo fileSystemInfo;
            var fileSystemNodeStorage = new FileSystemNodeStorage(disk);

            const int headerBlockIndex = VirtualDiskFormatter.FileSystemHeaderBlockIndex;
            const int freeBlockBitmapStartingBlockIndex = VirtualDiskFormatter.FreeSpaceStartingBlockIndex;

            var header = fileSystemNodeStorage.ReadFileSystemHeader(headerBlockIndex);

            fileSystemInfo = new VirtualFileSystemInfo(header.Version, disk.BlockSizeInBytes, header.RootBlockOffset, freeBlockBitmapStartingBlockIndex);

            var freeSpaceBitmapStore = new FreeSpaceBitmapStore(disk, VirtualDiskFormatter.FreeSpaceStartingBlockIndex);

            int bitmapSize;
            var freeSpaceMap = freeSpaceBitmapStore.ReadMap(out bitmapSize);

            var freeSpaceBitArray = new BitArray(freeSpaceMap)
            {
                Length = bitmapSize
            };

            var freeBlockManagerBitArrayBased = new FreeBlockManagerBitArrayBased(freeSpaceBitArray,
                                                                                  fileSystemInfo.FirstNonReservedDiskBlockIndex,
                                                                                  bitmapSize);

            IFreeBlockManager freeBlockManager = new FreeBlockManagerDiskWriting(freeSpaceBitmapStore, freeBlockManagerBitArrayBased);

            IFolderEnumeratorRegistry folderEnumeratorRegistry = new FolderEnumeratorRegistry();

            IFileSystemObjectLockingManager lockingManager = new FileSystemObjectLockingManager();

            var blockReferenceEditor = new BlockReferenceListsEditor(disk, freeBlockManager, fileSystemNodeStorage);

            //Note: много общих коллабораторов у трех классов. Недорефакторено.

            var fileManager   = new FileManager(disk, fileSystemNodeStorage, namesComparer, nodeResolver, freeBlockManager, folderEnumeratorRegistry, lockingManager, blockReferenceEditor, pathBuilder, namesValidator, pathValidator);
            var folderManager = new FolderManager(fileSystemNodeStorage, namesComparer, nodeResolver, freeBlockManager, folderEnumeratorRegistry, lockingManager, blockReferenceEditor, pathBuilder, namesValidator, pathValidator);

            return(new VirtualFileSystem(disk, fileSystemInfo, fileSystemNodeStorage, namesComparer, nodeResolver, freeBlockManager, folderEnumeratorRegistry, blockReferenceEditor, pathBuilder, namesValidator, pathValidator, fileManager, folderManager));
        }