示例#1
0
        /// <summary>
        ///     Saves the changes.
        /// </summary>
        /// <exception cref="InvalidOperationException"></exception>
        public void SaveChanges()
        {
            var changesTimestamp = Convert.ToString(DateTimeOffset.Now.ToUnixTimeMilliseconds());

            lock (_changeSetLock) {
                while (Changes.Any())
                {
                    var changeSet = Changes.Dequeue();

                    switch (changeSet.ChangeType)
                    {
                    case ChangeType.Update:
                        Update(changesTimestamp, changeSet);
                        break;

                    case ChangeType.Insert:
                        Insert(changesTimestamp, changeSet);
                        break;

                    case ChangeType.Delete:
                        Delete(changesTimestamp, changeSet);
                        break;

                    default:
                        throw new InvalidOperationException(
                                  $"Invalid changeset type: {changeSet.ChangeType} for {nameof(DataPage)}");
                    }
                }
            }
        }
示例#2
0
 private bool?IsEnabled(UpdateOperationViewModel model)
 {
     if (Changes.Any(o => o.Value.Equals(CurrentOperation)))
     {
         return(Changes.First(o => o.Value.Equals(CurrentOperation)).IsEnabled);
     }
     else
     {
         var isEnabled = model.Operations.FirstOrDefault(o => o.Value.Equals(CurrentOperation))?.IsEnabled;
         Changes.Add(new OperationViewModel {
             Value = CurrentOperation, IsEnabled = isEnabled
         });
         return(isEnabled);
     }
 }
示例#3
0
 public bool HasChangeFor(Expression <Func <T, object?> > expression)
 {
     return(Changes.Any(x => x.Matches(expression)));
 }
示例#4
0
 internal bool NeedsInclude()
 {
     return(IsIncluded || (Changes != null && Changes.Any(x => x.IsIncluded)));
 }
示例#5
0
        void IJsonSerializable.Serialize(JsonWriter writer)
        {
            // Types
            if (Types != null && Types.Any())
            {
                writer.WritePropertyName("types");
                writer.WriteStartObject();
                foreach (var type in Types)
                {
                    writer.WritePropertyName(type);
                    writer.WriteRawValue(GetTypeJson(type));
                }
                writer.WriteEndObject();
            }

            if (Instances != null && Instances.Any())
            {
                writer.WritePropertyName("instances");
                writer.WriteStartObject();

                foreach (var typeItem in Instances)
                {
                    writer.WritePropertyName(typeItem.Key);
                    writer.WriteStartObject();

                    // Serialize static property values
                    if (typeItem.Value.StaticProperties.Count > 0)
                    {
                        writer.WritePropertyName("static");
                        writer.Serialize(
                            typeItem.Value.StaticProperties.ToDictionary(
                                property => property.Name,
                                property => JsonConverter.GetPropertyValue(property, property.DeclaringType)));
                    }

                    // Serialize instances
                    foreach (var instanceItem in typeItem.Value.Instances)
                    {
                        writer.WritePropertyName(instanceItem.Key);
                        writer.Serialize(instanceItem.Value);
                    }

                    writer.WriteEndObject();
                }

                writer.WriteEndObject();
            }

            if (Conditions != null && Conditions.Any())
            {
                writer.WritePropertyName("conditions");
                writer.Serialize(Conditions);
            }

            if (Events != null && Events.Any())
            {
                writer.WritePropertyName("events");
                writer.Serialize(Events);
            }

            if (Model != null && Model.Any())
            {
                writer.WritePropertyName("model");
                writer.Serialize(Model);
            }

            if (ServerInfo != null)
            {
                writer.WritePropertyName("serverInfo");
                writer.Serialize(ServerInfo);
            }

            if (Changes != null && Changes.Any())
            {
                writer.WritePropertyName("changes");
                writer.Serialize(Changes.Where(modelEvent => !(modelEvent is ModelValueChangeEvent) || ExoWeb.IncludeInClientModel(((ModelValueChangeEvent)modelEvent).Property)));
            }
        }