예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        public int QueryChildrenCount(GUTag tag)
        {
            //AssertValid(tag);
            GUTag tmp = QueryTag(tag.Id);

            return(tmp == null ? 0 : tmp.Children.Count);
        }
예제 #4
0
 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);
 }
예제 #5
0
        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);
        }
예제 #6
0
        public int QueryChildrenCount(GUTag tag)
        {
            //AssertValid(tag);
            GUTag tmp = id2Gutag[tag.Id] as GUTag;

            return(tmp == null ? 0 : tmp.Children.Count);
        }
예제 #7
0
 public GUTag ChangeTitle(GUTag tag, string newTitle)
 {
     AssertValid(tag);
     tag.ChangeTitle(newTitle);
     Save();
     return(tag);
 }
예제 #8
0
 public void RemoveChild(GUTag c)
 {
     if (Children.Contains(c.Id))
     {
         Children.Remove(c.Id);
     }
 }
예제 #9
0
        //////////////////////////////////////////////////////////
        public GUTag NewTag(string stag)
        {
            GUTag tag = new GUTag(stag);

            AddToHash(tag);
            return(tag);
        }
예제 #10
0
 public int RemoveTag(GUTag tag)
 {
     AssertValid(tag);
     RemoveParentsRef(tag);
     id2Gutag.Remove(tag.Id);
     Save(tag);
     return(ITagDBConst.R_OK);
 }
예제 #11
0
 private void RemoveParentsRef(GUTag child)
 {
     AssertValid(child);
     foreach (GUTag j in id2Gutag.Values)
     {
         j.RemoveChild(child);
     }
 }
예제 #12
0
        public GUTag NewTag(string title)
        {
            GUTag tag = new GUTag(title);

            SaveAndUpdateCache(tag);
            //ChangeNotify();//这个地方可以不用notify,在设置父子关系的时候再notify
            return(tag);
        }
예제 #13
0
 //将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);
 }
예제 #14
0
        private void RemoveFromHash(GUTag j)
        {
            AssertValid(j);

            id2TagCache?.Remove(j.Id);

            DelSqlDB(j);
            //AllTagSet.Remove(j);
        }
예제 #15
0
 private void SaveAndUpdateCache(GUTag j)
 {
     //Debug.Assert(id2Gutag[j.Id] == null);
     if (id2TagCache != null)
     {
         id2TagCache[j.Id] = j;
     }
     AddUptSqlDB(j);
 }
예제 #16
0
        //修改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);
            }
        }
예제 #17
0
 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);
 }
예제 #18
0
        private void RemoveChild(GUTag child)
        {
            AssertValid(child);
            GUTag pTag = QueryTag(child.PId);

            if (pTag != null)
            {
                pTag.RemoveChild(child);
                AddUptSqlDB(pTag);
            }
            child.PId = Guid.Empty;
        }
예제 #19
0
 public List <string> QueryTagAlias(GUTag tag)
 {
     //AssertValid(tag);
     if (id2Gutag[tag.Id] as GUTag != tag)
     {
         return(new List <string>());
     }
     else
     {
         return(tag.Alias);
     }
 }
예제 #20
0
 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);
 }
예제 #21
0
 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();
 }
예제 #22
0
        public bool Get(GUTag tag)
        {
            object o = switchs[tag];

            if (o == null)
            {
                return(true);
            }
            else
            {
                return((bool)o);
            }
        }
예제 #23
0
 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);
 }
예제 #24
0
        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);
        }
예제 #25
0
        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);
        }
예제 #26
0
        public List <string> QueryTagAlias(GUTag tag)
        {
            //AssertValid(tag);
            tag = QueryTag(tag.Id);
            if (tag == null)
            {
                return(new List <string>());
            }

            else
            {
                return(tag.Alias);
            }
        }
예제 #27
0
        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);
        }
예제 #28
0
 //解除原来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);
 }
예제 #29
0
        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);
        }
예제 #30
0
        //////////////////////////////////////////////////////////

        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);
        }