diff --git a/VECTO3GUI2020/App.xaml.cs b/VECTO3GUI2020/App.xaml.cs index 7475864d68bb7ac004fc538fce28a7ddd985a8b9..b1e0c92422bfea0b053112b001f3d9574838dc58 100644 --- a/VECTO3GUI2020/App.xaml.cs +++ b/VECTO3GUI2020/App.xaml.cs @@ -17,9 +17,8 @@ namespace VECTO3GUI2020 { private IKernel container; - private IKernel multiStageChildContainer; - protected override void OnStartup(StartupEventArgs e) + protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); ConfigureContainer(); @@ -37,7 +36,7 @@ namespace VECTO3GUI2020 new XMLWriterFactoryModule(), new FactoryModule(), new MultistageModule() - ) ; + ); @@ -55,20 +54,11 @@ namespace VECTO3GUI2020 private void ConfigureMainWindow() { - //Windows to test controls - //var testwindow = container.Get<Test>(); - //testwindow.Show(); - - - - var mainwindow = container.Get<MainWindow>(); + var mainwindow = container.Get<MainWindow>(); this.MainWindow = mainwindow; Application.Current.MainWindow = mainwindow; this.MainWindow.Show(); - - - - } + } } diff --git a/VECTO3GUI2020/Helper/DialogHelper.cs b/VECTO3GUI2020/Helper/DialogHelper.cs index 190866f8a6e2fe1eebb9703db9deca096a41a2d3..9609208a1d3ef0c2dfbe981952a0478ece06a7d2 100644 --- a/VECTO3GUI2020/Helper/DialogHelper.cs +++ b/VECTO3GUI2020/Helper/DialogHelper.cs @@ -120,9 +120,9 @@ namespace VECTO3GUI2020.Helper return MessageBox.Show(messageBoxText, caption, button, icon); } - public MessageBoxResult ShowMessageBox(string messageBoxTest, string caption) + public MessageBoxResult ShowMessageBox(string messageBoxText, string caption) { - return MessageBox.Show(messageBoxTest, caption); + return MessageBox.Show(messageBoxText, caption); } public string SaveToDialog(string initialDirectory, string filter) @@ -205,10 +205,10 @@ namespace VECTO3GUI2020.Helper /// <summary> /// Displays a messagebox /// </summary> - /// <param name="messageBoxTest"></param> + /// <param name="messageBoxText"></param> /// <param name="caption"></param> /// <returns></returns> - MessageBoxResult ShowMessageBox(string messageBoxTest, string caption); + MessageBoxResult ShowMessageBox(string messageBoxText, string caption); string SaveToDialog(string initialDirectory = null, string filter = "All files (*.*|*.*"); diff --git a/VECTO3GUI2020/Ninject/IMultistageDependencies.cs b/VECTO3GUI2020/Ninject/IMultistageDependencies.cs index bc5671491c7ab8d4f854be1583524a0e9e892288..33a375cbb7dc549465730fcc0d49487d789d06fe 100644 --- a/VECTO3GUI2020/Ninject/IMultistageDependencies.cs +++ b/VECTO3GUI2020/Ninject/IMultistageDependencies.cs @@ -12,10 +12,8 @@ namespace VECTO3GUI2020.Ninject public interface IMultistageDependencies { Lazy<IDialogHelper> DialogHelperLazy { get; } - Lazy<IXMLInputDataReader> InputDataReaderLazy { get; } IDialogHelper DialogHelper { get; } - IXMLInputDataReader InputDataReader { get; } IDeclarationInjectFactory InjectFactory { get; } IComponentViewModelFactory ComponentViewModelFactory { get; } diff --git a/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs b/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs index 9468ee481300a52eee98ec43fb30c03f56d4cb59..b268e93677b245278571010fde2f3383fdf23595 100644 --- a/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs +++ b/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs @@ -17,10 +17,6 @@ namespace VECTO3GUI2020.Ninject public IDialogHelper DialogHelper => _dialogHelper.Value; - private readonly Lazy<IXMLInputDataReader> _inputDataReader; - public Lazy<IXMLInputDataReader> InputDataReaderLazy => _inputDataReader; - public IXMLInputDataReader InputDataReader => _inputDataReader.Value; - //private readonly Lazy<XMLValidator> _xmlValidator = new Lazy<XMLValidator>(() => {return }); //public Lazy<XMLValidator> XMLValidatorLazy => _xmlValidator; //public XMLValidator XMLValidator => _xmlValidator.Value; @@ -36,15 +32,13 @@ namespace VECTO3GUI2020.Ninject private readonly Lazy<IDeclarationInjectFactory> _injectFactory; private readonly Lazy<IComponentViewModelFactory> _componentViewModelFactory; public MultistageLazyDependencies( - Lazy<IDialogHelper> dialogHelper, - Lazy<IXMLInputDataReader> inputDataReader, + Lazy<IDialogHelper> dialogHelper, Lazy<IDeclarationInjectFactory> injectFactory, Lazy<IComponentViewModelFactory> componentViewModelFactory, Lazy<IXMLWriterFactory> xmlWriterFactory, Lazy<IMultiStageViewModelFactory> viewModelFactory) { _dialogHelper = dialogHelper; - _inputDataReader = inputDataReader; _componentViewModelFactory = componentViewModelFactory; _injectFactory = injectFactory; _xmlWriterFactory = xmlWriterFactory; diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs index 47b010a3725167ad694ae8c71f1170031affc8e3..9d254753c89d11e0c3f77d45c9ac6b8f47b666ab 100644 --- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs +++ b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs @@ -240,8 +240,7 @@ namespace VECTO3GUI2020.Util.XML.Implementation _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_NumberPassengersLowerDeck, _inputData.NumberOfPassengersLowerDeck)); _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_NumberPassengersUpperDeck, _inputData.NumberOfPassengersUpperDeck)); - - _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_VehicleCode, _inputData.VehicleCode.ToXMLFormat())); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_BodyworkCode, _inputData.VehicleCode.ToXMLFormat())); _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_LowEntry, _inputData.LowEntry)); @@ -257,7 +256,7 @@ namespace VECTO3GUI2020.Util.XML.Implementation ? _inputData.DoorDriveTechnology.ToXMLFormat() : null)); - _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_DeclarationType, _inputData.VehicleDeclarationType)); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_VehicleDeclarationType, _inputData.VehicleDeclarationType)); if (_inputData.ADAS != null) { var adasNamespace = XMLNamespaces.V23; diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs index c24da66929e18e8cdef9752fab1ee663caf01adc..f8647ffb1a012719179a0190cfc07b41ebab0c2d 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.IO; using System.Linq; using System.Runtime.CompilerServices; using System.Windows; @@ -163,17 +164,29 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation var xDoc = xElement.CreateWrapperDocument(XMLNamespaces.V28); Debug.WriteLine(xElement.CreateWrapperDocument(XMLNamespaces.V28).ToString()); - var validator = new XMLValidator(xDoc.ToXmlDocument()); + var valid = false; + var validationError = ""; try { + var validator = new XMLValidator(xDoc.ToXmlDocument()); valid = validator.ValidateXML(XmlDocumentType.DeclarationJobData); + validationError = validator.ValidationError; } catch (Exception e) { - _dialogHelper.Value.ShowMessageBox(e.Message, "Error"); + _dialogHelper.Value.ShowMessageBox(messageBoxText:(e.Message + "\n" + e.InnerException), caption:"Error saving File"); } if (!valid) { - _dialogHelper.Value.ShowMessageBox($"Invalid Document: {validator.ValidationError}", "Error"); - //xDoc.Save(filename, SaveOptions.OmitDuplicateNamespaces); - //LoadVehicleData(filename); + _dialogHelper.Value.ShowMessageBox($"Invalid Document: {validationError}", "Error"); + var tempFile = Path.GetTempFileName(); + try { + xDoc.Save(tempFile, SaveOptions.OmitDuplicateNamespaces); + LoadVehicleData(tempFile); + File.Delete(tempFile); + } catch (Exception e) { + _dialogHelper.Value.ShowMessageBox(e.Message, "Error"); + throw; + } + + } else { xDoc.Save(filename, SaveOptions.OmitDuplicateNamespaces); LoadVehicleData(filename); @@ -183,7 +196,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation private ICommand _loadVehicleDataCommand; private readonly Lazy<IDialogHelper> _dialogHelper; - private readonly Lazy<IXMLInputDataReader> _inputDataReader; + private readonly IXMLInputDataReader _inputDataReader; private string _vehicleInputDataFilePath = null; private readonly IMultistageDependencies _multistageDependencies; private readonly DataSource _dataSource; @@ -209,20 +222,18 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation private bool LoadVehicleData(string fileName) { - IDeclarationInputDataProvider inputData; - IVehicleDeclarationInputData vehicleInputData; try { - inputData = (IDeclarationInputDataProvider)_inputDataReader.Value.CreateDeclaration(fileName); - vehicleInputData = inputData.JobInputData.Vehicle; + var inputData = (IDeclarationInputDataProvider)_inputDataReader.Create(fileName); + var vehicleInputData = inputData.JobInputData.Vehicle; _manufacturingStageViewModel.SetInputData(vehicleInputData); VehicleInputDataFilePath = fileName; } catch (Exception e) { _dialogHelper.Value.ShowMessageBox(e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); - return true; + return false; } - return false; + return true; } public string VehicleInputDataFilePath @@ -233,7 +244,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation #endregion - public MultiStageJobViewModel_v0_1(IMultistageBusInputDataProvider inputData, IMultiStageViewModelFactory vmFactory, IMultistageDependencies multistageDependencies ) + public MultiStageJobViewModel_v0_1(IMultistageBusInputDataProvider inputData, IMultiStageViewModelFactory vmFactory, IMultistageDependencies multistageDependencies, IXMLInputDataReader inputDataReader) { _dataSource = inputData.DataSource; _jobInputData = inputData.JobInputData; @@ -242,7 +253,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation _manufacturingStages =_jobInputData.ManufacturingStages; _primaryVehicle = _jobInputData.PrimaryVehicle; _dialogHelper = multistageDependencies.DialogHelperLazy; - _inputDataReader = multistageDependencies.InputDataReaderLazy; + _inputDataReader = inputDataReader; _manufacturingStageViewModel = vmFactory.GetManufacturingStageViewModel(_consolidateManufacturingStage); _multistageDependencies = multistageDependencies; diff --git a/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs b/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs index f02da4bbe75be1d903ced5c0be99f5487e147979..276894badc7f4d2849fc489f15eb3249b4c73c25 100644 --- a/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs +++ b/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs @@ -2,6 +2,7 @@ using System; using System.IO; using System.Linq; using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; using System.Xml; using Castle.DynamicProxy.Generators.Emitters.SimpleAST; using Moq; @@ -10,6 +11,8 @@ using NUnit.Framework; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.SimulationComponent.Strategies; @@ -50,7 +53,7 @@ namespace Vecto3GUI2020Test deleteFile(fileName); _kernel.Rebind<IDialogHelper>().ToConstant(getMockDialogHelper(fileToSave:fileName).Object); manufacturingStage.SaveInputDataAsCommand.Execute(null); - Assert.True(checkFileExists(fileName)); + Assert.True(checkFileNameExists(fileName)); } @@ -71,7 +74,7 @@ namespace Vecto3GUI2020Test _kernel.Rebind<IDialogHelper>().ToConstant(getMockDialogHelper(fileToSave: saveFileName).Object); manstage.SaveInputDataAsCommand.Execute(null); - Assert.False(checkFileExists(saveFileName)); + Assert.False(checkFileNameExists(saveFileName)); } @@ -105,6 +108,49 @@ namespace Vecto3GUI2020Test loadFile(consolidated_multiple_stages_airdrag); } + [Test] + public void loadAndSaveFullInputDataSample() + { + var vm = loadFile(primary_vehicle_only); + var multiStageJobViewModel = vm.MultiStageJobViewModel as MultiStageJobViewModel_v0_1; + + + var fileToSave = "loadAndSaveFullInputDataTest.xml"; + var mockDialogHelper = getMockDialogHelper(stageInputFullSample, fileToSave); + multiStageJobViewModel.LoadVehicleDataCommand.Execute(null); + + var manufacturingStageViewModel = + multiStageJobViewModel.ManufacturingStageViewModel as ManufacturingStageViewModel_v0_1; + + var vehicleViewModel = + manufacturingStageViewModel.VehicleViewModel as DeclarationInterimStageBusVehicleViewModel_v2_8; + + vehicleViewModel.AirdragModifiedMultistage = true; + Assert.AreEqual(ConsumerTechnology.Electrically, vehicleViewModel.DoorDriveTechnology); + Assert.AreEqual(ConsumerTechnology.Electrically, vm.MultiStageJobViewModel.VehicleInputData.DoorDriveTechnology); + + Assert.IsNotNull(multiStageJobViewModel.VehicleInputData.ManufacturerAddress); + + var fileExists = checkFilePathExists(mockDialogHelper.Object.OpenXMLFileDialog()); + Assert.IsTrue(fileExists); + File.Delete(mockDialogHelper.Object.SaveToXMLDialog()); + + + } + + [Test] + public void loadVehicleInputDataOnly() + { + string inputPath = Path.Combine(DirPath, stageInputFullSample); + var inputDataReader = _kernel.Get<IXMLInputDataReader>(); + var inputData = (IDeclarationInputDataProvider)inputDataReader.Create(inputPath); + var vehicleInputData = inputData.JobInputData.Vehicle; + //_manufacturingStageViewModel.SetInputData(vehicleInputData); + + + Assert.AreEqual(ConsumerTechnology.Electrically, vehicleInputData.DoorDriveTechnology); + } + [Test] public void loadInputFileConsolidatedOneStage() { @@ -134,6 +180,8 @@ namespace Vecto3GUI2020Test Assert.Null(vehicleViewModel_v2_8.WidthInMm); Assert.Null(vehicleViewModel_v2_8.EntranceHeightInMm); + + Assert.Null(vehicleViewModel_v2_8.ConsolidatedHeightInMm); Assert.Null(vehicleViewModel_v2_8.ConsolidatedLengthInMm); Assert.Null(vehicleViewModel_v2_8.ConsolidatedWidthInMm); @@ -193,6 +241,8 @@ namespace Vecto3GUI2020Test MultiStageJobViewModel_v0_1; Assert.NotNull(multiStageViewModel); + var manStageViewModel = multiStageViewModel.ManufacturingStageViewModel as ManufacturingStageViewModel_v0_1; + var vehicleInputData = Path.GetFullPath(DirPath + "vecto_vehicle-stage_input_full-sample.xml"); Assert.IsTrue(File.Exists(vehicleInputData)); @@ -203,7 +253,7 @@ namespace Vecto3GUI2020Test multiStageViewModel.LoadVehicleDataCommand.Execute(null); - var vehicle = multiStageViewModel.VehicleInputData as DeclarationInterimStageBusVehicleViewModel_v2_8; + var vehicle = manStageViewModel.VehicleViewModel as DeclarationInterimStageBusVehicleViewModel_v2_8; Assert.NotNull(vehicle); Assert.AreEqual("VEH-1234567890", vehicle.Identifier); @@ -234,6 +284,9 @@ namespace Vecto3GUI2020Test Assert.AreEqual(VehicleDeclarationType.interim, vehicle.VehicleDeclarationType); + Assert.AreEqual(newMultistageJobViewModel.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle.DoorDriveTechnology, vehicle.DoorDriveTechnology); + + var airdrag = vehicle.MultistageAirdragViewModel; Assert.NotNull(airdrag.AirDragViewModel.XMLSource); diff --git a/Vecto3GUI2020Test/ViewModelTests/ViewModelTestBase.cs b/Vecto3GUI2020Test/ViewModelTests/ViewModelTestBase.cs index ba22491418a29039c6c6bf0d2c40100dfcff173e..74d553fab9808d09a1189ce891551ce1000bd72a 100644 --- a/Vecto3GUI2020Test/ViewModelTests/ViewModelTestBase.cs +++ b/Vecto3GUI2020Test/ViewModelTests/ViewModelTestBase.cs @@ -29,7 +29,7 @@ namespace Vecto3GUI2020Test protected const string stageInputFullSample = "vecto_vehicle-stage_input_full-sample.xml"; - protected IXMLInputDataReader xmlInputReader; + //protected IXMLInputDataReader xmlInputReader; protected IKernel _kernel; private Mock<IDialogHelper> _mockDialogHelper = new Mock<IDialogHelper>(); @@ -46,7 +46,7 @@ namespace Vecto3GUI2020Test new FactoryModule(), new MultistageModule() ); - xmlInputReader = _kernel.Get<IXMLInputDataReader>(); + //xmlInputReader = _kernel.Get<IXMLInputDataReader>(); _kernel.Rebind<IDialogHelper>().ToConstant(_mockDialogHelper.Object); } @@ -58,14 +58,21 @@ namespace Vecto3GUI2020Test _kernel = null; } - public bool checkFileExists(string fileName) + public bool checkFileNameExists(string fileName) { var filePath = Path.GetFullPath(DirPath + fileName); + return checkFilePathExists(filePath); + } + + public bool checkFilePathExists(string filePath) + { var exists = File.Exists(filePath); if (exists) { Console.WriteLine(filePath + @" exists"); - } else { + } + else + { Console.WriteLine(filePath + @" not existing"); } @@ -80,13 +87,6 @@ namespace Vecto3GUI2020Test public NewMultiStageJobViewModel loadFile(string fileName) { - //string filePath = ""; - //filePath = Path.GetFullPath(DirPath + fileName); - - //var dialogMock = new Mock<IDialogHelper>(); - //dialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog(It.IsAny<string>())).Returns(filePath); - //dialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog()).Returns(filePath); - var mockDialogHelper = getMockDialogHelper(fileName); var newMultistageJobViewModel = _kernel.Get<NewMultiStageJobViewModel>(); @@ -113,21 +113,6 @@ namespace Vecto3GUI2020Test return newMultistageJobViewModel; } - protected void loadVehicleData(MultiStageJobViewModel_v0_1 multiStageViewModel, string inputFile) - { - - var vehicleInputData = Path.GetFullPath(DirPath + inputFile); - Assert.IsTrue(File.Exists(vehicleInputData)); - - var vehicleInputDataFiledialogMock = new Mock<IDialogHelper>(); - vehicleInputDataFiledialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog(It.IsAny<string>())).Returns(vehicleInputData); - vehicleInputDataFiledialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog()).Returns(vehicleInputData); - _kernel.Rebind<IDialogHelper>().ToConstant(vehicleInputDataFiledialogMock.Object); - - multiStageViewModel.LoadVehicleDataCommand.Execute(null); - } - - protected Mock<IDialogHelper> getMockDialogHelper(string fileToLoad = null, string fileToSave = null) { if (_mockDialogHelper == null) {