private void GenerateRootNode()
 {
     if (children != null)
     {
         return;
     }
     this._entity = null;
     this.parent  = null;
     CreateChildNodes();
 }
        /// <summary>
        /// 获取指定目录对象的完整(Id)路径
        /// </summary>
        /// <param name="folder"></param>
        /// <returns></returns>
        public string GetFolderFullPath(WindowFolderEntity folder)
        {
            if (folder == null)
            {
                Debug.Assert(false, "folder 为 null");
                throw new ArgumentNullException();
            }

            return(GetFolderFullPath(folder.Id).TrimStart('/'));
        }
        /// <summary>
        /// 获取用于存储在XML索引文件中的索引节点
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        private XElement GetArchiveIndex(WindowFolderEntity entity)
        {
            Debug.Assert(entity != null, "entity 为 null");

            //文件夹在索引文件中可直接ToXml存储
            return(XElement.Parse(entity.ToXml()));

            //XElement ele = new XElement("Entity",
            //    new XAttribute("Id", entity.Id),
            //    new XAttribute("Name", entity.Name),
            //    new XAttribute("ParentId", entity.Parent));

            //return ele;
        }
示例#4
0
 private void btnOK_Click(object sender, EventArgs e)
 {
     if (this.DoValidate() == false)
     {
         return;
     }
     if (this.FormFolderEntity == null)
     {
         this.FormFolderEntity        = new WindowFolderEntity();
         this.FormFolderEntity.Parent = _parentId;
     }
     this.FormFolderEntity.Name = txtName.Text;
     WindowArchive.Instance.Commit(this.FormFolderEntity);
     this.DialogResult = DialogResult.OK;
     this.Close();
 }
        /// <summary>
        /// 提交
        /// 根据Id进行判断,如果已存在,调用update,如果不存在,调用add
        /// </summary>
        /// <param name="dataEntity"></param>
        public void Commit(WindowFolderEntity entity)
        {
            Debug.Assert(entity != null, "FormFolderEntity 为 null");

            if (entity == null)
            {
                return;
            }

            if (FolderExistById(entity.Id))
            {
                UpdateFolder(entity);
            }
            else
            {
                AddFolder(entity);
            }
        }
        /// <summary>
        /// 添加文件夹
        /// </summary>
        /// <param name="entity"></param>
        public void AddFolder(WindowFolderEntity entity)
        {
            Debug.Assert(entity != null, "FormFolderEntity 为 null");

            if (entity == null)
            {
                return;
            }

            //添加索引信息
            _indexXml.XPathSelectElement(XPATH_Index_Folder).Add(GetArchiveIndex(entity));

            SaveIndexFile();

            //发布事件
            WindowFolderEventArgs args = new WindowFolderEventArgs(entity);

            _eventAggregator.GetEvent <WindowFolderAddedEvent>().Publish(args);
        }
        //原来是通过返回null,如传入了一个空串,来表示获取根目录(根目录实际上不是一个目录)
        //现在改进为查不到抛异常,是不是根目录外部判断处理,不通过返回null隐式的表达其它含义
        /// <summary>
        /// 获取一个文件夹实体
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public WindowFolderEntity GetFolderEntity(string id)
        {
            if (String.IsNullOrEmpty(id))
            {
                Debug.Assert(false, "GetFolderEntity 传入的 id 为空");
                return(null);
            }

            XElement element = _indexXml.XPathSelectElement(String.Format(XPATH_Index_SelectFolder, id));

            if (element == null)
            {
                Debug.Assert(false, "GetFolderEntity 失败,返回了 null");
            }

            WindowFolderEntity formFolderEntity = new WindowFolderEntity();

            formFolderEntity.FromXml(element.ToString());
            return(formFolderEntity);
        }
        /// <summary>
        /// 获取隶属于指定目录的子目录集合
        /// </summary>
        /// <param name="folderId"></param>
        /// <returns></returns>
        public WindowFolderEntityCollection GetFolderCollection(string folderId)
        {
            if (folderId == null)
            {
                folderId = String.Empty;
            }

            WindowFolderEntityCollection collection = new WindowFolderEntityCollection();

            foreach (XElement element in
                     _indexXml.XPathSelectElements(String.Format(XPATH_Index_SelectFolder_ByParentId, folderId)))
            {
                WindowFolderEntity formFolderEntity = new WindowFolderEntity();
                //FormFolderEntity在往Index文件里存的时候是直接ToXml的
                //所以此处直接FromXml即可
                formFolderEntity.FromXml(element.ToString());

                collection.Add(formFolderEntity);
            }

            return(collection);
        }
        /// <summary>
        /// 此方法供DeleteFolder调用
        /// 作用是避免每次递归都SaveXml
        /// </summary>
        /// <param name="id"></param>
        /// <param name="deleteForm"></param>
        private void ProcessFolderDelete(string id)
        {
            WindowFolderEntity folderEntity = GetFolderEntity(id);

            Debug.Assert(folderEntity != null, "folderEntity 为 null");

            //递归当前目录下所有子目录,删除之
            WindowFolderEntityCollection folderCollection = GetFolderCollection(id);

            foreach (WindowFolderEntity folder in folderCollection)
            {
                ProcessFolderDelete(folder.Id);
            }

            //删除窗体
            foreach (XElement element in
                     from c in _indexXml.XPathSelectElements(String.Format(XPATH_Index_SelectWindow_ByFolderId, id)) select c)
            {
                string formId = element.Attribute("Id").Value;

                //移除索引信息
                element.Remove();

                //移除实体文件
                _packageService.Current.DeleteFile(Path.Combine(Constant.PACKAGE_WINDOW_FOLDER, formId));

                //移除缓存
                _cachingService.Remove(formId);
            }

            //从索引文件中删除本目录
            _indexXml.XPathSelectElement(String.Format(XPATH_Index_SelectFolder, id)).Remove();

            //发布事件
            WindowFolderEventArgs args = new WindowFolderEventArgs(folderEntity);

            _eventAggregator.GetEvent <WindowFolderRemovedEvent>().Publish(args);
        }
示例#10
0
        /// <summary>
        /// 更新一个文件夹
        /// </summary>
        /// <param name="formFolderEntity"></param>
        public void UpdateFolder(WindowFolderEntity entity)
        {
            Debug.Assert(entity != null, "FormFolderEntity 为 null");

            if (entity == null)
            {
                return;
            }

            //更新索引信息
            XElement element = _indexXml.XPathSelectElement(String.Format(XPATH_Index_SelectFolder, entity.Id));

            Debug.Assert(element != null, "更新窗体文件夹索引时未找到指定文件夹的索引记录");
            if (element != null)
            {
                element.ReplaceWith(GetArchiveIndex(entity));
                SaveIndexFile();

                //发布事件
                WindowFolderEventArgs args = new WindowFolderEventArgs(entity);
                _eventAggregator.GetEvent <WindowFolderUpdatedEvent>().Publish(args);
            }
        }
示例#11
0
 public System.Collections.IEnumerable GetChildren(TreePath treePath)
 {
     if (treePath.IsEmpty())
     {
         foreach (WindowFolderEntity folder in _windowComponentService.GetFolderCollection())
         {
             FolderItem item = new FolderItem(folder);
             yield return(item);
         }
         foreach (WindowEntity form in _windowComponentService.GetWindowList(String.Empty))
         {
             FormItem item = new FormItem(form, null);
             yield return(item);
         }
     }
     else
     {
         List <GlobalFormElementTreeItemBase> items  = new List <GlobalFormElementTreeItemBase>();
         GlobalFormElementTreeItemBase        parent = treePath.LastNode as GlobalFormElementTreeItemBase;
         if (parent != null)
         {
             if (parent is FolderItem)
             {
                 FolderItem         folderItem       = (FolderItem)parent;
                 WindowFolderEntity formFolderEntity = folderItem.Folder;
                 if (formFolderEntity != null)
                 {
                     foreach (WindowEntity formEntityItem in _windowComponentService.GetWindowList(formFolderEntity.Id))
                     {
                         GlobalFormElementTreeItemBase elementItem = new FormItem(formEntityItem, parent);
                         items.Add(elementItem);
                     }
                 }
             }
             WindowEntity formEntity = parent.Entity as WindowEntity;
             if (formEntity != null)
             {
                 foreach (UIElement formElementItem in  formEntity.GetFormElement())
                 {
                     if (this.AllowFormElementControlType.Allowable(formElementItem))
                     {
                         GlobalFormElementTreeItemBase elementItem = new FormElementItem(formElementItem, parent);
                         items.Add(elementItem);
                     }
                     else
                     {
                         foreach (UIElement innerElement in formElementItem.GetInnerElement())
                         {
                             if (this.AllowFormElementControlType.Allowable(innerElement))
                             {
                                 GlobalFormElementTreeItemBase elementItem = new FormElementItem(formElementItem, parent);
                                 items.Add(elementItem);
                                 break;
                             }
                         }
                     }
                 }
             }
             UIElement formElement = parent.Entity as UIElement;
             if (formElement != null)
             {
                 foreach (UIElement formElementItem in formElement.GetInnerElement())
                 {
                     if (this.AllowFormElementControlType.Allowable(formElementItem) == false)
                     {
                         continue;
                     }
                     GlobalFormElementTreeItemBase elementItem = new FormElementItem(formElementItem, parent);
                     items.Add(elementItem);
                 }
             }
             foreach (GlobalFormElementTreeItemBase item in items)
             {
                 yield return(item);
             }
         }
         else
         {
             yield break;
         }
     }
 }
 public WindowFolderEventArgs(WindowFolderEntity folder)
 {
     _folder = folder;
 }
 public FolderItem(WindowFolderEntity entity)
     : base(null)
 {
     _entity = entity;
 }
 public string GetFolderFullPath(WindowFolderEntity folder)
 {
     return(_windowArchive.GetFolderFullPath(folder));
 }
示例#15
0
 public void DeleteFolder(WindowFolderEntity entity)
 {
     DeleteFolder(entity.Id);
 }
 public FolderAddressNode(WindowFolderEntity entity, FolderAddressNode parent)
 {
     _windowComponentService = ServiceUnity.Container.Resolve <IWindowComponentService>();
     this._entity            = entity;
     this.parent             = parent;
 }
 public FolderEntityIndex(WindowFolderEntity entity)
 {
     _folder      = entity;
     _initialized = true;
 }