From de64d37014bc2b8490fc26d8c8c5b73b46327449 Mon Sep 17 00:00:00 2001 From: "harald.martini@student.tugraz.at" <harald.martini@student.tugraz.at> Date: Sun, 2 May 2021 10:54:10 +0200 Subject: [PATCH] Fixed an issue with non nullable enums Added remove airdragdata button fixed some formatting issues when writing an XML file Added a new Error Template Added Validation for mandatory fields in VehicleViewModel --- VECTO3GUI2020/App.xaml | 4 +- .../Converter/NullToVisibilityConverter.cs | 7 +- .../Helper/Converter/SIToUnitString.cs | 2 +- .../Converter/SIValueToStringConverter.cs | 5 +- VECTO3GUI2020/Helper/Exceptions.cs | 26 + VECTO3GUI2020/Helper/XMLExtension.cs | 7 + VECTO3GUI2020/Helper/XmlHelper.cs | 52 ++ .../Ninject/IMultistageDependencies.cs | 4 + .../Ninject/MultistageLazyDependencies.cs | 13 +- .../Ninject/XMLWriterFactoryModule.cs | 5 + VECTO3GUI2020/Resources/Converter.xaml | 4 +- .../Resources/Icons/AddDocument_16x.xaml | 27 + VECTO3GUI2020/Resources/Icons/Trash_16x.ico | Bin 0 -> 10462 bytes VECTO3GUI2020/Resources/Icons/Trash_16x.xaml | 20 + VECTO3GUI2020/Resources/Icons/drawables.xaml | 50 ++ .../Resources/Templates/ErrorTemplates.xaml | 12 + VECTO3GUI2020/Test.xaml | 3 +- VECTO3GUI2020/TestViewModel.cs | 13 +- .../ComponentWriter/XMLAirDragWriter.cs | 10 +- .../XMLBusAuxiliariesWriter.cs | 52 ++ .../ComponentWriter/XMLVehicleWriter.cs | 116 ++++ VECTO3GUI2020/Util/XML/XMLNamespaces.cs | 37 +- VECTO3GUI2020/VECTO3GUI2020.csproj | 22 + .../InterimStageBusVehicleViewModel_v2_8.cs | 89 ++- .../ManufacturingStageViewModel_v0_1.cs | 2 +- .../MultistageAirdragViewModel.cs | 37 +- .../MultistageJobViewModel_v0_1.cs | 86 ++- .../CustomControlExtensionMethods.cs | 6 +- .../Multistage/CustomControls/FilePicker.xaml | 8 +- .../LabledTextBoxMultistage.xaml.cs | 12 +- .../CustomControls/MultiStageParameter.xaml | 8 +- .../MultiStageParameter.xaml.cs | 20 +- .../ManufacturingStageAuxiliariesView.xaml | 1 + .../Views/Multistage/MultiStageView.xaml | 17 +- .../Multistage/MultistageAirDragView.xaml | 19 +- .../Views/Multistage/VehicleView_v2_8.xaml | 87 +-- VECTO3GUI2020/Views/SettingsView.xaml | 25 +- .../TestData/XML/XMLReaderDeclaration/123.xml | 30 + .../vecto_vehicle-stage_input_full-sample.xml | 93 ++- .../SchemaVersionMultistage.0.1/123sadf.xml | 7 + .../primary_heavyBus group41.RSLT_PIF.xml | 552 ------------------ 41 files changed, 901 insertions(+), 689 deletions(-) create mode 100644 VECTO3GUI2020/Helper/Exceptions.cs create mode 100644 VECTO3GUI2020/Resources/Icons/AddDocument_16x.xaml create mode 100644 VECTO3GUI2020/Resources/Icons/Trash_16x.ico create mode 100644 VECTO3GUI2020/Resources/Icons/Trash_16x.xaml create mode 100644 VECTO3GUI2020/Resources/Icons/drawables.xaml create mode 100644 VECTO3GUI2020/Resources/Templates/ErrorTemplates.xaml create mode 100644 VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLBusAuxiliariesWriter.cs create mode 100644 VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/123.xml create mode 100644 VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/123sadf.xml delete mode 100644 VectoCore/VectoCoreTest/bin/Debug/TestData/Integration/Buses/FactorMethod/primary_heavyBus group41.RSLT_PIF.xml diff --git a/VECTO3GUI2020/App.xaml b/VECTO3GUI2020/App.xaml index 0ca2289897..7f48e14516 100644 --- a/VECTO3GUI2020/App.xaml +++ b/VECTO3GUI2020/App.xaml @@ -13,7 +13,9 @@ <ResourceDictionary Source="Resources/Styles/Colors.xaml"/> <ResourceDictionary Source="Resources/Styles/ButtonStyles.xaml"/> <ResourceDictionary Source="DataGridStyles.xaml"/> - <ResourceDictionary Source="Resources/ObjectProvider.xaml"></ResourceDictionary> + <ResourceDictionary Source="Resources/Templates/ErrorTemplates.xaml"/> + <ResourceDictionary Source="Resources/ObjectProvider.xaml"/> + <ResourceDictionary Source="Resources/Icons/drawables.xaml"></ResourceDictionary> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> diff --git a/VECTO3GUI2020/Helper/Converter/NullToVisibilityConverter.cs b/VECTO3GUI2020/Helper/Converter/NullToVisibilityConverter.cs index ff16a9cd18..156ca4552b 100644 --- a/VECTO3GUI2020/Helper/Converter/NullToVisibilityConverter.cs +++ b/VECTO3GUI2020/Helper/Converter/NullToVisibilityConverter.cs @@ -13,10 +13,9 @@ namespace VECTO3GUI2020.Helper.Converter { return Visibility.Collapsed; } - else - { - return Binding.DoNothing; - } + else { + return Visibility.Visible; + } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) diff --git a/VECTO3GUI2020/Helper/Converter/SIToUnitString.cs b/VECTO3GUI2020/Helper/Converter/SIToUnitString.cs index 57a72058e0..e84ca3d203 100644 --- a/VECTO3GUI2020/Helper/Converter/SIToUnitString.cs +++ b/VECTO3GUI2020/Helper/Converter/SIToUnitString.cs @@ -27,7 +27,7 @@ namespace VECTO3GUI2020.Helper.Converter return convertedSI.Units; } - + return Binding.DoNothing; //TRY GET DYNAMIC UNIT STRING try { diff --git a/VECTO3GUI2020/Helper/Converter/SIValueToStringConverter.cs b/VECTO3GUI2020/Helper/Converter/SIValueToStringConverter.cs index 7ce0d82a2a..7ed47de2dd 100644 --- a/VECTO3GUI2020/Helper/Converter/SIValueToStringConverter.cs +++ b/VECTO3GUI2020/Helper/Converter/SIValueToStringConverter.cs @@ -17,8 +17,6 @@ namespace VECTO3GUI2020.Helper.Converter public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) { - _si = null; - _convertedSI = null; return value; } if(value is SI SIvalue) { @@ -53,8 +51,7 @@ namespace VECTO3GUI2020.Helper.Converter } } - catch (Exception e) - { + catch (Exception e) { return value; } diff --git a/VECTO3GUI2020/Helper/Exceptions.cs b/VECTO3GUI2020/Helper/Exceptions.cs new file mode 100644 index 0000000000..6b8ce5755c --- /dev/null +++ b/VECTO3GUI2020/Helper/Exceptions.cs @@ -0,0 +1,26 @@ +using System; + +namespace VECTO3GUI2020.Helper +{ + /// <summary> + /// Exception to notify the view that a field is not allowed to be empty. Should be ignored by the debugger + /// </summary> + public class VectoEmptyFieldException : Exception + { + public VectoEmptyFieldException() + : base("Field must not be empty") + { + + } + + public VectoEmptyFieldException(string message) + : base(message) + { + } + + public VectoEmptyFieldException(string message, Exception inner) + : base(message, inner) + { + } + } +} \ No newline at end of file diff --git a/VECTO3GUI2020/Helper/XMLExtension.cs b/VECTO3GUI2020/Helper/XMLExtension.cs index f9ab57c71c..cac6839459 100644 --- a/VECTO3GUI2020/Helper/XMLExtension.cs +++ b/VECTO3GUI2020/Helper/XMLExtension.cs @@ -1,5 +1,6 @@ using System; using System.Diagnostics; +using System.Windows.Forms; using System.Xml; using System.Xml.Linq; using System.Xml.Schema; @@ -96,5 +97,11 @@ namespace VECTO3GUI2020.Helper return version; } + + public static string ToXmlFormat(this DateTime dateTime) + { + return XmlConvert.ToString(dateTime, XmlDateTimeSerializationMode.Utc); + } + } } \ No newline at end of file diff --git a/VECTO3GUI2020/Helper/XmlHelper.cs b/VECTO3GUI2020/Helper/XmlHelper.cs index 0f3a71178e..2db50eed49 100644 --- a/VECTO3GUI2020/Helper/XmlHelper.cs +++ b/VECTO3GUI2020/Helper/XmlHelper.cs @@ -1,10 +1,16 @@ using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; using System.Xml; using System.Xml.Linq; using System.Xml.Schema; using Castle.Core.Internal; using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.Resources; using TUGraz.VectoCore.Utils; +using VECTO3GUI2020.Util.XML; +using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType; namespace VECTO3GUI2020.Helper { @@ -56,5 +62,51 @@ namespace VECTO3GUI2020.Helper return Uri.UnescapeDataString(new Uri(baseUri).AbsolutePath); } + + public static XDocument CreateWrapperDocument(this XElement xElement, XNamespace defaultNamespace, + XmlDocumentType docType = XmlDocumentType.DeclarationJobData) + { + var prefixMap = new Dictionary<string, XNamespace>(); + + var xDocument = new XDocument(); + var rootElement = new XElement(XMLNamespaces.Tns_v20 + XMLNames.VectoInputDeclaration, new XAttribute(XNamespace.Xmlns + "tns", + XMLNamespaces.Tns_v20)); + Debug.WriteLine(rootElement.ToString()); + + rootElement.Add(new XAttribute("xmlns", defaultNamespace)); + rootElement.Add(new XAttribute("schemaVersion", XMLHelper.GetVersionFromNamespaceUri(defaultNamespace))); + + xDocument.Add(rootElement); + + + + Dictionary<string, XNamespace> nsAttributes = new Dictionary<string, XNamespace> { + ["xsi"] = XMLNamespaces.Xsi + }; + + foreach (var element in xElement.DescendantsAndSelf()) { + var ns = element.Name.Namespace; + if (ns != defaultNamespace) { + var prefix = XMLNamespaces.GetPrefix(ns); + if(prefix != null) + nsAttributes[prefix] = ns; + } + } + + + foreach (var nsAttribute in nsAttributes) { + rootElement.Add(new XAttribute(XNamespace.Xmlns + nsAttribute.Key, nsAttribute.Value)); + } + + var LocalSchemaLocation = @"V:\VectoCore\VectoCore\Resources\XSD\"; + + rootElement.Add(new XAttribute(XMLNamespaces.Xsi + "schemaLocation", + $"{XMLNamespaces.DeclarationRootNamespace} {LocalSchemaLocation}VectoDeclarationJob.xsd")); + + + rootElement.Add(xElement); + + return xDocument; + } } } diff --git a/VECTO3GUI2020/Ninject/IMultistageDependencies.cs b/VECTO3GUI2020/Ninject/IMultistageDependencies.cs index 78088869d1..bc5671491c 100644 --- a/VECTO3GUI2020/Ninject/IMultistageDependencies.cs +++ b/VECTO3GUI2020/Ninject/IMultistageDependencies.cs @@ -1,8 +1,10 @@ using System; +using System.Windows.Forms; using TUGraz.VectoCore.InputData.FileIO.XML; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory; using TUGraz.VectoCore.Utils; using VECTO3GUI2020.Helper; +using VECTO3GUI2020.Util.XML.Interfaces; using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components; namespace VECTO3GUI2020.Ninject @@ -16,5 +18,7 @@ namespace VECTO3GUI2020.Ninject IXMLInputDataReader InputDataReader { get; } IDeclarationInjectFactory InjectFactory { get; } IComponentViewModelFactory ComponentViewModelFactory { get; } + + IXMLWriterFactory XMLWriterFactory { get; } } } \ No newline at end of file diff --git a/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs b/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs index d21990434a..662738249b 100644 --- a/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs +++ b/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs @@ -3,6 +3,7 @@ using TUGraz.VectoCore.InputData.FileIO.XML; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory; using TUGraz.VectoCore.Utils; using VECTO3GUI2020.Helper; +using VECTO3GUI2020.Util.XML.Interfaces; using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components; namespace VECTO3GUI2020.Ninject @@ -26,16 +27,26 @@ namespace VECTO3GUI2020.Ninject public IDeclarationInjectFactory InjectFactory => _injectFactory.Value; public IComponentViewModelFactory ComponentViewModelFactory => _componentViewModelFactory.Value; + public IXMLWriterFactory XMLWriterFactory => _xmlWriterFactory.Value; + + private Lazy<IXMLWriterFactory> _xmlWriterFactory; private readonly Lazy<IDeclarationInjectFactory> _injectFactory; private readonly Lazy<IComponentViewModelFactory> _componentViewModelFactory; - public MultistageLazyDependencies(Lazy<IDialogHelper> dialogHelper, Lazy<IXMLInputDataReader> inputDataReader, Lazy<IDeclarationInjectFactory> injectFactory, Lazy<IComponentViewModelFactory> componentViewModelFactory) + public MultistageLazyDependencies( + Lazy<IDialogHelper> dialogHelper, + Lazy<IXMLInputDataReader> inputDataReader, + Lazy<IDeclarationInjectFactory> injectFactory, + Lazy<IComponentViewModelFactory> componentViewModelFactory, + Lazy<IXMLWriterFactory> xmlWriterFactory) { _dialogHelper = dialogHelper; _inputDataReader = inputDataReader; _componentViewModelFactory = componentViewModelFactory; _injectFactory = injectFactory; + _xmlWriterFactory = xmlWriterFactory; + } } } \ No newline at end of file diff --git a/VECTO3GUI2020/Ninject/XMLWriterFactoryModule.cs b/VECTO3GUI2020/Ninject/XMLWriterFactoryModule.cs index 9791fa3362..7d82dcb016 100644 --- a/VECTO3GUI2020/Ninject/XMLWriterFactoryModule.cs +++ b/VECTO3GUI2020/Ninject/XMLWriterFactoryModule.cs @@ -44,6 +44,11 @@ namespace VECTO3GUI2020.Ninject sv => Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v2_0>().Named(sv)); + Array.ForEach( + XMLVehicleWriter_v2_8.SUPPORTEDVERSIONS, + sv => + Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v2_8>().Named(sv)); + Array.ForEach( XMLComponentsWriter_v1_0.SUPPORTED_VERSIONS, sv => Bind<IXMLComponentsWriter>().To<XMLComponentsWriter_v1_0>().Named(sv)); diff --git a/VECTO3GUI2020/Resources/Converter.xaml b/VECTO3GUI2020/Resources/Converter.xaml index 7fd7c4e3d1..d7865206f7 100644 --- a/VECTO3GUI2020/Resources/Converter.xaml +++ b/VECTO3GUI2020/Resources/Converter.xaml @@ -3,8 +3,8 @@ xmlns:converter="clr-namespace:VECTO3GUI2020.Helper.Converter"> <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> - <converter:SIToUnitString x:Key="SIToUnitStringConverter"/> - <converter:SIValueToStringConverter x:Key="SIValueToStringConverter"/> + <converter:SIToUnitString x:Shared="False" x:Key="SIToUnitStringConverter"/> + <converter:SIValueToStringConverter x:Shared="False" x:Key="SIValueToStringConverter"/> <converter:NullToVisibilityConverter x:Key="NullToVisibilityConverter"/> <converter:AlwaysVisibleConverter x:Key="AlwaysVisibleConverter"/> <converter:LabledTextBoxConverter x:Key="LabledTextBoxConverter" x:Shared="false" /> diff --git a/VECTO3GUI2020/Resources/Icons/AddDocument_16x.xaml b/VECTO3GUI2020/Resources/Icons/AddDocument_16x.xaml new file mode 100644 index 0000000000..6b3473284c --- /dev/null +++ b/VECTO3GUI2020/Resources/Icons/AddDocument_16x.xaml @@ -0,0 +1,27 @@ +<!-- This file was generated by the AiToXaml tool.--> +<!-- Tool Version: 14.0.22307.0 --> +<Viewbox Width="16" Height="16" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> + <Rectangle Width="16" Height="16"> + <Rectangle.Fill> + <DrawingBrush> + <DrawingBrush.Drawing> + <DrawingGroup> + <DrawingGroup.Children> + <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" /> + <GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M1.9998,-0.000199999999999534L1.9998,2.0188 0.9998,2.0188 0.9998,5.9998 1.9998,5.9998 1.9998,15.9998 15.0008,15.9998 15.0008,4.3788 10.6208,-0.000199999999999534z" /> + <GeometryDrawing Brush="#FF424242" Geometry="F1M10,5L10,2.207 12.793,5z M10.207,1L7,1 7,2 9,2 9,2.018 9,6 13,6 13,14 4,14 4,8 3.019,8 3,15 14,15 14,4.793z" /> + <GeometryDrawing Brush="#FF424242" Geometry="F1M10,5L10,2.207 12.793,5z M10.207,1L7,1 7,2 9,2 9,2.018 9,6 13,6 13,14 4,14 4,8 3.019,8 3,15 14,15 14,4.793z" /> + <GeometryDrawing Brush="#FFF0EFF1" Geometry="F1M7,2.018L9,2.018 9,1.999 7,1.999z" /> + <GeometryDrawing Brush="#FFF0EFF1" Geometry="F1M10,2.207L10,5 12.793,5z" /> + <GeometryDrawing Brush="#FFF0EFF1" Geometry="F1M9,6L7,6 7,8 4,8 4,14 13,14 13,6z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M7,2.018L9,2.018 9,1.999 7,1.999z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M10,2.207L10,5 12.793,5z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M9,6L7,6 7,8 4,8 4,14 13,14 13,6z" /> + <GeometryDrawing Brush="#FF388A34" Geometry="F1M8,3.0181L6,3.0181 6,1.0001 4.019,1.0001 4.019,3.0181 2,3.0181 2,5.0001 4.019,5.0001 4.019,7.0001 6,7.0001 6,5.0001 8,5.0001z" /> + </DrawingGroup.Children> + </DrawingGroup> + </DrawingBrush.Drawing> + </DrawingBrush> + </Rectangle.Fill> + </Rectangle> +</Viewbox> \ No newline at end of file diff --git a/VECTO3GUI2020/Resources/Icons/Trash_16x.ico b/VECTO3GUI2020/Resources/Icons/Trash_16x.ico new file mode 100644 index 0000000000000000000000000000000000000000..9bba79cd42607f14c1e052e5e61c40863707236d GIT binary patch literal 10462 zcmeHNQAkr!7(Uix57kQ$5d{_X)Pp@0MBr<}K-PnTqFBBt^I?#^+0-VE5CmIfN|W*_ zk#sL&kb)piSP}H1u8i7NiLhn3%`pG|GdVw}-Mshi?#_iB<=?-1{_~&nedqk=zq>z| zu`>KGFK769n$2He>=<JV6~iWW6NR_)za!@vJ9BYIvJECbHa0dcrBbP<D4$TaP@o9% z6UTg?PNyGcGMTd`p_%T696UJwb`fyvt;HtJd&@LPgN}&(_8#Mxx$(7g8bCBO;}|DV z(t<}M5&@6L19f$EP*YQ5yVTd$Lr+f+#N%<9%NGDRWC&KL1IFnc!66olfy3c|ii(P& zOKoi}BoYak%MBfvh9=}NDtH6}fuiG=*JyHbQs&_^1gp~lIlK})y1ToHM`vdz%+Ai* zE^fD*<`^0pA|80&pXk6eG$Ds+!NcqI(j1Qm2H<-lX}jF(>Y_OY2L~08oE=j8VJ+rV zT;&8(&ZU{SdJ}#P5BmGFGWvX!&VKB3l-jvn&I`kVVX`eRE|IO2`!W7voN|oI<swXx zrDba8_XU|pb#*n_=H}+erg-E8QqHBBxKjJE^E*w&RZj5eT&lQAg34Dr=Vq^eC#rm< z@|8|%`m0IhE0wQAtwH50?GaJuL!FOOosX3dD^!o;&$!~bZ}r<Mwey;tXy-aKKTkIP z{3~pwd>#}S?9hsbHb-GC)r)oZM_e#p#Zj{L$x_xu5yPT{$*o1LZ9$(EfnC-m=0UYy z#5Ao%t!>$lJjTYx!0-2GrJ<pLYEI3~%~VGdH8?x8JV#4Q3(Y+>HC51lw6?Yqc9GXh zp?OS8F`jo^?H3*+BO~DR`E*6*>U27F`--tDD=TTA+uGU;eI_O*3fd28FXeIm_|E4L zvBo)>@saDhp-{+_k2G%HaV7cgI@dqU;~CxyU+M|+iwKUvV378sv9S?&ozqCFs;bCm zVPS#R2=8_8^ycL@ocF%=Zegtj$8rfC;c%ERiTKJ#N25{VfjF;QLuAbhIb0DuaBkqa zJ|FC&Z%0Q5alr9@;aJD5A+qL$?@1isF(A0Ct*t>{Umx(eGV{JhQ&SW0=kN9Pb(u%d z8k)kqkjGWzu_?F|s1x{}(z(JAS@*^`a3KC41#<X`{+F$zu*VZIoIvSCSwzX8$g#59 zckGsWi|gP?CX+|)LBbf^W$Yl#Fu(!JP;c{rQEzeG{{QKZocG}wW|xK}W2gA~O8OeV R&M=nMxX|tV8W$c={{{lf^*sOp literal 0 HcmV?d00001 diff --git a/VECTO3GUI2020/Resources/Icons/Trash_16x.xaml b/VECTO3GUI2020/Resources/Icons/Trash_16x.xaml new file mode 100644 index 0000000000..79f4d2fe3b --- /dev/null +++ b/VECTO3GUI2020/Resources/Icons/Trash_16x.xaml @@ -0,0 +1,20 @@ +<!-- This file was generated by the AiToXaml tool.--> +<!-- Tool Version: 14.0.22307.0 --> +<Viewbox Width="16" Height="16" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> + <Rectangle Width="16" Height="16"> + <Rectangle.Fill> + <DrawingBrush> + <DrawingBrush.Drawing> + <DrawingGroup> + <DrawingGroup.Children> + <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" /> + <GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M4,16C2.897,16,2,15.103,2,14L2,5 1,5 1,2 4,2C4,0.897,4.897,0,6,0L9,0C10.103,0,11,0.897,11,2L14,2 14,5 13,5 13,14C13,15.103,12.103,16,11,16z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M10,12L9,12 9,6 10,6z M8,12L7,12 7,6 8,6z M6,12L5,12 5,6 6,6z M4,14L11,14 11,4 4,4z" /> + <GeometryDrawing Brush="#FF424242" Geometry="F1M11,4L4,4 4,14 11,14z M6,3L9,3 9,2 6,2z M13,3L13,4 12,4 12,14C12,14.552,11.552,15,11,15L4,15C3.448,15,3,14.552,3,14L3,4 2,4 2,3 5,3 5,2C5,1.448,5.448,1,6,1L9,1C9.552,1,10,1.448,10,2L10,3z M10,6L9,6 9,12 10,12z M8,6L7,6 7,12 8,12z M6,12L5,12 5,6 6,6z" /> + </DrawingGroup.Children> + </DrawingGroup> + </DrawingBrush.Drawing> + </DrawingBrush> + </Rectangle.Fill> + </Rectangle> +</Viewbox> \ No newline at end of file diff --git a/VECTO3GUI2020/Resources/Icons/drawables.xaml b/VECTO3GUI2020/Resources/Icons/drawables.xaml new file mode 100644 index 0000000000..80c941c266 --- /dev/null +++ b/VECTO3GUI2020/Resources/Icons/drawables.xaml @@ -0,0 +1,50 @@ +<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> + <DataTemplate x:Key="TrashIcon"> + <Viewbox Stretch="Uniform" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> + <Rectangle Width="16" Height="16"> + <Rectangle.Fill> + <DrawingBrush> + <DrawingBrush.Drawing> + <DrawingGroup> + <DrawingGroup.Children> + <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" /> + <GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M4,16C2.897,16,2,15.103,2,14L2,5 1,5 1,2 4,2C4,0.897,4.897,0,6,0L9,0C10.103,0,11,0.897,11,2L14,2 14,5 13,5 13,14C13,15.103,12.103,16,11,16z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M10,12L9,12 9,6 10,6z M8,12L7,12 7,6 8,6z M6,12L5,12 5,6 6,6z M4,14L11,14 11,4 4,4z" /> + <GeometryDrawing Brush="#FF424242" Geometry="F1M11,4L4,4 4,14 11,14z M6,3L9,3 9,2 6,2z M13,3L13,4 12,4 12,14C12,14.552,11.552,15,11,15L4,15C3.448,15,3,14.552,3,14L3,4 2,4 2,3 5,3 5,2C5,1.448,5.448,1,6,1L9,1C9.552,1,10,1.448,10,2L10,3z M10,6L9,6 9,12 10,12z M8,6L7,6 7,12 8,12z M6,12L5,12 5,6 6,6z" /> + </DrawingGroup.Children> + </DrawingGroup> + </DrawingBrush.Drawing> + </DrawingBrush> + </Rectangle.Fill> + </Rectangle> + </Viewbox> + </DataTemplate> + <DataTemplate x:Key="AddDocumentIcon"> + <Viewbox Stretch="Uniform" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> + <Rectangle Width="16" Height="16"> + <Rectangle.Fill> + <DrawingBrush> + <DrawingBrush.Drawing> + <DrawingGroup> + <DrawingGroup.Children> + <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" /> + <GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M1.9998,-0.000199999999999534L1.9998,2.0188 0.9998,2.0188 0.9998,5.9998 1.9998,5.9998 1.9998,15.9998 15.0008,15.9998 15.0008,4.3788 10.6208,-0.000199999999999534z" /> + <GeometryDrawing Brush="#FF424242" Geometry="F1M10,5L10,2.207 12.793,5z M10.207,1L7,1 7,2 9,2 9,2.018 9,6 13,6 13,14 4,14 4,8 3.019,8 3,15 14,15 14,4.793z" /> + <GeometryDrawing Brush="#FF424242" Geometry="F1M10,5L10,2.207 12.793,5z M10.207,1L7,1 7,2 9,2 9,2.018 9,6 13,6 13,14 4,14 4,8 3.019,8 3,15 14,15 14,4.793z" /> + <GeometryDrawing Brush="#FFF0EFF1" Geometry="F1M7,2.018L9,2.018 9,1.999 7,1.999z" /> + <GeometryDrawing Brush="#FFF0EFF1" Geometry="F1M10,2.207L10,5 12.793,5z" /> + <GeometryDrawing Brush="#FFF0EFF1" Geometry="F1M9,6L7,6 7,8 4,8 4,14 13,14 13,6z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M7,2.018L9,2.018 9,1.999 7,1.999z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M10,2.207L10,5 12.793,5z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M9,6L7,6 7,8 4,8 4,14 13,14 13,6z" /> + <GeometryDrawing Brush="#FF388A34" Geometry="F1M8,3.0181L6,3.0181 6,1.0001 4.019,1.0001 4.019,3.0181 2,3.0181 2,5.0001 4.019,5.0001 4.019,7.0001 6,7.0001 6,5.0001 8,5.0001z" /> + </DrawingGroup.Children> + </DrawingGroup> + </DrawingBrush.Drawing> + </DrawingBrush> + </Rectangle.Fill> + </Rectangle> + </Viewbox> + </DataTemplate> +</ResourceDictionary> \ No newline at end of file diff --git a/VECTO3GUI2020/Resources/Templates/ErrorTemplates.xaml b/VECTO3GUI2020/Resources/Templates/ErrorTemplates.xaml new file mode 100644 index 0000000000..52b5e05bc2 --- /dev/null +++ b/VECTO3GUI2020/Resources/Templates/ErrorTemplates.xaml @@ -0,0 +1,12 @@ +<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:customControls="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls"> + +<ControlTemplate x:Key="multistageParameterControlErrorTemplate"> + <Grid> + <AdornedElementPlaceholder></AdornedElementPlaceholder> + <TextBlock Text="!" Height="Auto" FontWeight="ExtraBold" Foreground="OrangeRed" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="4"></TextBlock> + </Grid> + +</ControlTemplate> +</ResourceDictionary> \ No newline at end of file diff --git a/VECTO3GUI2020/Test.xaml b/VECTO3GUI2020/Test.xaml index 883faca601..d82af086ae 100644 --- a/VECTO3GUI2020/Test.xaml +++ b/VECTO3GUI2020/Test.xaml @@ -15,8 +15,9 @@ <StackPanel> <customControls:MultiStageParameter Content="{Binding ConvertedSI}" DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> <customControls:MultiStageParameter Content="{Binding ConvertedSI1}" DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> + <customControls:MultiStageParameter Content="{Binding Meter}"/> <customControls:MultiStageParameter Mode="COMBOBOX" Content="{Binding HeatPumpMode}"></customControls:MultiStageParameter> - <customControls:MultiStageParameter Mode="TEXTBOX" Content="{Binding TestString}"></customControls:MultiStageParameter> + <customControls:MultiStageParameter Mode="TEXTBOX" Content="{Binding TestString, ValidatesOnExceptions=True}"></customControls:MultiStageParameter> </StackPanel> </Grid> </UserControl> diff --git a/VECTO3GUI2020/TestViewModel.cs b/VECTO3GUI2020/TestViewModel.cs index c82ada14ba..f062f2e414 100644 --- a/VECTO3GUI2020/TestViewModel.cs +++ b/VECTO3GUI2020/TestViewModel.cs @@ -4,8 +4,10 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Castle.Core.Internal; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Utils; +using VECTO3GUI2020.Helper; using VECTO3GUI2020.ViewModel.Implementation.Common; using VECTO3GUI2020.ViewModel.Interfaces; using VECTO3GUI2020.ViewModel.Interfaces.Common; @@ -52,12 +54,19 @@ namespace VECTO3GUI2020 public String TestString { get => _testString; - set => SetProperty(ref _testString, value); + set + { + if (value.IsNullOrEmpty()) { + throw new VectoEmptyFieldException(); + } + SetProperty(ref _testString, value); + } } + public TestViewModel() { - TestString = "Value loaded"; + } } } diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAirDragWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAirDragWriter.cs index 0156742325..6a61bcebf4 100644 --- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAirDragWriter.cs +++ b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAirDragWriter.cs @@ -10,6 +10,7 @@ using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; using VECTO3GUI2020.Helper; using VECTO3GUI2020.Util.XML.Interfaces; using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components; +using VECTO3GUI2020.ViewModel.MultiStage.Implementation; namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter { @@ -45,7 +46,8 @@ namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter public class XMLAirDragWriter_v2_0 : XMLAirDragWriter { public static readonly string[] SUPPORTED_VERSIONS = { - typeof(AirDragViewModel_v2_0).ToString() + typeof(AirDragViewModel_v2_0).ToString(), + typeof(MultistageAirdragViewModel).ToString() }; public XMLAirDragWriter_v2_0(IAirdragDeclarationInputData inputData) : base(inputData) { } protected override void CreateDataElements() @@ -60,8 +62,8 @@ namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_CertificationNumber, _inputData.CertificationNumber)); dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Date, _inputData.Date)); dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_AppVersion, _inputData.AppVersion)); - dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_CdxA_0, _inputData.AirDragArea.ToXMLFormat(2))); - dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_TransferredCDxA, _inputData.AirDragArea.ToXMLFormat(2))); + dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_CdxA_0, _inputData.AirDragArea_0.ToXMLFormat(2))); + dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_TransferredCDxA, _inputData.TransferredAirDragArea.ToXMLFormat(2))); dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_DeclaredCdxA, _inputData.AirDragArea.ToXMLFormat(2))); } @@ -69,7 +71,7 @@ namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter protected override void Initialize() { _defaultNamespace = XMLNamespaces.V20; - _xElement = new XElement(_defaultNamespace + XMLNames.Component_AirDrag); + _xElement = new XElement(XMLNames.Component_AirDrag); } } } diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLBusAuxiliariesWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLBusAuxiliariesWriter.cs new file mode 100644 index 0000000000..5c73182aad --- /dev/null +++ b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLBusAuxiliariesWriter.cs @@ -0,0 +1,52 @@ +using System.Xml.Linq; +using TUGraz.VectoCommon.InputData; + +namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter +{ + public abstract class XMLBusAuxiliariesWriter + { + private readonly IBusAuxiliariesDeclarationData _inputData; + private XElement _xElement; + + protected XMLBusAuxiliariesWriter(IBusAuxiliariesDeclarationData inputData) + { + _inputData = inputData; + } + + public XElement GetElement() + { + if (_xElement == null) + { + Initialize(); + CreateElements(); + } + + return _xElement; + } + public abstract void Initialize(); + + public abstract void CreateElements(); + } + + + + public class XMLBusAuxiliariesWriterMultistage : XMLBusAuxiliariesWriter + { + private XNamespace _defaultNamespace; + public XMLBusAuxiliariesWriterMultistage(IBusAuxiliariesDeclarationData inputData) : base(inputData) { } + + #region Overrides of XMLBusAuxiliariesWriter + + public override void Initialize() + { + _defaultNamespace = XMLNamespaces.V23; + } + + public override void CreateElements() + { + throw new System.NotImplementedException(); + } + + #endregion + } +} \ No newline at end of file diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs index 8090a5e16c..7095cb73ca 100644 --- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs +++ b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs @@ -1,16 +1,22 @@ using System; +using System.Collections.Generic; using System.Diagnostics; +using System.Linq; using System.Xml.Linq; +using Castle.Core.Internal; using TUGraz.IVT.VectoXML.Writer; +using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; +using VECTO3GUI2020.Helper; using VECTO3GUI2020.Util.XML.Interfaces; using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle; using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle; +using VECTO3GUI2020.ViewModel.MultiStage.Implementation; namespace VECTO3GUI2020.Util.XML.Implementation { @@ -184,4 +190,114 @@ namespace VECTO3GUI2020.Util.XML.Implementation public class XMLVehicleWriter_ExcemptedVehicle_v2_2 { } + public class XMLVehicleWriter_v2_8 : XMLVehicleWriter + { + public new static readonly string[] SUPPORTEDVERSIONS = { + typeof(DeclarationInterimStageBusVehicleViewModel_v2_8).ToString() + }; + public XMLVehicleWriter_v2_8(IVehicleDeclarationInputData inputData, IXMLWriterFactory xmlWriterFactory) : base(inputData, xmlWriterFactory) + { + + + } + + #region Overrides of XMLVehicleWriter + + protected override void Initialize() + { + _defaultNamespace = XMLNamespaces.V28; + + _Xelement = new XElement(XMLNamespaces.V20 + XMLNames.Component_Vehicle); + + _Xelement.Add(new XAttribute(XMLNames.Component_ID_Attr, "TODO_ADDIDENTIFIER")); + _Xelement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, "InterimStageInputType")); + } + + protected override void CreateElements() + { + + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_Manufacturer, _inputData.Manufacturer)); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_ManufacturerAddress, + _inputData.ManufacturerAddress)); + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_VIN, _inputData.VIN)); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_Date, DateTime.Today.ToXmlFormat())); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_Model, _inputData.Model)); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_LegislativeCategory, _inputData.LegislativeClass.ToXMLFormat())); + + + + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_CorrectedActualMass, _inputData.CurbMassChassis?.ToXMLFormat(0))); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_TPMLM, + _inputData.GrossVehicleMassRating?.ToXMLFormat(0))); + + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_AirdragModifiedMultistage, _inputData.AirdragModifiedMultistage)); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_NgTankSystem, _inputData.TankSystem)); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_RegisteredClass, _inputData.RegisteredClass.ToXMLFormat())); + + _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.Bus_LowEntry, _inputData.LowEntry)); + + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_HeighIntegratedBody, _inputData.Height.ConvertToMilliMeter())); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_VehicleLength, _inputData.Length.ConvertToMilliMeter())); + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_VehicleWidth, _inputData.Width.ConvertToMilliMeter())); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_EntranceHeight, _inputData.EntranceHeight.ConvertToMilliMeter())); + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.BusAux_PneumaticSystem_DoorDriveTechnology, + _inputData.DoorDriveTechnology != null + ? _inputData.DoorDriveTechnology.ToXMLFormat() + : null)); + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_DeclarationType, _inputData.VehicleDeclarationType)); + + if (_inputData.ADAS != null) { + var adasNamespace = XMLNamespaces.V23; + var aDASElement = new XElement(_defaultNamespace + XMLNames.Vehicle_ADAS); + _Xelement.Add(aDASElement); + aDASElement.Add(new XElement(adasNamespace + XMLNames.Vehicle_ADAS_EngineStopStart, _inputData.ADAS.EngineStopStart)); + + bool ecoRollWithoutEngineStop = _inputData.ADAS.EcoRoll == EcoRollType.WithoutEngineStop; + bool ecoRollWithEngineStop = _inputData.ADAS.EcoRoll == EcoRollType.WithEngineStop; + + aDASElement.Add(new XElement(adasNamespace + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, ecoRollWithoutEngineStop)); + aDASElement.Add(new XElement(adasNamespace + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, ecoRollWithEngineStop)); + aDASElement.Add(new XElement(adasNamespace + XMLNames.Vehicle_ADAS_PCC, + _inputData.ADAS.PredictiveCruiseControl.ToXMLFormat())); + } + + if (_inputData.Components != null) { + var componentElement = new XElement( + _defaultNamespace + XMLNames.Vehicle_Components, + new XAttribute(XMLNamespaces.Xsi + XMLNames.Components_type_attr, + "CompletedVehicleComponentsDeclarationType")); + + //Airdrag + if (_inputData.Components.AirdragInputData != null) { + var airDragElement = _xmlWriterFactory.CreateComponentWriter(_inputData.Components.AirdragInputData) + .GetElement(); + componentElement.Add(airDragElement); + } + + //auxiliaries + + + + _Xelement.Add(componentElement); + } + + _Xelement.DescendantsAndSelf().Where(e => e.Value.IsNullOrEmpty()).Remove(); + } + + #endregion + } + } diff --git a/VECTO3GUI2020/Util/XML/XMLNamespaces.cs b/VECTO3GUI2020/Util/XML/XMLNamespaces.cs index f2852d486b..6c7d84fa01 100644 --- a/VECTO3GUI2020/Util/XML/XMLNamespaces.cs +++ b/VECTO3GUI2020/Util/XML/XMLNamespaces.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; +using Castle.Core.Internal; namespace VECTO3GUI2020.Util.XML { @@ -16,14 +17,44 @@ namespace VECTO3GUI2020.Util.XML public static XNamespace Tns_v20 = Tns.NamespaceName + ":v2.0"; public static XNamespace V26 = DeclarationDefinition + ":DEV:v2.6"; public static XNamespace V21 = DeclarationDefinition + ":v2.1"; - public static XNamespace V23 = DeclarationDefinition + ":v2.3"; + public static XNamespace V23 = DeclarationDefinition + ":DEV:v2.3"; public static XNamespace V20 = DeclarationDefinition + ":v2.0"; public static XNamespace V10 = DeclarationDefinition + ":v1.0"; + public static XNamespace V28 = DeclarationDefinition + ":DEV:v2.8"; public static XNamespace Di = "http://www.w3.org/2000/09/xmldsig#"; public static string DeclarationRootNamespace = "urn:tugraz:ivt:VectoAPI:DeclarationJob"; - - } + + + private static readonly Dictionary<XNamespace, string> NamespacePrefix + = new Dictionary<XNamespace, string> { + { Xsi, "xsi" }, + { Tns, "tns" }, + { Tns_v20, "tns" }, + { V10, "v1.0"}, + { V20, "v2.0"}, + { V21, "v2.1"}, + { V23, "v2.3"}, + { V26, "v2.6"}, + { Di, "di"}, + { V28, "v2.8"}, + }; + + public static string GetPrefix(XNamespace xNamespace) + { + if (xNamespace.NamespaceName.IsNullOrEmpty()) { + return null; + } + string prefix = NamespacePrefix[xNamespace]; + return prefix; + } + + public static string GetPrefix(string nameSpaceName) + { + XNamespace ns = nameSpaceName; + return GetPrefix(ns); + } + } } diff --git a/VECTO3GUI2020/VECTO3GUI2020.csproj b/VECTO3GUI2020/VECTO3GUI2020.csproj index 4a0859e621..0d0aa7158b 100644 --- a/VECTO3GUI2020/VECTO3GUI2020.csproj +++ b/VECTO3GUI2020/VECTO3GUI2020.csproj @@ -59,6 +59,7 @@ <Reference Include="InteractiveDataDisplay.WPF, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\packages\InteractiveDataDisplay.WPF.1.0.0\lib\net452\InteractiveDataDisplay.WPF.dll</HintPath> </Reference> + <Reference Include="Microsoft.Build.Framework" /> <Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.Maps.MapControl.WPF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.Maps.MapControl.WPF.1.0.0.3\lib\net40-Client\Microsoft.Maps.MapControl.WPF.dll</HintPath> @@ -134,6 +135,7 @@ <Compile Include="Helper\Converter\VehicleCategoryToStringConverter.cs" /> <Compile Include="Helper\Converter\XToBoolConverter.cs" /> <Compile Include="Helper\DoubleValidation.cs" /> + <Compile Include="Helper\Exceptions.cs" /> <Compile Include="Helper\Extension.cs" /> <Compile Include="Helper\IWindowHelper.cs" /> <Compile Include="Helper\DialogHelper.cs" /> @@ -148,6 +150,7 @@ <DependentUpon>Test.xaml</DependentUpon> </Compile> <Compile Include="TestViewModel.cs" /> + <Compile Include="Util\XML\Implementation\ComponentWriter\XMLBusAuxiliariesWriter.cs" /> <Compile Include="Util\XML\Implementation\ComponentWriter\XMLPTOWriter.cs" /> <Compile Include="ViewModel\Implementation\Document\DeclarationJobViewModel.cs" /> <Compile Include="ViewModel\Implementation\Document\DeclarationTrailerJobDocumentViewModel.cs" /> @@ -391,6 +394,18 @@ <Page Include="DataGridStyles.xaml"> <Generator>MSBuild:Compile</Generator> </Page> + <Page Include="Resources\Icons\AddDocument_16x.xaml"> + <Generator>MSBuild:Compile</Generator> + <SubType>Designer</SubType> + </Page> + <Page Include="Resources\Icons\drawables.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> + <Page Include="Resources\Icons\Trash_16x.xaml"> + <Generator>MSBuild:Compile</Generator> + <SubType>Designer</SubType> + </Page> <Page Include="Resources\ObjectProvider.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -422,6 +437,10 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> + <Page Include="Resources\Templates\ErrorTemplates.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> <Page Include="Resources\ViewModelBindings.xaml"> <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> @@ -676,6 +695,9 @@ <ItemGroup> <Folder Include="Model\Multistage\" /> </ItemGroup> + <ItemGroup> + <Resource Include="Resources\Icons\Trash_16x.ico" /> + </ItemGroup> <!-- ItemGroup> <Analyzer Include="..\packages\Microsoft.DependencyValidation.Analyzers.0.11.0\analyzers\dotnet\cs\Microsoft.DependencyValidation.Analyzers.resources.dll" /> </-ItemGroup --> diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs index 248bf91e44..1f18f9065d 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs @@ -1,17 +1,21 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.ComponentModel; using System.Configuration; using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; using System.Text; using System.Threading.Tasks; using System.Xml; using Castle.Core.Internal; +using Microsoft.Build.Framework; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; +using VECTO3GUI2020.Helper; using VECTO3GUI2020.Properties; using VECTO3GUI2020.ViewModel.Implementation.Common; using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle; @@ -59,6 +63,8 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public interface IMultistageVehicleViewModel : IVehicleViewModel { + bool HasErrors { get; } + Dictionary<string, string> Errors { get; } void SetAirdragData(IAirdragDeclarationInputData airdragData); void SetBusAuxiliaries(IBusAuxiliariesDeclarationData busAuxData); void SetVehicleInputData(IVehicleDeclarationInputData vehicleInputData); @@ -66,7 +72,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation class DeclarationInterimStageBusVehicleViewModel_v2_8 : ViewModelBase, IMultistageVehicleViewModel, - IVehicleComponentsDeclaration, IAdvancedDriverAssistantSystemDeclarationInputData + IVehicleComponentsDeclaration, IAdvancedDriverAssistantSystemDeclarationInputData, IDataErrorInfo { @@ -120,11 +126,13 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation private Meter _width; - public string Manufacturer { get { return _manufacturer; } - set { SetProperty(ref _manufacturer, value); } + set + { + SetProperty(ref _manufacturer, value); + } } public string Model @@ -285,13 +293,8 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation { get => _airdragModifiedMultistage.toAirdragModifiedEnum(); set { - if (value == AirdragModifiedEnum.UNKNOWN && AirdragModifiedMultistageEditingEnabled) { - throw new ArgumentException(); - } AirdragModifiedMultistage = value.toNullableBool(); - } - - + } } public AirdragModifiedEnum ConsolidatedAirdragModifiedEnum @@ -491,7 +494,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public DateTime Date { - get { throw new NotImplementedException(); } + get => DateTime.Today; } public string AppVersion @@ -610,7 +613,14 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public IVehicleComponentsDeclaration Components { - get { throw new NotImplementedException(); } + get + { + if ((_airdragInputData != null) || (_busAuxiliaries != null)) { + return this; + } else { + return null; + } + } } @@ -679,5 +689,62 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation PredictiveCruiseControlNullable = vehicleInputData.ADAS?.PredictiveCruiseControl; ATEcoRollReleaseLockupClutch = vehicleInputData.ADAS?.ATEcoRollReleaseLockupClutch; } + + #region Implementation of IDataErrorInfo + + public Dictionary<string, string> Errors { get; private set; } = new Dictionary<string, string>(); + + public string this[string propertyName] + { + get + { + string result = null; + switch (propertyName) { + case nameof(Manufacturer): + if (string.IsNullOrWhiteSpace(Manufacturer)) { + result = "Manufacturer cannot be empty"; + } + + break; + case nameof(ManufacturerAddress): + if (string.IsNullOrWhiteSpace(ManufacturerAddress)) + { + result = "Manufacturer address cannot be empty"; + } + break; + case nameof(VIN): + if (string.IsNullOrEmpty(VIN)) { + result = "VIN cannot be empty"; + } + break; + case nameof(AirdragModifiedEnum): + if (AirdragModifiedMultistageEditingEnabled && AirdragModifiedEnum == AirdragModifiedEnum.UNKNOWN) { + result = "Air drag modified has to be set"; + } + break; + } + //string result_null; //https://www.youtube.com/watch?v=5KF0GGObuAQ + + if (result == null) { + if(Errors.ContainsKey(propertyName)) + Errors.Remove(propertyName); + } else { + Errors[propertyName] = result; + } + + + return result; + } + } + + public string Error { get => String.Join(",", Errors.Values); } + public bool HasErrors + { + get + { + return !Error.IsNullOrEmpty(); + } + } + #endregion } } \ No newline at end of file diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/ManufacturingStageViewModel_v0_1.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/ManufacturingStageViewModel_v0_1.cs index c9dd0c1d1b..362594682a 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/ManufacturingStageViewModel_v0_1.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/ManufacturingStageViewModel_v0_1.cs @@ -103,7 +103,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation .BusAuxiliaries); Components.Add("Auxiliaries", _auxiliariesViewModel as IViewModelBase); - VehicleViewModel.SetAirdragData(_airDragEditViewModel); + VehicleViewModel.SetAirdragData(_airDragEditViewModel.AirDragViewModel); VehicleViewModel.SetBusAuxiliaries(_auxiliariesViewModel); } diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAirdragViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAirdragViewModel.cs index 0bdfca0590..f5f264fcac 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAirdragViewModel.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAirdragViewModel.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Windows; @@ -34,7 +35,10 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public string AirdragFilePath { - get => _airdragFilePath; + get + { + return AirDragViewModel?.DataSource.SourceFile.ToString(); + } set => SetProperty(ref _airdragFilePath, value); } @@ -46,6 +50,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public void SetAirdragInputData(IAirdragDeclarationInputData airdragInputData) { + Debug.WriteLine("[MultistageAirdragViewModel] loaded AirdragInputData"); if (airdragInputData == null) { AirDragViewModel = null; return; @@ -66,7 +71,12 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation #region Commands + + private ICommand _loadAirdragFileCommand; + private ICommand _removeAirdragDataCommand; + + private Dictionary<string, string> _validationErrors; @@ -113,7 +123,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation var airDragInputData = _dependencies.InjectFactory.CreateAirdragData(dataProviderVersion, null, airdragNode, fileName); AirDragViewModel = _dependencies.ComponentViewModelFactory.CreateComponentViewModel(airDragInputData) as IAirDragViewModel; - success = false; + success = true; } else { success = false; } @@ -124,14 +134,21 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation MessageBoxButton.OK, MessageBoxImage.Error); success = false; + return; } if (success) { AirdragFilePath = fileName; + } else { + _dependencies.DialogHelper.ShowMessageBox("Invalid input file", "Error", MessageBoxButton.OK, + MessageBoxImage.Error); } } + + + private void ValidationErrorAction(XmlSeverityType arg1, ValidationEvent arg2) { var xmlException = arg2?.ValidationEventArgs?.Exception as XmlSchemaValidationException; @@ -145,6 +162,14 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation _validationErrors.Add(localName, message?.Message); } } + + public ICommand RemoveAirdragDataCommand{ + get => _removeAirdragDataCommand ?? new RelayCommand(() => { + AirDragViewModel = null; + OnPropertyChanged(nameof(AirdragFilePath)); + }, () => AirDragViewModel != null); + } + #endregion @@ -162,13 +187,13 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation ConsolidatedAirdragData = consolidatedAirdragInputData; } - public DataSource DataSource => _airdragViewModel.DataSource; + public DataSource DataSource => _airdragViewModel?.DataSource; - public bool SavedInDeclarationMode => _airdragViewModel.SavedInDeclarationMode; + public bool SavedInDeclarationMode => _airdragViewModel?.SavedInDeclarationMode ?? false; - public string Manufacturer => _airdragViewModel.Manufacturer; + public string Manufacturer => _airdragViewModel?.Manufacturer; - public string Model => _airdragViewModel.Model; + public string Model => _airdragViewModel?.Model; public DateTime Date => _airdragViewModel.Date; diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs index e83f56bf93..2740c0a0d7 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs @@ -1,22 +1,28 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Windows; using System.Windows.Input; +using System.Windows.Navigation; +using System.Xml; using System.Xml.Linq; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCore.InputData.FileIO.XML; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; +using TUGraz.VectoCore.Utils; using VECTO3GUI2020.Helper; using VECTO3GUI2020.Ninject; using VECTO3GUI2020.Properties; using VECTO3GUI2020.Util; +using VECTO3GUI2020.Util.XML; using VECTO3GUI2020.ViewModel.Implementation.Common; using VECTO3GUI2020.ViewModel.Interfaces; using VECTO3GUI2020.ViewModel.Interfaces.Common; using VECTO3GUI2020.ViewModel.Interfaces.Document; using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle; using VECTO3GUI2020.ViewModel.MultiStage.Interfaces; +using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType; namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation { @@ -41,29 +47,81 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation } #region Commands - private ICommand _saveCommand; + private ICommand _saveVifCommand; - public ICommand SaveCommand + public ICommand SaveVIFCommand { get { - return _saveCommand ?? new RelayCommand(() => { - SaveFile(this); + return _saveVifCommand ?? new RelayCommand(() => { + SaveVIF(this); }, () => true); } } - private static void SaveFile(IMultistageVIFInputData inputData) + private static void SaveVIF(IMultistageVIFInputData inputData) { var vifInputData = inputData; + } + + private ICommand _saveInputDataCommand; + private ICommand _saveInputDataAsCommand; + + public ICommand SaveInputDataCommand => + _saveInputDataCommand ?? new RelayCommand(() => { + SaveInputDataExecute(filename:_vehicleInputDataFilePath); + }, () => _vehicleInputDataFilePath != null); + + public ICommand SaveInputDataAsCommand => + _saveInputDataAsCommand ?? new RelayCommand(() => { + SaveInputDataExecute(filename:null); + }, () => true); + + private void SaveInputDataExecute(string filename) + { + if(_manufacturingStageViewModel.Vehicle is IMultistageVehicleViewModel vehicleViewModel) + { + if (vehicleViewModel.HasErrors) { + _dialogHelper.Value.ShowMessageBox(string.Join("\n", vehicleViewModel.Errors.Values), "Error" ); + return; + } + } + + + if (filename == null) { + filename = _dialogHelper.Value.SaveToXMLDialog(Settings.Default.DefaultFilePath); + if (filename == null) { + return; + } + } + + var vehicleWriter = + _multistageDependencies.XMLWriterFactory.CreateVehicleWriter(_manufacturingStageViewModel.Vehicle); + + + + var xElement = vehicleWriter.GetElement(); + var xDoc = xElement.CreateWrapperDocument(XMLNamespaces.V28); + Debug.WriteLine(xElement.CreateWrapperDocument(XMLNamespaces.V28).ToString()); + + var validator = new XMLValidator(xDoc.ToXmlDocument()); + var valid = validator.ValidateXML(XmlDocumentType.DeclarationJobData); + if (!valid) { + _dialogHelper.Value.ShowMessageBox($"Invalid Document: {validator.ValidationError}", "Error"); + xDoc.Save(filename, SaveOptions.OmitDuplicateNamespaces); + LoadVehicleData(filename); + } else { + xDoc.Save(filename, SaveOptions.OmitDuplicateNamespaces); + } } private ICommand _loadVehicleDataCommand; private readonly Lazy<IDialogHelper> _dialogHelper; private readonly Lazy<IXMLInputDataReader> _inputDataReader; - private string _vehicleInputDataFilePath = "Select Vehicle Input Data"; + private string _vehicleInputDataFilePath = null; + private readonly IMultistageDependencies _multistageDependencies; public ICommand LoadVehicleDataCommand { @@ -80,19 +138,26 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation return; } + LoadVehicleData(fileName); + return; + } + + private bool LoadVehicleData(string fileName) + { IDeclarationInputDataProvider inputData; IVehicleDeclarationInputData vehicleInputData; try { inputData = (IDeclarationInputDataProvider)_inputDataReader.Value.CreateDeclaration(fileName); vehicleInputData = inputData.JobInputData.Vehicle; _manufacturingStageViewModel.SetInputData(vehicleInputData); + + VehicleInputDataFilePath = fileName; } catch (Exception e) { _dialogHelper.Value.ShowMessageBox(e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); - return; + return true; } - - return; + return false; } public string VehicleInputDataFilePath @@ -115,6 +180,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation _inputDataReader = multistageDependencies.InputDataReaderLazy; _manufacturingStageViewModel = vmFactory.GetManufacturingStageViewModel(_consolidateManufacturingStage); + _multistageDependencies = multistageDependencies; } @@ -177,6 +243,8 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation set => _inputComplete = value; } + + #endregion } diff --git a/VECTO3GUI2020/Views/CustomControls/CustomControlExtensionMethods.cs b/VECTO3GUI2020/Views/CustomControls/CustomControlExtensionMethods.cs index 02d770aea5..39c340cab1 100644 --- a/VECTO3GUI2020/Views/CustomControls/CustomControlExtensionMethods.cs +++ b/VECTO3GUI2020/Views/CustomControls/CustomControlExtensionMethods.cs @@ -49,7 +49,7 @@ namespace VECTO3GUI2020.Views.CustomControls return PropertyType; } - public static object CreateDummyContent(this UserControl userControl, DependencyPropertyChangedEventArgs e) + public static object CreateDummyContent(this UserControl userControl, DependencyPropertyChangedEventArgs e, bool createEnum = false) { var type = userControl.GetPropertyType(e.Property); if (type == null) @@ -62,13 +62,13 @@ namespace VECTO3GUI2020.Views.CustomControls var baseType = dynType.BaseType; //Create SI Dummy - if (baseType.BaseType == typeof(SI)) + if (baseType?.BaseType != null && baseType.BaseType == typeof(SI)) { var createMethod = baseType.GetMethod("Create"); var dummyContent = createMethod?.Invoke(null, new object[] { (new double()) }); return dummyContent; } - else + else if(createEnum) { var bindingProperty = userControl.GetBindingExpression(e.Property); var dataItemType = bindingProperty?.DataItem.GetType(); diff --git a/VECTO3GUI2020/Views/Multistage/CustomControls/FilePicker.xaml b/VECTO3GUI2020/Views/Multistage/CustomControls/FilePicker.xaml index 2df363f198..f32becd1ec 100644 --- a/VECTO3GUI2020/Views/Multistage/CustomControls/FilePicker.xaml +++ b/VECTO3GUI2020/Views/Multistage/CustomControls/FilePicker.xaml @@ -5,7 +5,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" mc:Ignorable="d" - d:DesignHeight="30" d:DesignWidth="800" Name="filepickercustomcontrol" MinHeight="40"> + d:DesignHeight="30" d:DesignWidth="800" Name="filepickercustomcontrol" MinHeight="40" MinWidth="400"> <Grid Margin="4" VerticalAlignment="Stretch"> <Grid.RowDefinitions> <RowDefinition></RowDefinition> @@ -17,9 +17,9 @@ <TextBox VerticalContentAlignment="Center" Padding="4" Margin = "0 0 0 0" IsReadOnly="True" Text="{Binding Text, ElementName=filepickercustomcontrol}" HorizontalAlignment="Stretch" TextWrapping="Wrap" Style="{DynamicResource TextBoxStyle1}"/> - <Button Padding="4" Margin="4 0 0 0" Grid.Column="1" Command="{Binding Command, ElementName=filepickercustomcontrol}" Style="{DynamicResource FilePickerButtonStyle}"> - <Image Source="../../../Resources/Icons/folderpicker.ico"> - </Image> + <Button Padding="4" Margin="4 0 0 0" Grid.Column="1" ContentTemplate="{DynamicResource AddDocumentIcon}" + Command="{Binding Command, ElementName=filepickercustomcontrol}" Style="{DynamicResource FilePickerButtonStyle}"> + </Button> </Grid> </UserControl> diff --git a/VECTO3GUI2020/Views/Multistage/CustomControls/LabledTextBoxMultistage.xaml.cs b/VECTO3GUI2020/Views/Multistage/CustomControls/LabledTextBoxMultistage.xaml.cs index bdaf1c6c12..8fd84d304a 100644 --- a/VECTO3GUI2020/Views/Multistage/CustomControls/LabledTextBoxMultistage.xaml.cs +++ b/VECTO3GUI2020/Views/Multistage/CustomControls/LabledTextBoxMultistage.xaml.cs @@ -72,6 +72,15 @@ namespace VECTO3GUI2020.Views.Multistage.CustomControls set { SetValue(LabelTextProperty, value); } } + public static readonly DependencyProperty ModeProperty = DependencyProperty.Register( + "Mode", typeof(MultistageParameterViewMode), typeof(LabledTextBoxMultistage), new PropertyMetadata(default(MultistageParameterViewMode))); + + public MultistageParameterViewMode Mode + { + get { return (MultistageParameterViewMode)GetValue(ModeProperty); } + set { SetValue(ModeProperty, value); } + } + #endregion private static void ContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) @@ -79,7 +88,8 @@ namespace VECTO3GUI2020.Views.Multistage.CustomControls var labledTextBoxMultistage = (CustomControls.LabledTextBoxMultistage)d; - labledTextBoxMultistage.DummyContent = labledTextBoxMultistage.CreateDummyContent(e); + labledTextBoxMultistage.DummyContent = labledTextBoxMultistage.CreateDummyContent(e, + createEnum:labledTextBoxMultistage.Mode == MultistageParameterViewMode.COMBOBOX); if (labledTextBoxMultistage.LabelText != null) { diff --git a/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml b/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml index 56d7cb6228..74315b8a97 100644 --- a/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml +++ b/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml @@ -6,6 +6,9 @@ xmlns:local="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" Name="MultistageParameterControl"> + + + <Grid> <!-- _____________________________________________ Text mode ___________________________________________________________________--> @@ -39,7 +42,6 @@ Text="{Binding Content, ElementName=MultistageParameterControl, Converter={StaticResource SIValueToStringConverter}, - ValidatesOnExceptions=True, UpdateSourceTrigger=PropertyChanged}" Style="{DynamicResource TextBoxStyle1}" IsReadOnly="{Binding ElementName=MultistageParameterControl, @@ -88,7 +90,6 @@ <ComboBox Grid.Column="3" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="2 0 2 0" SelectedValue="{Binding Content, Mode=TwoWay, ElementName=MultistageParameterControl, ValidatesOnExceptions=True}" ItemsSource="{Binding ListItems, ElementName=MultistageParameterControl}" - IsEnabled="{Binding EditingEnabled, ElementName=MultistageParameterControl}" IsEditable="False" MouseDoubleClick="Control_OnMouseDoubleClick"> <ComboBox.ItemTemplate> @@ -138,5 +139,8 @@ Content="{Binding DummyContent, ElementName=MultistageParameterControl, Converter={StaticResource SIToUnitStringConverter}}"> </Label> </Grid> + + <!-- DatePicker Mode --> + </Grid> </UserControl> diff --git a/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml.cs b/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml.cs index 841c1859b8..22c680889a 100644 --- a/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml.cs +++ b/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml.cs @@ -190,11 +190,15 @@ namespace VECTO3GUI2020.Views.Multistage.CustomControls if (Mode != MultistageParameterViewMode.COMBOBOX) return; - if(DummyContent is Enum en) { - var enType = en.GetType(); - + if(DummyContent is Enum dummyEnum) { + var enType = dummyEnum.GetType(); + ListItems = Enum.GetValues(enType).Cast<object>().ToList(); + } + if (Content is Enum contentEnum) { + var enType = contentEnum.GetType(); ListItems = Enum.GetValues(enType).Cast<object>().ToList(); + } } @@ -217,13 +221,13 @@ namespace VECTO3GUI2020.Views.Multistage.CustomControls - if (baseType.BaseType == typeof(SI)) { + if (baseType?.BaseType != null && baseType.BaseType == typeof(SI)) { var createMethod = baseType.GetMethod("Create"); var dummyContent = createMethod?.Invoke(null, new object[] { (new double()) }); return dummyContent; - }else{ + }else if(Mode == MultistageParameterViewMode.COMBOBOX) { var bindingProperty = userControl.GetBindingExpression(e.Property); - var dataItemType = bindingProperty?.DataItem.GetType(); + var dataItemType = bindingProperty?.DataItem?.GetType(); var sourcePropertyType = dataItemType?.GetProperty(bindingProperty?.ResolvedSourcePropertyName)?.PropertyType; @@ -252,7 +256,9 @@ namespace VECTO3GUI2020.Views.Multistage.CustomControls { MultiStageParameter multiStageParameter = (MultiStageParameter)d; if((bool)e.NewValue == false) { - multiStageParameter.DummyContent = multiStageParameter.Content; + if (!Validation.GetHasError(multiStageParameter.TextBoxContent)) { + multiStageParameter.DummyContent = multiStageParameter.Content; + } multiStageParameter.Content = null; } else { if (multiStageParameter.Content != null) { diff --git a/VECTO3GUI2020/Views/Multistage/ManufacturingStageAuxiliariesView.xaml b/VECTO3GUI2020/Views/Multistage/ManufacturingStageAuxiliariesView.xaml index 63b5a17d77..a8b813c380 100644 --- a/VECTO3GUI2020/Views/Multistage/ManufacturingStageAuxiliariesView.xaml +++ b/VECTO3GUI2020/Views/Multistage/ManufacturingStageAuxiliariesView.xaml @@ -59,6 +59,7 @@ ShowCheckBox="False"/> <Separator/> <customControls:MultiStageParameter Mode="TEXTBOX" + Validation.ErrorTemplate="{DynamicResource multistageParameterControlErrorTemplate}" PreviousContent="{Binding ConsolidatedInputData.HVACAux.AuxHeaterPower}" Content="{Binding AuxHeaterPower}"/> <customControls:MultiStageParameter Mode="CHECKBOX" diff --git a/VECTO3GUI2020/Views/Multistage/MultiStageView.xaml b/VECTO3GUI2020/Views/Multistage/MultiStageView.xaml index cfb78aa744..6fe9f0f105 100644 --- a/VECTO3GUI2020/Views/Multistage/MultiStageView.xaml +++ b/VECTO3GUI2020/Views/Multistage/MultiStageView.xaml @@ -10,17 +10,26 @@ d:DesignHeight="450" d:DesignWidth="800" d:DataContext="{d:DesignInstance implementation:MultiStageJobViewModel_v0_1}"> <Grid> <DockPanel> - <customControls:FilePicker Command="{Binding LoadVehicleDataCommand}" DockPanel.Dock="Top" Text="{Binding VehicleInputDataFilePath}"></customControls:FilePicker> + <customControls:FilePicker + DockPanel.Dock="Top" + Command="{Binding LoadVehicleDataCommand}" + Text="{Binding VehicleInputDataFilePath, TargetNullValue=Select Vehicle Input Data . . .}"></customControls:FilePicker> <Border BorderThickness="1" BorderBrush="{DynamicResource ButtonHighlightColor}" Height="40" DockPanel.Dock="Bottom"> <DockPanel LastChildFill="False"> <Button DockPanel.Dock="Right" Width="100" - Command="{Binding SaveCommand}" + Command="{Binding SaveVIFCommand}" Style="{DynamicResource MultiStageButtonStyle1}" Margin="4" Padding="4">Save as new VIF</Button> - <Button DockPanel.Dock="Right" Width="100" Style="{DynamicResource MultiStageButtonStyle1}" Margin="4" Padding="4">Save Input</Button> - <Button DockPanel.Dock="Right" Width="100" Style="{DynamicResource MultiStageButtonStyle1}" Margin="4" Padding="4">Save Input As ... </Button> + <Button + DockPanel.Dock="Right" + Width="100" + Style="{DynamicResource MultiStageButtonStyle1}" + Margin="4" + Padding="4" + Command="{Binding SaveInputDataCommand}">Save Input</Button> + <Button DockPanel.Dock="Right" Width="100" Style="{DynamicResource MultiStageButtonStyle1}" Margin="4" Padding="4" Command="{Binding SaveInputDataAsCommand}">Save Input As ... </Button> </DockPanel> </Border> <ContentControl DockPanel.Dock="Top" Content="{Binding ManufacturingStageViewModel}"/> diff --git a/VECTO3GUI2020/Views/Multistage/MultistageAirDragView.xaml b/VECTO3GUI2020/Views/Multistage/MultistageAirDragView.xaml index c15697b01f..6fa79fa6bb 100644 --- a/VECTO3GUI2020/Views/Multistage/MultistageAirDragView.xaml +++ b/VECTO3GUI2020/Views/Multistage/MultistageAirDragView.xaml @@ -16,14 +16,27 @@ <DockPanel> <StackPanel DockPanel.Dock="Top"> <Label Content="AIRDRAG" HorizontalAlignment="Stretch" Background="{DynamicResource ButtonHighlightColor}" Style="{DynamicResource LabelStyle1}"/> - <customControlsMultistage:FilePicker Text="{Binding AirdragFilePath}" Command="{Binding LoadAirdragFileCommand}"/> - <StackPanel HorizontalAlignment="Stretch" Margin="4"> + <DockPanel HorizontalAlignment="Stretch" > + <Button Width="30" Margin="4" DockPanel.Dock="Right" + Style="{DynamicResource FilePickerButtonStyle}" + ContentTemplate="{DynamicResource TrashIcon}" + Command="{Binding RemoveAirdragDataCommand}"> + + </Button> + <customControlsMultistage:FilePicker + DockPanel.Dock="Left" + Text="{Binding AirdragFilePath, TargetNullValue=Select Airdrag Input Data}" + Command="{Binding LoadAirdragFileCommand}"/> + </DockPanel> + + <StackPanel HorizontalAlignment="Stretch" Margin="4" Visibility="{Binding ConsolidatedAirdragData, Converter={StaticResource NullToVisibilityConverter}}"> <Label Style="{DynamicResource LabelStyle1}">Consolidated Airdrag Data</Label> <customControlsMultistage:LabledTextBoxMultistage Content="{Binding ConsolidatedAirdragData.Manufacturer, Mode=OneWay}" ReadOnly="True"/> <customControlsMultistage:LabledTextBoxMultistage Content="{Binding ConsolidatedAirdragData.Model, Mode=OneWay}" ReadOnly="True"/> <customControlsMultistage:LabledTextBoxMultistage Content="{Binding ConsolidatedAirdragData.AirDragArea, Mode=OneWay}" ReadOnly="True"/> <Label Style="{DynamicResource LabelStyle1}">Data from File</Label> - <ContentControl Content="{Binding AirDragViewModel}"> + <ContentControl Content="{Binding AirDragViewModel}" + Visibility="{Binding AirDragViewModel, Converter={StaticResource NullToVisibilityConverter}}"> <ContentControl.ContentTemplate> <DataTemplate> <local:AirDragView_v2_8 DataContext="{Binding }"/> diff --git a/VECTO3GUI2020/Views/Multistage/VehicleView_v2_8.xaml b/VECTO3GUI2020/Views/Multistage/VehicleView_v2_8.xaml index 82dbaea629..0ef8b51cad 100644 --- a/VECTO3GUI2020/Views/Multistage/VehicleView_v2_8.xaml +++ b/VECTO3GUI2020/Views/Multistage/VehicleView_v2_8.xaml @@ -14,15 +14,15 @@ <Label Content="VEHICLE DATA" HorizontalAlignment="Stretch" FontSize="15" VerticalAlignment="Stretch" Style="{DynamicResource LabelStyle1}"/> - <custom:MultiStageParameter + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" Optional="False" - Content="{Binding Manufacturer}"/> - <custom:MultiStageParameter + Content="{Binding Manufacturer, ValidatesOnDataErrors=True}"/> + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" Optional="False" - Content="{Binding ManufacturerAddress}"/> - <custom:MultiStageParameter + Content="{Binding ManufacturerAddress, ValidatesOnDataErrors=True}"/> + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" Optional="False" - Content="{Binding VIN}"/> + Content="{Binding VIN, ValidatesOnDataErrors=True}"/> <custom:MultiStageParameter PreviousContent="{Binding ConsolidatedVehicleData.Model}" @@ -37,20 +37,20 @@ Content="{Binding LegislativeClass}" Mode="COMBOBOX" /> - <custom:MultiStageParameter - PreviousContent="{Binding ConsolidatedVehicleData.CurbMassChassis}" - Content="{Binding CurbMassChassis}"/> + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + PreviousContent="{Binding ConsolidatedVehicleData.CurbMassChassis}" + Content="{Binding CurbMassChassis}"/> - <custom:MultiStageParameter - PreviousContent="{Binding ConsolidatedVehicleData.GrossVehicleMassRating}" - Content="{Binding GrossVehicleMassRating}"/> + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + PreviousContent="{Binding ConsolidatedVehicleData.GrossVehicleMassRating}" + Content="{Binding GrossVehicleMassRating}"/> - <custom:MultiStageParameter - EditingEnabled="{Binding AirdragModifiedMultistageEditingEnabled}" - PreviousContent="{Binding ConsolidatedAirdragModifiedEnum}" - Content="{Binding AirdragModifiedEnum}" - Mode="COMBOBOX"/> + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + EditingEnabled="{Binding AirdragModifiedMultistageEditingEnabled}" + PreviousContent="{Binding ConsolidatedAirdragModifiedEnum}" + Content="{Binding AirdragModifiedEnum, ValidatesOnDataErrors=True}" + Mode="COMBOBOX"/> <custom:MultiStageParameter PreviousContent="{Binding ConsolidatedVehicleData.TankSystem}" @@ -86,31 +86,31 @@ /> <Separator/> - <custom:MultiStageParameter - EditingEnabled="{Binding - MeasurementsGroupEditingEnabled}" - PreviousContent="{Binding ConsolidatedHeightInMm}" - Content="{Binding HeightInMm}" - DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> - <custom:MultiStageParameter - EditingEnabled="{Binding MeasurementsGroupEditingEnabled}" - PreviousContent="{Binding ConsolidatedWidthInMm}" - Content="{Binding WidthInMm}" - ShowCheckBox="False" - DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> - <custom:MultiStageParameter - EditingEnabled="{Binding MeasurementsGroupEditingEnabled}" - PreviousContent="{Binding ConsolidatedLengthInMm}" - Content="{Binding LengthInMm}" - ShowCheckBox="False" - DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> - - <custom:MultiStageParameter - EditingEnabled="{Binding MeasurementsGroupEditingEnabled}" - PreviousContent="{Binding ConsolidatedEntranceHeightInMm}" - Content="{Binding EntranceHeightInMm}" - ShowCheckBox="False" - DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + EditingEnabled="{Binding + MeasurementsGroupEditingEnabled}" + PreviousContent="{Binding ConsolidatedHeightInMm}" + Content="{Binding HeightInMm, ValidatesOnExceptions=True}" + DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + EditingEnabled="{Binding MeasurementsGroupEditingEnabled}" + PreviousContent="{Binding ConsolidatedWidthInMm}" + Content="{Binding WidthInMm}" + ShowCheckBox="False" + DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + EditingEnabled="{Binding MeasurementsGroupEditingEnabled}" + PreviousContent="{Binding ConsolidatedLengthInMm}" + Content="{Binding LengthInMm}" + ShowCheckBox="False" + DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> + + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + EditingEnabled="{Binding MeasurementsGroupEditingEnabled}" + PreviousContent="{Binding ConsolidatedEntranceHeightInMm}" + Content="{Binding EntranceHeightInMm}" + ShowCheckBox="False" + DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> <Separator/> @@ -122,8 +122,9 @@ <custom:MultiStageParameter + EditingEnabled="True" + ShowCheckBox="False" PreviousContent="{Binding ConsolidatedVehicleData.VehicleDeclarationType}" - Content="{Binding VehicleDeclarationType}" Mode="COMBOBOX" /> <Label Content="ADAS" Style="{DynamicResource LabelStyle1}"/> diff --git a/VECTO3GUI2020/Views/SettingsView.xaml b/VECTO3GUI2020/Views/SettingsView.xaml index c96f1beb14..b026ea4a7b 100644 --- a/VECTO3GUI2020/Views/SettingsView.xaml +++ b/VECTO3GUI2020/Views/SettingsView.xaml @@ -4,25 +4,12 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:VECTO3GUI2020.Views" - mc:Ignorable="d" Height="450" Width="800"> + xmlns:customControls="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" + xmlns:implementation="clr-namespace:VECTO3GUI2020.ViewModel.Implementation" + mc:Ignorable="d" Height="450" Width="800" d:DataContext="{d:DesignInstance implementation:SettingsViewModel }"> <Grid> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="4*"/> - <ColumnDefinition Width="4*"/> - <ColumnDefinition Width="1*"/> - </Grid.ColumnDefinitions> - <Grid.RowDefinitions> - <RowDefinition Height="40"></RowDefinition> - <RowDefinition/> - <RowDefinition/> - </Grid.RowDefinitions> - - <Label VerticalAlignment="Center" Grid.Column="0" Grid.Row="0" Content="File Path: "></Label> - <TextBox Grid.Column="1" Grid.Row="0" Text="{Binding DefaultFilePath, Mode=OneWay}" IsReadOnly="True" TextWrapping="Wrap"/> - <Button Grid.Column="2" Grid.Row="0" Style="{DynamicResource MainViewButton}" Content="Change Path" Command="{Binding ChangeFilePath}"> - <Button.Background> - <ImageBrush/> - </Button.Background> - </Button> + <StackPanel> + <customControls:FilePicker Width="450" MinWidth="400" Text="{Binding DefaultFilePath}" HorizontalAlignment="Stretch" Command="{Binding ChangeFilePath}"/> + </StackPanel> </Grid> </UserControl> diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/123.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/123.xml new file mode 100644 index 0000000000..e6329ae7d8 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/123.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8"?> +<tns:VectoInputDeclaration xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" schemaVersion="2.8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationJob V:\VectoCore\VectoCore\Resources\XSD\VectoDeclarationJob.xsd"> + <v2.0:Vehicle id="TODO_ADDIDENTIFIER" xsi:type="InterimStageInputType"> + <Manufacturer>Some Manufacturer</Manufacturer> + <ManufacturerAddress>Some Manufacturer Address</ManufacturerAddress> + <VIN>VEH-1234567890</VIN> + <Date>2021-04-28T22:00:00Z</Date> + <Model>Sample Bus Model</Model> + <LegislativeCategory>M3</LegislativeCategory> + <CorrectedActualMass>500</CorrectedActualMass> + <TechnicalPermissibleMaximumLadenMass>3500</TechnicalPermissibleMaximumLadenMass> + <AirdragModifiedMultistage>true</AirdragModifiedMultistage> + <NgTankSystem>Compressed</NgTankSystem> + <ClassBus>II+III</ClassBus> + <VehicleCode>CB</VehicleCode> + <LowEntry>false</LowEntry> + <HeightIntegratedBody>2500</HeightIntegratedBody> + <VehicleLength>9500</VehicleLength> + <VehicleWidth>2500</VehicleWidth> + <EntranceHeight>2000</EntranceHeight> + <DoorDriveTechnology>electric</DoorDriveTechnology> + <DeclarationType>interim</DeclarationType> + <ADAS> + <v2.3:EngineStopStart>false</v2.3:EngineStopStart> + <v2.3:EcoRollWithoutEngineStop>false</v2.3:EcoRollWithoutEngineStop> + <v2.3:EcoRollWithEngineStop>false</v2.3:EcoRollWithEngineStop> + <v2.3:PredictiveCruiseControl>none</v2.3:PredictiveCruiseControl> + </ADAS> + </v2.0:Vehicle> +</tns:VectoInputDeclaration> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_full-sample.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_full-sample.xml index f23b14a11d..3a9fc46384 100644 --- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_full-sample.xml +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_full-sample.xml @@ -1 +1,92 @@ -<?xml version="1.0" encoding="UTF-8"?> <tns:VectoInputDeclaration schemaVersion="2.8" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xmlns:di="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationJob E:\VECTO_DEV\fk_vecto-dev\VectoCore\VectoCore\Resources\XSD/VectoDeclarationJob.xsd"> <v2.0:Vehicle id="VEH-1234567890" xsi:type="InterimStageInputType"> <Manufacturer>Some Manufacturer</Manufacturer> <ManufacturerAddress>Some Manufacturer Address</ManufacturerAddress> <VIN>VEH-1234567890</VIN> <Date>2020-01-09T11:00:00Z</Date> <Model>Sample Bus Model</Model> <LegislativeCategory>M3</LegislativeCategory> <CorrectedActualMass>500</CorrectedActualMass> <TechnicalPermissibleMaximumLadenMass>3500</TechnicalPermissibleMaximumLadenMass> <AirdragModifiedMultistage>false</AirdragModifiedMultistage> <NgTankSystem>Compressed</NgTankSystem> <ClassBus>II+III</ClassBus> <NumberPassengersLowerDeck>0</NumberPassengersLowerDeck> <NumberPassengersUpperDeck>10</NumberPassengersUpperDeck> <VehicleCode>CB</VehicleCode> <LowEntry>false</LowEntry> <HeightIntegratedBody>2500</HeightIntegratedBody> <VehicleLength>9500</VehicleLength> <VehicleWidth>2500</VehicleWidth> <EntranceHeight>2000</EntranceHeight> <DoorDriveTechnology>electric</DoorDriveTechnology> <DeclarationType>interim</DeclarationType> <ADAS> <v2.3:EngineStopStart>true</v2.3:EngineStopStart> <v2.3:EcoRollWithoutEngineStop>false</v2.3:EcoRollWithoutEngineStop> <v2.3:EcoRollWithEngineStop>false</v2.3:EcoRollWithEngineStop> <v2.3:PredictiveCruiseControl>none</v2.3:PredictiveCruiseControl> <v2.3:APTEcoRollReleaseLockupClutch>true</v2.3:APTEcoRollReleaseLockupClutch> </ADAS> <Components xsi:type="CompletedVehicleComponentsDeclarationType"> <AirDrag> <v2.0:Data xsi:type="v2.0:AirDragDataDeclarationType" id="CabinX23h"> <v2.0:Manufacturer>Generic Manufacturer</v2.0:Manufacturer> <v2.0:Model>Generic Model</v2.0:Model> <v2.0:CertificationNumber>e12*0815/8051*2017/05E0000*00</v2.0:CertificationNumber> <v2.0:Date>2017-03-24T15:00:00Z</v2.0:Date> <v2.0:AppVersion>Vecto AirDrag x.y</v2.0:AppVersion> <v2.0:CdxA_0>6.31</v2.0:CdxA_0> <v2.0:TransferredCdxA>6.32</v2.0:TransferredCdxA> <v2.0:DeclaredCdxA>6.34</v2.0:DeclaredCdxA> </v2.0:Data> <v2.0:Signature> <di:Reference URI="#CabinX23h"> <di:Transforms> <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </di:Transforms> <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <di:DigestValue>b9SHCfOoVrBxFQ8wwDK32OO+9bd85DuaUdgs6j/29N8=</di:DigestValue> </di:Reference> </v2.0:Signature> </AirDrag> <Auxiliaries> <Data xsi:type="CompletedVehicleAuxiliaryDataDeclarationType"> <ElectricSystem> <LEDLights> <Interiorlights>false</Interiorlights> <Dayrunninglights>true</Dayrunninglights> <Positionlights>true</Positionlights> <Brakelights>true</Brakelights> <Headlights>false</Headlights> </LEDLights> </ElectricSystem> <HVAC> <SystemConfiguration>0</SystemConfiguration> <HeatPumpTypeDriverCompartment>none</HeatPumpTypeDriverCompartment> <HeatPumpModeDriverCompartment>heating</HeatPumpModeDriverCompartment> <HeatPumpTypePassengerCompartment>non R-744 2-stage</HeatPumpTypePassengerCompartment> <HeatPumpModePassengerCompartment>cooling</HeatPumpModePassengerCompartment> <AuxiliaryHeaterPower>50</AuxiliaryHeaterPower> <DoubleGlazing>false</DoubleGlazing> <AdjustableAuxiliaryHeater>true</AdjustableAuxiliaryHeater> <SeparateAirDistributionDucts>false</SeparateAirDistributionDucts> <WaterElectricHeater>true</WaterElectricHeater> <AirElectricHeater>false</AirElectricHeater> <OtherHeatingTechnology>false</OtherHeatingTechnology> </HVAC> </Data> </Auxiliaries> </Components> </v2.0:Vehicle> </tns:VectoInputDeclaration> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8"?> +<tns:VectoInputDeclaration +schemaVersion="2.8" +xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" +xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" +xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" +xmlns:di="http://www.w3.org/2000/09/xmldsig#" +xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationJob E:\VECTO_DEV\fk_vecto-dev\VectoCore\VectoCore\Resources\XSD/VectoDeclarationJob.xsd"> + <v2.0:Vehicle id="VEH-1234567890" xsi:type="InterimStageInputType"> + <Manufacturer>Some Manufacturer</Manufacturer> + <ManufacturerAddress>Some Manufacturer Address</ManufacturerAddress> + <VIN>VEH-1234567890</VIN> + <Date>2020-01-09T11:00:00Z</Date> + <Model>Sample Bus Model</Model> + <LegislativeCategory>M3</LegislativeCategory> + <CorrectedActualMass>500</CorrectedActualMass> + <TechnicalPermissibleMaximumLadenMass>3500</TechnicalPermissibleMaximumLadenMass> + <AirdragModifiedMultistage>false</AirdragModifiedMultistage> + <NgTankSystem>Compressed</NgTankSystem> + <ClassBus>II+III</ClassBus> + <NumberPassengersLowerDeck>0</NumberPassengersLowerDeck> + <NumberPassengersUpperDeck>10</NumberPassengersUpperDeck> + <VehicleCode>CB</VehicleCode> + <LowEntry>false</LowEntry> + <HeightIntegratedBody>2500</HeightIntegratedBody> + <VehicleLength>9500</VehicleLength> + <VehicleWidth>2500</VehicleWidth> + <EntranceHeight>2000</EntranceHeight> + <DoorDriveTechnology>electric</DoorDriveTechnology> + <DeclarationType>interim</DeclarationType> + <ADAS> + <v2.3:EngineStopStart>true</v2.3:EngineStopStart> + <v2.3:EcoRollWithoutEngineStop>false</v2.3:EcoRollWithoutEngineStop> + <v2.3:EcoRollWithEngineStop>false</v2.3:EcoRollWithEngineStop> + <v2.3:PredictiveCruiseControl>none</v2.3:PredictiveCruiseControl> + <v2.3:APTEcoRollReleaseLockupClutch>true</v2.3:APTEcoRollReleaseLockupClutch> + </ADAS> + <Components xsi:type="CompletedVehicleComponentsDeclarationType"> + <AirDrag> + <v2.0:Data xsi:type="v2.0:AirDragDataDeclarationType" id="CabinX23h"> + <v2.0:Manufacturer>Generic Manufacturer</v2.0:Manufacturer> + <v2.0:Model>Generic Model</v2.0:Model> + <v2.0:CertificationNumber>e12*0815/8051*2017/05E0000*00</v2.0:CertificationNumber> + <v2.0:Date>2017-03-24T15:00:00Z</v2.0:Date> + <v2.0:AppVersion>Vecto AirDrag x.y</v2.0:AppVersion> + <v2.0:CdxA_0>6.31</v2.0:CdxA_0> + <v2.0:TransferredCdxA>6.32</v2.0:TransferredCdxA> + <v2.0:DeclaredCdxA>6.34</v2.0:DeclaredCdxA> + </v2.0:Data> + <v2.0:Signature> + <di:Reference URI="#CabinX23h"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> + <di:DigestValue>b9SHCfOoVrBxFQ8wwDK32OO+9bd85DuaUdgs6j/29N8=</di:DigestValue> + </di:Reference> + </v2.0:Signature> + </AirDrag> + <Auxiliaries> + <Data xsi:type="CompletedVehicleAuxiliaryDataDeclarationType"> + <ElectricSystem> + <LEDLights> + <Interiorlights>false</Interiorlights> + <Dayrunninglights>true</Dayrunninglights> + <Positionlights>true</Positionlights> + <Brakelights>true</Brakelights> + <Headlights>false</Headlights> + </LEDLights> + </ElectricSystem> + <HVAC> + <SystemConfiguration>0</SystemConfiguration> + <HeatPumpTypeDriverCompartment>none</HeatPumpTypeDriverCompartment> + <HeatPumpModeDriverCompartment>heating</HeatPumpModeDriverCompartment> + <HeatPumpTypePassengerCompartment>non R-744 2-stage</HeatPumpTypePassengerCompartment> + <HeatPumpModePassengerCompartment>cooling</HeatPumpModePassengerCompartment> + <AuxiliaryHeaterPower>50</AuxiliaryHeaterPower> + <DoubleGlazing>false</DoubleGlazing> + <AdjustableAuxiliaryHeater>true</AdjustableAuxiliaryHeater> + <SeparateAirDistributionDucts>false</SeparateAirDistributionDucts> + <WaterElectricHeater>true</WaterElectricHeater> + <AirElectricHeater>false</AirElectricHeater> + <OtherHeatingTechnology>false</OtherHeatingTechnology> + </HVAC> + </Data> + </Auxiliaries> + </Components> + </v2.0:Vehicle> +</tns:VectoInputDeclaration> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/123sadf.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/123sadf.xml new file mode 100644 index 0000000000..b5ec06780c --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/123sadf.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<tns:VectoInputDeclaration xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xmlns:schemaVersion="2.8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0"> + <v2.0:Vehicle id="TODO:ADDIDENTIFIER" xsi:type="InterimstageInputType"> + <Date>27.04.2021</Date> + <DeclarationType>interim</DeclarationType> + </v2.0:Vehicle> +</tns:VectoInputDeclaration> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/bin/Debug/TestData/Integration/Buses/FactorMethod/primary_heavyBus group41.RSLT_PIF.xml b/VectoCore/VectoCoreTest/bin/Debug/TestData/Integration/Buses/FactorMethod/primary_heavyBus group41.RSLT_PIF.xml deleted file mode 100644 index f8583aee47..0000000000 --- a/VectoCore/VectoCoreTest/bin/Debug/TestData/Integration/Buses/FactorMethod/primary_heavyBus group41.RSLT_PIF.xml +++ /dev/null @@ -1,552 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<pif:VectoOutputPrimaryVehicle xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1" xmlns:pif="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation" xmlns:di="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/XSD//DEV/VectoOutputPrimaryVehicleInformation.xsd"> - <pif:Data xsi:type="PrimaryVehicleHeavyBusDataType" id="PIF-4121ae4751874cefa376"> - <Vehicle xsi:type="VehiclePIFType"> - <ManufacturerPrimaryVehicle>Generic Truck Manufacturer</ManufacturerPrimaryVehicle> - <ManufacturerAddressPrimaryVehicle>Street, ZIP City</ManufacturerAddressPrimaryVehicle> - <Model>Generic Model</Model> - <VIN>VEH-1234567890_nonSmart</VIN> - <Date>2017-02-15T11:00:00Z</Date> - <VehicleCategory>Bus</VehicleCategory> - <AxleConfiguration>4x2</AxleConfiguration> - <Articulated>false</Articulated> - <TechnicalPermissibleMaximumLadenMass>28000</TechnicalPermissibleMaximumLadenMass> - <IdlingSpeed>700</IdlingSpeed> - <RetarderType>Transmission Output Retarder</RetarderType> - <RetarderRatio>1.000</RetarderRatio> - <AngledriveType>None</AngledriveType> - <ZeroEmissionVehicle>false</ZeroEmissionVehicle> - <ADAS xmlns:adas="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xsi:type="adas:AdvancedDriverAssistantSystemsType"> - <adas:EngineStopStart>false</adas:EngineStopStart> - <adas:EcoRollWithoutEngineStop>false</adas:EcoRollWithoutEngineStop> - <adas:EcoRollWithEngineStop>false</adas:EcoRollWithEngineStop> - <adas:PredictiveCruiseControl>none</adas:PredictiveCruiseControl> - </ADAS> - <TorqueLimits xmlns:tcl="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="tcl:TorqueLimitsType"> - <tcl:Entry gear="6" maxTorque="1800" /> - <tcl:Entry gear="1" maxTorque="2500" /> - </TorqueLimits> - <Components xsi:type="VehicleComponentsPIFType"> - <Engine> - <Data xsi:type="EngineDataPIFType"> - <Manufacturer>Generic Engine Manufacturer</Manufacturer> - <Model>Generic primary bus 41 Engine</Model> - <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> - <Date>2017-02-15T11:00:00Z</Date> - <AppVersion>VectoEngine x.y</AppVersion> - <Displacement>7700</Displacement> - <RatedSpeed>2200</RatedSpeed> - <RatedPower>220000</RatedPower> - <MaxEngineTorque>1100</MaxEngineTorque> - <WHRType> - <MechanicalOutputICE xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3">false</MechanicalOutputICE> - <MechanicalOutputDrivetrain xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3">false</MechanicalOutputDrivetrain> - <ElectricalOutput xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3">false</ElectricalOutput> - </WHRType> - <Mode> - <IdlingSpeed>700</IdlingSpeed> - <FullLoadAndDragCurve> - <Entry engineSpeed="600.00" maxTorque="546.02" dragTorque="-39.66" /> - <Entry engineSpeed="800.00" maxTorque="760.78" dragTorque="-48.83" /> - <Entry engineSpeed="1000.00" maxTorque="973.29" dragTorque="-56.44" /> - <Entry engineSpeed="1200.00" maxTorque="1092.03" dragTorque="-67.29" /> - <Entry engineSpeed="1400.00" maxTorque="1092.03" dragTorque="-77.58" /> - <Entry engineSpeed="1600.00" maxTorque="1092.03" dragTorque="-87.88" /> - <Entry engineSpeed="1800.00" maxTorque="1022.52" dragTorque="-94.11" /> - <Entry engineSpeed="2000.00" maxTorque="944.17" dragTorque="-100.76" /> - <Entry engineSpeed="2200.00" maxTorque="868.12" dragTorque="-113.36" /> - <Entry engineSpeed="2400.00" maxTorque="741.99" dragTorque="-122.60" /> - <Entry engineSpeed="2500.00" maxTorque="647.29" dragTorque="-126.66" /> - <Entry engineSpeed="2600.00" maxTorque="0.00" dragTorque="-132.07" /> - </FullLoadAndDragCurve> - <Fuels> - <FuelType>Diesel CI</FuelType> - </Fuels> - </Mode> - </Data> - </Engine> - <Transmission> - <Data xsi:type="TransmissionDataPIFType"> - <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> - <Model>AT 6 Gear</Model> - <MainCertificationMethod>Standard values</MainCertificationMethod> - <Date>2017-01-11T11:00:00Z</Date> - <AppVersion>3.0.1</AppVersion> - <TransmissionType>APT-S</TransmissionType> - <Gears xsi:type="TransmissionGearsPIFType"> - <Gear number="1"> - <Ratio>3.364</Ratio> - <MaxTorque>1900</MaxTorque> - <MaxSpeed>2500</MaxSpeed> - </Gear> - <Gear number="2"> - <Ratio>1.909</Ratio> - <MaxTorque>1900</MaxTorque> - <MaxSpeed>2500</MaxSpeed> - </Gear> - <Gear number="3"> - <Ratio>1.421</Ratio> - <MaxSpeed>2500</MaxSpeed> - </Gear> - <Gear number="4"> - <Ratio>1.000</Ratio> - <MaxSpeed>2500</MaxSpeed> - </Gear> - <Gear number="5"> - <Ratio>0.720</Ratio> - <MaxSpeed>2500</MaxSpeed> - </Gear> - <Gear number="6"> - <Ratio>0.615</Ratio> - <MaxSpeed>2500</MaxSpeed> - </Gear> - </Gears> - </Data> - </Transmission> - <Axlegear> - <Data xsi:type="AxlegearDataPIFType"> - <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> - <Model>Generic primary bus 41 AxleGear</Model> - <CertificationMethod>Standard values</CertificationMethod> - <Date>2017-01-11T11:00:00Z</Date> - <AppVersion>3.0.1</AppVersion> - <LineType>Single portal axle</LineType> - <Ratio>6.500</Ratio> - </Data> - </Axlegear> - <pbus:AxleWheels xmlns:pbus="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="AxleWheelsComponentDeclarationType"> - <Data xsi:type="AxleWheelsDataDeclarationType"> - <Axles> - <Axle axleNumber="1" xsi:type="AxleDataDeclarationType"> - <AxleType>VehicleNonDriven</AxleType> - <TwinTyres>false</TwinTyres> - <Steered>true</Steered> - <Tyre> - <Data id="WHL-5432198760-315-70-R22.5" xsi:type="TyreDataDeclarationType"> - <Manufacturer>Generic Wheels Manufacturer</Manufacturer> - <Model>Generic Wheel</Model> - <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> - <Date>2017-01-11T14:00:00Z</Date> - <AppVersion>Tyre Generation App 1.0</AppVersion> - <Dimension>315/70 R22.5</Dimension> - <RRCDeclared>0.0055</RRCDeclared> - <FzISO>31300</FzISO> - </Data> - <Signature> - <di:Reference URI="#WHL-5432198760-315-70-R22.5" xmlns:di="http://www.w3.org/2000/09/xmldsig#"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <di:DigestValue>4TkUGQTX8tevHOU9Cj9uyCFuI/aqcEYlo/gyVjVQmv0=</di:DigestValue> - </di:Reference> - </Signature> - </Tyre> - </Axle> - <Axle axleNumber="2" xsi:type="AxleDataDeclarationType"> - <AxleType>VehicleDriven</AxleType> - <TwinTyres>true</TwinTyres> - <Steered>false</Steered> - <Tyre> - <Data id="WHL-5432198760-315-70-R22.5" xsi:type="TyreDataDeclarationType"> - <Manufacturer>Generic Wheels Manufacturer</Manufacturer> - <Model>Generic Wheel</Model> - <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> - <Date>2017-01-11T14:00:00Z</Date> - <AppVersion>Tyre Generation App 1.0</AppVersion> - <Dimension>315/70 R22.5</Dimension> - <RRCDeclared>0.0063</RRCDeclared> - <FzISO>31300</FzISO> - </Data> - <Signature> - <di:Reference URI="#WHL-5432198760-315-70-R22.5" xmlns:di="http://www.w3.org/2000/09/xmldsig#"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <di:DigestValue>KljvtvGUUQ/L7MiLVAqU+bckL5PNDNNwdeLH9kUVrfM=</di:DigestValue> - </di:Reference> - </Signature> - </Tyre> - </Axle> - </Axles> - </Data> - </pbus:AxleWheels> - <Auxiliaries> - <Data xmlns:aux="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xsi:type="aux:PrimaryVehicleAuxiliaryDataDeclarationType"> - <aux:Fan> - <aux:Technology>Hydraulic driven - Constant displacement pump</aux:Technology> - </aux:Fan> - <aux:SteeringPump> - <aux:Technology axleNumber="1">Variable displacement elec. controlled</aux:Technology> - </aux:SteeringPump> - <aux:ElectricSystem> - <aux:AlternatorTechnology>default</aux:AlternatorTechnology> - <aux:SmartElectrics>false</aux:SmartElectrics> - </aux:ElectricSystem> - <aux:PneumaticSystem> - <aux:SizeOfAirSupply>Large Supply 2-stage</aux:SizeOfAirSupply> - <aux:Clutch>none</aux:Clutch> - <aux:CompressorRatio>1.000</aux:CompressorRatio> - <aux:SmartCompressionSystem>false</aux:SmartCompressionSystem> - <aux:SmartRegenerationSystem>false</aux:SmartRegenerationSystem> - <aux:AirsuspensionControl>electronically</aux:AirsuspensionControl> - <aux:AdBlueDosing>true</aux:AdBlueDosing> - </aux:PneumaticSystem> - <aux:HVAC> - <aux:AdjustableCoolantThermostat>true</aux:AdjustableCoolantThermostat> - <aux:EngineWasteGasHeatExchanger>true</aux:EngineWasteGasHeatExchanger> - </aux:HVAC> - </Data> - </Auxiliaries> - </Components> - </Vehicle> - <InputDataSignature> - <di:Reference URI="#VEH-PrimaryBus_nonSmart"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <di:DigestValue>gi7smqIT9b/iNr6yBm49IkS5ylirBLyHvjZQqlNpzUA=</di:DigestValue> - </di:Reference> - </InputDataSignature> - <ManufacturerRecordSignature> - <di:Reference URI="#RESULT-d5c4bf1b86394fd7b822"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <di:DigestValue>/z2B3MvXZr1k8vYmINK/6DLaXPreBcwwmHhHsfDvJRo=</di:DigestValue> - </di:Reference> - </ManufacturerRecordSignature> - <Results> - <Status>success</Status> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Heavy Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">13098.63</TotalVehicleMass> - <Payload unit="kg">1123.63</Payload> - <PassengerCount>16.52</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">20.73851</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1520.18</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Heavy Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">17593.16</TotalVehicleMass> - <Payload unit="kg">5618.16</Payload> - <PassengerCount>82.62</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">24.94611</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1828.60</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">13098.63</TotalVehicleMass> - <Payload unit="kg">1123.63</Payload> - <PassengerCount>16.52</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">16.93598</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1241.44</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">17593.16</TotalVehicleMass> - <Payload unit="kg">5618.16</Payload> - <PassengerCount>82.62</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">20.36950</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1493.13</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Suburban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">13098.63</TotalVehicleMass> - <Payload unit="kg">1123.63</Payload> - <PassengerCount>16.52</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">15.03487</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1102.09</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Suburban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">17593.16</TotalVehicleMass> - <Payload unit="kg">5618.16</Payload> - <PassengerCount>82.62</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">18.14589</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1330.13</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Interurban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">12854.90</TotalVehicleMass> - <Payload unit="kg">879.90</Payload> - <PassengerCount>12.39</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">12.90679</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">946.09</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Interurban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">15494.61</TotalVehicleMass> - <Payload unit="kg">3519.61</Payload> - <PassengerCount>49.57</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">14.34621</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1051.61</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31DD</VehicleGroup> - <Mission>Heavy Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">13543.34</TotalVehicleMass> - <Payload unit="kg">1193.34</Payload> - <PassengerCount>17.55</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">21.81903</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1599.38</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31DD</VehicleGroup> - <Mission>Heavy Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">18316.69</TotalVehicleMass> - <Payload unit="kg">5966.69</Payload> - <PassengerCount>87.75</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">26.59833</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1949.71</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31DD</VehicleGroup> - <Mission>Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">13543.34</TotalVehicleMass> - <Payload unit="kg">1193.34</Payload> - <PassengerCount>17.55</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">17.82311</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1306.47</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31DD</VehicleGroup> - <Mission>Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">18316.69</TotalVehicleMass> - <Payload unit="kg">5966.69</Payload> - <PassengerCount>87.75</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">21.69768</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1590.49</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31DD</VehicleGroup> - <Mission>Suburban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">13543.34</TotalVehicleMass> - <Payload unit="kg">1193.34</Payload> - <PassengerCount>17.55</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">15.74932</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1154.46</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31DD</VehicleGroup> - <Mission>Suburban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">18316.69</TotalVehicleMass> - <Payload unit="kg">5966.69</Payload> - <PassengerCount>87.75</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">19.17775</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1405.77</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32SD</VehicleGroup> - <Mission>Interurban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">14225.44</TotalVehicleMass> - <Payload unit="kg">1075.44</Payload> - <PassengerCount>15.15</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">13.19757</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">967.41</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32SD</VehicleGroup> - <Mission>Interurban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">16669.61</TotalVehicleMass> - <Payload unit="kg">3519.61</Payload> - <PassengerCount>49.57</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">14.54412</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1066.11</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32SD</VehicleGroup> - <Mission>Coach</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">14244.99</TotalVehicleMass> - <Payload unit="kg">1094.99</Payload> - <PassengerCount>15.42</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">11.13867</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">816.49</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32SD</VehicleGroup> - <Mission>Coach</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">15887.48</TotalVehicleMass> - <Payload unit="kg">2737.48</Payload> - <PassengerCount>38.56</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">11.58643</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">849.31</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32DD</VehicleGroup> - <Mission>Interurban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">14662.82</TotalVehicleMass> - <Payload unit="kg">1262.82</Payload> - <PassengerCount>17.79</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">13.62230</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">998.54</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32DD</VehicleGroup> - <Mission>Interurban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">17609.41</TotalVehicleMass> - <Payload unit="kg">4209.41</Payload> - <PassengerCount>59.29</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">15.22020</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1115.67</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32DD</VehicleGroup> - <Mission>Coach</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">14747.01</TotalVehicleMass> - <Payload unit="kg">1347.01</Payload> - <PassengerCount>18.97</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">11.61807</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">851.63</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32DD</VehicleGroup> - <Mission>Coach</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">16767.53</TotalVehicleMass> - <Payload unit="kg">3367.53</Payload> - <PassengerCount>47.43</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">12.15012</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">890.63</CO2> - </Result> - </Results> - <ApplicationInformation> - <SimulationToolVersion>0.6.1.1975-DEV !!NOT FOR CERTIFICATION!!</SimulationToolVersion> - <Date>2020-08-06T06:54:52.9756421Z</Date> - </ApplicationInformation> - </pif:Data> - <pif:Signature> - <di:Reference URI="#PIF-4121ae4751874cefa376"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <di:DigestValue>YnCPep7uMh3ghMrx6ZsEMLanOijFCZpku+ZDNd6rkLw=</di:DigestValue> - </di:Reference> - </pif:Signature> -</pif:VectoOutputPrimaryVehicle> \ No newline at end of file -- GitLab