/// <summary>
        /// Gets the user control meant to edit or view a particular task
        /// </summary>
        /// <param name="cmTaskType"></param>
        /// <param name="cmSystem"></param>
        /// <param name="cmFeature"></param>
        /// <param name="cmTask"></param>
        /// <returns></returns>
        public UserControl GetTaskUI(CMTaskTypeDto cmTaskType, CMSystemDto cmSystem, CMFeatureDto cmFeature, CMTaskDto cmTask)
        {
            var taskFactory = GetTaskFactory(cmTaskType.Name);
            var taskUC      = taskFactory.GetTaskUI(cmTaskType, cmSystem, cmFeature, cmTask);

            return(taskUC);
        }
예제 #2
0
        public FeatureDependencyUC(CMSystemDto cmSystem, CMFeatureDto cmFeature, CMTaskDto cmTask)
        {
            InitializeComponent();

            this.cmSystem  = cmSystem;
            this.cmFeature = cmFeature;
            this.cmTask    = cmTask;
        }
예제 #3
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            this.Title = cmTaskDto.Title;

            ref_TaskTypeDto = CMDataProvider.DataStore.Value.CMTaskTypes.Value.Get(cmTaskDto.CMTaskTypeId);
            ref_FeatureDto  = CMDataProvider.DataStore.Value.CMFeatures.Value.Get(cmTaskDto.CMFeatureId);
            ref_SystemDto   = CMDataProvider.DataStore.Value.CMSystems.Value.Get(ref_FeatureDto.CMSystemId);

            LoadTaskStatesCombo();
            LoadTaskUI();
        }
예제 #4
0
        private void txtSystemName_LostFocus(object sender, RoutedEventArgs e)
        {
            var opResult = CMDataProvider.DataStore.Value.CMSystems.Value.UpdateIfNeeded_Name(cmSystem.Id, txtSystemName.Text);

            if (opResult.Errors.Any())
            {
                MessageBox.Show(opResult.ErrorsCombined);
                txtSystemName.Text = cmSystem.Name;
                return;
            }

            cmSystem = CMDataProvider.DataStore.Value.CMSystems.Value.Get(cmSystem.Id);
        }
예제 #5
0
        public override UserControl GetTaskUI(CMTaskTypeDto cmTaskType, CMSystemDto cmSystem, CMFeatureDto cmFeature, CMTaskDto cmTask)
        {
            switch (cmTaskType.Name)
            {
            case nameof(BuildInTaskTypes.FeatureDependency):
                var featureDependencyTaskUI = new FeatureDependencyUC(cmSystem, cmFeature, cmTask);
                return(featureDependencyTaskUI);

            case nameof(BuildInTaskTypes.Note):
                var noteTaskUI = new NoteUC(cmSystem, cmFeature, cmTask);
                return(noteTaskUI);
            }

            return(null);
        }
예제 #6
0
        private TreeViewItem GetTVI_System(CMSystemDto cmSystem)
        {
            var cmSystemTreeViewItem = new TreeViewItem()
            {
                Header = cmSystem.Name,
                Tag    = new TreeViewTag(cmSystem)
            };

            var contextMenu = new ContextMenu();

            var addNewFeature = new MenuItem()
            {
                Header = "New Feature"
            };

            contextMenu.Items.Add(addNewFeature);

            var cmFeatureTemplates = CMDataProvider.DataStore.Value.CMFeatures.Value.GetAll_ForSystem(cmSystem.Id, true);

            foreach (var cmFeatureTemplate in cmFeatureTemplates)
            {
                var newFeatureSubMenu = new MenuItem()
                {
                    Header = cmFeatureTemplate.Name
                };
                addNewFeature.Items.Add(newFeatureSubMenu);
                newFeatureSubMenu.Click += (sender, e) =>
                {
                    var newFeatureDialog = new FeatureCreator(cmFeatureTemplate);
                    newFeatureDialog.ShowDialog();

                    var newFeature = newFeatureDialog.CreatedFeature;

                    if (newFeature != null)
                    {
                        // Show any new tasks after the feature has been created
                        ShowFilteredTasks();
                        new FeatureEditor(newFeature).Show();
                    }
                };
            }

            cmSystemTreeViewItem.ContextMenu = contextMenu;

            return(cmSystemTreeViewItem);
        }
예제 #7
0
        private TreeViewItem GetTVI_DataStore()
        {
            var dataStoreTreeViewItem = new TreeViewItem()
            {
                Header = "Data Store",
                Tag    = new TreeViewTag(new CMDataStoreDto()), // mcbtodo: there isn't currently an instance of cmDataStore availalble for this. Instead expose a Get function somewhere to get it.
            };

            var contextMenu = new ContextMenu();

            var addNewSystemMenu = new MenuItem()
            {
                Header = "Add New System"
            };

            contextMenu.Items.Add(addNewSystemMenu);
            addNewSystemMenu.Click += (sender, e) =>
            {
                var newCMSystem = new CMSystemDto()
                {
                    Name = "New System"
                };

                var opResult = CMDataProvider.DataStore.Value.CMSystems.Value.Insert(newCMSystem);
                if (opResult.Errors.Any())
                {
                    MessageBox.Show(opResult.ErrorsCombined);
                    return;
                }

                var systemTVI = GetTVI_System(newCMSystem);
                dataStoreTreeViewItem.Items.Add(systemTVI);
            };

            dataStoreTreeViewItem.ContextMenu = contextMenu;

            dataStoreTreeViewItem.Selected += TreeConfiguration_NodeSelected;

            return(dataStoreTreeViewItem);
        }
예제 #8
0
 /// <summary>
 /// The UI that is shown when editing a task
 /// </summary>
 /// <param name="cmTaskType"></param>
 /// <param name="cmSystem"></param>
 /// <param name="cmFeature"></param>
 /// <param name="cmTask"></param>
 /// <returns></returns>
 public abstract UserControl GetTaskUI(CMTaskTypeDto cmTaskType, CMSystemDto cmSystem, CMFeatureDto cmFeature, CMTaskDto cmTask);
예제 #9
0
 public SystemConfigUC(Config configWindow, CMSystemDto cmSystem)
 {
     InitializeComponent();
     this.cmSystem     = cmSystem;
     this.ConfigWindow = configWindow;
 }
예제 #10
0
        private TreeViewItem GetTVI_System(CMSystemDto cmSystem)
        {
            var cmSystemTreeViewItem = new TreeViewItem()
            {
                Header = cmSystem.Name,
                Tag    = new TreeViewTag(cmSystem)
            };

            var contextMenu = new ContextMenu();

            var addNewFeatureTemplate = new MenuItem()
            {
                Header = "Add New Feature Template"
            };

            contextMenu.Items.Add(addNewFeatureTemplate);
            addNewFeatureTemplate.Click += (sender, e) =>
            {
                var newCMFeatureTemplate = new CMFeatureDto()
                {
                    Name       = "New Feature Template",
                    CMSystemId = cmSystem.Id
                };

                var opResult = CMDataProvider.DataStore.Value.CMFeatures.Value.Insert(newCMFeatureTemplate);
                if (opResult.Errors.Any())
                {
                    MessageBox.Show(opResult.ErrorsCombined);
                    return;
                }

                // Add a set of default transition rules that match the current system states
                int rulePriority = 1;
                var systemStates = CMDataProvider.DataStore.Value.CMSystemStates.Value.GetAll_ForSystem(cmSystem.Id)
                                   .OrderBy(s => s.MigrationOrder) // Default the order to the same as the system states migration
                                   .ToList();
                // Add all rules from the system in the same order as the system. The user can delete the unwanted ones and re-order them
                foreach (var currentState in systemStates)
                {
                    var newTransitionRule = new CMFeatureStateTransitionRuleDto()
                    {
                        CMFeatureId     = newCMFeatureTemplate.Id,
                        Order           = rulePriority++,
                        CMSystemStateId = currentState.Id
                    };
                    var opResultRule = CMDataProvider.DataStore.Value.CMFeatureStateTransitionRules.Value.Insert(newTransitionRule);
                    if (opResultRule.Errors.Any())
                    {
                        MessageBox.Show(opResultRule.ErrorsCombined);
                        return;
                    }
                }

                if (systemStates.Any())
                {
                    MessageBox.Show("Feature state transition rules were automatically added. Please validate these rules.");
                }

                var featureTemplateTVI = GetTVI_FeatureTemplate(newCMFeatureTemplate);
                cmSystemTreeViewItem.Items.Add(featureTemplateTVI);
            };

            var deleteSystemMenu = new MenuItem()
            {
                Header = "Delete System"
            };

            contextMenu.Items.Add(deleteSystemMenu);
            deleteSystemMenu.Click += (sender, e) =>
            {
                var selectedTreeViewTag = treeConfig.GetSelectedTreeViewTag();

                if (selectedTreeViewTag?.Dto == null || !(selectedTreeViewTag?.Dto is CMSystemDto))
                {
                    return;
                }

                // mcbtodo: Add confirm dialogs on delete operations where appropriate
                var selectedCMSystemDto = selectedTreeViewTag.Dto as CMSystemDto;

                var opResult = CMDataProvider.DataStore.Value.CMSystems.Value.Delete(selectedCMSystemDto.Id);
                if (opResult.Errors.Any())
                {
                    MessageBox.Show(opResult.ErrorsCombined);
                    return;
                }
            };

            cmSystemTreeViewItem.ContextMenu = contextMenu;

            return(cmSystemTreeViewItem);
        }