public override void Accept(IFileSystemArtifactViewModelVisitor visitor)
        {
            if (visitor == null)
            {
                throw new ArgumentNullException("visitor");
            }

            visitor.VisitFolder(this);
        }
 public abstract void Accept(IFileSystemArtifactViewModelVisitor visitor);
        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;
        }