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

Skip to content
Snippets Groups Projects
Commit dc904929 authored by Franz KOBER josef's avatar Franz KOBER josef
Browse files

fixed error in validation call, added additional validation dialogs and menu options

parent 7de5ac41
No related branches found
No related tags found
No related merge requests found
......@@ -77,10 +77,15 @@ namespace VECTO3GUI.ViewModel.Impl
return null;
}
public virtual void ShowValidationError(Dictionary<string, string> errors)
public virtual void ShowValidationErrors(Dictionary<string, string> errors)
{
}
public virtual void RemoveValidationErrors(Dictionary<string, string> errors)
{
}
#region Submodule Handling
protected IEnumerable<Component> GetSubmodels()
{
......
......@@ -424,7 +424,7 @@ namespace VECTO3GUI.ViewModel.Impl
ClearChangedProperties();
return _componentData;
}
public override void ShowValidationError(Dictionary<string, string> errors)
public override void ShowValidationErrors(Dictionary<string, string> errors)
{
if (errors.IsNullOrEmpty())
return;
......@@ -433,13 +433,22 @@ namespace VECTO3GUI.ViewModel.Impl
{
string propertyName;
if (XmlNamesToPropertyMapping.TryGetValue(error.Key, out propertyName))
{
AddPropertyError(propertyName, error.Value);
}
}
}
public override void RemoveValidationErrors(Dictionary<string, string> errors)
{
if (errors.IsNullOrEmpty())
return;
foreach (var error in errors)
{
string propertyName;
if (XmlNamesToPropertyMapping.TryGetValue(error.Key, out propertyName))
RemovePropertyError(propertyName);
}
}
#region Commands
......
......@@ -7,6 +7,7 @@ using System.Windows;
using System.Windows.Input;
using System.Xml;
using System.Xml.Schema;
using Castle.Core.Internal;
using MahApps.Metro.Controls.Dialogs;
using Ninject;
using TUGraz.VectoCommon.InputData;
......@@ -37,6 +38,9 @@ namespace VECTO3GUI.ViewModel.Impl
private Dictionary<string, string> _errors;
private ICommand _validateInputCommand;
private ICommand _validationErrorsCommand;
private ICommand _removeValidationErrorsCommand;
private bool _validationErrorsDisplayed;
#endregion
......@@ -83,7 +87,7 @@ namespace VECTO3GUI.ViewModel.Impl
SaveAsButtonVisible = IsNewJob;
SaveButtonVisibility = !IsNewJob;
}
#region Commands
protected override bool CanSaveJob(Window window)
......@@ -92,19 +96,20 @@ namespace VECTO3GUI.ViewModel.Impl
}
protected override void DoSaveJob(Window window)
{
var dialogSettings = new MetroDialogSettings()
var dialogSettings = new MetroDialogSettings
{
AffirmativeButtonText = "Yes",
NegativeButtonText = "Cancel",
AnimateShow = true,
AnimateHide = true
};
var dialogResult = MetroDialogHelper.GetModalDialogBox(this, "Save",
"The existing file will be overwritten, do you want to continue?",
"The existing file will be overwritten, do you want to continue?",
MessageDialogStyle.AffirmativeAndNegative, dialogSettings);
if (dialogResult == MessageDialogResult.Affirmative) {
if (dialogResult == MessageDialogResult.Affirmative)
{
SetCurrentDataToSave();
var xDoc = _xmlCompletedBus.GenerateCompletedBusDocument(CompleteVehicleBusData);
......@@ -112,17 +117,15 @@ namespace VECTO3GUI.ViewModel.Impl
_xmlCompletedBusWriter.WriteCompletedBusXml(XmlFilePath, xDoc);
CloseWindow(window);
}
ValidationResultDialogWindow(false);
}
}
protected override void DoCloseJob(Window window)
{
if (CloseWindowDialog()) {
if (CloseWindowDialog())
{
CloseWindow(window);
}
}
......@@ -130,16 +133,18 @@ namespace VECTO3GUI.ViewModel.Impl
protected override void DoSaveAsJob(Window window)
{
var filePath = FileDialogHelper.SaveXmlFileToDialog(SettingsModel.XmlFilePathFolder);
if(filePath == null)
if (filePath == null)
return;
SetCurrentDataToSave();
var xDocument = _xmlCompletedBus.GenerateCompletedBusDocument(CompleteVehicleBusData);
if (XmlHelper.ValidateXDocument(xDocument, null, ValidationErrorAction)) {
if (XmlHelper.ValidateXDocument(xDocument, null, ValidationErrorAction))
{
_xmlCompletedBusWriter.WriteCompletedBusXml(filePath, xDocument);
CloseWindow(window);
}
ValidationResultDialogWindow(false);
}
public ICommand CommitComponent
......@@ -174,13 +179,17 @@ namespace VECTO3GUI.ViewModel.Impl
public ICommand ResetComponent
{
get { return _resetComponentCommand ??
(_resetComponentCommand = new RelayCommand<Component>(DoResetComponent, CanResetComponent)); }
get
{
return _resetComponentCommand ??
(_resetComponentCommand = new RelayCommand<Component>(DoResetComponent, CanResetComponent));
}
}
private bool CanResetComponent(Component component)
{
return ComponentsChanged(component);
}private void DoResetComponent(Component component)
}
private void DoResetComponent(Component component)
{
switch (component)
{
......@@ -196,6 +205,23 @@ namespace VECTO3GUI.ViewModel.Impl
}
}
public ICommand RemoveValidationErrors
{
get
{
return _removeValidationErrorsCommand ??
(_removeValidationErrorsCommand = new RelayCommand(DoRemoveValidationErrors, CanRemoveValidationErrors));
}
}
private bool CanRemoveValidationErrors()
{
return _validationErrorsDisplayed && !_errors.IsNullOrEmpty();
}
private void DoRemoveValidationErrors()
{
ClearValidationErrors();
}
#endregion
private void SetCurrentDataToSave()
......@@ -206,13 +232,14 @@ namespace VECTO3GUI.ViewModel.Impl
{ Component.Auxiliaries, _subModels[Component.Auxiliaries].CommitComponentData()}
};
}
private bool ComponentsChanged(Component component)
{
switch (component) {
case Component.CompleteBusVehicle :
switch (component)
{
case Component.CompleteBusVehicle:
return _subModels[Component.CompleteBusVehicle].IsComponentDataChanged();
case Component.Airdrag :
case Component.Airdrag:
return _subModels[Component.Airdrag].IsComponentDataChanged();
case Component.Auxiliaries:
return _subModels[Component.Auxiliaries].IsComponentDataChanged();
......@@ -234,32 +261,42 @@ namespace VECTO3GUI.ViewModel.Impl
private void DoValidateInput()
{
ClearValidationErrors();
_errors = new Dictionary<string, string>();
SetCurrentDataToSave();
var xDoc = _xmlCompletedBus.GenerateCompletedBusDocument(CompleteVehicleBusData);
if (XmlHelper.ValidateXDocument(xDoc, null, ValidationErrorAction))
{
_xmlCompletedBusWriter.WriteCompletedBusXml(XmlFilePath, xDoc);
if (XmlHelper.ValidateXDocument(xDoc, null, ValidationErrorAction)) {
ValidationResultDialogWindow(true);
} else {
ValidationResultDialogWindow(false);
}
}
public ICommand ValidationErrors
public ICommand ShowValidationErrors
{
get
{
return _validationErrorsCommand ?? (_validationErrorsCommand = new RelayCommand(DoValidationErrors));
return _validationErrorsCommand ?? (_validationErrorsCommand = new RelayCommand(DoShowValidationErrors, CanShowValidationErrors));
}
}
private void DoValidationErrors()
private bool CanShowValidationErrors()
{
return !_validationErrorsDisplayed && !_errors.IsNullOrEmpty();
}
private void DoShowValidationErrors()
{
ClearValidationErrors();
var completedBusViewModel = _subModels[Component.CompleteBusVehicle] as CompleteVehicleBusViewModel;
var auxiliaryViewModel = _subModels[Component.Auxiliaries] as AuxiliariesViewModel;
completedBusViewModel?.ShowValidationError(_errors);
auxiliaryViewModel?.ShowValidationError(_errors);
completedBusViewModel?.ShowValidationErrors(_errors);
auxiliaryViewModel?.ShowValidationErrors(_errors);
_validationErrorsDisplayed = true;
}
......@@ -276,7 +313,34 @@ namespace VECTO3GUI.ViewModel.Impl
_errors.Add(localName, message?.Message);
}
}
private void ClearValidationErrors()
{
if (_errors.IsNullOrEmpty())
return;
var completedBusViewModel = _subModels[Component.CompleteBusVehicle] as CompleteVehicleBusViewModel;
var auxiliaryViewModel = _subModels[Component.Auxiliaries] as AuxiliariesViewModel;
completedBusViewModel?.RemoveValidationErrors(_errors);
auxiliaryViewModel?.RemoveValidationErrors(_errors);
_validationErrorsDisplayed = false;
}
private void ValidationResultDialogWindow(bool validationResult)
{
if (validationResult) {
MetroDialogHelper.GetModalDialogBox(this, "Input Validation",
"No validation errors were found, the entered data is valid!", MessageDialogStyle.Affirmative);
} else {
MetroDialogHelper.GetModalDialogBox(this, "Input Validation",
"There are some input validation errors, the data must be valid for saving!", MessageDialogStyle.Affirmative);
}
}
public string JobFile { get; }
public IInputDataProvider InputDataProvider { get; set; }
......
......@@ -181,7 +181,7 @@ namespace VECTO3GUI.ViewModel.Impl
get { return _lowEntry; }
set
{
if (!SetProperty(ref _lowEntry, value))
if (!SetProperty(ref _lowEntry, value))
return;
IsDataChanged(_lowEntry, _componentData);
}
......@@ -283,7 +283,7 @@ namespace VECTO3GUI.ViewModel.Impl
NgTankSystem = vehicle.TankSystem;
NumberOfPassengersLowerDeck = vehicle.NumberOfPassengersLowerDeck;
NumberOfPassengersUpperDeck = vehicle.NumberOfPassengersUpperDeck;
LowEntry = vehicle.FloorType == FloorType.LowFloor;
LowEntry = vehicle.FloorType == FloorType.LowFloor;
HeightIntegratedBody = vehicle.Height;
VehicleLength = vehicle.Length;
VehicleWidth = vehicle.Width;
......@@ -297,18 +297,18 @@ namespace VECTO3GUI.ViewModel.Impl
private void SetAllowedEntries()
{
AllowedLegislativeClasses = new [] {LegislativeClass.M3}
AllowedLegislativeClasses = new[] { LegislativeClass.M3 }
.Select(lc => AllowedEntry.Create(lc, lc.GetLabel())).ToArray();
AllowedVehicleCodes = EnumHelper.GetValues<VehicleCode>().Where(x => x != VehicleCode.NOT_APPLICABLE)
.Select(vc => AllowedEntry.Create(vc, vc.GetLabel())).ToArray();
AllowedDoorDriveTechnologies = new [] {ConsumerTechnology.Pneumatically, ConsumerTechnology.Electrically}
AllowedDoorDriveTechnologies = new[] { ConsumerTechnology.Pneumatically, ConsumerTechnology.Electrically }
.Select(sc => AllowedEntry.Create(sc, sc.GetLabel())).ToArray();
AllowedRegisteredClasses = EnumHelper.GetValues<RegistrationClass>().Where(x => x != RegistrationClass.unknown)
.Select(vc => AllowedEntry.Create(vc, vc.GetLabel())).ToArray();
AllowedTankSystems = new[] { AllowedEntry.Create((TankSystem?)null, "Not applicable") }
.Concat(EnumHelper.GetValues<TankSystem>().Select(x => AllowedEntry.Create((TankSystem?)x, x.ToString()))).ToArray();
}
......@@ -327,19 +327,32 @@ namespace VECTO3GUI.ViewModel.Impl
return _componentData;
}
public override void ShowValidationError(Dictionary<string, string> errors)
public override void ShowValidationErrors(Dictionary<string, string> errors)
{
if (errors.IsNullOrEmpty())
return;
foreach (var error in errors) {
foreach (var error in errors)
{
string propertyName;
if (XmlNamesToPropertyMapping.TryGetValue(error.Key, out propertyName)) {
if (XmlNamesToPropertyMapping.TryGetValue(error.Key, out propertyName))
AddPropertyError(propertyName, error.Value);
}
}
}
public override void RemoveValidationErrors(Dictionary<string, string> errors)
{
if (errors.IsNullOrEmpty())
return;
foreach (var error in errors)
{
string propertyName;
if (XmlNamesToPropertyMapping.TryGetValue(error.Key, out propertyName))
RemovePropertyError(propertyName);
}
}
}
}
......@@ -91,6 +91,7 @@ namespace VECTO3GUI.ViewModel.Impl
}
public ICommand ValidateInput { get; }
public ICommand ValidationErrors { get; }
public ICommand ShowValidationErrors { get; }
public ICommand RemoveValidationErrors { get; }
}
}
......@@ -47,7 +47,8 @@ namespace VECTO3GUI.ViewModel.Impl
}
public ICommand ValidateInput { get; }
public ICommand ValidationErrors { get; }
public ICommand ShowValidationErrors { get; }
public ICommand RemoveValidationErrors { get; }
#endregion
......
......@@ -47,6 +47,7 @@ namespace VECTO3GUI.ViewModel.Impl
}
public IInputDataProvider InputDataProvider { get; set; }
public ICommand ValidateInput { get; }
public ICommand ValidationErrors { get; }
public ICommand ShowValidationErrors { get; }
public ICommand RemoveValidationErrors { get; }
}
}
......@@ -21,7 +21,8 @@ namespace VECTO3GUI.ViewModel.Interfaces {
void ResetComponentData();
object CommitComponentData();
void ShowValidationError(Dictionary<string, string> errors);
void ShowValidationErrors(Dictionary<string, string> errors);
void RemoveValidationErrors(Dictionary<string, string> errors);
}
......
......@@ -21,7 +21,8 @@ namespace VECTO3GUI.ViewModel.Interfaces
ICommand SaveAsJob { get; }
ICommand CloseJob { get; }
ICommand ValidateInput { get; }
ICommand ValidationErrors { get; }
ICommand ShowValidationErrors { get; }
ICommand RemoveValidationErrors { get; }
}
}
......@@ -42,8 +42,10 @@
<MenuItem Header="Input Validation">
<MenuItem Header="Validate"
Command="{Binding ValidateInput}"/>
<MenuItem Header="Validation Errors"
Command="{Binding ValidationErrors}"/>
<MenuItem Header="Show Validation Errors"
Command="{Binding ShowValidationErrors}"/>
<MenuItem Header="Remove Validation Errors"
Command="{Binding RemoveValidationErrors}"/>
</MenuItem>
</Menu>
<Separator HorizontalAlignment="Stretch" Background="Gray"/>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment