private async Task ProcessCollectionsToClient(HttpContext context, ModelFromClient fromClient, ModelToClient model)
        {
            if (fromClient.root.children != null && fromClient.root.children.Count > 0)
            {
                if (model.refreshAll)
                {
                    model.collections = null;
                }
                if (model.collections == null)
                {
                    await ProcessCollectionsFromClient(context, fromClient, model);
                }
                foreach (ModelFromClientCollection clientCol in fromClient.root.children)
                {
                    BusinessCollectionBase col = await Collection(clientCol.path);

                    List <ModelToClient> elements     = model.collections[clientCol.path];
                    ModelToClient        currentModel = null;

                    foreach (BusinessBase obj in col)
                    {
                        currentModel = elements.Find(element => element.keyObject == obj.Key);

                        await obj.ProcessResponseInternalElement(context, clientCol, currentModel);
                    }
                }
            }
        }
        public virtual async Task CopyTo(BusinessCollectionBase colTarget)
        {
            await EnsureList();

            foreach (BusinessBase objOrigen in this)
            {
                bool         isNew     = false;
                BusinessBase objTarget = colTarget.Search(objOrigen);

                if (objTarget == null)
                {
                    isNew     = true;
                    objTarget = colTarget.CreateNew();
                }

                objOrigen.CopyTo(objTarget, null);

                if (isNew)
                {
                    colTarget.AddActiveObject();
                }
            }

            colTarget.CreateNew();
        }
        private async Task ProcessCollectionsFromClient(HttpContext context, ModelFromClient fromClient, ModelToClient model)
        {
            if (fromClient.root.children != null && fromClient.root.children.Count > 0)
            {
                model.collections = new Dictionary <string, List <ModelToClient> >(fromClient.root.children.Count);

                foreach (ModelFromClientCollection clientCol in fromClient.root.children)
                {
                    BusinessCollectionBase col = await Collection(clientCol.path);

                    List <ModelToClient> elements = new List <ModelToClient>(col.Count);
                    ModelFromClientData  clientElement;

                    foreach (BusinessBase obj in col)
                    {
                        clientElement = null;

                        if (clientCol.elements != null && !model.refreshAll)
                        {
                            clientElement = clientCol.elements.Find(element => obj.Key == element.key);
                        }

                        elements.Add(await obj.ProcessRequestInternalElement(context, clientCol, clientElement, fromClient.action));
                    }

                    model.collections.Add(clientCol.path, elements);
                }
            }
        }
        public virtual async Task <BusinessCollectionBase> Collection(string collectionName)
        {
            BusinessCollectionBase col = NotEnsuredCollection(collectionName);

            await col.EnsureList();

            return(col);
        }
        public BusinessCollectionFiltered(BusinessCollectionBase col, string filterName)
        {
            filtered = new BusinessCollectionFilteredEnumerator(col, filterName);

            while (filtered.MoveNext())
            {
                Count++;
            }
            filtered.Reset();
        }
        public virtual BusinessCollectionBase NotEnsuredCollection(string collectionName)
        {
            BusinessCollectionBase col = null;

            try
            {
                col = relatedCollections[collectionName];
                if (col == null)
                {
                    throw new Exception("Not possible.");
                }
            }
            catch
            {
                throw new ArgumentException("Collection " + collectionName + " not defined in " + this.ObjectName + ".");
            }

            return(col);
        }
 public BusinessCollectionFilteredEnumerator(BusinessCollectionBase col, string filterName)
 {
     _col        = col;
     _filterName = filterName;
     Reset();
 }