Newer
Older

Franz KOBER josef
committed
using System;

Franz KOBER josef
committed
using System.Xml;
using Castle.Core.Internal;
using TUGraz.VectoCommon.Hashing;

Franz KOBER josef
committed
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Resources;

Franz KOBER josef
committed
using TUGraz.VectoCommon.Utils;
using VECTO3GUI.Model.TempDataObject;

Franz KOBER josef
committed
using VECTO3GUI.ViewModel.Interfaces;

Franz KOBER josef
committed

Franz KOBER josef
committed
namespace VECTO3GUI.ViewModel.Impl

Franz KOBER josef
committed
{
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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;
}
}

Franz KOBER josef
committed
public class AirdragViewModel : AbstractComponentViewModel, IAirdragViewModel
{
private string _manufacturer;
private string _model;
private string _certificationNumber;
private DateTime? _date;

Franz KOBER josef
committed
private SquareMeter _declaredCdxA;
private bool _useStandardValues;

Franz KOBER josef
committed
private string _appVersion;
private IAirdragDeclarationInputData _airdragData;
private AirdragComponentData _componentData;
private bool _useMeasurementData;
private bool _noAirdragData;

Franz KOBER josef
committed
private string _xmlFilePath;
private ICommand _airdragConfig;
private ICommand _loadFileCommand;

Franz KOBER josef
committed
#region Implementation of IAirdragViewModel
public IAirdragDeclarationInputData ModelData
{

Franz KOBER josef
committed
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

Franz KOBER josef
committed
{
get { return _certificationNumber; }
set
{
if (!SetProperty(ref _certificationNumber, value))
return;
IsDataChanged(_certificationNumber, _componentData);

Franz KOBER josef
committed
}
if (!SetProperty(ref _date, value))
return;
IsDataChanged(_date, _componentData);

Franz KOBER josef
committed
}
public SquareMeter DeclaredCdxA
{
get { return _declaredCdxA; }
if (!SetProperty(ref _declaredCdxA, value))
return;
IsDataChanged(_declaredCdxA, _componentData);

Franz KOBER josef
committed
}

Franz KOBER josef
committed
public string AppVersion
{
get { return _appVersion; }
if (SetProperty(ref _appVersion, value))
return;
IsDataChanged(_appVersion, _componentData);

Franz KOBER josef
committed
}
public DigestData DigestValue { get; set; }

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

Franz KOBER josef
committed
#endregion
public bool IsEditable
{
get { return _isEditable; }
set { SetProperty(ref _isEditable, value); }
}
public bool UseMeasurementData
{
get { return _useMeasurementData; }
set { SetProperty(ref _useMeasurementData, value); }
}

Franz KOBER josef
committed
protected override void InputDataChanged()
{
var inputData = JobViewModel.InputDataProvider as IDeclarationInputDataProvider;
_airdragData = inputData?.JobInputData.Vehicle.Components.AirdragInputData;

Franz KOBER josef
committed
var xmlUri = inputData?.JobInputData.Vehicle.XMLSource.BaseURI;
_xmlFilePath = XmlHelper.GetXmlAbsoluteFilePath(xmlUri);
UseMeasurementData = _airdragData.AirDragArea != null;
NoAirdragData = !UseMeasurementData;
IsEditable = false;

Franz KOBER josef
committed
}
private void SetAirdragValues(IAirdragDeclarationInputData airdrag)

Franz KOBER josef
committed
{
UseMeasuredValues = airdrag.AirDragArea != null;
if (airdrag.AirDragArea == null)
_componentData = new AirdragComponentData(this, true);

Franz KOBER josef
committed
return;
}

Franz KOBER josef
committed
Model = airdrag.Model;
Manufacturer = airdrag.Manufacturer;
CertificationNumber = airdrag.CertificationNumber;

Franz KOBER josef
committed
Date = airdrag.Date;
AppVersion = airdrag.AppVersion;
DeclaredCdxA = airdrag.AirDragArea;
DigestValue = airdrag.DigestValue;

Franz KOBER josef
committed
ReadAdditionalAirdragValues();
_componentData = new AirdragComponentData(this);
ClearChangedProperties();

Franz KOBER josef
committed
}

Franz KOBER josef
committed
private void ReadAdditionalAirdragValues()
{
var xmlNodes = GetXmlNodes(_xmlFilePath);
var compReader = new XmlComponentReaderHelper(xmlNodes[0].ParentNode);
CdxA_0 = compReader.ReadCdxA_0();
TransferredCdxA = compReader.ReadTransferredCdxA();
}
#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;
}
}
public ICommand LoadFileCommand
{
get
{
return _loadFileCommand ?? (_loadFileCommand = new RelayCommand(DoLoadFile, CanLoadFile));
}
}
private bool CanLoadFile()
{
return UseMeasurementData;
}
private void DoLoadFile()
{
var filePath = FileDialogHelper.ShowSelectFilesDialog(false)?.FirstOrDefault();
ReadSelectedXml(filePath);
public override void ResetComponentData()
_componentData.ResetToComponentValues(this);
public override object SaveComponentData()
_componentData.UpdateCurrentValues(this);
ClearChangedProperties();
return _componentData;
private void ReadSelectedXml(string filePath)
{

Franz KOBER josef
committed
var xmlNodes = GetXmlNodes(filePath);
if (xmlNodes.IsNullOrEmpty())
return;

Franz KOBER josef
committed
var compReader = new XmlComponentReaderHelper(xmlNodes[0].ParentNode);
SetLoadedAirdragData(compReader.GetAirdragComponentData());
}

Franz KOBER josef
committed
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;