diff --git a/VECTO3GUI/Helper/Converter/ComponentTitleConverter.cs b/VECTO3GUI/Helper/Converter/ComponentTitleConverter.cs index fd4dc4aabe682023d87c69e7674fcdec1e3509c2..ea667204afb689defdd31cca7872a1e95ec0fd86 100644 --- a/VECTO3GUI/Helper/Converter/ComponentTitleConverter.cs +++ b/VECTO3GUI/Helper/Converter/ComponentTitleConverter.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Data; using VECTO3GUI.Util; @@ -15,7 +16,7 @@ namespace VECTO3GUI.Helper.Converter { if (value is Component) { var component = (Component)value; - return component.GetLabel(); + return Regex.Replace(component.GetLabel(), "(\\B[A-Z])", " $1"); ; } return value; diff --git a/VECTO3GUI/Model/TempDataObject/AirdragComponentData.cs b/VECTO3GUI/Model/TempDataObject/AirdragComponentData.cs index c573a43cb27b8de5b995363b8902bd7bd22f5afb..dc8b32e9caa64f99742b060b892077200f2532ec 100644 --- a/VECTO3GUI/Model/TempDataObject/AirdragComponentData.cs +++ b/VECTO3GUI/Model/TempDataObject/AirdragComponentData.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Utils; using VECTO3GUI.ViewModel.Interfaces; @@ -22,6 +23,8 @@ namespace VECTO3GUI.Model.TempDataObject public SquareMeter DeclaredCdxA { get; set; } public string AppVersion { get; set; } + public DigestData DigestValue { get; set; } + #endregion @@ -51,6 +54,7 @@ namespace VECTO3GUI.Model.TempDataObject viewModel.DeclaredCdxA = DeclaredCdxA; viewModel.CdxA_0 = CdxA_0; viewModel.TransferredCdxA = TransferredCdxA; + viewModel.DigestValue = DigestValue; } public void ClearValues(IAirdragViewModel viewModel) @@ -63,6 +67,7 @@ namespace VECTO3GUI.Model.TempDataObject viewModel.DeclaredCdxA = default(SquareMeter); viewModel.CdxA_0 = default(SquareMeter); viewModel.TransferredCdxA = default(SquareMeter); + viewModel.DigestValue = default(DigestData); } private void SetValues(IAirdragViewModel viewModel) @@ -75,6 +80,7 @@ namespace VECTO3GUI.Model.TempDataObject DeclaredCdxA = viewModel.DeclaredCdxA; CdxA_0 = viewModel.CdxA_0; TransferredCdxA = viewModel.TransferredCdxA; + DigestValue = viewModel.DigestValue; } } } diff --git a/VECTO3GUI/Model/TempDataObject/VehicleBusComponentData.cs b/VECTO3GUI/Model/TempDataObject/VehicleBusComponentData.cs index d78200e7db94382244556d21af8a4d122d3a7b5f..32f254bd8569303f05be3a0cc8b9b4a1fee2f844 100644 --- a/VECTO3GUI/Model/TempDataObject/VehicleBusComponentData.cs +++ b/VECTO3GUI/Model/TempDataObject/VehicleBusComponentData.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using VECTO3GUI.ViewModel.Impl; @@ -26,9 +27,10 @@ namespace VECTO3GUI.Model.TempDataObject public VehicleCode VehicleCode { get; set; } public Kilogram CurbMassChassis { get; set; } public Kilogram TechnicalPermissibleMaximumLadenMass { get; set; } + public TankSystem? NgTankSystem { get; set; } public int NumberOfPassengersLowerDeck { get; set; } public int NumberOfPassengersUpperDeck { get; set; } - public FloorType FloorType { get; set; } + public bool LowEntry { get; set; } public Meter HeightIntegratedBody { get; set; } public Meter VehicleLength { get; set; } public Meter VehicleWidth { get; set; } @@ -65,9 +67,10 @@ namespace VECTO3GUI.Model.TempDataObject viewModel.VehicleCode = VehicleCode; viewModel.CurbMassChassis = CurbMassChassis; viewModel.TechnicalPermissibleMaximumLadenMass = TechnicalPermissibleMaximumLadenMass; + viewModel.NgTankSystem = NgTankSystem; viewModel.NumberOfPassengersLowerDeck = NumberOfPassengersLowerDeck; viewModel.NumberOfPassengersUpperDeck = NumberOfPassengersUpperDeck; - viewModel.FloorType = FloorType; + viewModel.LowEntry = LowEntry; viewModel.HeightIntegratedBody = HeightIntegratedBody; viewModel.VehicleLength = VehicleLength; viewModel.VehicleWidth = VehicleWidth; @@ -87,9 +90,10 @@ namespace VECTO3GUI.Model.TempDataObject viewModel.VehicleCode = default(VehicleCode); viewModel.CurbMassChassis = default(Kilogram); viewModel.TechnicalPermissibleMaximumLadenMass = default(Kilogram); + viewModel.NgTankSystem = default(TankSystem); viewModel.NumberOfPassengersLowerDeck = default(int); viewModel.NumberOfPassengersUpperDeck = default(int); - viewModel.FloorType = default(FloorType); + viewModel.LowEntry = LowEntry; viewModel.HeightIntegratedBody = default(Meter); viewModel.VehicleLength = default(Meter); viewModel.VehicleWidth = default(Meter); @@ -110,9 +114,10 @@ namespace VECTO3GUI.Model.TempDataObject VehicleCode = vehicleBus.VehicleCode; CurbMassChassis = vehicleBus.CurbMassChassis; TechnicalPermissibleMaximumLadenMass = vehicleBus.TechnicalPermissibleMaximumLadenMass; + NgTankSystem = vehicleBus.NgTankSystem ; NumberOfPassengersLowerDeck = vehicleBus.NumberOfPassengersLowerDeck; NumberOfPassengersUpperDeck = vehicleBus.NumberOfPassengersUpperDeck; - FloorType = vehicleBus.FloorType; + LowEntry = vehicleBus.LowEntry; HeightIntegratedBody = vehicleBus.HeightIntegratedBody; VehicleLength = vehicleBus.VehicleLength; VehicleWidth = vehicleBus.VehicleWidth; diff --git a/VECTO3GUI/Util/Component.cs b/VECTO3GUI/Util/Component.cs index 62391d60f24e22908b7baee98668ccefd334e599..88bb0ef93df8217e0829f9bd27d61b9bb76cef6c 100644 --- a/VECTO3GUI/Util/Component.cs +++ b/VECTO3GUI/Util/Component.cs @@ -1,4 +1,6 @@ -namespace VECTO3GUI.Util { +using TUGraz.VectoCommon.Resources; + +namespace VECTO3GUI.Util { public enum Component { Vehicle = 1, @@ -27,28 +29,28 @@ case Component.Vehicle: case Component.PrimaryBusVehicle: case Component.CompleteBusVehicle: - return nameof(Component.Vehicle); + return XMLNames.Component_Vehicle; case Component.Engine: - return nameof(Component.Engine); + return XMLNames.Component_Engine; case Component.Gearbox: - return nameof(Component.Gearbox); + return XMLNames.Component_Gearbox; case Component.TorqueConverter: - return "Torque Converter"; + return XMLNames.Component_TorqueConverter; case Component.Retarder: - return "Retarder"; + return XMLNames.Component_Retarder; case Component.Angledrive: - return "Angle Drive"; + return XMLNames.Component_Angledrive; case Component.Axlegear: - return "Axle Gear"; + return XMLNames.Component_Axlegear; case Component.PTO: - return "Power Take Off"; + return XMLNames.Vehicle_PTO; case Component.Airdrag: - return "Air Drag"; + return XMLNames.Component_AirDrag; case Component.Axles: - return "Axle"; + return XMLNames.AxleWheels_Axles_Axle; case Component.Auxiliaries: case Component.BusAuxiliaries: - return "Auxiliary"; + return XMLNames.Component_Auxiliaries; case Component.Cycle: return nameof(Component.Cycle); } diff --git a/VECTO3GUI/Util/XML/XMLCompletedBus.cs b/VECTO3GUI/Util/XML/XMLCompletedBus.cs new file mode 100644 index 0000000000000000000000000000000000000000..b81c9201b965e69fc7fb88da32135affa21469f3 --- /dev/null +++ b/VECTO3GUI/Util/XML/XMLCompletedBus.cs @@ -0,0 +1,205 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; +using Castle.Core.Internal; +using TUGraz.IVT.VectoXML.Writer; +using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; +using VECTO3GUI.ViewModel.Interfaces; + + +namespace VECTO3GUI.Util.XML +{ + public class XMLCompletedBus + { + private string _declarationDefinition; + private string _schemaVersion; + private XNamespace _xsi; + private XNamespace _tns; + private XNamespace _v26; + private XNamespace _v21; + private XNamespace _v20; + private XNamespace _di; + private XNamespace _rootNamespace; + + + public XMLCompletedBus() + { + Init(); + } + + private void Init() + { + _declarationDefinition = "urn:tugraz:ivt:VectoAPI:DeclarationDefinitions"; + _schemaVersion = "2.0"; + _xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); + + _tns = "urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0"; + _v26 = _declarationDefinition + ":DEV:v2.6"; + _v21 = _declarationDefinition + ":v2.1"; + _v20 = _declarationDefinition + ":v2.0"; + _di = "http://www.w3.org/2000/09/xmldsig#"; + _rootNamespace = "urn:tugraz:ivt:VectoAPI:DeclarationJob"; + } + + public XDocument GenerateCompletedBusDocument(Dictionary<Component, object> inputData) + { + var doc = new XDocument(); + + doc.Add( + new XElement(_tns + XMLNames.VectoInputDeclaration, + new XAttribute("schemaVersion", _schemaVersion), + new XAttribute(XNamespace.Xmlns + "xsi", _xsi.NamespaceName), + new XAttribute("xmlns", _v21), + new XAttribute(XNamespace.Xmlns +"tns", _tns), + new XAttribute(XNamespace.Xmlns +"v2.6", _v26), + new XAttribute(XNamespace.Xmlns +"v2.1", _v21), + new XAttribute(XNamespace.Xmlns +"v2.0", _v20), + new XAttribute(XNamespace.Xmlns +"di", _di), + new XAttribute(_xsi + "schemaLocation", + $"{_rootNamespace} {AbstractXMLWriter.SchemaLocationBaseUrl}VectoDeclarationJob.xsd"), + GetVehicle(inputData) + )); + return doc; + } + + private XElement GetVehicle(Dictionary<Component, object> inputData) + { + var vehicleData = (ICompleteVehicleBus)inputData[Component.CompleteBusVehicle]; + + + + return new XElement(_v20 + XMLNames.Component_Vehicle, + new XAttribute(XMLNames.Component_ID_Attr, vehicleData.VIN), + new XAttribute(_xsi + "type", XMLDeclarationCompletedBusDataProviderV26.XSD_TYPE),// "CompletedVehicleDeclarationType" + new XAttribute("xmlns", _v26), + + new XElement(_v26 + XMLNames.Component_Manufacturer, vehicleData.Manufacturer), + new XElement(_v26 + XMLNames.Component_ManufacturerAddress, vehicleData?.ManufacturerAddress), + new XElement(_v26 + XMLNames.Component_Model, vehicleData.Model), + new XElement(_v26 + XMLNames.Vehicle_VIN, vehicleData.VIN), + new XElement(_v26 + XMLNames.Component_Date, vehicleData.Date.ToString("s") + "Z"), + new XElement(_v26 + XMLNames.Vehicle_LegislativeClass, vehicleData.LegislativeClass.GetLabel()), + new XElement(_v26 + XMLNames.Vehicle_RegisteredClass, vehicleData.RegisteredClass.GetLabel()), + new XElement(_v26 + XMLNames.Vehicle_VehicleCode, vehicleData.VehicleCode.GetLabel()), + new XElement(_v26 + XMLNames.Vehicle_CurbMassChassis, vehicleData.CurbMassChassis.ToXMLFormat(0)), + new XElement(_v26 + XMLNames.TPMLM, vehicleData.TechnicalPermissibleMaximumLadenMass.ToXMLFormat(0)), + vehicleData.NgTankSystem == null ? null : new XElement(_v26 + XMLNames.Vehicle_NgTankSystem, vehicleData.NgTankSystem), + new XElement(_v26 + "RegisteredPassengers", + new XElement(_v26 + XMLNames.Bus_LowerDeck, vehicleData.NumberOfPassengersLowerDeck), + new XElement(_v26 + XMLNames.Bus_UpperDeck, vehicleData.NumberOfPassengersUpperDeck) + ), + new XElement(_v26 + XMLNames.Bus_LowEntry, vehicleData.LowEntry), + new XElement(_v26 + XMLNames.Bus_HeighIntegratedBody, vehicleData.HeightIntegratedBody.ToXMLFormat(3)), + new XElement(_v26 + XMLNames.Bus_VehicleLength, vehicleData.VehicleLength.ToXMLFormat(3)), + new XElement(_v26 + XMLNames.Bus_VehicleWidth, vehicleData.VehicleWidth.ToXMLFormat(3)), + new XElement(_v26 + XMLNames.Bus_EntranceHeight, vehicleData.EntranceHeight.ToXMLFormat(3)), + new XElement(_v26 + XMLNames.BusAux_PneumaticSystem_DoorDriveTechnology, vehicleData.DoorDriveTechnology.GetLabel().ToLower()), + + new XElement(_v26 + XMLNames.Vehicle_Components, + new XAttribute(_xsi + "type", XMLDeclarationCompleteBusComponentsDataProviderV26.XSD_TYPE),//"CompletedVehicleComponentsDeclarationType" + GetComponentXElements(inputData) + ) + ); + } + + private XElement[] GetComponentXElements(Dictionary<Component, object> inputData) + { + var result = inputData.ContainsKey(Component.Airdrag) ? new XElement[2] : new XElement[1]; + + if (result.Length == 2) { + result[0] = GetAirdrag((IAirdrag)inputData[Component.Airdrag]); + result[1] = GetAuxiliary((IAuxiliariesBus)inputData[Component.Auxiliaries]); + } else { + result[0] = GetAuxiliary((IAuxiliariesBus)inputData[Component.Auxiliaries]); + } + + return result; + } + + private XElement GetAirdrag(IAirdrag airdrag) + { + return new XElement(_v26 + XMLNames.Component_AirDrag, + new XAttribute("xmlns", _v20), + + new XElement(_v20 + XMLNames.ComponentDataWrapper, + new XAttribute(XMLNames.Component_ID_Attr, airdrag.DigestValue.Reference), + new XAttribute(_xsi + "type", XMLDeclarationAirdragDataProviderV10.XSD_TYPE), // "AirDragDataDeclarationType" + + new XElement(_v20 + XMLNames.Component_Manufacturer, airdrag.Manufacturer), + new XElement(_v20 + XMLNames.Component_Model, airdrag.Model), + new XElement(_v20 + XMLNames.Component_CertificationNumber, airdrag.CertificationNumber), + new XElement(_v20 + XMLNames.Component_Date, airdrag.Date), + new XElement(_v20 + XMLNames.Component_AppVersion, airdrag.AppVersion), + new XElement(_v20 + "CdxA_0", airdrag.CdxA_0.ToXMLFormat()), + new XElement(_v20 + "TransferredCdxA", airdrag.TransferredCdxA.ToXMLFormat()), + new XElement(_v20 + XMLNames.AirDrag_DeclaredCdxA, airdrag.DeclaredCdxA.ToXMLFormat())), + + new XElement(_v20 + XMLNames.DI_Signature, + new XElement(_di +XMLNames.DI_Signature_Reference, + new XAttribute(XMLNames.DI_Signature_Reference_URI_Attr, airdrag.DigestValue.Reference), + new XElement(_di + XMLNames.DI_Signature_Reference_Transforms, + new XElement(_di + XMLNames.DI_Signature_Reference_Transforms_Transform, + new XAttribute(XMLNames.DI_Signature_Algorithm_Attr, airdrag.DigestValue.CanonicalizationMethods[0])), + new XElement(_di + XMLNames.DI_Signature_Reference_Transforms_Transform, + new XAttribute(XMLNames.DI_Signature_Algorithm_Attr, airdrag.DigestValue.CanonicalizationMethods[1])) + ), + new XElement(_di + XMLNames.DI_Signature_Reference_DigestMethod, + new XAttribute(XMLNames.DI_Signature_Algorithm_Attr, airdrag.DigestValue.DigestMethod)), + new XElement(_di + XMLNames.DI_Signature_Reference_DigestValue, airdrag.DigestValue.DigestValue)) + ) + ); + } + + private XElement GetAuxiliary(IAuxiliariesBus auxBus) + { + return new XElement(_v26 + XMLNames.Component_Auxiliaries, + new XElement(_v26 + XMLNames.ComponentDataWrapper, + new XAttribute(_xsi +"type", XMLDeclarationCompleteBusAuxiliariesDataProviderV26.XSD_TYPE),//"CompletedVehicleAuxiliaryDataDeclarationType" + + new XElement(_v26 + XMLNames.BusAux_ElectricSystem, + GetAlternatorTechnology(auxBus?.AlternatorTechnologies), + new XElement(_v26 + "LEDLights", + new XElement(_v26 + XMLNames.Bus_Dayrunninglights, auxBus?.DayrunninglightsLED), + new XElement(_v26 + XMLNames.Bus_Headlights, auxBus?.HeadlightsLED), + new XElement(_v26 + XMLNames.Bus_Positionlights, auxBus?.PositionlightsLED), + new XElement(_v26 + XMLNames.Bus_Brakelights, auxBus?.BrakelightsLED), + new XElement(_v26 + XMLNames.Bus_Interiorlights, auxBus?.InteriorLightsLED))), + new XElement(_v26 + XMLNames.BusAux_PneumaticSystem, + new XElement(_v26 + XMLNames.BusAux_PneumaticSystem_DoorDriveTechnology)), + new XElement(_v26 + "HVAC", + new XElement(_v26 + XMLNames.Bus_SystemConfiguration, auxBus?.SystemConfiguration.GetXmlFormat()), + new XElement(_v26 + XMLNames.Bus_CompressorType, + new XElement(_v26 + XMLNames.Bus_DriverAC, auxBus?.CompressorTypeDriver.GetLabel()), + new XElement(_v26 + XMLNames.Bus_PassengerAC, auxBus?.CompressorTypePassenger.GetLabel())), + new XElement(_v26 + XMLNames.Bus_AuxiliaryHeaterPower, auxBus?.AuxHeaterPower.ToXMLFormat()), + new XElement(_v26 + XMLNames.Bus_DoubleGlasing, auxBus?.DoubleGlasing), + new XElement(_v26 + XMLNames.Bus_HeatPump, auxBus?.HeatPump), + new XElement(_v26 + XMLNames.Bus_AdjustableAuxiliaryHeater, auxBus?.AdjustableAuxiliaryHeater), + new XElement(_v26 + XMLNames.Bus_SeparateAirDistributionDucts, auxBus?.SeparateAirDistributionDucts) + ) + ) + ); + } + + private XElement[] GetAlternatorTechnology(IList<string> alternatorTechnologies) + { + if (alternatorTechnologies.IsNullOrEmpty()) + return null; + + var result = new XElement[alternatorTechnologies.Count]; + + for (int i = 0; i < alternatorTechnologies.Count; i++) { + result [i] = new XElement(_v26 + XMLNames.BusAux_ElectricSystem_AlternatorTechnology, alternatorTechnologies[i]); + } + + return result; + } + } +} diff --git a/VECTO3GUI/VECTO3GUI.csproj b/VECTO3GUI/VECTO3GUI.csproj index b317f30f7d4bb8f3d64f2d942b8f393a1c80e18d..cc6925660946f92a0fa9b379eaa09443f001b617 100644 --- a/VECTO3GUI/VECTO3GUI.csproj +++ b/VECTO3GUI/VECTO3GUI.csproj @@ -178,6 +178,7 @@ <Compile Include="Util\TableDataConverter.cs" /> <Compile Include="Util\VectoParameterAttribute.cs" /> <Compile Include="Util\ViewModelFactory.cs" /> + <Compile Include="Util\XML\XMLCompletedBus.cs" /> <Compile Include="ViewModel\Adapter\Declaration\AbstractDeclarationAdapter.cs" /> <Compile Include="ViewModel\Adapter\Declaration\AirdragDeclarationAdapter.cs" /> <Compile Include="ViewModel\Adapter\Declaration\AngledriveDeclarationAdapter.cs" /> diff --git a/VECTO3GUI/ViewModel/Impl/AbstractJobViewModel.cs b/VECTO3GUI/ViewModel/Impl/AbstractJobViewModel.cs index 89188b1085a41399bdc0c74b42e3aae8d39edccf..db2d12879ac09cc44c5ee99fc6f3083723aa8103 100644 --- a/VECTO3GUI/ViewModel/Impl/AbstractJobViewModel.cs +++ b/VECTO3GUI/ViewModel/Impl/AbstractJobViewModel.cs @@ -13,6 +13,10 @@ namespace VECTO3GUI.ViewModel.Impl { protected bool IsDeclarationMode; private IComponentViewModel _currentComponent; + private ICommand _saveJobCommand; + private ICommand _closeJobCommand; + private ICommand _saveToJobCommand; + public override bool DeclarationMode { @@ -27,19 +31,32 @@ namespace VECTO3GUI.ViewModel.Impl } } - public ICommand SaveJob { get { return new RelayCommand(DoSaveJob); } } + public ICommand SaveJob + { + get { return _saveJobCommand ?? (_saveJobCommand = new RelayCommand(DoSaveJob)); } + } protected abstract void DoSaveJob(); - public ICommand CloseJob { get { return new RelayCommand<UserControl>(DoCloseJob);} } + public ICommand CloseJob + { + get { return _closeJobCommand ?? (_closeJobCommand = new RelayCommand<Window>(DoCloseJob));} + } - protected virtual void DoCloseJob(UserControl ctl) + protected abstract void DoCloseJob(Window window); + + + public ICommand SaveToJob { - Window.GetWindow(ctl).Close(); + get { return _saveToJobCommand ?? (_saveToJobCommand = new RelayCommand(DoSaveToJob)); } } + protected abstract void DoSaveToJob(); - public ICommand EditComponent { get { return new RelayCommand<Component>(DoEditComponent); } } + public ICommand EditComponent + { + get { return new RelayCommand<Component>(DoEditComponent); } + } protected virtual void DoEditComponent(Component component) { diff --git a/VECTO3GUI/ViewModel/Impl/AirdragViewModel.cs b/VECTO3GUI/ViewModel/Impl/AirdragViewModel.cs index 2fb91a5acc046f0439315e1f6c3e87e458fb113a..20504eda8d0ebf7d265941d45132d91e65425101 100644 --- a/VECTO3GUI/ViewModel/Impl/AirdragViewModel.cs +++ b/VECTO3GUI/ViewModel/Impl/AirdragViewModel.cs @@ -155,6 +155,7 @@ namespace VECTO3GUI.ViewModel.Impl } } + public DigestData DigestValue { get; set; } #endregion @@ -188,6 +189,7 @@ namespace VECTO3GUI.ViewModel.Impl Date = airdrag.Date; AppVersion = airdrag.AppVersion; SetAirdragArea(airdrag); + DigestValue = airdrag.DigestValue; _componentData = new AirdragComponentData(this); ClearChangedProperties(); diff --git a/VECTO3GUI/ViewModel/Impl/CompleteVehicleBusJobViewModel.cs b/VECTO3GUI/ViewModel/Impl/CompleteVehicleBusJobViewModel.cs index 388455e30cd78aba0c8f6b44fd5af70876736980..0e0246630aa09367626f172971fa32ae12b388c0 100644 --- a/VECTO3GUI/ViewModel/Impl/CompleteVehicleBusJobViewModel.cs +++ b/VECTO3GUI/ViewModel/Impl/CompleteVehicleBusJobViewModel.cs @@ -3,13 +3,16 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows; using System.Windows.Input; using Ninject; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCore.Models.SimulationComponent.Impl; +using TUGraz.VectoCore.OutputData.XML.DeclarationJobs; using VECTO3GUI.Model.TempDataObject; using VECTO3GUI.ViewModel.Interfaces; using VECTO3GUI.Util; +using VECTO3GUI.Util.XML; namespace VECTO3GUI.ViewModel.Impl { @@ -19,9 +22,6 @@ namespace VECTO3GUI.ViewModel.Impl private ICommand _saveComponentCommand; private ICommand _resetComponentCommand; - private ICommand _saveJobCommand; - private ICommand _saveJobToCommand; - private ICommand _exitCommand; #endregion @@ -48,12 +48,7 @@ namespace VECTO3GUI.ViewModel.Impl - public ICommand SaveJobCommand - { - get { - return _saveJobCommand ?? - (_saveJobCommand = new RelayCommand(DoSaveJob));} - } + protected override void DoSaveJob() { @@ -62,6 +57,23 @@ namespace VECTO3GUI.ViewModel.Impl { Component.Airdrag, _subModels[Component.Airdrag].SaveComponentData()}, { Component.Auxiliaries, _subModels[Component.Auxiliaries].SaveComponentData()} }; + + + //var completedXml = new XMLCompletedBus(); + //var xmlDoc = completedXml.GenerateCompletedBusDocument(CompleteVehicleBusData); + + //var writer = new XMLCompletedBusWriter(); + //writer.WriteCompletedBusXml(filePath, xmlDoc); + } + + protected override void DoCloseJob(Window window) + { + window?.Close(); + } + + protected override void DoSaveToJob() + { + } public ICommand SaveComponent diff --git a/VECTO3GUI/ViewModel/Impl/CompleteVehicleBusViewModel.cs b/VECTO3GUI/ViewModel/Impl/CompleteVehicleBusViewModel.cs index f5c52e837d3f5ef80c774860e98b2bef50a97ad6..0f525e97a151e605f78abc77dd54152439dedf2d 100644 --- a/VECTO3GUI/ViewModel/Impl/CompleteVehicleBusViewModel.cs +++ b/VECTO3GUI/ViewModel/Impl/CompleteVehicleBusViewModel.cs @@ -33,9 +33,10 @@ namespace VECTO3GUI.ViewModel.Impl private VehicleCode _vehicleCode; private Kilogram _curbMassChassis; private Kilogram _technicalPermissibleMaximumLadenMass; + private TankSystem? _ngTankSystem; private int _numberOfPassengersLowerDeck; private int _numberOfPassengersUpperDeck; - private FloorType _floorType; + private bool _lowEntry; private Meter _heightIntegratedBody; private Meter _vehicleLength; private Meter _vehicleWidth; @@ -148,6 +149,16 @@ namespace VECTO3GUI.ViewModel.Impl IsDataChanged(_technicalPermissibleMaximumLadenMass, _componentData); } } + public TankSystem? NgTankSystem + { + get { return _ngTankSystem; } + set + { + if (!SetProperty(ref _ngTankSystem, value)) + return; + IsDataChanged(_ngTankSystem, _componentData); + } + } public int NumberOfPassengersLowerDeck { get { return _numberOfPassengersLowerDeck; } @@ -168,16 +179,18 @@ namespace VECTO3GUI.ViewModel.Impl IsDataChanged(_numberOfPassengersUpperDeck, _componentData); } } - public FloorType FloorType + + public bool LowEntry { - get { return _floorType; } + get { return _lowEntry; } set { - if (!SetProperty(ref _floorType, value)) + if (!SetProperty(ref _lowEntry, value)) return; - IsDataChanged(_floorType, _componentData); + IsDataChanged(_lowEntry, _componentData); } } + public Meter HeightIntegratedBody { get { return _heightIntegratedBody; } @@ -232,9 +245,9 @@ namespace VECTO3GUI.ViewModel.Impl public AllowedEntry<LegislativeClass>[] AllowedLegislativeClasses { get; private set; } public AllowedEntry<VehicleCode>[] AllowedVehicleCodes { get; private set; } - public AllowedEntry<FloorType>[] AllowedFloorTypes { get; private set; } public AllowedEntry<ConsumerTechnology>[] AllowedConsumerTechnologies { get; private set; } public AllowedEntry<RegistrationClass>[] AllowedRegisteredClasses { get; private set; } + public AllowedEntry<TankSystem>[] AllowedTankSystems { get; private set; } #endregion @@ -267,9 +280,10 @@ namespace VECTO3GUI.ViewModel.Impl VehicleCode = vehicle.VehicleCode; CurbMassChassis = vehicle.CurbMassChassis; TechnicalPermissibleMaximumLadenMass = vehicle.GrossVehicleMassRating; + NgTankSystem = vehicle.TankSystem; NumberOfPassengersLowerDeck = vehicle.NumberOfPassengersLowerDeck; NumberOfPassengersUpperDeck = vehicle.NuberOfPassengersUpperDeck; - FloorType = vehicle.FloorType; + LowEntry = vehicle.FloorType == FloorType.LowFloor; HeightIntegratedBody = vehicle.Height; VehicleLength = vehicle.Length; VehicleWidth = vehicle.Width; @@ -289,19 +303,21 @@ namespace VECTO3GUI.ViewModel.Impl AllowedVehicleCodes = Enum.GetValues(typeof(VehicleCode)).Cast<VehicleCode>() .Select(vc => AllowedEntry.Create(vc, vc.GetLabel())).ToArray(); - var highFloor = AllowedEntry.Create(FloorType.HighFloor, FloorType.HighFloor.GetLabel()); - var lowFloor = AllowedEntry.Create(FloorType.LowFloor, FloorType.LowFloor.GetLabel()); - AllowedFloorTypes = new []{ highFloor, lowFloor }; - AllowedConsumerTechnologies = Enum.GetValues(typeof(ConsumerTechnology)).Cast<ConsumerTechnology>() .Select(sc => AllowedEntry.Create(sc, sc.GetLabel())).ToArray(); AllowedRegisteredClasses = Enum.GetValues(typeof(RegistrationClass)).Cast<RegistrationClass>() .Select(vc => AllowedEntry.Create(vc, vc.GetLabel())).ToArray(); + + var tankSystems = Enum.GetValues(typeof(TankSystem)).Cast<TankSystem>().ToArray(); + var tank = new AllowedEntry<TankSystem> [tankSystems.Length+1]; - AllowedRegisteredClasses = - AllowedRegisteredClasses.Where(val => val.Value != RegistrationClass.unknown).ToArray(); + tank[0] = AllowedEntry.Create(TankSystem.Compressed, null); + for (int i = 1; i < tankSystems.Length + 1; i++) { + tank[i] = AllowedEntry.Create(tankSystems[i-1], tankSystems[i-1].ToString()); + } + AllowedTankSystems = tank; } #endregion diff --git a/VECTO3GUI/ViewModel/Impl/DeclarationJobViewModel.cs b/VECTO3GUI/ViewModel/Impl/DeclarationJobViewModel.cs index 890983a2b9b3a6406001bdb34f5800b4b1fc8d5f..d7243c341a4ae4fac8ebaf417733b094c38792fe 100644 --- a/VECTO3GUI/ViewModel/Impl/DeclarationJobViewModel.cs +++ b/VECTO3GUI/ViewModel/Impl/DeclarationJobViewModel.cs @@ -65,7 +65,17 @@ namespace VECTO3GUI.ViewModel.Impl var tmp = writer.GenerateVectoJob(ModelData); } - + protected override void DoCloseJob(Window window) + { + throw new NotImplementedException(); + } + + protected override void DoSaveToJob() + { + throw new NotImplementedException(); + } + + public IInputDataProvider InputDataProvider { get { return _inputData; } diff --git a/VECTO3GUI/ViewModel/Impl/EngineOnlyJobViewModel.cs b/VECTO3GUI/ViewModel/Impl/EngineOnlyJobViewModel.cs index 01446b17ab24018b00bf923c9a2dd3c0328cf60b..9791a60004e7707815d9aef2579f837687dae1d8 100644 --- a/VECTO3GUI/ViewModel/Impl/EngineOnlyJobViewModel.cs +++ b/VECTO3GUI/ViewModel/Impl/EngineOnlyJobViewModel.cs @@ -1,6 +1,9 @@ -using System.Windows.Input; +using System.Windows; +using System.Windows.Input; using Ninject; +using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; using TUGraz.VectoCore.Utils; using VECTO3GUI.Util; using VECTO3GUI.ViewModel.Interfaces; @@ -52,6 +55,16 @@ namespace VECTO3GUI.ViewModel.Impl throw new System.NotImplementedException(); } + protected override void DoCloseJob(Window window) + { + throw new System.NotImplementedException(); + } + + protected override void DoSaveToJob() + { + throw new System.NotImplementedException(); + } + #endregion } } diff --git a/VECTO3GUI/ViewModel/Impl/PrimaryVehicleBusJobViewModel.cs b/VECTO3GUI/ViewModel/Impl/PrimaryVehicleBusJobViewModel.cs index e0b97c66b02e5c93d3fa1a410e23c767ca152998..f70e430fb85658852d0bc504413224d8ec91c5c6 100644 --- a/VECTO3GUI/ViewModel/Impl/PrimaryVehicleBusJobViewModel.cs +++ b/VECTO3GUI/ViewModel/Impl/PrimaryVehicleBusJobViewModel.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows; using Ninject; using TUGraz.VectoCommon.InputData; using VECTO3GUI.Util; @@ -29,6 +30,16 @@ namespace VECTO3GUI.ViewModel.Impl throw new NotImplementedException(); } + protected override void DoCloseJob(Window window) + { + throw new NotImplementedException(); + } + + protected override void DoSaveToJob() + { + throw new NotImplementedException(); + } + public string JobFile { get { return string.Empty; } diff --git a/VECTO3GUI/ViewModel/Interfaces/IAirdrag.cs b/VECTO3GUI/ViewModel/Interfaces/IAirdrag.cs index 139be6414173dab94f664faa42cba5b3a629b76a..9d28b8a68a3ddf97d127fb88035228bca6a2f91f 100644 --- a/VECTO3GUI/ViewModel/Interfaces/IAirdrag.cs +++ b/VECTO3GUI/ViewModel/Interfaces/IAirdrag.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Utils; namespace VECTO3GUI.ViewModel.Interfaces @@ -14,5 +15,6 @@ namespace VECTO3GUI.ViewModel.Interfaces SquareMeter TransferredCdxA { get; set; } SquareMeter DeclaredCdxA { get; set; } string AppVersion { get; set; } + DigestData DigestValue { get; set; } } } diff --git a/VECTO3GUI/ViewModel/Interfaces/ICompleteVehicleBus.cs b/VECTO3GUI/ViewModel/Interfaces/ICompleteVehicleBus.cs index 10049057fff6327017181a0fd5f3f63f191a8f14..d50ebcc1907caec1c5600efbc391dae293417959 100644 --- a/VECTO3GUI/ViewModel/Interfaces/ICompleteVehicleBus.cs +++ b/VECTO3GUI/ViewModel/Interfaces/ICompleteVehicleBus.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; @@ -21,9 +22,10 @@ namespace VECTO3GUI.ViewModel.Interfaces VehicleCode VehicleCode { get; set; } Kilogram CurbMassChassis { get; set; } Kilogram TechnicalPermissibleMaximumLadenMass { get; set; } + TankSystem? NgTankSystem { get; set; } int NumberOfPassengersLowerDeck { get; set; } int NumberOfPassengersUpperDeck { get; set; } - FloorType FloorType { get; set; } + bool LowEntry { get; set; } Meter HeightIntegratedBody { get; set; } Meter VehicleLength { get; set; } Meter VehicleWidth { get; set; } diff --git a/VECTO3GUI/ViewModel/Interfaces/ICompleteVehicleBusViewModel.cs b/VECTO3GUI/ViewModel/Interfaces/ICompleteVehicleBusViewModel.cs index 5a473c45dd18ba098acc90c38652b491fed9defe..58cb9e56c6915dd7c03688a672dc1a5b7e45402f 100644 --- a/VECTO3GUI/ViewModel/Interfaces/ICompleteVehicleBusViewModel.cs +++ b/VECTO3GUI/ViewModel/Interfaces/ICompleteVehicleBusViewModel.cs @@ -1,5 +1,6 @@ using System; using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using VECTO3GUI.Util; @@ -10,8 +11,8 @@ namespace VECTO3GUI.ViewModel.Interfaces { AllowedEntry<LegislativeClass>[] AllowedLegislativeClasses { get; } AllowedEntry<VehicleCode>[] AllowedVehicleCodes { get; } - AllowedEntry<FloorType>[] AllowedFloorTypes { get; } AllowedEntry<ConsumerTechnology>[] AllowedConsumerTechnologies { get; } AllowedEntry<RegistrationClass>[] AllowedRegisteredClasses { get; } + AllowedEntry<TankSystem>[] AllowedTankSystems { get; } } } diff --git a/VECTO3GUI/ViewModel/Interfaces/IJobEditViewModel.cs b/VECTO3GUI/ViewModel/Interfaces/IJobEditViewModel.cs index a9a2ccb682a1ba2fb7767b104f40055ac5e120e0..062c08f3896903cdc4b000efc813d985eae364aa 100644 --- a/VECTO3GUI/ViewModel/Interfaces/IJobEditViewModel.cs +++ b/VECTO3GUI/ViewModel/Interfaces/IJobEditViewModel.cs @@ -18,7 +18,8 @@ namespace VECTO3GUI.ViewModel.Interfaces IComponentViewModel CurrentComponent { get; } ICommand SaveJob { get; } - + ICommand SaveToJob { get; } ICommand CloseJob { get; } + } } diff --git a/VECTO3GUI/Views/ComponentViews/Declaration/CompleteVehicleBusView.xaml b/VECTO3GUI/Views/ComponentViews/Declaration/CompleteVehicleBusView.xaml index 35b62657adccf57ebd938b1285db56cfa3802681..2c4a6804415048e0d56de2a35e583a1f3e6a93be 100644 --- a/VECTO3GUI/Views/ComponentViews/Declaration/CompleteVehicleBusView.xaml +++ b/VECTO3GUI/Views/ComponentViews/Declaration/CompleteVehicleBusView.xaml @@ -27,7 +27,7 @@ <RowDefinition/> </Grid.RowDefinitions> - <GroupBox Header="Vehicle Data" Grid.Row="1" Grid.Column="1" Width="420" Height="650" HorizontalAlignment="Left" VerticalAlignment="Top"> + <GroupBox Header="Vehicle Data" Grid.Row="1" Grid.Column="1" Width="420" Height="680" HorizontalAlignment="Left" VerticalAlignment="Top"> <StackPanel Orientation="Vertical" Width="400" HorizontalAlignment="Left" Grid.IsSharedSizeScope="True" VerticalAlignment="Center"> <StackPanel Orientation="Vertical" DockPanel.Dock="Top" Grid.IsSharedSizeScope="True"> @@ -55,7 +55,7 @@ Value="{Binding RegisteredClass}"/>--> <customControls:ComboParameter - Caption="Vehicle Code" + Caption="Registered Class" CaptionWidthGroup="vehicleLbl" UnitWidthGroup="unitWidth" Value="{Binding RegisteredClass}" AllowedValues="{Binding AllowedRegisteredClasses}" /> @@ -75,6 +75,12 @@ Caption="Permissible Maximum Laden Mass" Unit="{helper:SIUnit TechnicalPermissibleMaximumLadenMass}" CaptionWidthGroup="vehicleLbl" UnitWidthGroup="unitWidth" Value="{Binding TechnicalPermissibleMaximumLadenMass, Converter={converter:SIValueConverter}, ConverterParameter=int}" /> + <customControls:ComboParameter + Caption="Tank System" + CaptionWidthGroup="vehicleLbl" UnitWidthGroup="unitWidth" + Value="{Binding NgTankSystem}" + AllowedValues="{Binding AllowedTankSystems}" /> + <customControls:VectoParameterControl Caption="Passengers Lower Deck" Unit="" CaptionWidthGroup="vehicleLbl" UnitWidthGroup="unitWidth" Value="{Binding NumberOfPassengersLowerDeck}" /> @@ -83,11 +89,11 @@ Caption="Passengers Upper Deck" Unit="" CaptionWidthGroup="vehicleLbl" UnitWidthGroup="unitWidth" Value="{Binding NumberOfPassengersUpperDeck}" /> - <customControls:ComboParameter - Caption="Floor Type" - CaptionWidthGroup="vehicleLbl" UnitWidthGroup="unitWidth" - Value="{Binding FloorType}" - AllowedValues="{Binding AllowedFloorTypes}" /> + <customControls:CheckboxParameter + Caption="Low Entry" CaptionWidthGroup="vehicleLbl" + Unit="" UnitWidthGroup="unitWidth" + Value="{Binding LowEntry}"/> + <customControls:VectoParameterControl Caption="Height Integrated Body" Unit="{helper:SIUnit HeightIntegratedBody}" CaptionWidthGroup="vehicleLbl" UnitWidthGroup="unitWidth" diff --git a/VECTO3GUI/Views/JoblistTabView.xaml b/VECTO3GUI/Views/JoblistTabView.xaml index d46a64eb0f381fea8a9846397a83f102f9709ac0..87664c951cfceb097cca296f0bf8f5fee8061890 100644 --- a/VECTO3GUI/Views/JoblistTabView.xaml +++ b/VECTO3GUI/Views/JoblistTabView.xaml @@ -26,10 +26,11 @@ <StackPanel Orientation="Vertical"> <Menu> <MenuItem Header="File"> - <MenuItem Header="Save"/> - <MenuItem Header="Save to"/> + <MenuItem Header="Save" Command="{Binding SaveJob}"/> + <MenuItem Header="Save to" Command="{Binding SaveToJob}"/> <Separator HorizontalAlignment="Stretch" Background="Gray"/> - <MenuItem Header="Exit"/> + <MenuItem Header="Exit" Command="{Binding CloseJob}" + CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"/> </MenuItem> </Menu> <Separator HorizontalAlignment="Stretch" Background="Gray"/> diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs b/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs index eaaf9e83e03d29ceace954ab9eeb786bf2ff7257..c9663d789575f3116e7cdf0ea37c5655f909afbd 100644 --- a/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs +++ b/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs @@ -51,5 +51,33 @@ namespace TUGraz.VectoCommon.BusAuxiliaries { return BusHVACSystemConfiguration.Unknown.ToString(); } } + + public static string GetXmlFormat(this BusHVACSystemConfiguration havacConfiguration) + { + switch (havacConfiguration) + { + case BusHVACSystemConfiguration.Configuration1: + return "1"; + case BusHVACSystemConfiguration.Configuration2: + return "2"; + case BusHVACSystemConfiguration.Configuration3: + return "3"; + case BusHVACSystemConfiguration.Configuration4: + return "4"; + case BusHVACSystemConfiguration.Configuration5: + return "5"; + case BusHVACSystemConfiguration.Configuration6: + return "6"; + case BusHVACSystemConfiguration.Configuration7: + return "7"; + case BusHVACSystemConfiguration.Configuration8: + return "8"; + case BusHVACSystemConfiguration.Configuration9: + return "9"; + default: + return "0"; + } + } + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs index 940884541bf7dc1b72d2a486ee160473015bbe54..fb510ae838d1171695c579822fd578195efb773b 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs @@ -644,6 +644,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { SourceType = DataSourceType.XMLEmbedded; + } @@ -810,7 +811,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public override TankSystem? TankSystem { - get { return GetString(XMLNames.Vehicle_NgTankSystem).ParseEnum<TankSystem>(); } + get { return GetNode(XMLNames.Vehicle_NgTankSystem, required: false)?.ToString().ParseEnum<TankSystem>(); } } public override int NumberOfPassengersLowerDeck @@ -854,6 +855,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider #endregion + public override FloorType FloorType { get { return GetBool(XMLNames.Bus_LowEntry) ? FloorType.LowFloor : FloorType.HighFloor; } diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationJobs/XMLCompletedBusWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationJobs/XMLCompletedBusWriter.cs new file mode 100644 index 0000000000000000000000000000000000000000..783cb5fe39f44f4c1777fdab9a54c99091b7d407 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationJobs/XMLCompletedBusWriter.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Linq; +using Castle.Core.Internal; + + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationJobs +{ + public class XMLCompletedBusWriter + { + private XmlWriterSettings _xmlWriterSettings; + private StringBuilder _stringBuilder; + + + public XMLCompletedBusWriter() + { + _xmlWriterSettings = new XmlWriterSettings{Indent = true}; + _stringBuilder = new StringBuilder(); + } + + public bool WriteCompletedBusXml(string filePath, XDocument xmlDocument) + { + if (filePath.IsNullOrEmpty()) + return false; + + using (var xmlWriter = XmlWriter.Create(_stringBuilder, _xmlWriterSettings)) + { + xmlDocument.WriteTo(xmlWriter); + xmlWriter.Flush(); + } + + xmlDocument.Save(filePath); + return true; + } + } +} diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index 7e0866e6ed37620f00d81e42e3e76aac5823d3b2..dfeb57fa754fe50844ce7c1cae2005fcc0d27941 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -387,6 +387,7 @@ <Compile Include="OutputData\FileIO\BusAuxWriter.cs" /> <Compile Include="OutputData\FileIO\JSONFileWriter.cs" /> <Compile Include="OutputData\XML\AbstractXMLManufacturerReport.cs" /> + <Compile Include="OutputData\XML\DeclarationJobs\XMLCompletedBusWriter.cs" /> <Compile Include="OutputData\XML\Engineering\Factory\EngineeringWriterFactory.cs" /> <Compile Include="OutputData\XML\Engineering\Factory\IEngineeringWriterInjectFactory.cs" /> <Compile Include="OutputData\XML\Engineering\Interfaces\IXMLEngineeringComponentWriter.cs" /> @@ -942,9 +943,7 @@ <Name>VectoHashing</Name> </ProjectReference> </ItemGroup> - <ItemGroup> - <Folder Include="OutputData\XML\DeclarationJobs\" /> - </ItemGroup> + <ItemGroup /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets.