Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
AirdragViewModel.cs 7.17 KiB
Newer Older
using System.Collections.Generic;
Franz KOBER josef's avatar
Franz KOBER josef committed
using System.Linq;
using System.Windows.Input;
Franz KOBER josef's avatar
Franz KOBER josef committed
using Ninject;
using TUGraz.VectoCommon.Resources;
Franz KOBER josef's avatar
Franz KOBER josef committed
using VECTO3GUI.Helper;
using VECTO3GUI.Model.TempDataObject;
Franz KOBER josef's avatar
Franz KOBER josef committed
using VECTO3GUI.Util;
Franz KOBER josef's avatar
Franz KOBER josef committed
	public enum AirdragConfig
	{
		WithoutAirdrag,
		UseMeasurementData,
		Unknown
	}

	public static class AirdragConfigHelper
	{
		public static string GetLabel(this AirdragConfig airdrag)
		{
			switch (airdrag)
			{
				case AirdragConfig.WithoutAirdrag:
					return "Without Airdrag";
				case AirdragConfig.UseMeasurementData:
					return "Use Measurement Data";
			}
			return string.Empty;
		}

		public static AirdragConfig GetAirdragConfig(string name)
		{
			switch (name)
			{
				case "Without Airdrag":
					return AirdragConfig.WithoutAirdrag;
				case "Use Measurement Data":
					return AirdragConfig.UseMeasurementData;
			}
			return AirdragConfig.Unknown;
		}
	}


	public class AirdragViewModel : AbstractComponentViewModel, IAirdragViewModel
	{
		private string _manufacturer;
		private string _model;
		private string _certificationNumber;
		private DateTime? _date;
		private SquareMeter _declaredCdxA;
		private bool _useStandardValues;
		private IAirdragDeclarationInputData _airdragData;
		private AirdragComponentData _componentData;
Franz KOBER josef's avatar
Franz KOBER josef committed
		private bool _isEditable;
		private bool _useMeasurementData;
		private bool _noAirdragData;
Franz KOBER josef's avatar
Franz KOBER josef committed
		private ICommand _airdragConfig;
		private ICommand _loadFileCommand;

		public IAirdragDeclarationInputData ModelData
		{
			get { return AdapterFactory.AirdragDeclarationAdapter(this); }
		}

		public bool UseMeasuredValues
		{
			get { return _useStandardValues; }
			set { SetProperty(ref _useStandardValues, value); }
		}

		public SquareMeter CdxA_0 { get; set; }
		public SquareMeter TransferredCdxA { get; set; }

		public string Manufacturer
		{
			get { return _manufacturer; }
			set
			{
				if (!SetProperty(ref _manufacturer, value))
					return;
				IsDataChanged(_manufacturer, _componentData);
		{
			get { return _model; }
			set
			{
				if (!SetProperty(ref _model, value))
					return;
				IsDataChanged(_model, _componentData);
		public string CertificationNumber
			get { return _certificationNumber; }
			set
			{
				if (!SetProperty(ref _certificationNumber, value))
					return;
				IsDataChanged(_certificationNumber, _componentData);
		public DateTime? Date
			get { return _date; }
			set
			{
				if (!SetProperty(ref _date, value))
					return;
				IsDataChanged(_date, _componentData);
				if (!SetProperty(ref _declaredCdxA, value))
					return;
				IsDataChanged(_declaredCdxA, _componentData);
				if (SetProperty(ref _appVersion, value))
					return;
				IsDataChanged(_appVersion, _componentData);
		public DigestData DigestValue { get; set; }

		public bool NoAirdragData
		{
			get { return _noAirdragData; }
			set
			{
				SetProperty(ref _noAirdragData, value);
				IsDataChanged(_noAirdragData, _componentData);
				UseMeasurementData = !_noAirdragData;
			}
		}

Franz KOBER josef's avatar
Franz KOBER josef committed
		public bool IsEditable
		{
			get { return _isEditable; }
			set { SetProperty(ref _isEditable, value); }
		}

		public bool UseMeasurementData
		{
			get { return _useMeasurementData; }
			set { SetProperty(ref _useMeasurementData, value); }
		}

			var inputData = JobViewModel.InputDataProvider as IDeclarationInputDataProvider;
			_airdragData = inputData?.JobInputData.Vehicle.Components.AirdragInputData;
			var xmlUri = inputData?.JobInputData.Vehicle.XMLSource.BaseURI;
			_xmlFilePath = XmlHelper.GetXmlAbsoluteFilePath(xmlUri);

			SetAirdragValues(_airdragData);
			UseMeasurementData = _airdragData.AirDragArea != null;
			NoAirdragData = !UseMeasurementData;
			IsEditable = false;
		private void SetAirdragValues(IAirdragDeclarationInputData airdrag)
			UseMeasuredValues = airdrag.AirDragArea != null;
			if (airdrag.AirDragArea == null)
				_componentData = new AirdragComponentData(this, true);
			Model = airdrag.Model;
			Manufacturer = airdrag.Manufacturer;
			CertificationNumber = airdrag.CertificationNumber;
			Date = airdrag.Date;
			AppVersion = airdrag.AppVersion;
			DeclaredCdxA = airdrag.AirDragArea;
			DigestValue = airdrag.DigestValue;

			_componentData = new AirdragComponentData(this);
			ClearChangedProperties();
		private void ReadAdditionalAirdragValues()
		{
			var xmlNodes = GetXmlNodes(_xmlFilePath);
			var compReader = new XmlComponentReaderHelper(xmlNodes[0].ParentNode);
			CdxA_0 = compReader.ReadCdxA_0();
			TransferredCdxA = compReader.ReadTransferredCdxA();
		}


Franz KOBER josef's avatar
Franz KOBER josef committed
		#region Commands

		public ICommand AirdragConfigCommand
		{
			get
			{
				return _airdragConfig ?? (_airdragConfig = new RelayCommand<AirdragConfig>(DoAirdragConfig));
			}
		}

		private void DoAirdragConfig(AirdragConfig config)
		{
			switch (config) {
				case AirdragConfig.WithoutAirdrag:
					NoAirdragData = true;
					break;
				case AirdragConfig.UseMeasurementData:
					NoAirdragData = false;
					break;
			}
Franz KOBER josef's avatar
Franz KOBER josef committed
		}


		public ICommand LoadFileCommand
		{
			get
			{
				return _loadFileCommand ?? (_loadFileCommand = new RelayCommand(DoLoadFile, CanLoadFile));
			}
		}

		private bool CanLoadFile()
		{
Franz KOBER josef's avatar
Franz KOBER josef committed
		}

		private void DoLoadFile()
		{
			var filePath = FileDialogHelper.ShowSelectFilesDialog(false)?.FirstOrDefault();
		public override void ResetComponentData()
			_componentData.ResetToComponentValues(this);
		public override object SaveComponentData()
			_componentData.UpdateCurrentValues(this);
			ClearChangedProperties();
			return _componentData;
Franz KOBER josef's avatar
Franz KOBER josef committed

		private void ReadSelectedXml(string filePath)
		{
			var xmlNodes = GetXmlNodes(filePath);
			if (xmlNodes.IsNullOrEmpty())
			var compReader = new XmlComponentReaderHelper(xmlNodes[0].ParentNode);
			SetLoadedAirdragData(compReader.GetAirdragComponentData());
		}

		private XmlNodeList GetXmlNodes(string filePath)
		{
			if (filePath.IsNullOrEmpty())
				return null;

			var xmlDocument = XmlHelper.ReadXmlDocument(filePath);
			return XmlHelper.GetComponentNodes(xmlDocument,
				XMLNames.VectoInputDeclaration, VectoComponents.Airdrag.XMLElementName());
		}

		private void SetLoadedAirdragData(AirdragComponentData airdrag)
		{
			if (airdrag == null)
				return;

			Model = airdrag.Model;
			Manufacturer = airdrag.Manufacturer;
			CertificationNumber = airdrag.CertificationNumber;
			Date = airdrag.Date;
			AppVersion = airdrag.AppVersion;
			DeclaredCdxA = airdrag.DeclaredCdxA;
			CdxA_0 = airdrag.CdxA_0;
			TransferredCdxA = airdrag.TransferredCdxA;
			DigestValue = airdrag.DigestValue;