static Byte[] UpdateScenarioFile(FileReader reader, String jsonpath, List <TextItem> stringtableitems)
        {
            Assert.IsNotNull(reader, nameof(reader));
            Assert.IsValidString(jsonpath, nameof(jsonpath));
            Assert.IsNotNull(stringtableitems, nameof(stringtableitems));

            var scenariofile = new ScenarioFile(reader);
            var textitems    = JsonTextItemFileIO.ReadFromFile(jsonpath);

            var scenariotext_index = 0;

            scenariofile.VisitOperands(x => x.Type == Bytecode.OperandType.String, x => new Bytecode.Operand(Bytecode.OperandType.String, textitems[scenariotext_index++].GetBestText()));

            var stringtable = scenariofile.GetStringTable();

            for (var i = 0; i != stringtable.Count; ++i)
            {
                var textitem = stringtableitems.FirstOrDefault(x => x.Text == stringtable[i]);
                if (textitem != null && textitem.Translation != "")
                {
                    stringtable[i] = textitem.Translation;
                }
            }

            scenariofile.UpdateStringTable(stringtable);

            scenariofile.Fix();

            return(scenariofile.Write(reader.Encoding));
        }
예제 #2
0
        public MainWindow ResolveMainWindow(string[] args)
        {
            MainWindow       client        = new MainWindow();
            ScenarioFile     dairyScenario = new ScenarioFile();
            ScenarioFile     fieldScenario = new ScenarioFile();
            ScenarioDefaults defaults      = new ScenarioDefaults();
            //string pathToWeatherDatabase = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Assets", "Database", "Weather");
            string pathToWeatherDatabase = Path.Combine(
                Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "DairyCropSyst", "Database", "Weather");

            WeatherGrabber grabber = new WeatherGrabber(pathToWeatherDatabase);
            ScenarioReader reader  =
                new ScenarioReader(dairyScenario, fieldScenario);
            ScenarioWriter writer =
                new ScenarioWriter(dairyScenario, fieldScenario, defaults, grabber);
            ScenarioViewModel context = new ScenarioViewModel(reader, writer);

            client.DataContext = context;

            if (args.Length == 1)
            {
                tryOpenFile(args[0], context);
            }

            return(client);
        }
예제 #3
0
        public void Write_SimpleScenario_WritesAllValues()
        {
            // Arrange
            var i = new Injector();
            var s = i.GetSimpleScenario();

            Directory.CreateDirectory(scenDirPath);

            var field        = new ScenarioFile();
            var dairy        = new ScenarioFile();
            var scenDefaults = new ScenarioDefaults();
            var grabber      = new WeatherGrabber(@"Assets\Database\Weather");

            var sut = new ScenarioWriter(dairy, field, scenDefaults, grabber);

            // Act
            sut.Write(s, scenDirPath);

            // Assert
            bool filesMatch = checkFilesMatch(
                Path.Combine(scenDirPath, ".NIFA_dairy_scenario").ToString(),
                @"Assets\simpleScenario.NIFA_dairy_scenario");

            Assert.IsTrue(filesMatch);
        }
예제 #4
0
        public void Clear_SectionNotPresent_ReturnsEmpty()
        {
            // Arrange
            ScenarioFile sut  = new ScenarioFile();
            string       sect = "not-a-section";
            // Act
            var actual = sut.Clear(sect);

            // Assert
            Assert.AreEqual(0, actual.Count);
        }
예제 #5
0
        public void Load_InvalidPath_ThrowsException()
        {
            // Arrange
            var field = new ScenarioFile();
            var dairy = new ScenarioFile();

            var sut = new ScenarioReader(field, dairy);

            // Act
            sut.Load("");

            // Assert - Expect exception
        }
        public ScenarioEditorViewModel(EdataContentFile file, EdataFileViewModel ownerVm)
        {
            OwnerFile          = file;
            EdataFileViewModel = ownerVm;

            var reader = new ScenarioReader();

            ScenarioFile = reader.Read(ownerVm.EdataManager.GetRawData(file));

            EditGameModeLogicCommand = new ActionCommand(EditGameModeLogicExecute);
            ZoneEditorCommand        = new ActionCommand(ZoneEditorExecute);
            SaveCommand = new ActionCommand(SaveExecute);
        }
예제 #7
0
        static Tuple <List <String>, List <String> > ReadScenarioFile(FileReader reader)
        {
            Assert.IsNotNull(reader, nameof(reader));

            var scenariofile = new ScenarioFile(reader);

            var stringlist = new List <String>();

            scenariofile.VisitOperands(x => x.Type == Bytecode.OperandType.String, x => stringlist.Add(x.GetValue <String>()));

            var stringtable = scenariofile.GetStringTable();

            return(Tuple.Create(stringlist, stringtable));
        }
        public void ReadComplexEditWriteSimple()
        {
            // Arrange
            ScenarioFile     dairy       = new ScenarioFile();
            ScenarioFile     field       = new ScenarioFile();
            ScenarioDefaults d           = new ScenarioDefaults();
            WeatherGrabber   g           = new WeatherGrabber(@"Assets\Database\Weather");
            string           readPath    = @"Assets\complexScenario.NIFA_dairy_scenario";
            string           writePath   = @"Assets\IntegrationTest";
            string           comparePath = @"Assets\simpleScenario.NIFA_dairy_scenario";
            ScenarioReader   r           = new ScenarioReader(dairy, field);
            ScenarioWriter   w           = new ScenarioWriter(dairy, field, d, g);

            Directory.CreateDirectory(writePath);

            // Act
            r.Load(readPath);
            Scenario scenario = r.Parse();

            scenario.Description = "";

            scenario.Cow.BodyMass_kg                    = 635;
            scenario.Cow.DryMatterIntake_kg_d           = 24;
            scenario.Cow.MilkProduction_kg_d            = 34;
            scenario.Cow.CrudeProteinDiet_percent       = 17.6;
            scenario.Cow.StarchDiet_percent             = 12.83;
            scenario.Cow.AcidDetergentFiberDiet_percent = 26.08;

            scenario.Barn.ManureAlleyArea_m2 = 3000;
            scenario.Barn.NumberCows_cnt     = 1000;

            scenario.Lagoon.SurfaceArea_m2 = 142250;
            scenario.Lagoon.VolumeMax_m3   = 519213;

            scenario.Fertigation.Enabled           = false;
            scenario.Field.Id                      = "field";
            scenario.AnaerobicDigester.Enabled     = false;
            scenario.FineSeparator.Enabled         = false;
            scenario.NutrientRecovery.Enabled      = false;
            scenario.ReceiveOffFarmBiomass.Enabled = false;

            w.Write(scenario, writePath);

            // Assert
            Assert.IsTrue(
                checkFilesMatch(
                    comparePath, Path.Combine(writePath, ".NIFA_dairy_scenario")));
        }
예제 #9
0
        public void LoadParse_SimpleScenario_ParsesCorrectly()
        {
            /// Arrange
            var dairy  = new ScenarioFile();
            var field  = new ScenarioFile();
            var reader = new ScenarioReader(dairy, field);
            var sut    = new Scenario();

            var injector = new Injector();
            var s        = injector.GetSimpleScenario();

            /// Act
            reader.Load(@"Assets\simpleScenario.NIFA_dairy_scenario");
            sut = reader.Parse();

            /// Assert
            //(Only testing subset of all data)

            // [scenario]
            Assert.AreEqual(s.DetailsUrl, sut.DetailsUrl);
            Assert.AreEqual(s.StartDate.Year, sut.StartDate.Year);
            Assert.AreEqual(
                s.PathToWeatherFile,
                sut.PathToWeatherFile);
            Assert.AreEqual(s.Latitude, sut.Latitude);
            Assert.AreEqual(s.Longitude, sut.Longitude);

            // [cow_description]
            Assert.AreEqual(s.Cow.BodyMass_kg, sut.Cow.BodyMass_kg);
            Assert.AreEqual(s.Cow.IsLactating, sut.Cow.IsLactating);
            Assert.AreEqual(s.Cow.PhManure_mol_L, sut.Cow.PhManure_mol_L);
            Assert.AreEqual(s.Cow.MetabolizableEnergyDiet_MJ_d, sut.Cow.MetabolizableEnergyDiet_MJ_d);

            // [barn]
            Assert.AreEqual(s.Barn.Bedding, sut.Barn.Bedding);
            Assert.AreEqual(s.Barn.BeddingAddition, sut.Barn.BeddingAddition);
            Assert.AreEqual(s.Barn.CleaningFrequency, sut.Barn.CleaningFrequency);

            // [manure_storage] (lagoon)
            Assert.AreEqual(s.Lagoon.SurfaceArea_m2, sut.Lagoon.SurfaceArea_m2);
            Assert.AreEqual(s.Lagoon.VolumeMax_m3, sut.Lagoon.VolumeMax_m3);
            Assert.AreEqual(s.Lagoon.PH_mol_L, sut.Lagoon.PH_mol_L);

            // [fertigation_management]
            Assert.AreEqual(s.Fertigation.ApplicationMethod, sut.Fertigation.ApplicationMethod);
            Assert.AreEqual(s.Fertigation.AmountRemoved_percent, sut.Fertigation.AmountRemoved_percent);
            Assert.AreEqual(s.Fertigation.TargetField_id, sut.Fertigation.TargetField_id);
        }
예제 #10
0
        public ZoneEditorData(ScenarioFile sf, string path)
        {
            scenarioFile = sf;
            editor       = new Editor(this, path);

            data = sf.NdfBinary;
            foreach (var area in sf.ZoneData.AreaManagers[1])
            {
                //var nodes=Geometry.getOutline(area.Content);
                //var zone = new Outline(nodes);
                //zoneOutlines.Add(zone);
                zoneNumber++;
                var zone = new Zone(editor, area);
                scenarioItems.Add(zone);
                zones.Add(zone);
                editor.addScenarioItem(zone);
                Console.WriteLine("name:");
                Console.WriteLine(area.Name);
                Console.WriteLine("en name");

                /*Console.WriteLine("zone\n");
                 * foreach (var c in area.Content.ClippedAreas)
                 * {
                 *  Console.Write("vertices=[");
                 * var scen = area.Content;
                 * foreach (var v in scen.Vertices.GetRange(c.StartVertex,c.VertexCount))
                 * {
                 * Console.WriteLine("{0:G},{1:G},{2:G};", (int)v.X, (int)v.Y, (int)v.Center);
                 * }
                 * Console.WriteLine("]");
                 *
                 * Console.Write("tri=[");
                 * foreach (var v in scen.Triangles.GetRange(c.StartTriangle,c.TriangleCount))
                 * {
                 * Console.WriteLine("{0},{1},{2};", (int)v.Point1, (int)v.Point2, (int)v.Point3);
                 * }
                 * Console.WriteLine("]");
                 * }*/
            }

            doZoneProperties();
            Application.EnableVisualStyles();
            Application.Run(editor);
            //Application.SetCompatibleTextRenderingDefault(false);
        }
예제 #11
0
        public ScenarioFile Read(Stream s)
        {
            var f = new ScenarioFile();

            var buffer = new byte[10];

            s.Read(buffer, 0, buffer.Length);

            if (!Utils.ByteArrayCompare(Encoding.ASCII.GetBytes("SCENARIO\r\n"), buffer))
            {
                throw new InvalidDataException("Wrong scenario header magic!");
            }

            buffer = new byte[16];
            s.Read(buffer, 0, buffer.Length);
            f.Checksum = buffer;

            s.Seek(2, SeekOrigin.Current);

            buffer = new byte[4];
            s.Read(buffer, 0, buffer.Length);
            f.Version = BitConverter.ToInt32(buffer, 0);

            s.Read(buffer, 0, buffer.Length);
            int subFilesCount = BitConverter.ToInt32(buffer, 0);

            for (int i = 0; i < subFilesCount; i++)
            {
                f.lastPartStartByte = s.Position;
                s.Read(buffer, 0, buffer.Length);
                var contentFileBuffer = new byte[BitConverter.ToUInt32(buffer, 0)];
                s.Read(contentFileBuffer, 0, contentFileBuffer.Length);
                f.ContentFiles.Add(contentFileBuffer);
            }

            var reader = new NdfbinReader();

            f.NdfBinary = reader.Read(f.ContentFiles[1]);

            f.ZoneData = ReadZoneData(f.ContentFiles[0]);
            uncompressedPrintToFile(f.ContentFiles[2], "thirdPart");
            return(f);
        }
예제 #12
0
        public void ClearNumberedSectionPresent_ReturnsSectionAndCleared()
        {
            // Arrange
            ScenarioFile sut = new ScenarioFile();
            Dictionary <string, string> sect1 = new Dictionary <string, string>();

            sect1.Add("key1", "val1");
            Dictionary <string, string> sect2 = new Dictionary <string, string>();

            sect2.Add("key2", "val2");
            sut.SetSection("sect:1", sect1);
            sut.SetSection("sect:2", sect2);

            // Act
            var actual = sut.Clear("sect");

            // Assert
            Assert.AreEqual(0, sut.SaveContents().Length);
            Assert.AreEqual(sect2["key2"], actual["sect:2"]["key2"]);
        }
예제 #13
0
        public byte[] Write(ScenarioFile file)
        {
            var scenarioData = new List <byte>();

            scenarioData.AddRange(Encoding.ASCII.GetBytes("SCENARIO\r\n"));
            scenarioData.AddRange(BitConverter.GetBytes(Version));
            scenarioData.AddRange(BitConverter.GetBytes(file.ContentFiles.Count));

            file.ContentFiles[0] = CreateAreaSubFile(file.ZoneData);

            var ndfBinWriter = new NdfbinWriter();

            file.ContentFiles[1] = ndfBinWriter.Write(file.NdfBinary, false); // something wrong here; enohka: Should be fixed by now?


            foreach (var contentFile in file.ContentFiles)
            {
                int padding = Utils.RoundToNextDivBy4(contentFile.Length) - contentFile.Length;

                scenarioData.AddRange(BitConverter.GetBytes(contentFile.Length + padding));
                scenarioData.AddRange(contentFile);

                var paddingLst = new List <byte>();

                for (int p = 0; p < padding; p++)
                {
                    paddingLst.Add(0x0);
                }

                scenarioData.AddRange(paddingLst);
            }

            byte[] hash = MD5.Create().ComputeHash(scenarioData.ToArray());

            scenarioData.InsertRange(10, hash.Concat(new byte[] { 0x00, 0x00 }));

            return(scenarioData.ToArray());
        }
예제 #14
0
        public void LoadParse_ComplexScenario_ParsesCorrectly()
        {
            /// Arrange
            var dairy  = new ScenarioFile();
            var field  = new ScenarioFile();
            var reader = new ScenarioReader(dairy, field);

            var injector = new Injector();
            var s        = injector.GetComplexScenario();

            var sut = new Scenario();

            /// Act
            reader.Load(@"Assets\complexScenario.NIFA_dairy_scenario");
            sut = reader.Parse();

            /// Assert
            //(Only testing subset of all data)

            // [scenario]
            Assert.AreEqual(s.Description, sut.Description);
            Assert.AreEqual(s.StartDate.Year, sut.StartDate.Year);
            Assert.AreEqual(
                s.SimulationPeriodMode,
                sut.SimulationPeriodMode);
            Assert.AreEqual(s.Latitude, sut.Latitude);
            Assert.AreEqual(s.Longitude, sut.Longitude);

            // [barn]
            Assert.AreEqual(s.Barn.NumberCows_cnt, sut.Barn.NumberCows_cnt);
            Assert.AreEqual(s.Barn.CleaningFrequency, sut.Barn.CleaningFrequency);

            // [manure_storage] (lagoon)
            Assert.AreEqual(s.Lagoon.SurfaceArea_m2, sut.Lagoon.SurfaceArea_m2);
            Assert.AreEqual(s.Lagoon.VolumeMax_m3, sut.Lagoon.VolumeMax_m3);
            Assert.AreEqual(s.Lagoon.PH_mol_L, sut.Lagoon.PH_mol_L);

            // [manure_separator] (AD)
            Assert.AreEqual(s.AnaerobicDigester.Id, sut.AnaerobicDigester.Id);
            Assert.AreEqual(s.AnaerobicDigester.Style, sut.AnaerobicDigester.Style);
            Assert.AreEqual(s.AnaerobicDigester.SourceFacility, sut.AnaerobicDigester.SourceFacility);
            Assert.AreEqual(s.AnaerobicDigester.LiquidFacility, sut.AnaerobicDigester.LiquidFacility);
            Assert.AreEqual(s.AnaerobicDigester.SolidFacility, sut.AnaerobicDigester.SolidFacility);

            // [manure_separator] (course sep)
            Assert.AreEqual(s.CourseSeparator.Id, sut.CourseSeparator.Id);
            Assert.AreEqual(s.CourseSeparator.Style, sut.CourseSeparator.Style);
            Assert.AreEqual(s.CourseSeparator.SourceFacility, sut.CourseSeparator.SourceFacility);
            Assert.AreEqual(s.CourseSeparator.LiquidFacility, sut.CourseSeparator.LiquidFacility);
            Assert.AreEqual(s.CourseSeparator.SolidFacility, sut.CourseSeparator.SolidFacility);

            // [manure_separator] (fine sep)
            Assert.AreEqual(s.FineSeparator.Id, sut.FineSeparator.Id);
            Assert.AreEqual(s.FineSeparator.Style, sut.FineSeparator.Style);
            Assert.AreEqual(s.FineSeparator.SourceFacility, sut.FineSeparator.SourceFacility);
            Assert.AreEqual(s.FineSeparator.LiquidFacility, sut.FineSeparator.LiquidFacility);
            Assert.AreEqual(s.FineSeparator.SolidFacility, sut.FineSeparator.SolidFacility);

            // [manure_separator] (nut rec)
            Assert.AreEqual(s.NutrientRecovery.Id, sut.NutrientRecovery.Id);
            Assert.AreEqual(s.NutrientRecovery.Style, sut.NutrientRecovery.Style);
            Assert.AreEqual(s.NutrientRecovery.SourceFacility, sut.NutrientRecovery.SourceFacility);
            Assert.AreEqual(s.NutrientRecovery.LiquidFacility, sut.NutrientRecovery.LiquidFacility);
            Assert.AreEqual(s.NutrientRecovery.SolidFacility, sut.NutrientRecovery.SolidFacility);

            // [receive_off_farm_biomass:1]
            Assert.AreEqual(s.ReceiveOffFarmBiomass.ApplicationDate.Year, sut.ReceiveOffFarmBiomass.ApplicationDate.Year);
            Assert.AreEqual(s.ReceiveOffFarmBiomass.Biomatter.Mass_kg, sut.ReceiveOffFarmBiomass.Biomatter.Mass_kg);
            Assert.AreEqual(s.ReceiveOffFarmBiomass.Biomatter.CarbonOrganicResilient_kg, sut.ReceiveOffFarmBiomass.Biomatter.CarbonOrganicResilient_kg);

            // [fertigation_management]
            Assert.AreEqual(s.Fertigation.ApplicationMethod, sut.Fertigation.ApplicationMethod);
            Assert.AreEqual(s.Fertigation.AmountRemoved_percent, sut.Fertigation.AmountRemoved_percent);
            Assert.AreEqual(s.Fertigation.TargetField_id, sut.Fertigation.TargetField_id);
        }
예제 #15
0
        private static ScenarioFile[] Block( ScenarioFile[] ScenarioStrings )
        {
            List<ScenarioFile> ScenarioBlocks = new List<ScenarioFile>();

            for ( int i = 0; i < ScenarioStrings.Length; i++ ) {
                try {
                    if ( ScenarioStrings[i].Pointer + 4 == ScenarioStrings[i + 1].Pointer ) {
                        ScenarioFile s = new ScenarioFile();
                        s.Pointer = ScenarioStrings[i].Pointer - 8;
                        s.Name = ScenarioStrings[i].Text;
                        s.Text = ScenarioStrings[i + 1].Text;
                        ScenarioBlocks.Add( s );
                        i++;
                    } else {
                        ScenarioFile s = new ScenarioFile();
                        s.Pointer = ScenarioStrings[i].Pointer - 12;
                        s.Name = "";
                        s.Text = ScenarioStrings[i].Text;
                        ScenarioBlocks.Add( s );
                    }
                } catch ( IndexOutOfRangeException ) {
                    ScenarioFile s = new ScenarioFile();
                    s.Pointer = ScenarioStrings[i].Pointer - 12;
                    s.Name = "";
                    s.Text = ScenarioStrings[i].Text;
                    ScenarioBlocks.Add( s );
                }
            }

            return ScenarioBlocks.ToArray();
        }
예제 #16
0
        public static ScenarioFile[] GetSQL( String ConnectionString, int FileNumber, String GracesJapaneseConnectionString,
            bool DumpIdentifyerStrings, bool ForceJapaneseDump, bool DumpDebug, bool SortByPointerRef)
        {
            List<ScenarioFile> ScenarioFiles = new List<ScenarioFile>();

            SQLiteConnection Connection = new SQLiteConnection( ConnectionString );
            Connection.Open();

            using ( SQLiteTransaction Transaction = Connection.BeginTransaction() )
            using ( SQLiteCommand Command = new SQLiteCommand( Connection ) ) {
                if ( FileNumber == -1 ) {
                    Command.CommandText = "SELECT english, PointerRef, StringID";
                    if ( DumpIdentifyerStrings ) {
                        Command.CommandText += ", IdentifyString";
                    }
                    Command.CommandText += " FROM Text"
                        + ( DumpDebug ? "" : " WHERE status != -1" )
                        + " ORDER BY " + ( SortByPointerRef ? "PointerRef" : "ID" );
                } else {
                    // for VScenarioMissing
                    Command.CommandText = "SELECT english, PointerRef, StringID FROM Text WHERE"
                        + ( DumpDebug ? "" : " status != -1 AND" )
                        + " OriginalFile = " + FileNumber.ToString()
                        + " ORDER BY " + ( SortByPointerRef ? "PointerRef" : "ID" );
                }

                SQLiteDataReader r = Command.ExecuteReader();
                while ( r.Read() ) {
                    String SQLText;

                    try {
                        SQLText = r.GetString( 0 ).Replace( "''", "'" );
                    } catch ( System.InvalidCastException ) {
                        SQLText = null;
                    }

                    int PointerRef = r.GetInt32( 1 );
                    int StringID = r.GetInt32( 2 );

                    String IdentifyString = null;

                    if ( DumpIdentifyerStrings ) {
                        try {
                            IdentifyString = r.GetString( 3 );
                        } catch ( System.InvalidCastException ) {
                            IdentifyString = null;
                        }
                    }

                    ScenarioFile sc = new ScenarioFile();

                    if ( ForceJapaneseDump || String.IsNullOrEmpty( SQLText ) ) {
                        sc.Text = GetJapanese( GracesJapaneseConnectionString, StringID );
                    } else {
                        sc.Text = SQLText;
                    }

                    sc.Pointer = PointerRef;
                    sc.IdentifyerString = IdentifyString;

                    ScenarioFiles.Add( sc );
                }

                Transaction.Rollback();
            }
            return ScenarioFiles.ToArray();
        }
예제 #17
0
        // Load scenario file into grid view
        private void LoadFile()
        {
            try
            {
                // Clear grid view
                gridFileStep.Rows.Clear();

                // Get file path
                if (listFile.Items.Count > 0 && listFile.Text != "" && listFile.SelectedIndex >= 0)
                {
                    // Get file path
                    ComboboxItem objCombo = (ComboboxItem)listFile.SelectedItem;
                    string filePath = objCombo.GetFilePath();

                    // Load file path
                    ScenarioFile objSceFile = new ScenarioFile();
                    objSceFile.OpenFile(filePath);
                    objSceFile.ReadStep();

                    // Add step to GUI
                    for (int i=0; i< objSceFile.lstStep.Count(); i++)
                    {
                        DataGridViewRow row = (DataGridViewRow)gridFileStep.Rows[0].Clone();
                        ScenarioStep stepCurrent = objSceFile.lstStep[i];
                        row.Cells[0].Value = i;
                        row.Cells[1].Value = stepCurrent.command;
                        row.Cells[2].Value = stepCurrent.data;
                        gridFileStep.Rows.Add(row);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error to read scenario file\nError =  " + ex.Message);
            }
        }