public List <GUTag> QueryTagParent(GUTag tag) { //AssertValid(tag); 由于有两个视图,可能会用一个已经失效的GUTag进行查询。 tag = QueryTag(tag.Id); if (null == tag) { return(new List <GUTag>()); } if (tag.Id == StaticCfg.Ins.DefaultTagID) { return(new List <GUTag>()); } List <GUTag> ret = new List <GUTag>(); //如果有ParentID,直接返回 if (tag.PId != null) { GUTag ptag = QueryTag(tag.PId); ret.Add(ptag); } return(ret); }
public int Export(string exportFile) { using (StreamWriter w = new StreamWriter(exportFile)) { List <GUTag> all = new List <GUTag>(); SQLiteCommand q = new SQLiteCommand(@"SELECT * FROM Tags", Conn); using (SQLiteDataReader r = q.ExecuteReader()) { while (r.Read()) { GUTag tag = ReadGUTagFromR(r); if (tag != null) { all.Add(tag); } } } all.Sort((x, y) => x.Id.CompareTo(y.Id)); foreach (GUTag j in all) { w.WriteLine(JsonConvert.SerializeObject(j)); } } return(0); }
public int QueryChildrenCount(GUTag tag) { //AssertValid(tag); GUTag tmp = QueryTag(tag.Id); return(tmp == null ? 0 : tmp.Children.Count); }
public bool IsSame(GUTag other) { if (other.Id != Id) { return(false); } if (other.PId != PId) { return(false); } if (other.Alias.Count != Alias.Count) { return(false); } if (other.Children.Count != Children.Count) { return(false); } for (int i = 0; i < Alias.Count; i++) { if (other.Alias[i] != Alias[i]) { return(false); } } for (int i = 0; i < Children.Count; i++) { if (other.Children[i] != Children[i]) { return(false); } } return(true); }
private static GUTag ReadGUTagFromR(SQLiteDataReader r) { GUTag tag = new GUTag(); //0. ID tag.Id = r.GetGuid(0); //1. Title tag.AddAlias(r.GetString(1)); //2. Alias string alias = r.GetString(2); string[] aliasList = alias.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (string a in aliasList) { tag.AddAlias(a); } //3. PID tag.PId = r.GetGuid(3); //4. Children string chilrend = r.GetString(4); string[] childList = chilrend.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (string c in childList) { tag.AddChild(Guid.Parse(c)); } return(tag); }
public int QueryChildrenCount(GUTag tag) { //AssertValid(tag); GUTag tmp = id2Gutag[tag.Id] as GUTag; return(tmp == null ? 0 : tmp.Children.Count); }
public GUTag ChangeTitle(GUTag tag, string newTitle) { AssertValid(tag); tag.ChangeTitle(newTitle); Save(); return(tag); }
public void RemoveChild(GUTag c) { if (Children.Contains(c.Id)) { Children.Remove(c.Id); } }
////////////////////////////////////////////////////////// public GUTag NewTag(string stag) { GUTag tag = new GUTag(stag); AddToHash(tag); return(tag); }
public int RemoveTag(GUTag tag) { AssertValid(tag); RemoveParentsRef(tag); id2Gutag.Remove(tag.Id); Save(tag); return(ITagDBConst.R_OK); }
private void RemoveParentsRef(GUTag child) { AssertValid(child); foreach (GUTag j in id2Gutag.Values) { j.RemoveChild(child); } }
public GUTag NewTag(string title) { GUTag tag = new GUTag(title); SaveAndUpdateCache(tag); //ChangeNotify();//这个地方可以不用notify,在设置父子关系的时候再notify return(tag); }
//将child原来所有parent删除,并与新的parent建立关系 public int ResetParent(GUTag parent, GUTag child) { AssertValid(parent); AssertValid(child); RemoveParentsRef(child); SetParent(parent, child); Save(parent); return(ITagDBConst.R_OK); }
private void RemoveFromHash(GUTag j) { AssertValid(j); id2TagCache?.Remove(j.Id); DelSqlDB(j); //AllTagSet.Remove(j); }
private void SaveAndUpdateCache(GUTag j) { //Debug.Assert(id2Gutag[j.Id] == null); if (id2TagCache != null) { id2TagCache[j.Id] = j; } AddUptSqlDB(j); }
//修改Child节点的位置(direct=-1:下移一个,1:上移一个) public void ChangePos(GUTag child, int direct) { int idx = Children.IndexOf(child.Id); int newIdx = idx + direct; if (newIdx >= 0 && newIdx < Children.Count) { Children.RemoveAt(idx); Children.Insert(newIdx, child.Id); } }
public int MergeAlias(GUTag mainTag, GUTag aliasTag) { AssertValid(mainTag); AssertValid(aliasTag); RemoveFromHash(aliasTag); mainTag.Merge(aliasTag); AddToHash(mainTag); //allTag.Add(tag2, tmp1);//别名也需要快速索引 Save(); return(ITagDBConst.R_OK); }
private void RemoveChild(GUTag child) { AssertValid(child); GUTag pTag = QueryTag(child.PId); if (pTag != null) { pTag.RemoveChild(child); AddUptSqlDB(pTag); } child.PId = Guid.Empty; }
public List <string> QueryTagAlias(GUTag tag) { //AssertValid(tag); if (id2Gutag[tag.Id] as GUTag != tag) { return(new List <string>()); } else { return(tag.Alias); } }
public void Merge(GUTag other) { foreach (string a in other.Alias) { AddAlias(a); } foreach (Guid c in other.Children) { AddChild(c); } //foreach (string p in tag.Parents) AddParent(p); }
public void DelSqlDB(GUTag tag) { if (delCmd == null) { delCmd = new SQLiteCommand(@"DELETE FROM Tags where (ID = @ID)", Conn); delCmd.Parameters.AddRange(new[] { new SQLiteParameter("@ID", DbType.Guid), }); } delCmd.Parameters[0].Value = tag.Id; delCmd.ExecuteNonQuery(); }
public bool Get(GUTag tag) { object o = switchs[tag]; if (o == null) { return(true); } else { return((bool)o); } }
public int MergeAlias(GUTag mainTag, GUTag aliasTag) { AssertValid(mainTag); AssertValid(aliasTag); mainTag = QueryTag(mainTag.Id); aliasTag = QueryTag(aliasTag.Id); RemoveFromHash(aliasTag); mainTag.Merge(aliasTag); SaveAndUpdateCache(mainTag); //allTag.Add(tag2, tmp1);//别名也需要快速索引 ChangeNotify(); return(ITagDBConst.R_OK); }
public int ChangeChildPos(GUTag tag, int direct) { AssertValid(tag); List <GUTag> parents = QueryTagParent(tag); Debug.Assert(parents.Count == 1); if (parents.Count == 1) { GUTag parent = parents[0]; parent.ChangePos(tag, direct); Save(tag); } return(ITagDBConst.R_OK); }
public GUTag ChangeTitle(GUTag tag, string newTitle) { tag = QueryTag(tag.Id); if (tag == null) { return(null); } AssertValid(tag); tag.ChangeTitle(newTitle); AddUptSqlDB(tag); ChangeNotify(); return(tag); }
public List <string> QueryTagAlias(GUTag tag) { //AssertValid(tag); tag = QueryTag(tag.Id); if (tag == null) { return(new List <string>()); } else { return(tag.Alias); } }
public int RemoveTag(GUTag tag) { tag = QueryTag(tag.Id); if (tag == null) { return(ITagDBConst.R_OK); } AssertValid(tag); RemoveChild(tag); id2TagCache?.Remove(tag.Id); DelSqlDB(tag); ChangeNotify(); return(ITagDBConst.R_OK); }
//解除原来child所有parent,并与新的parent建立关系 public int ResetParent(GUTag parent, GUTag child) { parent = QueryTag(parent.Id); child = QueryTag(child.Id); if (parent == null || child == null) { return(ITagDBConst.R_OK); } AssertValid(parent); AssertValid(child); RemoveChild(child); SetParent(parent, child); AddUptSqlDB(parent); ChangeNotify(); return(ITagDBConst.R_OK); }
public static JsonTagDB Load() { string jFile = CfgPath.TagDBPath_Json; JsonTagDB db = new JsonTagDB(); if (File.Exists(jFile)) { string[] lns = File.ReadAllLines(jFile); foreach (string ln in lns) { GUTag j = JsonConvert.DeserializeObject <GUTag>(ln); db.AddToHash(j); } } return(db); }
////////////////////////////////////////////////////////// public int SetParent(GUTag parent, GUTag child) { //添加的tag必须是有效节点 AssertValid(parent); AssertValid(child); GUTag pTag = id2Gutag[parent.Id] as GUTag; GUTag cTag = id2Gutag[child.Id] as GUTag; //保护性检查,防止调用无效 if (pTag != null && cTag != null) { pTag.AddChild(cTag); Save(pTag); //Save(child); parent保存实际上已经保存所有了,这儿就不需要保存了。 } return(ITagDBConst.R_OK); }