private void runBatchCalcs() { var _calcNames = new ObservableCollection <string>(); var fileDialog = new OpenFileDialog(); fileDialog.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory; fileDialog.ShowDialog(); var filePath = fileDialog.FileName; List <CalcCore.ICalc> returnList = new List <CalcCore.ICalc>(); string line = ""; string[] lineItems; try { var fs = File.OpenRead(filePath); var reader = new StreamReader(fs); var headerLine = reader.ReadLine();//assumes first row is headers var listHeaders = headerLine.Split(','); int number = 0; while (!reader.EndOfStream) { CalcCore.ICalc newCalc; line = reader.ReadLine(); lineItems = line.Split(','); if (lineItems.Length > listHeaders.Length) { System.Windows.MessageBox.Show("An error occured. Check your path doesn't contain any coma.", "", MessageBoxButton.OK, MessageBoxImage.Error); break; } CalcAssembly calcType = Assemblies[0]; foreach (var assembly in Assemblies) { if (assembly.Name == lineItems[0]) { calcType = assembly; } else if (assembly.AltNames != null) { foreach (var name in assembly.AltNames) { if (name == lineItems[0]) { calcType = assembly; } } } } newCalc = (CalcCore.ICalc)Activator.CreateInstance(calcType.Class); newCalc.InstanceName = lineItems[1]; var inputs = newCalc.GetInputs(); for (int i = 2; i < lineItems.Count(); i++) { var input = inputs.Find(a => a.Name == listHeaders[i]); if (input != null) { input.ValueAsString = lineItems[i]; } } number++; newCalc.UpdateCalc(); ViewModels.Add(new CalculationViewModel(newCalc, _plugins)); } SelectedViewModel = ViewModels.Count - 1; } catch (Exception e) { System.Windows.MessageBox.Show(e.Message, "", MessageBoxButton.OK, MessageBoxImage.Error); } }
private void openCalc() { try { var openDialog = new OpenFileDialog(); openDialog.Filter = @"Calc files |*.JSON"; openDialog.InitialDirectory = activeDirectory != null ? activeDirectory : Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); //openDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); openDialog.Multiselect = true; if (openDialog.ShowDialog() != DialogResult.OK) { return; } activeDirectory = Path.GetDirectoryName(openDialog.FileName); foreach (var filePath in openDialog.FileNames) { bool inputMissing = false; string inputMissingMessage = ""; string openObj = System.IO.File.ReadAllText(filePath); var deserialiseType = new { InstanceName = "", TypeName = "", ClassName = "", Inputs = new List <deserialiseCalcValue>() }; var deserialiseObj = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(openObj, deserialiseType); CalcAssembly calcType = Assemblies[0]; foreach (var assembly in Assemblies) { if (assembly.Name == deserialiseObj.ClassName) { calcType = assembly; } else if (assembly.AltNames != null) { foreach (var name in assembly.AltNames) { if (name == deserialiseObj.ClassName) { calcType = assembly; } } } } CalcCore.ICalc calcInstance = (CalcCore.ICalc)Activator.CreateInstance(calcType.Class); foreach (var item in deserialiseObj.Inputs) { // Need to find a tidy way to do this... var input = calcInstance.Inputs.Find(a => a.Name == item.Name); if (input != null) { input.ValueAsString = item.ValueAsString; } else { inputMissing = true; inputMissingMessage += "The input \"" + item.Name + "\" in file does not exist in calc" + Environment.NewLine; } } calcInstance.InstanceName = deserialiseObj.InstanceName; calcInstance.UpdateCalc(); var newCalcVM = new CalculationViewModel(calcInstance, _plugins); newCalcVM.Filepath = filePath; ViewModels.Add(newCalcVM); SelectedViewModel = ViewModels.Count - 1; if (inputMissing) { System.Windows.MessageBox.Show(inputMissingMessage); } } } catch (Exception ex) { System.Windows.MessageBox.Show("Oops..." + Environment.NewLine + ex.Message); return; } }