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/Helper/EnumHelper.cs b/VECTO3GUI2020/Helper/EnumHelper.cs new file mode 100644 index 0000000000000000000000000000000000000000..16c063f1d9184a28dfb1067035f9a39b56250620 --- /dev/null +++ b/VECTO3GUI2020/Helper/EnumHelper.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.ObjectModel; +using System.Linq; +using TUGraz.VectoCommon.Models; +using VECTO3GUI2020.Annotations; + +namespace VECTO3GUI2020.Helper +{ + using System.Runtime.CompilerServices; + + + + internal static class EnumHelper + { + private static ObservableCollection<T> GetValuesAsObservableCollection<T, TInput>(bool exclude, + params TInput[] items) + where TInput : System.Enum + where T : System.Enum + + { + var values = Enum.GetValues(typeof(TInput)).Cast<TInput>().ToList().Where(e => { + var contains = items.Contains(e); + var result = contains; + if (exclude) { + result = !contains; + } + + return result; + }); + return new ObservableCollection<T>(values.Cast<T>()); + } + + public static ObservableCollection<T> GetValuesAsObservableCollectionIncluding<T, TInput>(params TInput[] items) + where TInput : System.Enum + where T : System.Enum + + { + return GetValuesAsObservableCollection<T, TInput>(false, items); + } + + public static ObservableCollection<T> GetValuesAsObservableCollectionExcluding<T, TInput>(params TInput[] items) + where TInput : System.Enum + where T : System.Enum + + { + return GetValuesAsObservableCollection<T, TInput>(true, items); + } + + + + + } +} \ No newline at end of file diff --git a/VECTO3GUI2020/Helper/Extension.cs b/VECTO3GUI2020/Helper/Extension.cs deleted file mode 100644 index b7bb02b8f317a41e61c84ba4fe7efe3dd48b3358..0000000000000000000000000000000000000000 --- a/VECTO3GUI2020/Helper/Extension.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace VECTO3GUI2020.Helper -{ - public class Extension - { - - } -} \ No newline at end of file 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/Properties/AssemblyInfo.cs b/VECTO3GUI2020/Properties/AssemblyInfo.cs index f37064a9b870f31c27572d9137ff1e85d2e68931..ce2e072c25beaaf6359070384b2240d511303f57 100644 --- a/VECTO3GUI2020/Properties/AssemblyInfo.cs +++ b/VECTO3GUI2020/Properties/AssemblyInfo.cs @@ -1,4 +1,5 @@ using System.Reflection; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Windows; @@ -13,6 +14,7 @@ using System.Windows; [assembly: AssemblyCopyright("Copyright © 2020")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] +[assembly: InternalsVisibleTo("Vecto3GUI2020Test")] // Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von 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/VECTO3GUI2020.csproj b/VECTO3GUI2020/VECTO3GUI2020.csproj index 8f8bbfc551b2a3b7f807ab7819f193314d2b74df..68c4221d5862a07679ee2355f34180f75a1c6019 100644 --- a/VECTO3GUI2020/VECTO3GUI2020.csproj +++ b/VECTO3GUI2020/VECTO3GUI2020.csproj @@ -137,7 +137,7 @@ <Compile Include="Helper\Converter\XToBoolConverter.cs" /> <Compile Include="Helper\DoubleValidation.cs" /> <Compile Include="Helper\Exceptions.cs" /> - <Compile Include="Helper\Extension.cs" /> + <Compile Include="Helper\EnumHelper.cs" /> <Compile Include="Helper\IWindowHelper.cs" /> <Compile Include="Helper\DialogHelper.cs" /> <Compile Include="Helper\WindowHelper.cs" /> diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs index c43d35ebfec72e6e48c0f8ffc43c1e4a6c940abe..e1524ad0a8afc56f392f06fbaeaaa8724b89423c 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs @@ -24,6 +24,7 @@ using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components; using VECTO3GUI2020.ViewModel.MultiStage.Implementation; using VECTO3GUI2020.ViewModel.MultiStage.Interfaces; using Convert = System.Convert; +using EnumHelper = VECTO3GUI2020.Helper.EnumHelper; namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation { @@ -457,10 +458,9 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation set => SetProperty(ref _vehicleCode, value); } - public ObservableCollection<Enum> VehicleCodeAllowedValues { get; } = - new ObservableCollection<Enum>(Enum.GetValues(typeof(VehicleCode)).Cast<Enum>().ToList().Where( - (e => (VehicleCode)e != TUGraz.VectoCommon.Models.VehicleCode.NOT_APPLICABLE))); - + public ObservableCollection<Enum> VehicleCodeAllowedValues { get; } = + EnumHelper.GetValuesAsObservableCollectionExcluding<Enum, VehicleCode>((TUGraz.VectoCommon.Models.VehicleCode.NOT_APPLICABLE)); + public bool? LowEntry { diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs index f41ebb6fabc2f4b64831af84da257d90ea83b69f..4744da5fe314f4e04ff9386472f657c4a209180b 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs @@ -1,11 +1,14 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Xml; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces; +using VECTO3GUI2020.Helper; using VECTO3GUI2020.ViewModel.Implementation.Common; +using EnumHelper = VECTO3GUI2020.Helper.EnumHelper; namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation { @@ -143,7 +146,18 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public bool HeatPumpGroupEditingEnabled { get => _heatPumpGroupEditingEnabled; - set => SetProperty(ref _heatPumpGroupEditingEnabled, value); + set + { + + SetProperty(ref _heatPumpGroupEditingEnabled, value); + //if (value == false) + //{ + // HeatPumpTypePassengerCompartment = null; + // HeatPumpModePassengerCompartment = null; + // HeatPumpModeDriverCompartment = null; + // HeatPumpTypeDriverCompartment = null; + //} + } } public BusHVACSystemConfiguration? SystemConfiguration @@ -155,28 +169,98 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public HeatPumpType? HeatPumpTypeDriverCompartment { get => _heatPumpTypeDriverCompartment; - set => SetProperty(ref _heatPumpTypeDriverCompartment, value); + set + { + if (value == HeatPumpType.none) { + HeatPumpModeDriverCompartmentAllowedValues = + EnumHelper.GetValuesAsObservableCollectionIncluding<Enum, HeatPumpMode>(items:HeatPumpMode.N_A); + //HeatPumpModeDriverCompartment = HeatPumpMode.N_A; + } else { + HeatPumpModeDriverCompartmentAllowedValues = + EnumHelper.GetValuesAsObservableCollectionExcluding<Enum, HeatPumpMode>( + items: HeatPumpMode.N_A); + //HeatPumpModeDriverCompartment = HeatPumpMode.cooling; + } + + + SetProperty(ref _heatPumpTypeDriverCompartment, value); + } } + public HeatPumpMode? HeatPumpModeDriverCompartment { get => _heatPumpModeDriverCompartment; - set => SetProperty(ref _heatPumpModeDriverCompartment, value); + set + { + SetProperty(ref _heatPumpModeDriverCompartment, value); + } } + private ObservableCollection<Enum> _heatPumpModeDriverCompartmentAllowedValues = + EnumHelper.GetValuesAsObservableCollectionExcluding<Enum, HeatPumpMode>(HeatPumpMode.N_A); + public ObservableCollection<Enum> HeatPumpModeDriverCompartmentAllowedValues + { + get + { + return _heatPumpModeDriverCompartmentAllowedValues; + } + private set + { + SetProperty(ref _heatPumpModeDriverCompartmentAllowedValues, value); + } + } + + + + public HeatPumpType? HeatPumpTypePassengerCompartment { get => _heatPumpTypePassengerCompartment; - set => SetProperty(ref _heatPumpTypePassengerCompartment, value); + set + { + SetProperty(ref _heatPumpTypePassengerCompartment, value); + if (value == HeatPumpType.none) + { + HeatPumpModePassengerCompartmentAllowedValues = + EnumHelper.GetValuesAsObservableCollectionIncluding<Enum, HeatPumpMode>(items: HeatPumpMode.N_A); + //HeatPumpModePassengerCompartment = HeatPumpMode.N_A; + } + else + { + HeatPumpModePassengerCompartmentAllowedValues = + EnumHelper.GetValuesAsObservableCollectionExcluding<Enum, HeatPumpMode>( + items: HeatPumpMode.N_A); + //HeatPumpModePassengerCompartment = HeatPumpMode.cooling; + } + } } public HeatPumpMode? HeatPumpModePassengerCompartment { get => _heatPumpModePassengerCompartment; - set => SetProperty(ref _heatPumpModePassengerCompartment, value); + set + { + SetProperty(ref _heatPumpModePassengerCompartment, value); + + } + } + + private ObservableCollection<Enum> _heatPumpModePassengerCompartmentAllowedValues = + EnumHelper.GetValuesAsObservableCollectionExcluding<Enum, HeatPumpMode>(HeatPumpMode.N_A); + public ObservableCollection<Enum> HeatPumpModePassengerCompartmentAllowedValues + { + get + { + return _heatPumpModePassengerCompartmentAllowedValues; + } + private set + { + SetProperty(ref _heatPumpModePassengerCompartmentAllowedValues, value); + } } -#endregion + #endregion #region IElectricConsumersDeclaration //LED lights @@ -228,6 +312,8 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation } private CompressorDrive _compressorDrive; + + public CompressorDrive CompressorDrive { get => _compressorDrive; 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/VECTO3GUI2020/Views/Multistage/ManufacturingStageAuxiliariesView.xaml b/VECTO3GUI2020/Views/Multistage/ManufacturingStageAuxiliariesView.xaml index 27c7ae37a583c40ddc6409478d4a03b271913bf6..0b9e70fcc9d0f0d0b53feb6767ccb779ba5608a8 100644 --- a/VECTO3GUI2020/Views/Multistage/ManufacturingStageAuxiliariesView.xaml +++ b/VECTO3GUI2020/Views/Multistage/ManufacturingStageAuxiliariesView.xaml @@ -45,6 +45,7 @@ EditingEnabled="{Binding HeatPumpGroupEditingEnabled}" PreviousContent="{Binding ConsolidatedInputData.HVACAux.HeatPumpModeDriverCompartment}" Content="{Binding HeatPumpModeDriverCompartment}" + ListItems="{Binding HeatPumpModeDriverCompartmentAllowedValues}" ShowCheckBox="False"/> <customControls:MultiStageParameter Mode="COMBOBOX" EditingEnabled="{Binding HeatPumpGroupEditingEnabled}" @@ -55,6 +56,7 @@ EditingEnabled="{Binding HeatPumpGroupEditingEnabled}" PreviousContent="{Binding ConsolidatedInputData.HVACAux.HeatPumpModePassengerCompartment}" Content="{Binding HeatPumpModePassengerCompartment}" + ListItems="{Binding HeatPumpModePassengerCompartmentAllowedValues}" ShowCheckBox="False"/> <Separator/> <customControls:MultiStageParameter Mode="TEXTBOX" diff --git a/Vecto3GUI2020Test/ViewModelTests/ExtensionTests.cs b/Vecto3GUI2020Test/ViewModelTests/ExtensionTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..50d9531a52b15491bf75126f42deb6ff1e0c3818 --- /dev/null +++ b/Vecto3GUI2020Test/ViewModelTests/ExtensionTests.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.ObjectModel; +using NUnit.Framework; +using TUGraz.VectoCommon.Models; +using VECTO3GUI2020.Helper; + +namespace Vecto3GUI2020Test.ViewModelTests +{ + [TestFixture] + public class ExtensionTests + { + + [Test] + public void TestGetValuesAsObservableCollectionEnumExtension() + { + + VehicleCode? vehicleCode = null; + var collection1 = EnumHelper.GetValuesAsObservableCollectionExcluding<Enum, VehicleCode>(VehicleCode.NOT_APPLICABLE, VehicleCode.CF); + + Assert.False(collection1.Contains(VehicleCode.NOT_APPLICABLE)); + Assert.False(collection1.Contains(VehicleCode.CF)); + + Assert.True(collection1.Contains(VehicleCode.CA)); + + Assert.True(collection1.Contains(VehicleCode.CB)); + Assert.True(collection1.Contains(VehicleCode.CC)); + Assert.True(collection1.Contains(VehicleCode.CD)); + Assert.True(collection1.Contains(VehicleCode.CE)); + Assert.True(collection1.Contains(VehicleCode.CG)); + Assert.True(collection1.Contains(VehicleCode.CH)); + Assert.True(collection1.Contains(VehicleCode.CI)); + Assert.True(collection1.Contains(VehicleCode.CJ)); + + + + var collection2 = EnumHelper.GetValuesAsObservableCollectionIncluding<Enum, VehicleCode>(VehicleCode.CA); + Assert.True(collection2.Contains(VehicleCode.CA)); + Assert.False(collection2.Contains(VehicleCode.NOT_APPLICABLE)); + } + + + } +} \ No newline at end of file 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/MultistageAuxiliariesViewModelTests.cs b/Vecto3GUI2020Test/ViewModelTests/MultistageAuxiliariesViewModelTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..779851c00a74913f92f61c1dff663d6e3a9b3da2 --- /dev/null +++ b/Vecto3GUI2020Test/ViewModelTests/MultistageAuxiliariesViewModelTests.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NUnit.Framework; +using TUGraz.VectoCommon.BusAuxiliaries; +using VECTO3GUI2020.ViewModel.MultiStage.Implementation; + +namespace Vecto3GUI2020Test.ViewModelTests +{ + [TestFixture] + public class MultistageAuxiliariesViewModelTests : ViewModelTestBase + { + + //[Test] + //public void TestAllowedValuesHeatPumpMode() + //{ + // var vm = loadFile(consolidated_multiple_stages_airdrag); + + + // var vehicle = vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as + // DeclarationInterimStageBusVehicleViewModel_v2_8; + + // var auxVm = vehicle.MultistageAuxiliariesViewModel as MultistageAuxiliariesViewModel; + + + // auxVm.HeatPumpTypeDriverCompartment = HeatPumpType.none; + // Assert.IsTrue(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.N_A)); + // Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.cooling)); + // Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.heating)); + // Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.heating_and_cooling)); + + + // auxVm.HeatPumpTypeDriverCompartment = HeatPumpType.R_744; + // Assert.IsFalse(auxVm.HeatPumpModePassengerCompartmentAllowedValues.Contains(HeatPumpMode.N_A)); + + + + //} + + [Test] + public void TestAllowedValuesHeatPumpModePassenger() + { + + var auxVm = new MultistageAuxiliariesViewModel(null); + auxVm.HeatPumpTypePassengerCompartment = HeatPumpType.none; + Assert.IsTrue(auxVm.HeatPumpModePassengerCompartmentAllowedValues.Contains(HeatPumpMode.N_A)); + Assert.IsFalse(auxVm.HeatPumpModePassengerCompartmentAllowedValues.Contains(HeatPumpMode.cooling)); + Assert.IsFalse(auxVm.HeatPumpModePassengerCompartmentAllowedValues.Contains(HeatPumpMode.heating)); + Assert.IsFalse(auxVm.HeatPumpModePassengerCompartmentAllowedValues.Contains(HeatPumpMode.heating_and_cooling)); + + + auxVm.HeatPumpTypePassengerCompartment = HeatPumpType.R_744; + Assert.IsFalse(auxVm.HeatPumpModePassengerCompartmentAllowedValues.Contains(HeatPumpMode.N_A)); + } + + [Test] + public void TestAllowedValuesHeatPumpModeDriver() + { + var auxVm = new MultistageAuxiliariesViewModel(null); + auxVm.HeatPumpTypeDriverCompartment = HeatPumpType.none; + Assert.IsTrue(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.N_A)); + Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.cooling)); + Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.heating)); + Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.heating_and_cooling)); + + + auxVm.HeatPumpTypeDriverCompartment = HeatPumpType.R_744; + Assert.IsFalse(auxVm.HeatPumpModePassengerCompartmentAllowedValues.Contains(HeatPumpMode.N_A)); + } + + + + + + + } +} 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) { diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs b/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs index 24994986a324c77cd95b2108f959e64ccc0fea91..f4d5b4ed35115f752d3165bcb5c924a9091099ca 100644 --- a/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs +++ b/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs @@ -255,7 +255,7 @@ namespace TUGraz.VectoCommon.BusAuxiliaries heating_and_cooling, [GuiLabel("Cooling")] cooling, - [GuiLabel("N_A")] + [GuiLabel("not_applicable")] N_A, }