OSDN Git Service

アイコンを変更した
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / sql / TagTable.java
index 102e5cc..fab6b73 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * This file is part of NeverNote \r
+ * This file is part of NixNote/NeighborNote \r
  * Copyright 2009 Randy Baumgarte\r
  * \r
  * This file may be licensed under the terms of of the\r
@@ -60,6 +60,39 @@ public class TagTable {
                query.exec("Drop table Tag");\r
                \r
        }\r
+       // Get tags for a specific notebook\r
+       // get all tags\r
+       public List<Tag> getTagsForNotebook(String notebookGuid) {\r
+               \r
+               Tag tempTag;\r
+               List<Tag> index = new ArrayList<Tag>();\r
+               boolean check;\r
+                                               \r
+        NSqlQuery query = new NSqlQuery(db.getConnection());\r
+                                               \r
+               check = query.prepare("Select guid, parentGuid, sequence, name"\r
+                               +" from Tag where notebookGuid=:notebookGuid");\r
+               if (!check) {\r
+                       logger.log(logger.EXTREME, "Tag SQL prepare getTagsForNotebook has failed.");\r
+                       logger.log(logger.EXTREME, query.lastError());\r
+               }\r
+               query.bindValue(":notebookGuid", notebookGuid);\r
+               query.exec();\r
+               while (query.next()) {\r
+                       tempTag = new Tag();\r
+                       tempTag.setGuid(query.valueString(0));\r
+                       if (query.valueString(1) != null)\r
+                               tempTag.setParentGuid(query.valueString(1));\r
+                       else\r
+                               tempTag.setParentGuid(null);\r
+                       int sequence = new Integer(query.valueString(2)).intValue();\r
+                       tempTag.setUpdateSequenceNum(sequence);\r
+                       tempTag.setName(query.valueString(3));\r
+                       index.add(tempTag); \r
+               }       \r
+               \r
+               return index;\r
+       }\r
        // get all tags\r
        public List<Tag> getAll() {\r
                \r
@@ -70,7 +103,7 @@ public class TagTable {
         NSqlQuery query = new NSqlQuery(db.getConnection());\r
                                                \r
                check = query.exec("Select guid, parentGuid, sequence, name"\r
-                               +" from Tag");\r
+                               +" from Tag where notebookguid not in (select guid from notebook where archived=true)");\r
                if (!check) {\r
                        logger.log(logger.EXTREME, "Tag SQL retrieve has failed.");\r
                        logger.log(logger.EXTREME, query.lastError());\r
@@ -115,6 +148,10 @@ public class TagTable {
        }\r
        // Update a tag\r
        public void updateTag(Tag tempTag, boolean isDirty) {\r
+               updateTag(tempTag, isDirty, "");\r
+       }\r
+       // Update a tag\r
+       public void updateTag(Tag tempTag, boolean isDirty, String realName) {\r
                boolean check;\r
                \r
         NSqlQuery query = new NSqlQuery(db.getConnection());\r
@@ -141,6 +178,7 @@ public class TagTable {
        // Delete a tag\r
        public void expungeTag(String guid, boolean needsSync) {\r
                boolean check;\r
+               Tag t = getTag(guid);\r
                \r
                \r
         NSqlQuery query = new NSqlQuery(db.getConnection());\r
@@ -169,18 +207,22 @@ public class TagTable {
                        logger.log(logger.MEDIUM, "NoteTags delete failed.");\r
                \r
                // Add the work to the parent queue\r
-               if (needsSync) {\r
+               if (needsSync && t!= null && t.getUpdateSequenceNum() > 0) {\r
                        DeletedTable del = new DeletedTable(logger, db);\r
                        del.addDeletedItem(guid, "Tag");\r
                }\r
        }\r
        // Save a tag\r
        public void addTag(Tag tempTag, boolean isDirty) {\r
+               addTag(tempTag, isDirty, false, "", "");\r
+       }\r
+       // Save a tag\r
+       public void addTag(Tag tempTag, boolean isDirty, boolean isLinked, String realName, String notebookGuid) {\r
                boolean check;\r
                \r
         NSqlQuery query = new NSqlQuery(db.getConnection());\r
-               check = query.prepare("Insert Into Tag (guid, parentGuid, sequence, hashCode, name, isDirty)"\r
-                               +" Values(:guid, :parentGuid, :sequence, :hashCode, :name, :isDirty)");\r
+               check = query.prepare("Insert Into Tag (guid, parentGuid, sequence, hashCode, name, isDirty, linked, realName, notebookGuid)"\r
+                               +" Values(:guid, :parentGuid, :sequence, :hashCode, :name, :isDirty, :linked, :realName, :notebookGuid)");\r
                if (!check) {\r
                        logger.log(logger.EXTREME, "Tag SQL insert prepare has failed.");\r
                        logger.log(logger.EXTREME, query.lastError());\r
@@ -191,6 +233,9 @@ public class TagTable {
                query.bindValue(":hashCode", tempTag.hashCode());\r
                query.bindValue(":name", tempTag.getName());\r
                query.bindValue(":isDirty", isDirty);\r
+               query.bindValue(":linked", isLinked);\r
+               query.bindValue(":realName", realName);\r
+               query.bindValue(":notebookGuid", notebookGuid);\r
                \r
                check = query.exec();\r
                if (!check) {\r
@@ -314,6 +359,20 @@ public class TagTable {
                        val = query.valueString(0);\r
                return val;\r
        }\r
+       // Get the linked notebook guid for this tag\r
+       public String getNotebookGuid(String guid) {\r
+               \r
+               NSqlQuery query = new NSqlQuery(db.getConnection());\r
+               \r
+               query.prepare("Select notebookguid from tag where guid=:guid");\r
+               query.bindValue(":guid", guid);\r
+               if (!query.exec())\r
+                       logger.log(logger.EXTREME, "Tag SQL retrieve has failed.");\r
+               String val = null;\r
+               if (query.next())\r
+                       val = query.valueString(0);\r
+               return val;\r
+       }\r
        // given a guid, does the tag exist\r
        public boolean exists(String guid) {\r
                \r
@@ -327,6 +386,18 @@ public class TagTable {
                return retval;\r
        }\r
        // This is a convience method to check if a tag exists & update/create based upon it\r
+       public void syncLinkedTag(Tag tag, String notebookGuid, boolean isDirty) {\r
+               if (exists(tag.getGuid())) {\r
+                       Tag t = getTag(tag.getGuid());\r
+                       String realName = tag.getName();\r
+                       tag.setName(t.getName());\r
+                       updateTag(tag, isDirty, realName);\r
+               }\r
+               else\r
+                       addTag(tag, isDirty, true, tag.getName(), notebookGuid);\r
+       }\r
+\r
+       // This is a convience method to check if a tag exists & update/create based upon it\r
        public void syncTag(Tag tag, boolean isDirty) {\r
                if (exists(tag.getGuid()))\r
                        updateTag(tag, isDirty);\r
@@ -407,4 +478,32 @@ public class TagTable {
                return values;\r
        }\r
 \r
+       // Remove unused tags that are linked tags\r
+       public void removeUnusedLinkedTags() {\r
+               NSqlQuery query = new NSqlQuery(db.getConnection());\r
+               \r
+               query.exec("Delete from tag where linked=true and guid not in (select distinct tagguid from notetags);");\r
+       }\r
+       \r
+       public void cleanupTags() {\r
+               NSqlQuery query = new NSqlQuery(db.getConnection());\r
+               \r
+               query.exec("Update tag set parentguid=null where parentguid not in (select distinct guid from tag);");  \r
+       }\r
+\r
+       \r
+       public List<String> findChildren(String guid, List<Tag> tagList) {\r
+               List<String> returnValue = new ArrayList<String>();\r
+               \r
+               for (int i=0; i<tagList.size(); i++) {\r
+                       if (tagList.get(i).getParentGuid().equalsIgnoreCase(guid)) {\r
+                               returnValue.add(tagList.get(i).getName());\r
+                               List<String> childMatch = findChildren(tagList.get(i).getGuid(), tagList);\r
+                               for (int j=0; j<childMatch.size(); j++) {\r
+                                       returnValue.add(childMatch.get(j));\r
+                               }\r
+                       }\r
+               }\r
+               return returnValue;\r
+       }\r
 }\r