private void Transform(SourceContext sourceContext, TransformationMap transformationMap) { if (transformationMap.MappingType == MappingType.Field) { if (!sourceContext.Source.ContainsKey(transformationMap.KeyExpression)) { SetEmptyOutput(sourceContext, transformationMap); sourceContext.AddErrorForDestinationColumn(transformationMap.Output, $"Source key {transformationMap.KeyExpression} is missed", SourceContext.ErrorTypeTransformation); } else { if (transformationMap.TransformOnlyIfColumnExists && sourceContext.ListOfSchemaMissedColumns.Contains(transformationMap.KeyExpression)) { sourceContext.Destination.Remove(transformationMap.Output); } else { sourceContext.Destination[transformationMap.Output] = sourceContext.Source[transformationMap.KeyExpression]; } } } else if (transformationMap.MappingType == MappingType.Expression) { sourceContext.Destination[transformationMap.Output] = _expressionEvaluator.Evaluate(transformationMap.Expression); } else if (transformationMap.MappingType == MappingType.DataMapping) { } }
private void SafeRun(Action action, SourceContext sourceContext, TransformationMap map) { try { action(); } catch (Exception e) { SetEmptyOutput(sourceContext, map); sourceContext.AddErrorForDestinationColumn(map.Output, e, SourceContext.ErrorTypeCleanup); } }
private void SetEmptyOutput(SourceContext context, TransformationMap map) { context.Destination[map.Output] = null; }