public IRestResource GetFullResource(IDeferredItem <TItem> item, IDataTransaction dataTransaction)
        {
            IEngineRepository <TNav> navRepository = new NavigationCollectionRepository <TItem, TCollection, TNav>(item, _navTools.NavExpression, _navTools.Setter);

            var eventWrapper = new DataEventWrapper <TNav>(dataTransaction, navRepository);

            eventWrapper.TryWrapEvents(_navTools.RepoEvents);

            var context = new FullEngineContext <TNav>(eventWrapper.Transaction, eventWrapper.Repository, _subContext);

            return(new EngineRestCollection <TNav>(context));
        }
        public IRestCollection GetRestCollection()
        {
            IDataTransaction transaction = _dataSource.CreateTransaction();
            // TODO setup disposing of transaction

            IEngineRepository <TItem> repository = _dataSource.GetRepository <TItem>(transaction);

            var wrapper = new DataEventWrapper <TItem>(transaction, repository);

            wrapper.TryWrapEvents(_events);

            IEngineContext <TItem> context = new FullEngineContext <TItem>(wrapper.Transaction, wrapper.Repository, _subContext);

            return(new EngineRestCollection <TItem>(context));
        }
Exemplo n.º 3
0
        public IRestResource GetFullResource(IDeferredItem <TItem> item, IDataTransaction dataTransaction)
        {
            //TNav navItem = _navTools.NavExpression.Compile().Invoke(item.LoadedItem);
            //var itemRepository = new LoadedItemRepository<TNav>(navItem);
            IQueryableSingle <TNav> navigationQuery = item.Query.Select(_navTools.NavExpression).SingleDefferred();
            var itemRepository = new QueryableSingleRepository <TNav>(navigationQuery);

            var eventWrapper = new DataEventWrapper <TNav>(dataTransaction, itemRepository);

            eventWrapper.TryWrapEvents(_navTools.RepoEvents);

            var context         = new FullEngineContext <TNav>(eventWrapper.Transaction, eventWrapper.Repository, _engineSubContext);
            var deferredNavItem = new RepositoryDeferredItem <TNav>(itemRepository);

            return(new EngineRestItem <TNav>(context, deferredNavItem));
        }
        public IRestCollection GetRestCollection(Stem <TItem> stem)
        {
            IDataTransaction transaction = _dataSource.CreateTransaction();

            stem.OnDispose += delegate { transaction.Dispose(); };

            IEngineRepository <TItem> repository = _dataSource.GetRepository <TItem>(transaction);

            var wrapper = new DataEventWrapper <TItem>(transaction, repository);

            wrapper.TryWrapEvents(new StemDataChangeEvents <TItem>(stem));

            var subContext = new StemsEngineSubContext <TItem>(stem);
            var context    = new FullEngineContext <TItem>(wrapper.Transaction, wrapper.Repository, subContext);

            return(new EngineRestCollection <TItem>(context));
        }
Exemplo n.º 5
0
        public async Task SetValueAsync(IDeferredItem <TItem> item, object deserializedValue, IDataTransaction dataTransaction)
        {
            IEngineRepository <TNav> navRepository = new NavigationItemRepository <TItem, TNav>(item, _navTools.NavExpression, _navTools.Setter);

            var itemData = new RestItemData(deserializedValue);

            var navLocatorCreator = new NavigationItemLocatorCreator <TNav>(_subContext);
            DeferredItemBase <TNav> deferredItem = await navLocatorCreator.LocateOrCreateItemAsync(navRepository, itemData, item.LoadAsync);

            try
            {
                IDataTransaction transaction  = new VoidTransaction(); // we commit the transaction in the parent. TODO optional save-as-you-go ?
                var            navContext     = new FullEngineContext <TNav>(transaction, navRepository, _subContext);
                var            navEngineItem  = new EngineRestItem <TNav>(navContext, deferredItem);
                Acknowledgment acknowledgment = await navEngineItem.EditAsync(itemData);
            }
            catch (RestApiException ex)
            {
                throw new SubWriterException(ex, item);
            }
        }
        public async Task SetValueAsync(IDeferredItem <TItem> item, object deserializedValue, IDataTransaction dataTransaction)
        {
            IEngineRepository <TNav> navRepository = new NavigationCollectionRepository <TItem, TCollection, TNav>(item, _navTools.NavExpression, _navTools.Setter);

            IDataTransaction transaction = new VoidTransaction(); // we commit the transaction in the parent. TODO optional save-as-you-go ?
            var navContext = new FullEngineContext <TNav>(transaction, navRepository, _subContext);

            var navLocatorCreator = new NavigationItemLocatorCreator <TNav>(_subContext);

            IEnumerable deserializedCollection = (IEnumerable)deserializedValue;  // todo null ?

            foreach (object deserializedItem in deserializedCollection)
            {
                var itemData = new RestItemData(deserializedItem);

                DeferredItemBase <TNav> deferredItem = await navLocatorCreator.LocateOrCreateItemAsync(navRepository, itemData, item.LoadAsync);

                var            navEngineItem  = new EngineRestItem <TNav>(navContext, deferredItem);
                Acknowledgment acknowledgment = await navEngineItem.EditAsync(itemData);
            }

            // TODO: remove items that were not located?
        }