aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.BL/ObservableEntity.cs
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-07-16 15:51:33 +0300
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-07-16 15:51:33 +0300
commit13e34402f91fae6229b2d9719ddb48ced1d37fbf (patch)
tree1b60f7f1f719403ede6f3ebbfe6077ca673fe792 /Software/Visual_Studio/Tango.BL/ObservableEntity.cs
parentc326bf5d9c1290ecc79739a1938c0a75b276f552 (diff)
downloadTango-13e34402f91fae6229b2d9719ddb48ced1d37fbf.tar.gz
Tango-13e34402f91fae6229b2d9719ddb48ced1d37fbf.zip
Some fixed and improvements.
Diffstat (limited to 'Software/Visual_Studio/Tango.BL/ObservableEntity.cs')
-rw-r--r--Software/Visual_Studio/Tango.BL/ObservableEntity.cs98
1 files changed, 97 insertions, 1 deletions
diff --git a/Software/Visual_Studio/Tango.BL/ObservableEntity.cs b/Software/Visual_Studio/Tango.BL/ObservableEntity.cs
index 7c82d927b..99d7360ef 100644
--- a/Software/Visual_Studio/Tango.BL/ObservableEntity.cs
+++ b/Software/Visual_Studio/Tango.BL/ObservableEntity.cs
@@ -22,6 +22,7 @@ using Tango.Serialization;
using System.Xml.Serialization;
using Newtonsoft.Json;
using Tango.Logging;
+using System.ComponentModel;
namespace Tango.BL
{
@@ -35,6 +36,7 @@ namespace Tango.BL
public abstract class ObservableEntity<T> : ExtendedObject, IObservableEntity where T : class, IObservableEntity
{
private Regex regExDAL;
+ private List<KeyValuePair<String, String>> _currentErrors = new List<KeyValuePair<string, string>>(); //Holds the current validation errors.
/// <summary>
/// Occurs after this observable has been saved.
@@ -323,9 +325,36 @@ Maybe you have deleted an entity that was no yet inserted into database?", LogCa
/// Will throw an exception with the proper message if one of the fields is invalid.
/// </summary>
/// <param name="context">The context.</param>
- public virtual void Validate(ObservablesContext context)
+ public virtual bool Validate(ObservablesContext context)
{
+ HasErrors = false;
+ _currentErrors.Clear();
+ if (ValidationErrors == null)
+ {
+ ValidationErrors = new ObservableCollection<string>();
+ }
+
+ ValidationErrors.Clear();
+
+ OnValidating(context);
+
+ foreach (var prop in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
+ {
+ foreach (var validation in prop.GetCustomAttributes<ValidationAttribute>())
+ {
+ if (!validation.IsValid(prop.GetValue(this)))
+ {
+ _currentErrors.Add(new KeyValuePair<string, string>(prop.Name, validation.ErrorMessage));
+ ValidationErrors.Add(validation.ErrorMessage);
+ }
+ }
+
+ HasErrors = _currentErrors.Count > 0;
+ RaiseError(prop.Name);
+ }
+
+ return !HasErrors;
}
public DbSet<T1> GetDbSet<T1>(ObservablesContext context) where T1 : class, IObservableEntity
@@ -333,6 +362,73 @@ Maybe you have deleted an entity that was no yet inserted into database?", LogCa
return GetDbSet(context) as DbSet<T1>;
}
+ public IEnumerable GetErrors(string propertyName)
+ {
+ return _currentErrors.Where(x => x.Key == propertyName).Select(x => x.Value).ToList();
+ }
+
+ protected virtual void OnValidating(ObservablesContext context)
+ {
+
+ }
+
+ protected void InsertError(String propName, String error)
+ {
+ _currentErrors.Add(new KeyValuePair<string, string>(propName, error));
+ }
+
+ private bool _validateOnPropertyChanged;
+ [NotMapped]
+ public bool ValidateOnPropertyChanged
+ {
+ get { return _validateOnPropertyChanged; }
+ set { _validateOnPropertyChanged = value; RaisePropertyChangedAuto(); }
+ }
+
+
+ /// <summary>
+ /// Invoked the <see cref="ErrorsChanged"/> event.
+ /// </summary>
+ /// <param name="propName">Name of the property.</param>
+ protected void RaiseError(String propName)
+ {
+ ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propName));
+ }
+
+ private bool _hasErrors;
+ /// <summary>
+ /// Gets a value that indicates whether the entity has validation errors.
+ /// </summary>
+ [NotMapped]
+ public bool HasErrors
+ {
+ get { return _hasErrors; }
+ set { _hasErrors = value; RaisePropertyChangedAuto(); }
+ }
+
+ private ObservableCollection<String> _validationErrors;
+ /// <summary>
+ /// Gets or sets the validation errors.
+ /// </summary>
+ [NotMapped]
+ public ObservableCollection<String> ValidationErrors
+ {
+ get { return _validationErrors; }
+ protected set { _validationErrors = value; RaisePropertyChangedAuto(); }
+ }
+
+ public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
+
+ protected override void RaisePropertyChanged(string propName)
+ {
+ base.RaisePropertyChanged(propName);
+
+ if (ValidateOnPropertyChanged)
+ {
+ Validate(null);
+ }
+ }
+
#region Operator Overloading
//public static bool operator ==(ObservableEntity<T> observable1, ObservableEntity<T> observable2)