Ejemplo n.º 1
0
 public DeferredObjectChange(IObjectChange <TPrincipal> objectChange, Func <string> deferredReference, ISerializationManager serializer)
 {
     this.objectChange    = objectChange;
     this.futureReference = new DeferredValue(deferredReference);
     this.futureValues    = new DeferredValueMap(objectChange);
     this.serializer      = serializer;
 }
Ejemplo n.º 2
0
 protected virtual IPropertyChange<TPrincipal> primaryKeyChange<T>(IObjectChange<TPrincipal> change)
 {
     var model = Activator.CreateInstance(typeof(T), true);
     string primaryKeyField = GetReferencePropertyForObject(model);
     return change.PropertyChanges
         .SingleOrDefault(p => p.PropertyName == primaryKeyField);
 }
Ejemplo n.º 3
0
        private void record(IObjectChange <TPrincipal> objectChange, string propertyName, Func <object> deferredValue, Func <object> oldValue)
        {
            IPropertyChange <TPrincipal> propertyChange = getPropertyChangeFor(objectChange, propertyName);

            if (deferredValue != null)
            {
                deferredValues.Store(objectChange, propertyName, deferredValue, oldValue);
            }
        }
Ejemplo n.º 4
0
        private void bake(IObjectChange <TPrincipal> objectChange)
        {
            var bakedValues = deferredValues.CalculateAndRetrieve(objectChange);

            foreach (KeyValuePair <string, Tuple <object, object> > kv in bakedValues)
            {
                var propertyChange = getPropertyChangeFor(objectChange, kv.Key);
                setValue(propertyChange, kv.Value.Item1, kv.Value.Item2);
            }
        }
Ejemplo n.º 5
0
        private IPropertyChange <TPrincipal> getPropertyChangeFor(IObjectChange <TPrincipal> objectChange, string propertyName)
        {
            var result = objectChange.PropertyChanges.SingleOrDefault(pc => pc.PropertyName == propertyName);

            if (result == null)
            {
                result = factory.PropertyChange();
                result.ObjectChange = objectChange;
                result.PropertyName = propertyName;
                result.Value        = null;
                result.ValueAsInt   = null;
                objectChange.Add(result);
            }
            return(result);
        }
Ejemplo n.º 6
0
        protected virtual IChange <TModel, TPrincipal> apply <TModel>(IObjectChange <TPrincipal> change, TModel model)
            where TModel : ICloneable
        {
            var type       = typeof(TModel);
            var newVersion = (TModel)model.Clone();

            foreach (var propertyChange in change.PropertyChanges)
            {
                var property = model.GetType().GetProperty(propertyChange.PropertyName,
                                                           BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
                var value = bind(propertyChange.Value, property.PropertyType);
                property.SetValue(newVersion, value, null);
            }
            return(new Change <TModel, TPrincipal>(newVersion,
                                                   change.ChangeSet.Author,
                                                   change.ChangeSet.Timestamp));
        }
Ejemplo n.º 7
0
 /// <summary>
 /// Returns whether the object change consists of adding a new entity,
 /// deleting an entity, or modifying an existing entity
 /// </summary>
 public virtual ChangeType TypeOfChange<TModel>(IObjectChange<TPrincipal> change)
 {
     var keyChange = primaryKeyChange<TModel>(change);
     if (keyChange == null)
         return ChangeType.Modify;
     else
     {
         if (keyChange.Value == null)
         {
             return ChangeType.Delete;
         }
         else
         {
             return ChangeType.Add;
         }
     }
 }
Ejemplo n.º 8
0
 protected virtual IChange<TModel, TPrincipal> apply<TModel>(IObjectChange<TPrincipal> change, TModel model, string prefix)
 {
     var type = typeof(TModel);
     var newVersion = clone(model);
     var errors = new List<Exception>();
     foreach (var propertyChange in change.PropertyChanges.Select(p => new PropertyChangeProcessor<TPrincipal>(p)))
     {
         try
         {
             propertyChange.ApplyTo(newVersion, binder, prefix);
         }
         catch (UnknownPropertyInLogException<TPrincipal> e)
         {
             errors.Add(e);
         }
     }
     return Change.FromObjectChange(newVersion, change, errors: errors);
 }
Ejemplo n.º 9
0
 public FilteredObjectChange(IObjectChange <TPrincipal> objectChange, IEnumerable <IPropertyChange <TPrincipal> > propertyChanges)
 {
     this.objectChange    = objectChange;
     this.propertyChanges = propertyChanges;
 }
Ejemplo n.º 10
0
 public Change(TValue value, IObjectChange <TPrincipal> objectChange, IEnumerable <Exception> errors = null)
 {
     Value        = value;
     ObjectChange = objectChange;
     Errors       = errors ?? new List <Exception>();
 }
Ejemplo n.º 11
0
 void IChangeSet <ApplicationUser> .Add(IObjectChange <ApplicationUser> objectChange)
 {
     ObjectChanges.Add((ObjectChange)objectChange);
 }
Ejemplo n.º 12
0
 void IChangeSet <User> .Add(IObjectChange <User> objectChange)
 {
     ObjectChanges.Add((ObjectChange)objectChange);
 }
Ejemplo n.º 13
0
 void IChangeSet <Usuario> .Add(IObjectChange <Usuario> objectChange)
 {
     ObjectChanges.Add((ObjectChange)objectChange);
 }