public async Task RefreshAsync()
        {
            ParseInfoLines      = "";
            CurrentCodeFragment = new CodeFragmentViewModel();
            CodeFragments       = new ObservableCollection <CodeFragmentViewModel>();
            Metrics             = new ObservableCollection <MetricViewModel>();

            OnParseInfoUpdated("Parsing files started");

            _project = await _parser.ParseAsync(_sourcePath);

            if (_project != null)
            {
                OnParseInfoUpdated("Parsing files finished");
            }
            else
            {
                OnParseInfoUpdated("Error: Parsing failed");
                return;
            }

            FillCodeFragments();

            OnParseInfoUpdated("Parsed " + _project.GetClassCount() + " classes in " + _project.GetCompilationUnitsCount() + " compilation units");
        }
        private void FillCodeFragments()
        {
            foreach (var compilationUnit in _project.CompilationUnits)
            {
                foreach (var cl in compilationUnit.Classes)
                {
                    var clItem = new CodeFragmentViewModel(cl);
                    CodeFragments.Add(clItem);

                    foreach (var method in cl.Children)
                    {
                        var mItem = new CodeFragmentViewModel(method);
                        clItem.AddChild(mItem);
                    }
                }
            }

            UpdateCodeFragments();
        }
        private void ShowCodeFragment(CodeFragmentViewModel codeFragment)
        {
            if (codeFragment != null)
            {
                CurrentCodeFragment = codeFragment;

                Metrics = new ObservableCollection <MetricViewModel>();

                foreach (var metric in codeFragment.Model.Metrics)
                {
                    Metrics.Add(new MetricViewModel(metric));
                }



                CodeSmells = new ObservableCollection <CodeSmellViewModel>();
                foreach (var codesmell in codeFragment.Model.CodeSmells)
                {
                    CodeSmells.Add(new CodeSmellViewModel(codesmell));
                }
            }
        }
        public MainWindowViewModel(AsyncParserWrapper asyncParser, ApplicationInterfaces.IOService ioService, string path = null)
        {
            if (path != null)
            {
                _sourcePath = path;
            }
            else
            {
                //TODO: remove hardcoded paths

                //_sourcePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\CodeProjects\spring-boot\spring-boot-project\spring-boot\src\main\java\org\springframework\boot";
                //_sourcePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\CodeProjects\ganttproject-2.8.5\ganttproject\ganttproject\src\net\sourceforge\ganttproject";
                _sourcePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\CodeProjects\junit-4.12\junit4\src\main";
            }

            _project            = new Project();
            _parser             = asyncParser;
            _ioService          = ioService;
            CurrentCodeFragment = new CodeFragmentViewModel();

            ExitCommand             = new RelayCommand(() => Environment.Exit(0));
            RefreshCommand          = new RelayCommand(Refresh);
            OpenCommand             = new RelayCommand(OpenFolder);
            LoadProjectCommand      = new RelayCommand(LoadProject);
            SaveProjectCommand      = new RelayCommand(SaveProject);
            ShowCodeFragmentCommand = new RelayCommand <CodeFragmentViewModel>(ShowCodeFragment);

            NextCommand = new RelayCommand(SelectNextFragment);
            PrevCommand = new RelayCommand(SelectPreviousFragment);

            ClosingCommand = new RelayCommand(Closing);

            _filename = "CodeSnifferSavedProject" + System.DateTime.Now.ToString("_Hmm_ddMMyyyy") + ".json";

            _dataSetFilename = "TrainingSet" + System.DateTime.Now.ToString("_Hmm_ddMMyyyy") + ".csv";
        }
 public void AddChild(CodeFragmentViewModel codeItem)
 {
     Children.Add(codeItem);
 }
 private CodeFragmentViewModel FindRelatedParent(CodeFragmentViewModel codeFragment)
 {
     return(CodeFragments.Where(x => x.Children.Contains(codeFragment)).FirstOrDefault());
 }