Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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;
            }
        }