public void Add(int columnIndex, ITransformationInfo transfo) { var transformer = factory.Build(transfo); transformer.Initialize(transfo.Code); cacheTransformers.Add(columnIndex, transformer); }
public void Add(IColumnIdentifier indentifier, ITransformationInfo transfo) { var transformer = factory.Instantiate(transfo); transformer.Initialize(transfo.Code); if (cacheTransformers.ContainsKey(indentifier)) { throw new NBiException($"You can't define two transformers for the same column. The column {indentifier.Label} has already another transformer specified."); } cacheTransformers.Add(indentifier, transformer); }
public void Add(int columnIndex, ITransformationInfo transfo) { var transformer = factory.Instantiate(transfo); transformer.Initialize(transfo.Code); if (cacheTransformers.ContainsKey(columnIndex)) { throw new NBiException($"You can't define two transformers for the same column. The column with index '{columnIndex}' has already another transformer specified."); } cacheTransformers.Add(columnIndex, transformer); }
public ITransformer Instantiate(ITransformationInfo info) { if (info.Language == LanguageType.Format && (info.OriginalType == ResultSet.ColumnType.Boolean || info.OriginalType == ResultSet.ColumnType.Text)) { throw new InvalidOperationException("Language 'format' is only supporting transformation from 'numeric' and 'dateTime' data types"); } if (info.Language == LanguageType.NCalc && (info.OriginalType == ResultSet.ColumnType.Boolean || info.OriginalType == ResultSet.ColumnType.DateTime)) { throw new InvalidOperationException("Language 'ncalc' is only supporting transformation from 'numeric' and 'text' data types"); } Type valueType; switch (info.OriginalType) { case ResultSet.ColumnType.Text: valueType = typeof(string); break; case ResultSet.ColumnType.Numeric: valueType = typeof(decimal); break; case ResultSet.ColumnType.DateTime: valueType = typeof(DateTime); break; case ResultSet.ColumnType.Boolean: valueType = typeof(bool); break; default: throw new ArgumentOutOfRangeException(); } Type providerType; switch (info.Language) { case LanguageType.CSharp: providerType = typeof(CSharpTransformer <>); break; case LanguageType.NCalc: providerType = typeof(NCalcTransformer <>); break; case LanguageType.Format: providerType = typeof(FormatTransformer <>); break; case LanguageType.Native: providerType = typeof(NativeTransformer <>); break; default: throw new ArgumentOutOfRangeException(); } var provider = providerType.MakeGenericType(valueType); var transformer = (ITransformer)Activator.CreateInstance(provider, new object[] { }); return(transformer); }