private IDataObject TransitSourceObject(IDataObject sourceObject) { var ctx = new ValueTransitContext(sourceObject, null); ctx.Trace = (TraceMode | MapConfig.Current.TraceMode).HasFlag(TraceMode.Commands); ctx.DataPipeline = this; try { RunCommands(ctx); if (ctx.Flow == TransitionFlow.SkipObject && ctx.Target != null) { //If object just created and skipped by migration logic - need to remove it from cache //becaus it's invalid and must be removed from cache to avoid any referencing to this object //by any migration logic (lookups, key ytansitions, etc.) //If object is not new, it means that it's already saved and passed by migration validation if (ctx.Target.IsNew) { _targetSystem.InvalidateObject(ctx.Target); } //Tracer.TraceEvent(MigrationEvent.ObjectSkipped, ctx, "Source object skipped"); return(null); } } catch (Exception e) { throw new DataMigrationException("Error occured while object processing", ctx, e); } return(ctx.Target); }
private void RunCommands(ValueTransitContext ctx) { foreach (var childTransition in Commands) { //every time after value transition finishes - reset current value to Source object ctx.ResetCurrentValue(); childTransition.TraceColor = ConsoleColor.Yellow; TraceLine("", ctx); ctx.Execute(childTransition); if (ctx.Flow == TransitionFlow.SkipValue) { ctx.Flow = TransitionFlow.Continue; //Tracer.TraceEvent(MigrationEvent.ValueSkipped, ctx,"Value skipped"); continue; } if (ctx.Flow != TransitionFlow.Continue) { break; } } }
private void TraceLine(string message, ValueTransitContext ctx) { if ((TraceMode | MapConfig.Current.TraceMode).HasFlag(TraceMode.Objects) || ctx?.Trace == true) { Tracer.TraceLine(message, ctx, ConsoleColor.Magenta); } }
public DataMigrationException(string message, ValueTransitContext ctx, Exception innerException) : base(message, innerException) { Context = ctx; }