public void Add(int columnIndex, ITransformationInfo transfo)
        {
            var transformer = factory.Build(transfo);

            transformer.Initialize(transfo.Code);
            cacheTransformers.Add(columnIndex, transformer);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }