|
using System;
using System.ComponentModel;
using System.ComponentModel.Composition;
using System.Linq;
using System.ServiceModel.DomainServices.Client;
using IssueVision.Data.Web;
using IssueVision.Common;
namespace IssueVision.Model
{
[Export(typeof(IPasswordResetModel))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class PasswordResetModel : IPasswordResetModel
{
#region "Private Data"
private PasswordResetContext _ctx;
#endregion "Private Data"
#region "Protected Propertes"
protected PasswordResetContext Context
{
get
{
if (_ctx == null)
{
_ctx = new PasswordResetContext();
_ctx.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_ctx_PropertyChanged);
}
return _ctx;
}
}
#endregion "Protected Propertes"
#region "IPasswordResetModel Interface implementation"
/// <summary>
/// Call GetUserByName
/// </summary>
/// <param name="name"></param>
public void GetUserByNameAsync(string name)
{
this.PerformQuery<PasswordResetUser>(this.Context.GetUserByNameQuery(name), GetUserComplete);
}
/// <summary>
/// Call UpdateUser to submit changes
/// </summary>
public void SaveUserAsync()
{
this.Context.SubmitChanges(s =>
{
if (SaveUserComplete != null)
{
try
{
Exception ex = null;
if (s.HasError)
{
ex = s.Error;
s.MarkErrorAsHandled();
}
SaveUserComplete(this, new ResultsArgs(ex));
}
catch (Exception ex)
{
SaveUserComplete(this, new ResultsArgs(ex));
}
}
}, null);
}
/// <summary>
/// Reject any pending changes
/// </summary>
public void RejectChanges()
{
this.Context.RejectChanges();
}
/// <summary>
/// True if either "IsLoading" or "IsSubmitting" is
/// in progress; otherwise, false
/// </summary>
public Boolean IsBusy
{
get
{
return this._isBusy;
}
private set
{
if (this._isBusy != value)
{
this._isBusy = value;
this.OnPropertyChanged("IsBusy");
}
}
}
private Boolean _isBusy = false;
public event EventHandler<EntityResultsArgs<PasswordResetUser>> GetUserComplete;
public event EventHandler<ResultsArgs> SaveUserComplete;
#endregion "IPasswordResetModel Interface implementation"
#region "INotifyPropertyChanged Interface implementation"
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion "INotifyPropertyChanged Interface implementation"
#region "Private Methods"
private void _ctx_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case "IsLoading":
this.IsBusy = _ctx.IsLoading;
break;
case "IsSubmitting":
this.IsBusy = _ctx.IsSubmitting;
break;
}
}
private void PerformQuery<T>(EntityQuery<T> qry, EventHandler<EntityResultsArgs<T>> evt) where T : Entity
{
Context.Load<T>(qry, LoadBehavior.RefreshCurrent, r =>
{
if (evt != null)
{
try
{
if (r.HasError)
{
evt(this, new EntityResultsArgs<T>(r.Error));
r.MarkErrorAsHandled();
}
else if (r.Entities.Count() > 0)
{
evt(this, new EntityResultsArgs<T>(r.Entities));
}
else
{
Exception ex = new Exception(CommonResources.NoUserFound);
evt(this, new EntityResultsArgs<T>(ex));
}
}
catch (Exception ex)
{
evt(this, new EntityResultsArgs<T>(ex));
}
}
}, null);
}
#endregion "Private Methods"
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Weidong has been an information system professional since 1990. He has a Master's degree in Computer Science, and is currently a MCSD .NET