Exemplo n.º 1
0
 /// <summary>
 /// 检查并添加组
 /// </summary>
 /// <param name="groupName">组名称,多级组之间通过"."分割</param>
 public TagGroup CheckAndAddGroup(string groupName)
 {
     if (string.IsNullOrEmpty(groupName))
     {
         return(null);
     }
     if (!Groups.ContainsKey(groupName))
     {
         TagGroup parent = null;
         if (groupName.LastIndexOf(".") > 0)
         {
             string sparentName = groupName.Substring(0, groupName.LastIndexOf("."));
             parent = CheckAndAddGroup(sparentName);
         }
         TagGroup tg = new TagGroup()
         {
             Parent = parent, Name = groupName
         };
         Groups.Add(tg.FullName, tg);
         return(tg);
     }
     else
     {
         return(Groups[groupName]);
     }
 }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="chileGroupName"></param>
        /// <returns></returns>
        public bool HasChildGroup(TagGroup parent, string childGroupName)
        {
            var vss = Groups.Values.Where(e => e.Parent == parent).Select(e => e.Name);

            if (vss.Count() > 0 && vss.Contains(childGroupName))
            {
                return(true);
            }
            return(false);
        }
Exemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="group"></param>
        /// <returns></returns>
        public static XElement SaveToXML(this TagGroup group)
        {
            XElement xe = new XElement("TagGroup");

            xe.SetAttributeValue("Name", group.Name);
            if (group.Parent != null)
            {
                xe.SetAttributeValue("Parent", group.Parent.FullName);
            }
            xe.SetAttributeValue("FullName", group.FullName);
            return(xe);
        }
Exemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="parent"></param>
        /// <returns></returns>
        public List <TagGroup> GetAllChildGroups(TagGroup parent)
        {
            List <TagGroup> re   = new List <TagGroup>();
            var             grps = GetGroups(parent);

            re.AddRange(grps);
            foreach (var vv in grps)
            {
                re.AddRange(GetAllChildGroups(vv));
            }
            return(re);
        }
Exemplo n.º 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="group"></param>
        /// <returns></returns>
        public static XElement SaveToXML(this TagGroup group)
        {
            XElement xe = new XElement("TagGroup");

            xe.SetAttributeValue("Name", group.Name);
            if (!string.IsNullOrEmpty(group.Description))
            {
                xe.SetAttributeValue("Description", group.Description);
            }
            if (group.Parent != null)
            {
                xe.SetAttributeValue("Parent", group.Parent.FullName);
            }
            xe.SetAttributeValue("FullName", group.FullName);
            return(xe);
        }
Exemplo n.º 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="path"></param>
        public RealDatabase Load(string path)
        {
            RealDatabase db = new RealDatabase();

            if (System.IO.File.Exists(path))
            {
                XElement xe = XElement.Load(path);

                db.Name    = xe.Attribute("Name").Value;
                db.Version = xe.Attribute("Version").Value;

                if (xe.Element("Tags") != null)
                {
                    foreach (var vv in xe.Element("Tags").Elements())
                    {
                        var tag = vv.LoadTagFromXML();
                        db.Tags.Add(tag.Id, tag);
                    }
                }

                Dictionary <string, TagGroup> groups  = new Dictionary <string, TagGroup>();
                Dictionary <TagGroup, string> parents = new Dictionary <TagGroup, string>();
                if (xe.Element("Groups") != null)
                {
                    foreach (var vv in xe.Element("Groups").Elements())
                    {
                        TagGroup group = new TagGroup();
                        group.Name = vv.Attribute("Name").Value;
                        string parent = vv.Attribute("Parent") != null?xe.Attribute("Parent").Value : "";

                        string fullName = vv.Attribute("FullName").Value;

                        if (!groups.ContainsKey(fullName))
                        {
                            groups.Add(fullName, group);
                        }

                        parents.Add(group, parent);
                    }
                }
                db.Groups = groups;

                foreach (var vv in parents)
                {
                    if (!string.IsNullOrEmpty(vv.Value) && db.Groups.ContainsKey(vv.Value))
                    {
                        vv.Key.Parent = db.Groups[vv.Value];
                    }
                }
                if (xe.Attribute("MaxId") != null)
                {
                    db.MaxId = int.Parse(xe.Attribute("MaxId").Value);
                }
                else
                {
                    db.MaxId = db.Tags.Keys.Max();
                }
            }
            this.Database = db;
            return(db);
        }
Exemplo n.º 7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="path"></param>
        public RealDatabase Load(string path)
        {
            RealDatabase db = new RealDatabase();

            if (System.IO.File.Exists(path))
            {
                db.UpdateTime = new System.IO.FileInfo(path).LastWriteTimeUtc.ToString();

                XElement xe = XElement.Load(path);

                db.Name    = xe.Attribute("Name").Value;
                db.Version = xe.Attribute("Version").Value;

                Dictionary <string, TagGroup> groups  = new Dictionary <string, TagGroup>();
                Dictionary <TagGroup, string> parents = new Dictionary <TagGroup, string>();
                if (xe.Element("Groups") != null)
                {
                    foreach (var vv in xe.Element("Groups").Elements())
                    {
                        TagGroup group = new TagGroup();
                        group.Name = vv.Attribute("Name").Value;
                        string parent = vv.Attribute("Parent") != null?vv.Attribute("Parent").Value : "";

                        string fullName = vv.Attribute("FullName").Value;

                        if (vv.Attribute("Description") != null)
                        {
                            group.Description = vv.Attribute("Description").Value;
                        }

                        if (!groups.ContainsKey(fullName))
                        {
                            groups.Add(fullName, group);
                        }

                        parents.Add(group, parent);
                    }
                }
                db.Groups = groups;

                foreach (var vv in parents)
                {
                    if (!string.IsNullOrEmpty(vv.Value) && db.Groups.ContainsKey(vv.Value))
                    {
                        vv.Key.Parent = db.Groups[vv.Value];
                    }
                }

                if (xe.Element("Tags") != null)
                {
                    //Parallel.ForEach(xe.Element("Tags").Elements(), (vv) => {
                    //    var tag = vv.LoadTagFromXML();
                    //    lock (db.Tags)
                    //        db.Tags.Add(tag.Id, tag);
                    //});
                    foreach (var vv in xe.Element("Tags").Elements())
                    {
                        var tag = vv.LoadTagFromXML();
                        db.Tags.Add(tag.Id, tag);
                    }

                    db.BuildNameMap();
                    db.BuildGroupMap();
                }

                if (xe.Attribute("MaxId") != null)
                {
                    db.MaxId = int.Parse(xe.Attribute("MaxId").Value);
                }
                else
                {
                    if (db.Tags.Count > 0)
                    {
                        db.MaxId = db.Tags.Keys.Max();
                    }
                }

                db.MinId = db.Tags.Count > 0?db.Tags.Keys.Min():0;
            }
            db.IsDirty    = false;
            this.Database = db;
            return(db);
        }
Exemplo n.º 8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="parent"></param>
 /// <returns></returns>
 public List <TagGroup> GetGroups(TagGroup parent)
 {
     return(Groups.Values.Where(e => e.Parent == parent).ToList());
 }