/// <summary> /// Initialize viewmodel /// </summary> /// <param name="model">Model to initialize</param> public void Initialize(FileStructure model) { this.model = model; directories = new ObservableCollection <DirectoryViewModel>(); rawDirectories = new List <DirectoryViewModel>(); foreach (var directory in model.Directories.Where(x => x.Parent == null)) { var directoryViewModel = new DirectoryViewModel(directory, this) { Parent = this }; directories.Add(directoryViewModel); rawDirectories.Add(directoryViewModel); directoryViewModel.LoadChildren(directory, model.Directories); } RemoveValidators(nameof(Name)); // Add template validator if (model.IsTemplate) { AddValidator(nameof(Name), new StringPropertyNoWhiteSpace()); } if (model.StackGuid != null && model.InstanceDataGuid != null) { rootPath = stackService.GetInstanceDataContent(model.StackGuid.Value, model.InstanceDataGuid.Value); } IsDirty = false; RefreshPath(); }
/// <summary> /// Finds the parent of the selected directory /// </summary> /// <param name="selectedDirectory"></param> /// <returns></returns> private DirectoryViewModel FindParent(DirectoryViewModel selectedDirectory) { var parent = selectedDirectory; var parentDirectory = selectedDirectory.StructureViewModel.Directories.AsList(); while (parentDirectory.Count != 0) { var innerDirectories = new List <DirectoryViewModel>(); foreach (var innerDir in parentDirectory) { if (innerDir.Model.Parent == null) { parent = innerDir; } if (innerDir.Model == selectedDirectory.Model) { return(parent); } innerDirectories.AddRange(innerDir.Directories); } parentDirectory.Clear(); parentDirectory.AddRange(innerDirectories); } return(parent); }
private bool IsWorkflowDirectory(DirectoryViewModel selectedDirectory) { if (selectedDirectory.Model.DirectoryTypeId == directoryTypeWorkflowGuid) { if (!selectedDirectory.Model.WorkflowId.HasValue) { MessageBox.Show(localizationService.Translate("filestructure_workflow_not_assigned"), localizationService.Translate("filestructure_delete_notallowed_title"), MessageBoxButton.OK, MessageBoxImage.Information); return(true); } } return(false); }
/// <summary> /// Load subdirectories /// </summary> /// <param name="parent">Parent directory</param> /// <param name="directoryModels">Complete directory list</param> internal void LoadChildren(Directory parent, IList <Directory> directoryModels) { foreach (var directory in directoryModels.Where(x => x.Parent?.Id == parent?.Id)) { var directoryViewModel = new DirectoryViewModel(directory, structureViewModel) { // Set FileStructureViewModel as parent Parent = this }; directories.Add(directoryViewModel); structureViewModel.RawDirectories.Add(directoryViewModel); directoryViewModel.LoadChildren(directory, directoryModels); } }
private static bool IsWorkflowDirectory(DirectoryViewModel directory) { //Guid of the type workflow folder var workflowGuid = Guid.Parse("F3F2BF83-5ACD-4221-BAA1-5138ED5D9769"); if (directory.Model.DirectoryTypeId.Equals(workflowGuid)) { if (!directory.Model.WorkflowId.HasValue) { MessageBox.Show(localizationService.Translate("filestructure_workflow_not_assigned"), localizationService.Translate("filestructure_drag_protected_workflow"), MessageBoxButton.OK, MessageBoxImage.Information); return(true); } } return(false); }
/// <summary> /// Add directory item clicked /// </summary> /// <param name="sender">Menu instance</param> /// <param name="e">Argumetns</param> private void AddDirectoryItemClick(object sender, Telerik.Windows.RadRoutedEventArgs e) { var directoryType = ((sender as RadMenuItem).Tag as DirectoryType); var container = directoryTreeView.SelectedContainer; var directory = new Directory { DirectoryTypeId = directoryType.Id, Name = localizationService.Translate("fs_new_directory_name") }; // Save child directory list ObservableCollection <DirectoryViewModel> childrenDirectory = null; var directoryViewModel = new DirectoryViewModel(directory, this) { Parent = SelectedDirectory as IViewModelBase ?? this }; if (SelectedDirectory == null) { Directories.Add(directoryViewModel); childrenDirectory = Directories; } else { directory.Parent = SelectedDirectory.Model; SelectedDirectory.Directories.Add(directoryViewModel); childrenDirectory = SelectedDirectory.Directories; } if (!(SelectedDirectory == null || SelectedDirectory.Model == null)) { directoryViewModel.Model.WorkflowId = SelectedDirectory.Model.WorkflowId; } SelectedDirectory = directoryViewModel; RawDirectories.Add(directoryViewModel); // Check if directory is already existing var currentName = directoryViewModel.Name; int nameCounter = 1; while (childrenDirectory.Any(x => x.Name?.ToLower() == currentName.ToLower() && x != directoryViewModel)) { currentName = $"{directoryViewModel.Name} {nameCounter}"; nameCounter++; } directoryViewModel.Name = currentName; // Expand parent if (container?.IsExpanded != null) { container.IsExpanded = true; } IsDirty = true; RefreshPath(); }