OSDN Git Service

- Correct issue with importing when not a premium member.
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / sql / SharedNotebookTable.java
1 /*\r
2  * This file is part of NixNote \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.DateFormat;\r
24 import java.text.ParseException;\r
25 import java.text.SimpleDateFormat;\r
26 import java.util.ArrayList;\r
27 import java.util.List;\r
28 \r
29 import com.evernote.edam.type.SharedNotebook;\r
30 \r
31 import cx.fbn.nevernote.sql.driver.NSqlQuery;\r
32 import cx.fbn.nevernote.utilities.ApplicationLogger;\r
33 \r
34 public class SharedNotebookTable {\r
35         \r
36         private final ApplicationLogger                 logger;\r
37         DatabaseConnection                                                      db;\r
38         \r
39         // Constructor\r
40         public SharedNotebookTable(ApplicationLogger l, DatabaseConnection d) {\r
41                 logger = l;\r
42                 db = d;\r
43         }\r
44         // Create the table\r
45         public void createTable() {\r
46                 NSqlQuery query = new NSqlQuery(db.getConnection());\r
47         logger.log(logger.HIGH, "Creating table SharedNotebook...");\r
48         if (!query.exec("Create table SharedNotebook (id long primary key, " +\r
49                         "userid Integer, " +\r
50                         "notebookGuid VarChar, "+\r
51                         "email VarChar, "+\r
52                         "notebookModifiable boolean, " +\r
53                         "requireLogin boolean, "+\r
54                         "serviceCreated timestamp, "+\r
55                         "shareKey VarChar,  "+\r
56                         "username VarChar, "+\r
57                         "icon blob, " +\r
58                         "isDirty boolean)"))                            \r
59                 logger.log(logger.HIGH, "Table SharedNotebook creation FAILED!!!");   \r
60         }\r
61         // Drop the table\r
62         public void dropTable() {\r
63                 NSqlQuery query = new NSqlQuery(db.getConnection());\r
64                 query.exec("Drop table SharedNotebook");\r
65         }\r
66         // Save an individual notebook\r
67         public void addNotebook(SharedNotebook tempNotebook, boolean isDirty) {\r
68                 boolean check;\r
69                 \r
70                 SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");\r
71         NSqlQuery query = new NSqlQuery(db.getConnection());\r
72                 check = query.prepare("Insert Into SharedNotebook (id, userid, notebookGuid, email,  "\r
73                                 +"notebookModifiable, requireLogin, serviceCreated, shareKey, username, isDirty) "   \r
74                                 + " Values("\r
75                                 +":id, :userid, :notebookGuid, :email, "\r
76                                 +":notebookModifiable, :requireLogin, :serviceCreated, "\r
77                                 +":shareKey, :username, :isDirty)");\r
78                 query.bindValue(":id", tempNotebook.getId());\r
79                 query.bindValue(":userid", tempNotebook.getUserId());\r
80                 query.bindValue(":notebookGuid", tempNotebook.getNotebookGuid());\r
81                 query.bindValue(":email", tempNotebook.getEmail());\r
82                 query.bindValue(":notebookModifiable", tempNotebook.isNotebookModifiable());\r
83                 query.bindValue(":requireLogin", tempNotebook.isRequireLogin());\r
84 \r
85                 StringBuilder serviceCreated = new StringBuilder(simple.format(tempNotebook.getServiceCreated()));                      \r
86                 query.bindValue(":serviceCreated", serviceCreated.toString());\r
87                 \r
88                 query.bindValue(":shareKey", tempNotebook.getShareKey());\r
89                 query.bindValue(":username", tempNotebook.getUsername());\r
90                 \r
91                 if (isDirty)\r
92                         query.bindValue(":isDirty", true);\r
93                 else\r
94                         query.bindValue(":isDirty", false);\r
95 \r
96                 check = query.exec();\r
97                 if (!check) {\r
98                         logger.log(logger.MEDIUM, "SharedNotebook Table insert failed.");\r
99                         logger.log(logger.MEDIUM, query.lastError().toString());\r
100                 }\r
101         }\r
102         // Check if a notebook exists\r
103         public boolean exists(long id) {\r
104         NSqlQuery query = new NSqlQuery(db.getConnection());\r
105         logger.log(logger.EXTREME, "Checking if shared notebook " +id +" exists");\r
106         boolean check = query.prepare("Select id from sharednotebook where id=:id");\r
107         query.bindValue(":id", id);\r
108                 check = query.exec();\r
109                 if (!check) {\r
110                         logger.log(logger.MEDIUM, "SharedNotebook Table exists check failed.");\r
111                         logger.log(logger.MEDIUM, query.lastError().toString());\r
112                 }\r
113                 if (query.next())\r
114                         return true;\r
115         logger.log(logger.EXTREME, "Shared notebook " +id +" does not exist");          \r
116                 return false;\r
117         }\r
118         // Delete the notebook based on a id\r
119         public void expungeNotebook(long id, boolean needsSync) {\r
120                 boolean check;\r
121         NSqlQuery query = new NSqlQuery(db.getConnection());\r
122 \r
123         check = query.prepare("delete from SharedNotebook "\r
124                                 +"where id=:id");\r
125                 if (!check) {\r
126                         logger.log(logger.EXTREME, "SharedNotebook SQL delete prepare has failed.");\r
127                         logger.log(logger.EXTREME, query.lastError().toString());\r
128                 }\r
129                 query.bindValue(":id", id);\r
130                 check = query.exec();\r
131                 if (!check) \r
132                         logger.log(logger.MEDIUM, "SharedNotebook delete failed.");\r
133                 \r
134                 // Signal the parent that work needs to be done\r
135                 if  (needsSync) {\r
136                         DeletedTable deletedTable = new DeletedTable(logger, db);\r
137                         deletedTable.addDeletedItem(new Long(id).toString(), "SharedNotebook");\r
138                 }\r
139         }\r
140         // Delete the notebook based on a id\r
141         public void expungeNotebookByGuid(String id, boolean needsSync) {\r
142                 boolean check;\r
143         NSqlQuery query = new NSqlQuery(db.getConnection());\r
144 \r
145         check = query.prepare("delete from SharedNotebook "\r
146                                 +"where guid=:id");\r
147                 if (!check) {\r
148                         logger.log(logger.EXTREME, "SharedNotebook SQL delete by notebook guid prepare has failed.");\r
149                         logger.log(logger.EXTREME, query.lastError().toString());\r
150                 }\r
151                 query.bindValue(":id", id);\r
152                 check = query.exec();\r
153                 if (!check) \r
154                         logger.log(logger.MEDIUM, "SharedNotebook delete by notebook guid failed.");\r
155                 \r
156                 // Signal the parent that work needs to be done\r
157                 if  (needsSync) {\r
158                         DeletedTable deletedTable = new DeletedTable(logger, db);\r
159                         deletedTable.addDeletedItem(new Long(id).toString(), "SharedNotebook");\r
160                 }\r
161         }\r
162 \r
163         \r
164         // Update a notebook\r
165         public void updateNotebook(SharedNotebook tempNotebook, boolean isDirty) {\r
166 \r
167                 logger.log(logger.EXTREME, "*Updating Shared Notebook*");\r
168                 logger.log(logger.EXTREME, "ID: " + tempNotebook.getId());\r
169                 logger.log(logger.EXTREME, "Userid: " + tempNotebook.getUserId());\r
170                 logger.log(logger.EXTREME, "Email: " + tempNotebook.getEmail());\r
171                 logger.log(logger.EXTREME, "Notebook Guid: " + tempNotebook.getNotebookGuid());\r
172                 logger.log(logger.EXTREME, "Share Key: " + tempNotebook.getShareKey());\r
173                 logger.log(logger.EXTREME, "Username: " + tempNotebook.getUsername());\r
174 \r
175                 \r
176                 boolean check;\r
177                 if (!exists(tempNotebook.getId())) {\r
178                         addNotebook(tempNotebook, isDirty);\r
179                         return;\r
180                 }\r
181                 \r
182                 List<SharedNotebook> list = getAll();\r
183         logger.log(logger.EXTREME, "Dumping shared notebooks");\r
184                 for (int i=0; i<list.size(); i++) {\r
185                         logger.log(logger.EXTREME, "**************");\r
186                         logger.log(logger.EXTREME, "ID: " + list.get(i).getId());\r
187                         logger.log(logger.EXTREME, "Userid: " + list.get(i).getUserId());\r
188                         logger.log(logger.EXTREME, "Email: " + list.get(i).getEmail());\r
189                         logger.log(logger.EXTREME, "Notebook Guid: " + list.get(i).getNotebookGuid());\r
190                         logger.log(logger.EXTREME, "Share Key: " + list.get(i).getShareKey());\r
191                         logger.log(logger.EXTREME, "Username: " + list.get(i).getUsername());\r
192                 }\r
193                 \r
194                 SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");\r
195                 \r
196                 StringBuilder serviceCreated = new StringBuilder(simple.format(tempNotebook.getServiceCreated()));                                              \r
197         NSqlQuery query = new NSqlQuery(db.getConnection());\r
198         check = query.prepare("Update SharedNotebook set userid=:userid, notebookGuid=:notebook, "\r
199                         + "email=:email, notebookModifiable=:mod, requireLogin=:rlogin, serviceCreated=:serviceCreated, "\r
200                         + "shareKey=:shareKey, username=:username, isDirty=:isdirty where id=:id");\r
201                 query.bindValue(":id", tempNotebook.getId());\r
202                 query.bindValue(":userid", tempNotebook.getUserId());\r
203                 query.bindValue(":notebook", tempNotebook.getNotebookGuid());\r
204                 query.bindValue(":email", tempNotebook.getEmail());\r
205                 query.bindValue(":mod", tempNotebook.isNotebookModifiable());\r
206                 query.bindValue(":rlogin", tempNotebook.isRequireLogin());\r
207                 query.bindValue(":serviceCreated", serviceCreated.toString());\r
208                 query.bindValue(":shareKey", tempNotebook.getShareKey());\r
209                 query.bindValue(":username", tempNotebook.getUsername());\r
210                 \r
211                 query.bindValue(":isDirty", isDirty);\r
212                 \r
213                 check = query.exec();\r
214                 if (!check) {\r
215                         logger.log(logger.MEDIUM, "SharedNotebook Table update failed.");\r
216                         logger.log(logger.MEDIUM, query.lastError().toString());\r
217                 }\r
218         }\r
219         // Load notebooks from the database\r
220         public List<SharedNotebook> getAll() {\r
221                 SharedNotebook tempNotebook;\r
222                 List<SharedNotebook> index = new ArrayList<SharedNotebook>();\r
223                 boolean check;\r
224                                         \r
225         NSqlQuery query = new NSqlQuery(db.getConnection());\r
226                                         \r
227                 check = query.exec("Select id, userid, notebookGuid, email, notebookModifiable, requireLogin, " +\r
228                                 "serviceCreated, "+\r
229                                 "shareKey, username from SharedNotebook");\r
230                 if (!check)\r
231                         logger.log(logger.EXTREME, "Notebook SQL retrieve has failed.");\r
232                 while (query.next()) {\r
233                         tempNotebook = new SharedNotebook();\r
234                         tempNotebook.setId(query.valueLong(0));\r
235                         tempNotebook.setUserId(query.valueInteger(1));\r
236                         tempNotebook.setNotebookGuid(query.valueString(2));\r
237                         tempNotebook.setEmail(query.valueString(3));\r
238                         tempNotebook.setNotebookModifiable(query.valueBoolean(4,false));\r
239                         tempNotebook.setRequireLogin(query.valueBoolean(5,true));\r
240                         DateFormat indfm = null;\r
241                         try {\r
242                                 indfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");\r
243                         } catch (Exception e) { }\r
244                         try {\r
245                                 tempNotebook.setServiceCreated(indfm.parse(query.valueString(6)).getTime());\r
246                         } catch (ParseException e) {\r
247                                 e.printStackTrace();\r
248                         }\r
249                         tempNotebook.setShareKey(query.valueString(7));\r
250                         tempNotebook.setUsername(query.valueString(8));\r
251 \r
252                         index.add(tempNotebook); \r
253                 }       \r
254                 return index;\r
255         }                       \r
256 \r
257         // Load notebooks from the database\r
258         public List<SharedNotebook> getForNotebook(String guid) {\r
259                 SharedNotebook tempNotebook;\r
260                 List<SharedNotebook> index = new ArrayList<SharedNotebook>();\r
261                 boolean check;\r
262                                         \r
263         NSqlQuery query = new NSqlQuery(db.getConnection());\r
264                                         \r
265                 check = query.prepare("Select id, userid, notebookGuid, email, notebookModifiable, requireLogin, " +\r
266                                 "serviceCreated, "+\r
267                                 "shareKey, username from SharedNotebook where notebookGuid=:notebookGuid ");\r
268                 if (!check)\r
269                         logger.log(logger.EXTREME, "SharedNotebook getForNotebook SQL prepare has failed.");\r
270                 query.bindValue(":notebookGuid", guid);\r
271                 check = query.exec();\r
272                 if (!check)\r
273                         logger.log(logger.EXTREME, "SharedNotebook getForNotebook SQL exec has failed.");\r
274                 \r
275                 while (query.next()) {\r
276                         tempNotebook = new SharedNotebook();\r
277                         tempNotebook.setId(query.valueLong(0));\r
278                         tempNotebook.setUserId(query.valueInteger(1));\r
279                         tempNotebook.setNotebookGuid(query.valueString(2));\r
280                         tempNotebook.setEmail(query.valueString(3));\r
281                         tempNotebook.setNotebookModifiable(query.valueBoolean(4,false));\r
282                         tempNotebook.setRequireLogin(query.valueBoolean(5,true));\r
283                         DateFormat indfm = null;\r
284                         try {\r
285                                 indfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");\r
286                         } catch (Exception e) { }\r
287                         try {\r
288                                 tempNotebook.setServiceCreated(indfm.parse(query.valueString(6)).getTime());\r
289                         } catch (ParseException e) {\r
290                                 e.printStackTrace();\r
291                         }\r
292                         tempNotebook.setShareKey(query.valueString(7));\r
293                         tempNotebook.setUsername(query.valueString(8));\r
294 \r
295                         index.add(tempNotebook); \r
296                 }       \r
297                 return index;\r
298         }                       \r
299 \r
300         \r
301         // Get a list of shared notebooks that need to be updated\r
302         public List <Long> getDirtyIds() {\r
303                 List<Long> index = new ArrayList<Long>();\r
304                 boolean check;  \r
305         NSqlQuery query = new NSqlQuery(db.getConnection());\r
306                                         \r
307                 check = query.exec("Select id from SharedNotebook where isDirty = true");\r
308                 if (!check) \r
309                         logger.log(logger.EXTREME, "SharedNotebook SQL retrieve has failed in getdirtyIds.");\r
310                 while (query.next()) {\r
311                         index.add(query.valueLong(0));\r
312                 }       \r
313                 return index;   \r
314         }\r
315 \r
316 }\r
317 \r