private static void InitializeFileProcessorDefinition(
            FileProcessorDefinition fileProcessorDefinition,
            InputDefinitionFile.Models.InputDefinitionFile inputDefinitionFile,
            AggregateManager aggregateManager)
        {
            fileProcessorDefinition.CreateRowJsonEnabled          = inputDefinitionFile.CreateRowJsonEnabled;
            fileProcessorDefinition.HeaderRowProcessorDefinition  = LoadRowProcessorDefinition(inputDefinitionFile.Header, aggregateManager);
            fileProcessorDefinition.TrailerRowProcessorDefinition = LoadRowProcessorDefinition(inputDefinitionFile.Trailer, aggregateManager);

            InitializeRules(fileProcessorDefinition.HeaderRowProcessorDefinition.FieldProcessorDefinitions.SelectMany(a => a.Rules), aggregateManager.GetAggregates());
        }
        public static FileProcessorDefinition10 CreateFileProcessorDefinition(InputDefinitionFile10 inputDefinitionFile_10)
        {
            var aggregateManager    = new AggregateManager();
            var processorDefinition = new FileProcessorDefinition10();

            InitializeFileProcessorDefinition(processorDefinition, inputDefinitionFile_10, aggregateManager);
            processorDefinition.DataRowProcessorDefinition = LoadRowProcessorDefinition(inputDefinitionFile_10.Data, aggregateManager);

            InitializeRules(processorDefinition.DataRowProcessorDefinition.FieldProcessorDefinitions.SelectMany(a => a.Rules), aggregateManager.GetAggregates());
            InitializeRules(processorDefinition.TrailerRowProcessorDefinition.FieldProcessorDefinitions.SelectMany(a => a.Rules), aggregateManager.GetAggregates());

            return(processorDefinition);
        }
        public static FileProcessorDefinition20 CreateFileProcessorDefinition(InputDefinitionFile20 inputDefinitionFile_20)
        {
            var aggregateManager    = new AggregateManager();
            var processorDefinition = new FileProcessorDefinition20();

            InitializeFileProcessorDefinition(processorDefinition, inputDefinitionFile_20, aggregateManager);
            processorDefinition.DataRowProcessorDefinitions = LoadRowProcessorDefinitions(inputDefinitionFile_20.Datas, aggregateManager);

            processorDefinition.KeyField      = inputDefinitionFile_20.Datas.KeyField;
            processorDefinition.DataTypeField = inputDefinitionFile_20.Datas.DataTypeField;
            ResolveDataTypeField(processorDefinition);


            var fieldProcessorDefinitionsInDataRows = processorDefinition.DataRowProcessorDefinitions.SelectMany(a => a.Value.RowProcessorDefinition.FieldProcessorDefinitions);

            InitializeRules(fieldProcessorDefinitionsInDataRows.SelectMany(a => a.Rules), aggregateManager.GetAggregates());
            InitializeRules(processorDefinition.TrailerRowProcessorDefinition.FieldProcessorDefinitions.SelectMany(a => a.Rules), aggregateManager.GetAggregates());

            return(processorDefinition);
        }
        private static IFieldAggregator CreateAggregator(AggregatorDefinition aggregatorDefinition, AggregateManager aggregateManager)
        {
            var aggregator = StoreManager.AggregatorStore.CreateObject(aggregatorDefinition.Aggregator);

            aggregator.Description = aggregatorDefinition.Description;
            aggregator.Name        = aggregatorDefinition.Name;
            aggregator.Aggregate   = aggregateManager.GetAggregateByName(aggregator.Name);

            return(aggregator);
        }
        private static IFieldAggregator[] CreateAggregators(FieldDefinition fieldDefinition, AggregateManager aggregateManager)
        {
            var fieldAggregators = new List <IFieldAggregator>();

            if (fieldDefinition.Aggregators?.Length > 0)
            {
                foreach (var aggregatorDefinition in fieldDefinition.Aggregators)
                {
                    fieldAggregators.Add(CreateAggregator(aggregatorDefinition, aggregateManager));
                }
            }

            return(fieldAggregators.ToArray());
        }
 private static FieldProcessorDefinition LoadFieldProcessorDefinition(FieldDefinition fieldDefinition, AggregateManager aggregateManager)
 {
     return(new FieldProcessorDefinition
     {
         FieldName = fieldDefinition.Name,
         Description = fieldDefinition.Description,
         Decoder = CreateDecoder(fieldDefinition),
         Rules = CreateRules(fieldDefinition),
         Aggregators = CreateAggregators(fieldDefinition, aggregateManager)
     });
 }
        private static RowProcessorDefinition LoadRowProcessorDefinition(RowDefinition rowDefinition, AggregateManager aggregateManager)
        {
            var fieldProcessorDefinitions = new List <FieldProcessorDefinition>();

            if (rowDefinition != null)
            {
                foreach (var fieldDefinition in rowDefinition.Fields)
                {
                    var fieldProcessorDefinition = LoadFieldProcessorDefinition(fieldDefinition, aggregateManager);
                    fieldProcessorDefinitions.Add(fieldProcessorDefinition);
                }
            }

            return(new Models.RowProcessorDefinition
            {
                FieldProcessorDefinitions = fieldProcessorDefinitions.ToArray()
            });
        }
        private static Dictionary <string, DataRowProcessorDefinition> LoadRowProcessorDefinitions(Datas datasDefinitions, AggregateManager aggregateManager)
        {
            var result = new Dictionary <string, DataRowProcessorDefinition>();

            foreach (var rowDefinition in datasDefinitions.Rows)
            {
                var fieldProcessorDefinitions = LoadRowProcessorDefinition(rowDefinition, aggregateManager);
                if (result.ContainsKey(rowDefinition.DataType))
                {
                    throw new InvalidOperationException($"DataType '{rowDefinition.DataType}' is duplicated");
                }

                result[rowDefinition.DataType] = new DataRowProcessorDefinition
                {
                    RowProcessorDefinition = fieldProcessorDefinitions
                };
            }

            return(result);
        }