/// <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]); } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// /// </summary> /// <param name="parent"></param> /// <returns></returns> public List <TagGroup> GetGroups(TagGroup parent) { return(Groups.Values.Where(e => e.Parent == parent).ToList()); }