OSDN Git Service

Add initial logic for setting up shared/published notebooks. Added logic to download...
[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.util.ArrayList;\r
24 import java.util.List;\r
25 \r
26 import com.evernote.edam.type.LinkedNotebook;\r
27 \r
28 import cx.fbn.nevernote.sql.driver.NSqlQuery;\r
29 import cx.fbn.nevernote.utilities.ApplicationLogger;\r
30 \r
31 public class LinkedNotebookTable {\r
32         \r
33         private final ApplicationLogger                 logger;\r
34         DatabaseConnection                                                      db;\r
35         \r
36         // Constructor\r
37         public LinkedNotebookTable(ApplicationLogger l, DatabaseConnection d) {\r
38                 logger = l;\r
39                 db = d;\r
40         }\r
41         // Create the table\r
42         public void createTable() {\r
43                 NSqlQuery query = new NSqlQuery(db.getConnection());\r
44         logger.log(logger.HIGH, "Creating table LinkedNotebook...");\r
45         if (!query.exec("Create table LinkedNotebook (guid VarChar primary key, " +\r
46                         "shareName VarChar, " +\r
47                         "username VarChar, "+\r
48                         "shardID VarChar, " +\r
49                         "shareKey VarChar, " +\r
50                         "uri VarChar, " +\r
51                         "updateSequenceNumber Long," +\r
52                         "lastSequenceNumber Long," +\r
53                         "lastSequenceDate timestamp," +\r
54                         "icon blob, " +\r
55                         "isDirty boolean)"))                            \r
56                 logger.log(logger.HIGH, "Table LinkedNotebook creation FAILED!!!");   \r
57         }\r
58         // Drop the table\r
59         public void dropTable() {\r
60                 NSqlQuery query = new NSqlQuery(db.getConnection());\r
61                 query.exec("Drop table LinkedNotebook");\r
62         }\r
63         // Save an individual notebook\r
64         public void addNotebook(LinkedNotebook tempNotebook, boolean isDirty) {\r
65                 boolean check;\r
66                 \r
67         NSqlQuery query = new NSqlQuery(db.getConnection());\r
68                 check = query.prepare("Insert Into LinkedNotebook (guid, shareName, username,  "\r
69                                 +"shardId, shareKey, uri, updateSequenceNumber, isDirty, lastSequenceNumber, "\r
70                                 + "lastSequenceDate) "   \r
71                                 + " Values("\r
72                                 +":guid, :shareName, :username, "\r
73                                 +":shardId, :shareKey, :uri,:usn, :isDirty, 0, '1969-12-31 19.00.00')");\r
74                 query.bindValue(":guid", tempNotebook.getGuid());\r
75                 query.bindValue(":shareName", tempNotebook.getShareName());\r
76                 query.bindValue(":username", tempNotebook.getUsername());\r
77                 query.bindValue(":shardId", tempNotebook.getShardId());\r
78                 query.bindValue(":shareKey", tempNotebook.getShareKey());\r
79                 query.bindValue(":usn", tempNotebook.getUpdateSequenceNum());\r
80                 query.bindValue(":uri", tempNotebook.getUri());\r
81                 \r
82                 if (isDirty)\r
83                         query.bindValue(":isDirty", true);\r
84                 else\r
85                         query.bindValue(":isDirty", false);\r
86 \r
87                 check = query.exec();\r
88                 if (!check) {\r
89                         logger.log(logger.MEDIUM, "LinkedNotebook Table insert failed.");\r
90                         logger.log(logger.MEDIUM, query.lastError().toString());\r
91                 }\r
92         }\r
93         // Delete the notebook based on a guid\r
94         public void expungeNotebook(String id, boolean needsSync) {\r
95                 boolean check;\r
96         NSqlQuery query = new NSqlQuery(db.getConnection());\r
97 \r
98         check = query.prepare("delete from LinkedNotebook "\r
99                                 +"where guid=:guid");\r
100                 if (!check) {\r
101                         logger.log(logger.EXTREME, "LinkedNotebook SQL delete prepare has failed.");\r
102                         logger.log(logger.EXTREME, query.lastError().toString());\r
103                 }\r
104                 query.bindValue(":guid", id);\r
105                 check = query.exec();\r
106                 if (!check) \r
107                         logger.log(logger.MEDIUM, "LinkedNotebook delete failed.");\r
108                 \r
109                 // Signal the parent that work needs to be done\r
110                 if  (needsSync) {\r
111                         DeletedTable deletedTable = new DeletedTable(logger, db);\r
112                         deletedTable.addDeletedItem(new Long(id).toString(), "LinkedNotebook");\r
113                 }\r
114         }\r
115         // Check if a notebook exists\r
116         public boolean exists(String id) {\r
117         NSqlQuery query = new NSqlQuery(db.getConnection());\r
118         boolean check = query.prepare("Select guid from linkednotebook where guid=:guid");\r
119         query.bindValue(":guid", id);\r
120                 check = query.exec();\r
121                 if (!check) {\r
122                         logger.log(logger.MEDIUM, "LinkedNotebook Table exists check failed.");\r
123                         logger.log(logger.MEDIUM, query.lastError().toString());\r
124                 }\r
125                 if (query.next())\r
126                         return true;\r
127                 return false;\r
128         }\r
129         // Update a notebook\r
130         public void updateNotebook(LinkedNotebook tempNotebook, boolean isDirty) {\r
131                 boolean check;\r
132                 if (!exists(tempNotebook.getGuid())) {\r
133                         addNotebook(tempNotebook, isDirty);\r
134                         return;\r
135                 }\r
136                 \r
137         NSqlQuery query = new NSqlQuery(db.getConnection());\r
138         check = query.prepare("Update LinkedNotebook set guid=:guid, shareName=:shareName, " +\r
139                         "username=:username, shardID=:shardID, shareKey=:shareKey, uri=:uri, updateSequenceNumber=:usn, isDirty=:isDirty");\r
140                 query.bindValue(":guid", tempNotebook.getGuid());\r
141                 query.bindValue(":shareName", tempNotebook.getShareName());\r
142                 query.bindValue(":username", tempNotebook.getUsername());\r
143                 query.bindValue(":shardID", tempNotebook.getShardId());\r
144                 query.bindValue(":shareKey", tempNotebook.getShareKey());\r
145                 query.bindValue(":uri", tempNotebook.getUri());\r
146                 query.bindValue(":usn", tempNotebook.getUpdateSequenceNum());\r
147 \r
148                 query.bindValue(":isDirty", isDirty);\r
149                 \r
150                 check = query.exec();\r
151                 if (!check) {\r
152                         logger.log(logger.MEDIUM, "LinkedNotebook Table update failed.");\r
153                         logger.log(logger.MEDIUM, query.lastError().toString());\r
154                 }\r
155         }\r
156         // Load notebooks from the database\r
157         public List<LinkedNotebook> getAll() {\r
158                 LinkedNotebook tempNotebook;\r
159                 List<LinkedNotebook> index = new ArrayList<LinkedNotebook>();\r
160                 boolean check;\r
161                                         \r
162         NSqlQuery query = new NSqlQuery(db.getConnection());\r
163                                         \r
164                 check = query.exec("Select guid, shareName, username, shardID, shareKey uri, " +\r
165                                 " from LinkedNotebook");\r
166                 if (!check)\r
167                         logger.log(logger.EXTREME, "Notebook SQL retrieve has failed.");\r
168                 while (query.next()) {\r
169                         tempNotebook = new LinkedNotebook();\r
170                         tempNotebook.setGuid(query.valueString(0));\r
171                         tempNotebook.setUsername(query.valueString(1));\r
172                         tempNotebook.setShardId(query.valueString(2));\r
173                         tempNotebook.setShareKey(query.valueString(3));\r
174                         tempNotebook.setUri(query.valueString(4));\r
175 \r
176                         index.add(tempNotebook); \r
177                 }       \r
178                 return index;\r
179         }                       \r
180 \r
181         // does a record exist?\r
182         public String findNotebookByShareName(String name) {\r
183                 \r
184                 NSqlQuery query = new NSqlQuery(db.getConnection());\r
185                 \r
186                 query.prepare("Select guid from Linkednotebook where shareName=:name");\r
187                 query.bindValue(":name", name);\r
188                 if (!query.exec())\r
189                         logger.log(logger.EXTREME, "Linked notebook SQL retrieve by share name has failed.");\r
190                 String val = null;\r
191                 if (query.next())\r
192                         val = query.valueString(0);\r
193                 return val;\r
194         }\r
195 \r
196         \r
197         // Get a list of linked notebooks that need to be updated\r
198         public List<String> getDirtyGuids() {\r
199                 List<String> index = new ArrayList<String>();\r
200                 boolean check;  \r
201         NSqlQuery query = new NSqlQuery(db.getConnection());\r
202                                         \r
203                 check = query.exec("Select id from LinkedNotebook where isDirty = true");\r
204                 if (!check) \r
205                         logger.log(logger.EXTREME, "LinkedNotebook SQL retrieve has failed in getdirtyIds.");\r
206                 while (query.next()) {\r
207                         index.add(query.valueString(0));\r
208                 }       \r
209                 return index;   \r
210         }\r
211 \r
212 }\r
213 \r