示例#1
0
 public MessageAmalgamator(IAmalgamator <MessageHeader> headerAmalgamator, IAmalgamator <MessageLearner> learnerAmalgamator, IAmalgamator <MessageLearnerDestinationandProgression> learnerDestinationandProgressionAmalgamator, IAmalgamationErrorHandler amalgamationErrorHandler)
     : base(Entity.Message, (x) => null, amalgamationErrorHandler)
 {
     _headerAmalgamator  = headerAmalgamator;
     _learnerAmalgamator = learnerAmalgamator;
     _learnerDestinationandProgressionAmalgamator = learnerDestinationandProgressionAmalgamator;
 }
        public LearnerAmalgamator(
            IAmalgamator <MessageLearnerProviderSpecLearnerMonitoring> providerSpecLearnerMonitoringAmalgamator,
            IAmalgamator <MessageLearnerLearnerEmploymentStatus> learnerEmploymentStatusAmalgamator,
            IAmalgamator <MessageLearnerLearnerHE> learnerHEAmalgamator,
            IRuleProvider ruleProvider,
            IAmalgamationErrorHandler amalgamationErrorHandler)
            : base(Entity.Learner, (x) => x.LearnRefNumber, amalgamationErrorHandler)
        {
            _providerSpecLearnerMonitoringAmalgamator = providerSpecLearnerMonitoringAmalgamator;
            _learnerEmploymentStatusAmalgamator       = learnerEmploymentStatusAmalgamator;
            _learnerHEAmalgamator = learnerHEAmalgamator;

            _standardRuleString          = ruleProvider.BuildStandardRule <string>();
            _standardRuleStringFirstItem = ruleProvider.BuildStandardRuleFirstItem <string>();
            _standardRuleLong            = ruleProvider.BuildStandardRule <long?>();
            _standardRuleDateTime        = ruleProvider.BuildStandardRule <DateTime?>();
            _addressRule  = ruleProvider.BuildAddressRule();
            _ulnRule      = ruleProvider.BuildUlnRule();
            _alsCostrule  = ruleProvider.BuildAlsCostRule();
            _postCodeRule = ruleProvider.BuildPostCodeRule();
            _learnerContactPreferenceCollectionRule = ruleProvider.BuildLearnerContactPreferenceCollectionRule();
            _lLDDandHealthProblemCollectionRule     = ruleProvider.BuildLLDDandHealthProblemCollectionRule();
            _learnerFAMAmalgamationRule             = ruleProvider.BuildLearnerFAMAmalgamationRule();
            _learningDeliveryRule = ruleProvider.BuildLearningDeliveryRule();
        }
 public LearnerHEAmalgamator(IAmalgamator <MessageLearnerLearnerHELearnerHEFinancialSupport> learnerHEFinancialSupportAmalgamator, IRuleProvider ruleProvider, IAmalgamationErrorHandler amalgamationErrorHandler)
     : base(Entity.LearnerHE, (x) => x.LearnRefNumber.ToString(), amalgamationErrorHandler)
 {
     _learnerHEFinancialSupportAmalgamator = learnerHEFinancialSupportAmalgamator;
     _standardRuleString = ruleProvider.BuildStandardRule <string>();
     _standardRuleLong   = ruleProvider.BuildStandardRule <long?>();
 }
        public LearnerEmploymentStatusAmalgamator(IAmalgamator <MessageLearnerLearnerEmploymentStatusEmploymentStatusMonitoring> learnerEmploymentStatusMonitoringAmalgamator, IRuleProvider ruleProvider, IAmalgamationErrorHandler amalgamationErrorHandler)
            : base(Entity.LearnerEmploymentStatus, (x) => x.DateEmpStatApp.ToString(), amalgamationErrorHandler)
        {
            _learnerEmploymentStatusMonitoringAmalgamator = learnerEmploymentStatusMonitoringAmalgamator;

            _standardRuleString   = ruleProvider.BuildStandardRule <string>();
            _standardRuleLong     = ruleProvider.BuildStandardRule <long?>();
            _standardRuleDateTime = ruleProvider.BuildStandardRule <DateTime?>();
        }
        /// <summary>
        /// Retrieves the amalgam for an amalgamator. This method uses a cache to prevent multiple amalgam instances.
        /// </summary>
        /// <param name="amalgamator">The amalgamator.</param>
        /// <returns>The amalgam.</returns>
        public static object GetAmalgam(this IAmalgamator amalgamator)
        {
            var property = amalgamator.TryGetConnectedProperty <object, AmalgamationTag>();

            if (property != null)
            {
                return(property.GetOrCreate(amalgamator.CreateAmalgam));
            }
            return(amalgamator.CreateAmalgam());
        }
示例#6
0
 public LearnerAmalgamator BuildAmalgamator(
     IAmalgamator <MessageLearnerLearnerEmploymentStatus> learnerEmploymentStatusAmalgamator = null,
     IAmalgamator <MessageLearnerLearnerHE> learnerHEAmalgamator = null,
     IRuleProvider ruleProvider = null,
     IAmalgamationErrorHandler amalgamationErrorHandler = null)
 {
     return(null);
     //new LearnerAmalgamator(
     //learnerEmploymentStatusAmalgamator ?? Mock.Of<IAmalgamator<MessageLearnerLearnerEmploymentStatus>>(),
     //learnerHEAmalgamator ?? Mock.Of<IAmalgamator<MessageLearnerLearnerHE>>(),
     //ruleProvider ?? Mock.Of<IRuleProvider>(),
     //amalgamationErrorHandler ?? Mock.Of<IAmalgamationErrorHandler>());
 }
示例#7
0
        protected T ApplyChildRule <TValue>(Expression <Func <T, TValue> > selector, IAmalgamator <TValue> amalgamator, IEnumerable <T> inputEntities, T entity)
        {
            var selectorFunc = selector.Compile();

            var inputValues = inputEntities.Where(e => e != null).Select(e => selectorFunc.Invoke(e)).ToList();

            if (inputValues.Any())
            {
                var value = amalgamator.Amalgamate(inputValues);

                var prop = (PropertyInfo)((MemberExpression)selector.Body).Member;
                prop.SetValue(entity, value);
            }

            return(entity);
        }
示例#8
0
 public HeaderAmalgamator(IAmalgamator <MessageHeaderSource> sourceAmalgamator, IAmalgamator <MessageHeaderCollectionDetails> collectionDetailsAmalgamator, IAmalgamationErrorHandler amalgamationErrorHandler)
     : base(Entity.Header, (x) => x.SourceFileName, amalgamationErrorHandler)
 {
     _sourceAmalgamator            = sourceAmalgamator;
     _collectionDetailsAmalgamator = collectionDetailsAmalgamator;
 }
        public TValue TestAmalgamatorSuccess <T, TValue>(Expression <Func <T, TValue> > propertySelector, TValue value, Func <T> constructor, IAmalgamator <T> amalgamator)
        {
            var selectorFunc = propertySelector.Compile();

            var inputModels      = GetInputModels(propertySelector, value, constructor);
            var amalgamatedModel = amalgamator.Amalgamate(inputModels);
            var result           = amalgamatedModel.GetType().GetProperty(((MemberExpression)propertySelector.Body).Member.Name).GetValue(amalgamatedModel);

            return((TValue)result);
        }
示例#10
0
 public T ApplyGroupedChildCollectionRuleCaller <TValue, TGroupBy>(Expression <Func <T, IEnumerable <TValue> > > selector, Expression <Func <TValue, TGroupBy> > groupBySelector, IAmalgamator <TValue> amalgamator, IEnumerable <T> inputEntities, T entity)
 {
     return(ApplyGroupedChildCollectionRule(selector, groupBySelector, amalgamator, inputEntities, entity));
 }
示例#11
0
 public T ApplyChildRuleCaller <TValue>(Expression <Func <T, TValue> > selector, IAmalgamator <TValue> amalgamator, IEnumerable <T> inputEntities, T entity)
 {
     return(ApplyChildRule(selector, amalgamator, inputEntities, entity));
 }
示例#12
0
 public AmalgamationService(IAmalgamator <Message> messageAmalgamator, IAmalgamationErrorHandler amalgamationErrorHandler)
 {
     _messageAmalgamator       = messageAmalgamator;
     _amalgamationErrorHandler = amalgamationErrorHandler;
 }
 /// <summary>
 /// Retrieves the amalgam for an amalgamator, as-casted to an instance type. This method calls <see cref="GetAmalgam"/>, which provides an amalgam cache.
 /// </summary>
 /// <typeparam name="T">The instance type to which to cast the amalgam.</typeparam>
 /// <param name="amalgamator">The amalgamator.</param>
 /// <returns>The amalgam.</returns>
 public static T As <T>(this IAmalgamator amalgamator) where T : class
 {
     return(amalgamator.GetAmalgam() as T);
 }
示例#14
0
        protected T ApplyGroupedChildCollectionRule <TValue, TGroupBy>(Expression <Func <T, IEnumerable <TValue> > > selector, Expression <Func <TValue, TGroupBy> > groupBySelector, IAmalgamator <TValue> amalgamator, IEnumerable <T> inputEntities, T entity)
        {
            if (inputEntities == null || inputEntities.Count() < 1)
            {
                return(default(T));
            }

            var selectorFunc = selector.Compile();
            var groupByFunc  = groupBySelector.Compile();

            if (!inputEntities.Any(e => e != null && selectorFunc.Invoke(e) != null))
            {
                return(default(T));
            }

            var amalgamatedGroups = inputEntities
                                    .Where(e => e != null)
                                    .Select(selectorFunc)
                                    .Where(x => x != null)
                                    .SelectMany(x => x)
                                    .GroupBy(groupByFunc)
                                    .Select(amalgamator.Amalgamate)
                                    .ToList();

            if (amalgamatedGroups.Any())
            {
                var prop = (PropertyInfo)((MemberExpression)selector.Body).Member;
                prop.SetValue(entity, amalgamatedGroups);
            }

            return(entity);
        }