示例#1
0
        /// <summary>
        /// Append new stream to the stream hierarchic.
        /// </summary>
        /// <param name="item">The item.</param>
        private void AppendStream(MarbleBase item)
        {
            string fullName = item.Name;

            #region Validation

            if (string.IsNullOrEmpty(fullName))
            {
                return; // TODO: error log
            }
            #endregion  // Validation

            string[]      path    = fullName.Split(new [] { "." }, StringSplitOptions.RemoveEmptyEntries);
            IVMDataStream parent  = _hierarchic.FirstOrDefault(node => node.Name == path[0]);
            var           request = new CreateStreamVMRequest(item, parent, path.ToArray(), 1);
            CreateStreamVMRecursive(request);
        }
示例#2
0
        /// <summary>
        /// Creates the stream VM recursively.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="parent">The parent.</param>
        /// <param name="path">The path.</param>
        /// <param name="level">The level.</param>
        /// <returns></returns>
        private void CreateStreamVMRecursive(CreateStreamVMRequest request)
        {
            IVMDataStream vmStream = null;

            if (request.Parent != null)
            {
                vmStream = request.Parent.Children.FirstOrDefault(node => node.Name == request.FullName);
            }

            if (vmStream != null)
            {
                // TODO: add keywords to existing paths
                if (request.IsLastLevel)
                {
                    return;
                }
            }
            else
            {
                ListCollectionView view     = new ListCollectionView(_flatData);
                string             fullName = request.FullName;
                view.Filter = obj => ((MarbleBase)obj).Name.StartsWith(fullName); // TBD: whether intermediate level should have an active ListCollectionView?

                string[] keywords = request.Item.Keywords;
                string   name     = request.Path[request.Level - 1];
                vmStream = new VMDataStream(name, fullName, keywords, view);

                if (request.Parent == null)
                {
                    _hierarchic.Add(vmStream);
                }
                if (request.IsLastLevel)
                {
                    return;
                }
            }

            request.IncreamentLevel(vmStream);
            CreateStreamVMRecursive(request);
        }