/*\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
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
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
}\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
// 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
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
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
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
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
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