Exemplo n.º 1
0
        internal void ApplyChangesByKnowledge(ApplyChangesByKnowledgeParameter parameter, ref ApplyChangesByKnowledgeResult result)
        {
            if (parameter == null)
            {
                throw new NullReferenceException(nameof(parameter));
            }
            result = new ApplyChangesByKnowledgeResult(parameter.PayloadAction, parameter.SynchronizationId, parameter.CustomInfo);

            if (GetAllKnowledgeInfos(parameter.SynchronizationId, parameter.CustomInfo).Where(w => w.DatabaseInstanceId == parameter.DestinationDatabaseInstanceId && w.IsLocal).Count() == 0)
            {
                throw new SyncEngineConstraintException("Unexpected Knowledge Info State on Destination. Destination is not provisioned yet.");
            }

            parameter.Log.Add("Applying Data Type Changes...");
            parameter.Log.Add($"SyncTypes Count: {parameter.Changes.Count}");
            List <Type> postEventTypes = new List <Type>();
            Dictionary <Type, List <object> > dictDeletedIds = new Dictionary <Type, List <object> >();

            for (int i = 0; i < parameter.Changes.Count; i++)
            {
                JObject typeChanges = parameter.Changes[i].Value <JObject>();
                parameter.Log.Add($"Applying Type: {typeChanges["syncType"].Value<string>()}...");
                (Type localSyncType, List <object> appliedIds, List <object> deletedIds) = ApplyTypeChanges(parameter.Log, result.Inserts, result.Updates, result.Deletes, result.Conflicts, typeChanges, parameter.SynchronizationId, parameter.CustomInfo, parameter.SourceDatabaseInstanceId, parameter.DestinationDatabaseInstanceId);
                parameter.Log.Add($"Type: {typeChanges["syncType"].Value<string>()} Applied, Count: {appliedIds.Count}");
                if (deletedIds.Count > 0)
                {
                    if (!postEventTypes.Contains(localSyncType))
                    {
                        postEventTypes.Add(localSyncType);
                    }
                    dictDeletedIds[localSyncType] = deletedIds;
                }
            }
            ProcessPostEvents(parameter.Log, postEventTypes, dictDeletedIds, parameter.SynchronizationId, parameter.CustomInfo);
        }
Exemplo n.º 2
0
            public static ApplyChangesByKnowledgeResult FromPayload(JObject payload)
            {
                string synchronizationId = payload[nameof(SynchronizationId)].Value <string>();
                Dictionary <string, object> customInfo = payload[nameof(CustomInfo)].ToObject <Dictionary <string, object> >();
                PayloadAction payloadAction            = (PayloadAction)Enum.Parse(typeof(PayloadAction), payload[nameof(PayloadAction)].Value <string>());
                ApplyChangesByKnowledgeResult result   = new ApplyChangesByKnowledgeResult(payloadAction, synchronizationId, customInfo);

                result.Inserts   = payload[nameof(Inserts)].ToObject <List <SyncLog.SyncLogData> >();
                result.Updates   = payload[nameof(Updates)].ToObject <List <SyncLog.SyncLogData> >();
                result.Deletes   = payload[nameof(Deletes)].ToObject <List <SyncLog.SyncLogData> >();
                result.Conflicts = payload[nameof(Conflicts)].ToObject <List <SyncLog.SyncLogConflict> >();
                return(result);
            }