OSDN Git Service

Add linked & shared notebook tables
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / sql / LinkedNotebookTable.java
1 /*\r
2  * This file is part of NeverNote \r
3  * Copyright 2009 Randy Baumgarte\r
4  * \r
5  * This file may be licensed under the terms of of the\r
6  * GNU General Public License Version 2 (the ``GPL'').\r
7  *\r
8  * Software distributed under the License is distributed\r
9  * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either\r
10  * express or implied. See the GPL for the specific language\r
11  * governing rights and limitations.\r
12  *\r
13  * You should have received a copy of the GPL along with this\r
14  * program. If not, go to http://www.gnu.org/licenses/gpl.html\r
15  * or write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\r
17  *\r
18 */\r
19 \r
20 \r
21 package cx.fbn.nevernote.sql;\r
22 \r
23 import java.text.SimpleDateFormat;\r
24 import java.util.ArrayList;\r
25 import java.util.List;\r
26 \r
27 import com.evernote.edam.type.LinkedNotebook;\r
28 \r
29 import cx.fbn.nevernote.sql.driver.NSqlQuery;\r
30 import cx.fbn.nevernote.utilities.ApplicationLogger;\r
31 \r
32 public class LinkedNotebookTable {\r
33         \r
34         private final ApplicationLogger                 logger;\r
35         DatabaseConnection                                                      db;\r
36         \r
37         // Constructor\r
38         public LinkedNotebookTable(ApplicationLogger l, DatabaseConnection d) {\r
39                 logger = l;\r
40                 db = d;\r
41         }\r
42         // Create the table\r
43         public void createTable() {\r
44                 NSqlQuery query = new NSqlQuery(db.getConnection());\r
45         logger.log(logger.HIGH, "Creating table LinkedNotebook...");\r
46         if (!query.exec("Create table LinkedNotebook (id long primary key, " +\r
47                         "shareName VarChar, " +\r
48                         "username VarChar, "+\r
49                         "shardID VarChar, " +\r
50                         "shareKey VarChar, " +\r
51                         "url VarChar, " +\r
52                         "icon blob, " +\r
53                         "isDirty boolean)"))                            \r
54                 logger.log(logger.HIGH, "Table LinkedNotebook creation FAILED!!!");   \r
55         }\r
56         // Drop the table\r
57         public void dropTable() {\r
58                 NSqlQuery query = new NSqlQuery(db.getConnection());\r
59                 query.exec("Drop table LinkedNotebook");\r
60         }\r
61         // Save an individual notebook\r
62         public void addNotebook(LinkedNotebook tempNotebook, boolean isDirty) {\r
63                 boolean check;\r
64                 \r
65                 SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");\r
66         NSqlQuery query = new NSqlQuery(db.getConnection());\r
67                 check = query.prepare("Insert Into LinkedNotebook (id, shareName, username,  "\r
68                                 +"shardId, shareKey, url, isDirty) "   \r
69                                 + " Values("\r
70                                 +":id, :shareName, :username, "\r
71                                 +":shardId, :shareKey, :url, :isDirty)");\r
72                 query.bindValue(":id", tempNotebook.getId());\r
73                 query.bindValue(":shareName", tempNotebook.getShareName());\r
74                 query.bindValue(":username", tempNotebook.getUsername());\r
75                 query.bindValue(":shardId", tempNotebook.getShardId());\r
76                 query.bindValue(":shareKey", tempNotebook.getShareKey());\r
77                 query.bindValue(":url", tempNotebook.getUri());\r
78                 \r
79                 if (isDirty)\r
80                         query.bindValue(":isDirty", true);\r
81                 else\r
82                         query.bindValue(":isDirty", false);\r
83 \r
84                 check = query.exec();\r
85                 if (!check) {\r
86                         logger.log(logger.MEDIUM, "LinkedNotebook Table insert failed.");\r
87                         logger.log(logger.MEDIUM, query.lastError().toString());\r
88                 }\r
89         }\r
90         // Delete the notebook based on a guid\r
91         public void expungeNotebook(long id, boolean needsSync) {\r
92                 boolean check;\r
93         NSqlQuery query = new NSqlQuery(db.getConnection());\r
94 \r
95         check = query.prepare("delete from LinkedNotebook "\r
96                                 +"where id=:id");\r
97                 if (!check) {\r
98                         logger.log(logger.EXTREME, "LinkedNotebook SQL delete prepare has failed.");\r
99                         logger.log(logger.EXTREME, query.lastError().toString());\r
100                 }\r
101                 query.bindValue(":id", id);\r
102                 check = query.exec();\r
103                 if (!check) \r
104                         logger.log(logger.MEDIUM, "LinkedNotebook delete failed.");\r
105                 \r
106                 // Signal the parent that work needs to be done\r
107                 if  (needsSync) {\r
108                         DeletedTable deletedTable = new DeletedTable(logger, db);\r
109                         deletedTable.addDeletedItem(new Long(id).toString(), "LinkedNotebook");\r
110                 }\r
111         }\r
112         // Update a notebook\r
113         public void updateNotebook(LinkedNotebook tempNotebook, boolean isDirty) {\r
114                 boolean check;\r
115                 \r
116                 SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");\r
117                 \r
118         NSqlQuery query = new NSqlQuery(db.getConnection());\r
119         check = query.prepare("Update LinkedNotebook set id=:id, shareName=:shareName, " +\r
120                         "username=:username, shardID=:shardID, shareKey=:shareKey, url=:url, isDirty=:isDirty");\r
121                 query.bindValue(":id", tempNotebook.getId());\r
122                 query.bindValue(":shareName", tempNotebook.getShareName());\r
123                 query.bindValue(":username", tempNotebook.getUsername());\r
124                 query.bindValue(":shardID", tempNotebook.getShardId());\r
125                 query.bindValue(":shareKey", tempNotebook.getShareKey());\r
126                 query.bindValue(":url", tempNotebook.getUri());\r
127 \r
128                 query.bindValue(":isDirty", isDirty);\r
129                 \r
130                 check = query.exec();\r
131                 if (!check) {\r
132                         logger.log(logger.MEDIUM, "LinkedNotebook Table update failed.");\r
133                         logger.log(logger.MEDIUM, query.lastError().toString());\r
134                 }\r
135         }\r
136         // Load notebooks from the database\r
137         public List<LinkedNotebook> getAll() {\r
138                 LinkedNotebook tempNotebook;\r
139                 List<LinkedNotebook> index = new ArrayList<LinkedNotebook>();\r
140                 boolean check;\r
141                                         \r
142         NSqlQuery query = new NSqlQuery(db.getConnection());\r
143                                         \r
144                 check = query.exec("Select id, shareName, username, shardID, shareKey url, " +\r
145                                 " from LinkedNotebook");\r
146                 if (!check)\r
147                         logger.log(logger.EXTREME, "Notebook SQL retrieve has failed.");\r
148                 while (query.next()) {\r
149                         tempNotebook = new LinkedNotebook();\r
150                         tempNotebook.setId(query.valueLong(0));\r
151                         tempNotebook.setUsername(query.valueString(1));\r
152                         tempNotebook.setShardId(query.valueString(2));\r
153                         tempNotebook.setShareKey(query.valueString(3));\r
154                         tempNotebook.setUri(query.valueString(4));\r
155 \r
156                         index.add(tempNotebook); \r
157                 }       \r
158                 return index;\r
159         }                       \r
160 \r
161         // does a record exist?\r
162         public String findNotebookByShareName(String name) {\r
163                 \r
164                 NSqlQuery query = new NSqlQuery(db.getConnection());\r
165                 \r
166                 query.prepare("Select guid from Linkednotebook where shareName=:name");\r
167                 query.bindValue(":name", name);\r
168                 if (!query.exec())\r
169                         logger.log(logger.EXTREME, "Linked notebook SQL retrieve by share name has failed.");\r
170                 String val = null;\r
171                 if (query.next())\r
172                         val = query.valueString(0);\r
173                 return val;\r
174         }\r
175 \r
176 \r
177 }\r
178 \r