/// <summary>
 /// Constructeur
 /// </summary>
 /// <param name="parent"></param>
 public RemoteFileInfoViewModel(RemoteFileInfoViewModel parent)
 {
     this.Parent = parent;
     this.SelectedFiles.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(SelectedFiles_CollectionChanged);
 }
        /// <summary>
        /// Obtenir les fichier,repertoires seulement ou les deux (isdirectory = null)
        /// </summary>
        /// <returns></returns>
        private ObservableCollection<RemoteFileInfoViewModel> GetRemoteFileInfo(RemoteFileInfoViewModel parent, bool? isDirectoryPattern)
        {
            ObservableCollection<RemoteFileInfoViewModel> result = new ObservableCollection<RemoteFileInfoViewModel>();

            if (this.ApplicationViewModel != null && this.ApplicationViewModel.SelectedRemoteApplication != null)
            {
                string searchPattern = parent.GetSearchPattern(this.ApplicationViewModel);

                var remoteFileInfos = RemoteIsolatedStoreTools.GetRemoteFileInfos(this.ApplicationViewModel.SelectedRemoteApplication.Application, searchPattern, isDirectoryPattern);

                foreach (var remoteFileInfo in remoteFileInfos)
                {
                    result.Add(new RemoteFileInfoViewModel(parent)
                        {
                            Id = Guid.NewGuid().ToString(),
                            RemoteFileInfo = remoteFileInfo
                        }
                    );
                }
            }

            return result;
        }
        /// <summary>
        /// Rafraichir le repertoire
        /// </summary>
        /// <param name="searchPattern"></param>
        private void RefreshDirectory(RemoteFileInfoViewModel directory )
        {
            if (directory == null || directory.IsDirectory == false)
            {
                return;
            }

            ObservableCollection<RemoteFileInfoViewModel> fileInfos = this.GetRemoteFileInfo(directory, false);
            ObservableCollection<RemoteFileInfoViewModel> directories = this.GetRemoteFileInfo(directory, true);

            directory.Children = directories;
            directory.Files = fileInfos;

            if (directory.Children != null && directory.Children.Count > 0)
            {
                foreach (RemoteFileInfoViewModel remoteFileInfo in directory.Children)
                {
                    this.RefreshDirectory(remoteFileInfo);
                }
            }
        }
        /// <summary>
        /// Création d'un répertoire
        /// </summary>
        public RemoteFileInfoViewModel CreateDirectory(string newDirectoryName)
        {
            if (string.IsNullOrWhiteSpace(newDirectoryName) == true)
            {
                return null;
            }

            if (this.ApplicationViewModel != null && this.ApplicationViewModel.SelectedRemoteApplication != null)
            {
                var application = this.ApplicationViewModel.SelectedRemoteApplication.Application;
                var directoryParent = this.SelectedDirectory.RemoteFileInfo;

                if (RemoteIsolatedStoreTools.Exists(application, directoryParent, newDirectoryName) == false)
                {
                    var newDirectory = RemoteIsolatedStoreTools.CreateDirectory(application, directoryParent, newDirectoryName);
                    var newDirectoryViewModel = new RemoteFileInfoViewModel(this.SelectedDirectory) { RemoteFileInfo = newDirectory };

                    this.SelectedDirectory.Children.Add( newDirectoryViewModel );

                    return newDirectoryViewModel;
                }
            }

            return null;
        }