MongoServices 0.2.0
A Service/Repository Framework for mongoDB
C:/Development/MongoServices/Source/MongoServices/Services/Classes/ReadWriteService.cs
Go to the documentation of this file.
00001 using System;
00002 using System.Collections.Generic;
00003 using System.Linq;
00004 using System.Text;
00005 using MongoDB.Bson;
00006 using System.ComponentModel.DataAnnotations;
00007 
00008 namespace MongoServices
00009 {
00014         public abstract class ReadWriteService<T> : ReadOnlyService<T>, IReadWriteService<T>
00015                 where T : MongoServicesModel
00016         {
00017                 #region Protected Properties
00018 
00019 
00020 
00021                 protected IReadWriteRepository<T> ReadWriteRepository { get; private set; }
00022                 #endregion
00023 
00024                 #region Public Constructors
00025 
00026 
00027 
00028 
00029                 public ReadWriteService(IReadWriteRepository<T> readWriteRepository)
00030                         : base(readWriteRepository)
00031                 {
00032                         ReadWriteRepository = readWriteRepository;
00033                 }
00034                 #endregion
00035 
00036                 #region Private Methods
00037                 private bool ProcessBeforeSaveProcesses(T model)
00038                 {
00039                         var allProcessed = true;
00040 
00041                         if (ServiceConfig.BeforeSaveProcesses.Any(p => p(model) == false))
00042                         {
00043                                 allProcessed = false;
00044                         }
00045 
00046                         return allProcessed;
00047                 }
00048 
00049                 private void ProcessAfterSaveProcesses(T model)
00050                 {
00051                         ServiceConfig.AfterSaveProcesses.ForEach(a => a(model));
00052                 }
00053 
00054                 private bool Validate(T model)
00055                 {
00056                         var results = new List<ValidationResult>();
00057                         Validator.TryValidateObject(model, new ValidationContext(model, null, null), results, true);
00058                         return results.Count == 0;
00059                 }
00060                 #endregion
00061 
00062                 #region Public Methods
00063 
00064 
00065 
00066 
00067 
00068                 public SaveResult Save(T model)
00069                 {
00070                         if (!ProcessBeforeSaveProcesses(model))
00071                                 return SaveResult.BeforeSaveFailure;
00072 
00073                         if (!Validate(model))
00074                                 return SaveResult.ValidationFailure;
00075 
00076                         ReadWriteRepository.Save(model);
00077 
00078                         ProcessAfterSaveProcesses(model);
00079 
00080                         return SaveResult.Saved;
00081                 }
00082 
00088                 public IDictionary<MongoServicesModel, SaveResult> Save(IEnumerable<T> models)
00089                 {
00090                         var results = new Dictionary<MongoServicesModel, SaveResult>();
00091 
00092                         foreach (var model in models)
00093                         {
00094                                 results.Add(model, Save(model));
00095                         }
00096 
00097                         return results;
00098                 }
00099 
00104                 public void DeleteById(ObjectId id)
00105                 {
00106                         ReadWriteRepository.DeleteById(id);
00107                 }
00108                 #endregion
00109 
00110                 #region Static Methods
00111 
00112 
00113 
00114 
00115                 public static void AddBeforeSaveProcess(Func<T, bool> process)
00116                 {
00117                         ServiceConfig.BeforeSaveProcesses.Add(process);
00118                 }
00119 
00123                 public static void ClearBeforeSaveProcesses()
00124                 {
00125                         ServiceConfig.BeforeSaveProcesses.Clear();
00126                 }
00127 
00132                 public static void AddAfterSaveProcess(Action<T> process)
00133                 {
00134                         ServiceConfig.AfterSaveProcesses.Add(process);
00135                 }
00136 
00140                 public static void ClearAfterSaveProcesses()
00141                 {
00142                         ServiceConfig.AfterSaveProcesses.Clear();
00143                 }
00144                 #endregion
00145         }
00146 }
 All Classes Namespaces Files Functions Enumerations Properties