/// <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);
            }
        }
Пример #5
0
        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();
        }