public void ExecuteUndiscoveredDepostisToolTest01() { UndiscoveredDepositsInputParams input = new UndiscoveredDepositsInputParams { // depositsCSVPath = "c:\\temp\\mapWizard\\generalCSV_wHeaders.csv" }; UndiscoveredDepositsTool unDiscoveredTool = new UndiscoveredDepositsTool(); var result = unDiscoveredTool.Execute(input); Assert.IsNotNull(result); }
/// <summary> /// Initialize new instance of UndiscoveredDepositsViewModel /// </summary> /// <param name="logger">Logging for the MapWizard.</param> /// <param name="dialogService">Service for using dialogs and notifications.</param> /// <param name="settingsService">Service for using and editing settings.</param> public UndiscoveredDepositsViewModel(ILogger logger, IDialogService dialogService, ISettingsService settingsService) { this.logger = logger; this.dialogService = dialogService; this.settingsService = settingsService; result = new UndiscoveredDepositsResultModel(); TractChangedCommand = new RelayCommand(TractChanged, CanRunTool); FindTractsCommand = new RelayCommand(FindTractIDs, CanRunTool); RunToolCommand = new RelayCommand(RunTool, CanRunTool); AddEstimationCommand = new RelayCommand(AddEstimation, CanRunTool); AddCustomEstimationCommand = new RelayCommand(AddCustomEstimation, CanRunTool); SelectModelCommand = new RelayCommand(SelectResult, CanRunTool); ShowModelDialog = new RelayCommand(OpenModelDialog, CanRunTool); OpenUndiscDepPlotCommand = new RelayCommand(OpenUndiscDepPlot, CanRunTool); viewModelLocator = new ViewModelLocator(); UndiscoveredDepositsInputParams inputParams = new UndiscoveredDepositsInputParams(); string projectFolder = Path.Combine(settingsService.RootPath, "UndiscDep"); if (!Directory.Exists(projectFolder)) { Directory.CreateDirectory(projectFolder); } string param_json = Path.Combine(projectFolder, "undiscovered_deposits_input_params.json"); if (File.Exists(param_json)) { try { inputParams.Load(param_json); Model = new UndiscoveredDepositsModel { DepositsCsvString = inputParams.DepositsNegativeCSV, CustomFunctionCsvString = inputParams.DepositsCustomCSV, EstN90 = inputParams.N90, EstN50 = inputParams.N50, EstN10 = inputParams.N10, EstN5 = inputParams.N5, EstN1 = inputParams.N1, SelectedTract = inputParams.TractID, NegBinomialExtensionFolder = "", Mark3ExtensionFolder = "", CustomExtensionFolder = "", EstimateRationale = inputParams.EstRationaleTXT, MARK3EstimateRationale = inputParams.Mark3EstRationaleTXT, CustomEstimateRationale = inputParams.CustomEstRationaleTXT, LastRunTract = inputParams.LastRunTract }; } catch (Exception ex) { Model = new UndiscoveredDepositsModel(); logger.Error(ex, "Failed to read json file"); dialogService.ShowNotification("Couldn't load Undiscovered Deposits tool's inputs correctly. Inputs were initialized to default values.", "Error"); viewModelLocator.SettingsViewModel.WriteLogText("Couldn't load Undiscovered Deposits tool's inputs correctly. Inputs were initialized to default values.", "Error"); } } else { Model = new UndiscoveredDepositsModel(); } FindTractIDs(); LoadResults(); try { if (Model.SelectedTract != null) { projectFolder = Path.Combine(projectFolder, Model.SelectedTract); if (Directory.Exists(projectFolder)) { // Find saved results from all the methods. DirectoryInfo projectFolderInfo = null; Model.ModelNames.Clear(); if (Directory.Exists(Path.Combine(projectFolder, "NegativeBinomial"))) { projectFolderInfo = new DirectoryInfo(Path.Combine(projectFolder, "NegativeBinomial")); //NegativeBinomial results FindModelnames(projectFolderInfo); } if (Directory.Exists(Path.Combine(projectFolder, "MARK3"))) { projectFolderInfo = new DirectoryInfo(Path.Combine(projectFolder, "MARK3")); //MARK3 results FindModelnames(projectFolderInfo); } if (Directory.Exists(Path.Combine(projectFolder, "Custom"))) { projectFolderInfo = new DirectoryInfo(Path.Combine(projectFolder, "Custom")); //Custom results FindModelnames(projectFolderInfo); } } } } catch (Exception ex) { logger.Error(ex, "Failed to load model names"); dialogService.ShowNotification("Failed to load model names.", "Error"); viewModelLocator.SettingsViewModel.WriteLogText("Failed to load model names correctly in Undiscovered Deposits tool.", "Error"); } var lastRunFile = Path.Combine(settingsService.RootPath, "UndiscDep", "undiscovered_deposits_last_run.lastrun"); if (File.Exists(lastRunFile)) { Model.LastRunDate = "Last Run: " + (new FileInfo(lastRunFile)).LastWriteTime.ToString(); } }
/// <summary> /// Select certain result. /// </summary> private void SelectResult() { if (Model.ModelNames.Count <= 0) { dialogService.ShowNotification("There are no results to select.", "Error"); viewModelLocator.SettingsViewModel.WriteLogText("There are no results to select.", "Error"); return; } try { var modelDirPath = Model.ModelNames[Model.SelectedModelIndex]; var modelDirInfo = new DirectoryInfo(Model.ModelNames[Model.SelectedModelIndex]); var selectedProjectFolder = Path.Combine(settingsService.RootPath, "UndiscDep", Model.SelectedTract, "SelectedResult"); if (modelDirPath == selectedProjectFolder) { dialogService.ShowNotification("SelectedResult folder cannot be selected. ", "Error"); return; } if (!Directory.Exists(selectedProjectFolder)) { Directory.CreateDirectory(selectedProjectFolder); } DirectoryInfo di = new DirectoryInfo(selectedProjectFolder); foreach (FileInfo file in di.GetFiles()) { file.Delete(); } foreach (DirectoryInfo dir in di.GetDirectories()) { dir.Delete(true); } Result.PlotImage = null; foreach (FileInfo file2 in modelDirInfo.GetFiles()) { var destPath = Path.Combine(selectedProjectFolder, file2.Name); var sourcePath = Path.Combine(modelDirPath, file2.Name); File.Copy(sourcePath, destPath, true); } UndiscoveredDepositsInputParams inputParams = new UndiscoveredDepositsInputParams(); string param_json = Path.Combine(selectedProjectFolder, "undiscovered_deposits_input_params.json"); if (File.Exists(param_json)) { inputParams.Load(param_json); Model.DepositsCsvString = inputParams.DepositsNegativeCSV; Model.CustomFunctionCsvString = inputParams.DepositsCustomCSV; Model.EstN90 = inputParams.N90; Model.EstN50 = inputParams.N50; Model.EstN10 = inputParams.N10; Model.EstN5 = inputParams.N5; Model.EstN1 = inputParams.N1; Model.SelectedTract = inputParams.TractID; Model.NegBinomialExtensionFolder = inputParams.NegBinomialExtensionFolder; Model.Mark3ExtensionFolder = inputParams.Mark3ExtensionFolder; Model.CustomExtensionFolder = inputParams.CustomExtensionFolder; Model.EstimateRationale = inputParams.EstRationaleTXT; Model.MARK3EstimateRationale = inputParams.Mark3EstRationaleTXT; Model.CustomEstimateRationale = inputParams.CustomEstRationaleTXT; File.Copy(param_json, Path.Combine(settingsService.RootPath, "UndiscDep", "undiscovered_deposits_input_params.json"), true); } if (Model.SelectedTract.StartsWith("AGG")) { viewModelLocator.ReportingAssesmentViewModel.Model.SelectedTractCombination = Model.SelectedTract; viewModelLocator.ReportingAssesmentViewModel.CheckFiles(); viewModelLocator.ReportingAssesmentViewModel.SaveInputs(); } else { viewModelLocator.ReportingViewModel.Model.SelectedTract = Model.SelectedTract; viewModelLocator.ReportingViewModel.CheckFiles(); viewModelLocator.ReportingViewModel.SaveInputs(); } dialogService.ShowNotification("Undiscovered Deposits result selected successfully.", "Success"); viewModelLocator.SettingsViewModel.WriteLogText("Undiscovered Deposits result selected successfully.", "Success"); } catch (Exception ex) { logger.Trace(ex, "Error in result selection"); dialogService.ShowNotification("Failed to select result.", "Error"); viewModelLocator.SettingsViewModel.WriteLogText("Failed to select result in Undiscovered Deposits tool.", "Error"); } var metroWindow = (Application.Current.MainWindow as MetroWindow); var dialog = metroWindow.GetCurrentDialogAsync <BaseMetroDialog>(); metroWindow.HideMetroDialogAsync(dialog.Result); LoadResults(); }
/// <summary> /// Run tool with user input. /// </summary> private async void RunTool() { logger.Info("-->{0}", this.GetType().Name); // 1. Collect input parameters string usedMethod = ""; if (Model.SelectedTabIndex == 1) { usedMethod = "Negative"; } else if (Model.SelectedTabIndex == 2) { usedMethod = "Middle"; } else if (Model.SelectedTabIndex == 3) { usedMethod = "Custom"; } if (Model.NegBinomialUseModelName == false) { Model.NegBinomialExtensionFolder = ""; } if (Model.Mark3UseModelName == false) { Model.Mark3ExtensionFolder = ""; } if (Model.CustomUseModelName == false) { Model.CustomExtensionFolder = ""; } UndiscoveredDepositsInputParams input = new UndiscoveredDepositsInputParams { DepositsNegativeCSV = Model.DepositsCsvString, DepositsCustomCSV = Model.CustomFunctionCsvString, EstRationaleTXT = Model.EstimateRationale, Mark3EstRationaleTXT = Model.MARK3EstimateRationale, CustomEstRationaleTXT = Model.CustomEstimateRationale, N90 = Model.EstN90, N50 = Model.EstN50, N10 = Model.EstN10, N5 = Model.EstN5, N1 = Model.EstN1, Method = usedMethod, TractID = Model.SelectedTract, NegBinomialExtensionFolder = Model.NegBinomialExtensionFolder, Mark3ExtensionFolder = Model.Mark3ExtensionFolder, CustomExtensionFolder = Model.CustomExtensionFolder, LastRunTract = "Tract: " + Model.SelectedTract }; // 2. Execute tool UndiscoveredDepositsResult ddResult = default(UndiscoveredDepositsResult); Model.IsBusy = true; try { await Task.Run(() => { UndiscoveredDepositsTool tool = new UndiscoveredDepositsTool(); ddResult = tool.Execute(input) as UndiscoveredDepositsResult; Result.Summary = ddResult.Summary; Result.PlotImage = ddResult.PlotImage; Result.PlotImageBitMap = BitmapFromUri(Result.PlotImage); }); //TODO: refactor this cleaner var projectFolder = Path.Combine(input.Env.RootPath, "UndiscDep", Model.SelectedTract); DirectoryInfo projectFolderInfo = null; Model.ModelNames.Clear(); var modelFolder = Path.Combine(input.Env.RootPath, "UndiscDep", Model.SelectedTract, "NegativeBinomial", Model.NegBinomialExtensionFolder); if (Directory.Exists(Path.Combine(projectFolder, "NegativeBinomial"))) { if (usedMethod == "Negative") { input.Save(Path.Combine(modelFolder, "undiscovered_deposits_input_params.json")); } projectFolderInfo = new DirectoryInfo(Path.Combine(projectFolder, "NegativeBinomial")); //NegativeBinomial results FindModelnames(projectFolderInfo); } modelFolder = Path.Combine(input.Env.RootPath, "UndiscDep", Model.SelectedTract, "Mark3", Model.Mark3ExtensionFolder); if (Directory.Exists(Path.Combine(projectFolder, "MARK3"))) { if (usedMethod == "Middle") { input.Save(Path.Combine(modelFolder, "undiscovered_deposits_input_params.json")); } projectFolderInfo = new DirectoryInfo(Path.Combine(projectFolder, "MARK3")); //MARK3 results FindModelnames(projectFolderInfo); } modelFolder = Path.Combine(input.Env.RootPath, "UndiscDep", Model.SelectedTract, "Custom", Model.CustomExtensionFolder); if (Directory.Exists(Path.Combine(projectFolder, "Custom"))) { if (usedMethod == "Custom") { input.Save(Path.Combine(modelFolder, "undiscovered_deposits_input_params.json")); } projectFolderInfo = new DirectoryInfo(Path.Combine(projectFolder, "Custom")); //Custom results FindModelnames(projectFolderInfo); } string lastRunFile = Path.Combine(Path.Combine(settingsService.RootPath, "UndiscDep", "undiscovered_deposits_last_run.lastrun")); File.Create(lastRunFile).Close(); input.Save(Path.Combine(settingsService.RootPath, "UndiscDep", "undiscovered_deposits_input_params.json")); dialogService.ShowNotification("UndiscoveredDepositsTool completed successfully", "Success"); viewModelLocator.SettingsViewModel.WriteLogText("UndiscoveredDepositsTool completed successfully", "Success"); Model.LastRunDate = "Last Run: " + DateTime.Now.ToString("g"); Model.LastRunTract = "Tract: " + model.SelectedTract; Model.RunStatus = 1; } catch (Exception ex) { logger.Error(ex, "Failed to execute REngine() script"); dialogService.ShowNotification("Run failed. Check output for details.\r\n- Are all input parameters correct?\r\n- Are all input files valid? \r\n- Are all input and output files closed?", "Error"); viewModelLocator.SettingsViewModel.WriteLogText("Undiscovered Deposits Tool run failed. Check output for details.\r\n- Are all input parameters correct?\r\n- Are all input files valid? \r\n- Are all input and output files closed?", "Error"); Model.RunStatus = 0; } finally { Model.IsBusy = false; } logger.Info("<--{0} completed", this.GetType().Name); }