示例#1
0
        public void AccessorCreatesNewObjectsThroughSlotBinding()
        {
            DataSource source = new DataSource("data");

            source.AddDataSet(new ItemSequenceDataSet(new IDataItem[] { new ListDataItem <object>(new object[] { 42, typeof(int) }, null, false) }, 2));

            IDataSourceResolver resolver = Mocks.StrictMock <IDataSourceResolver>();

            using (Mocks.Record())
            {
                Expect.Call(resolver.ResolveDataSource("data")).Repeat.Twice().Return(source);
            }

            using (Mocks.Playback())
            {
                ITypeInfo        type        = Reflector.Wrap(typeof(Holder <>));
                IConstructorInfo constructor = type.GetConstructors(BindingFlags.Instance | BindingFlags.Public)[0];
                ISlotInfo        valueSlot   = constructor.Parameters[0];
                ISlotInfo        typeSlot    = (IGenericParameterInfo)type.GenericArguments[0];

                DataBindingContext context = new DataBindingContext(new NullConverter());

                ObjectDataBinder binder = new ObjectDataBinder(type);
                binder.SetSlotBinder(valueSlot, new ScalarDataBinder(new DataBinding(0, null), "data"));
                binder.SetSlotBinder(typeSlot, new ScalarDataBinder(new DataBinding(1, null), "data"));

                IDataAccessor    accessor = binder.Register(context, resolver);
                List <IDataItem> items    = new List <IDataItem>(context.GetItems(true));
                Assert.Count(1, items);

                Holder <int> holder = (Holder <int>)accessor.GetValue(items[0]);
                Assert.AreEqual(42, holder.Value, "Should have set the value via the constructor parameter.");
            }
        }
示例#2
0
        public void AccessorObtainsAValueFromTheRow()
        {
            DataBinding      binding = new DataBinding(0, null);
            ScalarDataBinder binder  = new ScalarDataBinder(binding, "name");

            IDataSourceResolver resolver = Mocks.StrictMock <IDataSourceResolver>();
            DataBindingContext  context  = new DataBindingContext(new NullConverter());

            DataSource source = new DataSource("name");

            source.AddDataSet(new ItemSequenceDataSet(new IDataItem[]
            {
                new ScalarDataItem <int>(42, null, false),
                new ScalarDataItem <string>("42", null, false)
            }, 1));

            using (Mocks.Record())
            {
                Expect.Call(resolver.ResolveDataSource("name")).Return(source);
            }

            using (Mocks.Playback())
            {
                IDataAccessor accessor = binder.Register(context, resolver);
                Assert.IsTrue(context.DataSets.Contains(source), "The data sets list should contain the source that was resolved during binder registration.");

                List <IDataItem> items = new List <IDataItem>(context.GetItems(true));
                Assert.Count(2, items);

                Assert.AreEqual(42, accessor.GetValue(items[0]));
                Assert.AreEqual("42", accessor.GetValue(items[1]));
            }
        }
        /// <inheritdoc />
        protected override IDataAccessor RegisterImpl(DataBindingContext context, IDataSourceResolver resolver)
        {
            IDataSet dataSet = resolver.ResolveDataSource(sourceName);
            if (dataSet == null)
                throw new DataBindingException(String.Format("The data binder was unable to resolve a data source named '{0}'.", sourceName));

            return context.RegisterBinding(dataSet, binding);
        }
示例#4
0
        /// <inheritdoc />
        public IDataAccessor Register(DataBindingContext context, IDataSourceResolver resolver)
        {
            if (context == null)
                throw new ArgumentNullException("context");
            if (resolver == null)
                throw new ArgumentNullException("resolver");

            return RegisterImpl(context, resolver);
        }
示例#5
0
        /// <inheritdoc />
        protected override IDataAccessor RegisterImpl(DataBindingContext context, IDataSourceResolver resolver)
        {
            IDataSet dataSet = resolver.ResolveDataSource(sourceName);

            if (dataSet == null)
            {
                throw new DataBindingException(String.Format("The data binder was unable to resolve a data source named '{0}'.", sourceName));
            }

            return(context.RegisterBinding(dataSet, binding));
        }
        /// <inheritdoc />
        protected override IDataAccessor RegisterImpl(DataBindingContext context, IDataSourceResolver resolver)
        {
            var slotAccessors = new List<KeyValuePair<ISlotInfo,IDataAccessor>>(slotBinders.Count);

            foreach (KeyValuePair<ISlotInfo, IDataBinder> slotBinder in slotBinders)
            {
                IDataAccessor accessor = slotBinder.Value.Register(context, resolver);
                slotAccessors.Add(new KeyValuePair<ISlotInfo, IDataAccessor>(slotBinder.Key, accessor));
            }

            return new Accessor(type, slotAccessors, context.Converter);
        }
示例#7
0
        /// <inheritdoc />
        protected override IDataAccessor RegisterImpl(DataBindingContext context, IDataSourceResolver resolver)
        {
            var slotAccessors = new List <KeyValuePair <ISlotInfo, IDataAccessor> >(slotBinders.Count);

            foreach (KeyValuePair <ISlotInfo, IDataBinder> slotBinder in slotBinders)
            {
                IDataAccessor accessor = slotBinder.Value.Register(context, resolver);
                slotAccessors.Add(new KeyValuePair <ISlotInfo, IDataAccessor>(slotBinder.Key, accessor));
            }

            return(new Accessor(type, slotAccessors, context.Converter));
        }
示例#8
0
        /// <inheritdoc />
        public IDataAccessor Register(DataBindingContext context, IDataSourceResolver resolver)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (resolver == null)
            {
                throw new ArgumentNullException("resolver");
            }

            return(RegisterImpl(context, resolver));
        }
示例#9
0
        public void RegisterThrowsIfTheDataSourceCannotBeResolvedByName()
        {
            ScalarDataBinder binder = new ScalarDataBinder(new DataBinding(0, null), "name");

            IDataSourceResolver resolver = Mocks.StrictMock <IDataSourceResolver>();

            using (Mocks.Record())
            {
                Expect.Call(resolver.ResolveDataSource("name")).Return(null);
            }

            using (Mocks.Playback())
            {
                DataBindingContext context = new DataBindingContext(new NullConverter());
                Assert.Throws <DataBindingException>(delegate { binder.Register(context, resolver); });
            }
        }
示例#10
0
 /// <summary>
 /// Ctor: Accepts instances via constructor injection
 /// </summary>
 /// <param name="aggregateRepository">Instance of the AggregateRepository</param>
 /// <param name="dataSourceRepository">Instance of the DataSourceRepository</param>
 /// <param name="dataTypeRepository">Instance of the DataType Repository</param>
 /// <param name="importServiceResolver">Instance of the ImportServiceResolver</param>
 /// <param name="dataSourceResolver">Instance of the DataSourceResolver</param>
 public DataService(IAggregateRepository aggregateRepository, IDataSourceRepository dataSourceRepository, IDataTypeRepository dataTypeRepository, IImportServiceResolver importServiceResolver , IDataSourceResolver dataSourceResolver)
 {
     if (aggregateRepository == null)
         throw new ArgumentNullException("aggregateRepository", "No valid AggregateRepository supplied to DataService.");
     if (dataSourceRepository == null)
         throw new ArgumentNullException("dataSourceRepository", "No valid DataSourceRepository supplied to DataService.");
     if (dataTypeRepository == null)
         throw new ArgumentNullException("dataTypeRepository", "No valid DataTypeRepository supplied to DataService.");
     if (importServiceResolver == null)
         throw new ArgumentNullException("importServiceResolver", "No valid ImportServiceResolver supplied to DataService.");
     if (dataSourceResolver == null)
         throw new ArgumentNullException("dataSourceResolver", "No valid DataSourceResolver supplied to DataService.");
     _aggregateRepository = aggregateRepository;
     _dataSourceRepository = dataSourceRepository;
     _dataTypeRepository = dataTypeRepository;
     _importServiceResolver = importServiceResolver;
     _dataSourceResolver = dataSourceResolver;
 }
 public void Initialise()
 {
     //  Data Context and Repositories
     _db = new AggregateContext();
     _repository = new AggregateRepository(_db);
     _dataSourceRepository = new DataSourceRepository(_db);
     _dataTypeRepository = new DataTypeRepository(_db);     //  No parm, currently Enumeration
     //  DataSources and Resolver
     var renUkHelper = new RenUkHtmlHelper();
     _renUkDatasource = new RenUkDataSource(renUkHelper);
     var snhHelper = new SnhKmlHelper();
     _snhDataSource = new SnhDataSource(snhHelper);
     _dataSourceResolver = new DataSourceResolver(_snhDataSource, _renUkDatasource);
     //  Matching algorithm
     _coefficientAlgorithm = new DiceCoefficient();
     _similarityAlgorithm = new LcSubstr();
     _editDistanceAlgorithm = new LevenshteinEditDistance();
     _preProcess = new PreProcessor();
     _algorithm = new MatchingAlgorithm(_coefficientAlgorithm, 0.9f, _similarityAlgorithm, 0.9f,
                                        _editDistanceAlgorithm, 2, _preProcess);
     //  Mapper class
     _mapper = new ImportAggregateToAggregateMapper();
     //  Import Services and Resolver
     _renUkImportService = new RenUkImportService(_repository, _dataSourceRepository, _renUkDatasource, _algorithm, _mapper);
     _snhImportService = new SnhImportService(_repository, _dataSourceRepository, _snhDataSource, _algorithm,
         _mapper);
     _importServiceResolver = new ImportServiceResolver(_snhImportService, _renUkImportService);
 }
示例#12
0
 /// <summary>
 /// Implementation of <see cref="Register" />.
 /// </summary>
 /// <param name="context">The data binding context, not null.</param>
 /// <param name="resolver">The data source resolver, not null.</param>
 /// <returns>The data binding accessor.</returns>
 protected abstract IDataAccessor RegisterImpl(DataBindingContext context, IDataSourceResolver resolver);
示例#13
0
 /// <summary>
 /// Implementation of <see cref="Register" />.
 /// </summary>
 /// <param name="context">The data binding context, not null.</param>
 /// <param name="resolver">The data source resolver, not null.</param>
 /// <returns>The data binding accessor.</returns>
 protected abstract IDataAccessor RegisterImpl(DataBindingContext context, IDataSourceResolver resolver);