2 * This file is part of NeverNote
\r
3 * Copyright 2009 Randy Baumgarte
\r
5 * This file may be licensed under the terms of of the
\r
6 * GNU General Public License Version 2 (the ``GPL'').
\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
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
21 package cx.fbn.nevernote.sql;
\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
29 import com.evernote.edam.type.SharedNotebook;
\r
31 import cx.fbn.nevernote.sql.driver.NSqlQuery;
\r
32 import cx.fbn.nevernote.utilities.ApplicationLogger;
\r
34 public class SharedNotebookTable {
\r
36 private final ApplicationLogger logger;
\r
37 DatabaseConnection db;
\r
40 public SharedNotebookTable(ApplicationLogger l, DatabaseConnection d) {
\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
52 "notebookModifiable boolean, " +
\r
53 "requireLogin boolean, "+
\r
54 "serviceCreated timestamp, "+
\r
55 "shareKey VarChar, "+
\r
56 "username VarChar, "+
\r
58 "isDirty boolean)"))
\r
59 logger.log(logger.HIGH, "Table SharedNotebook creation FAILED!!!");
\r
62 public void dropTable() {
\r
63 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
64 query.exec("Drop table SharedNotebook");
\r
66 // Save an individual notebook
\r
67 public void addNotebook(SharedNotebook tempNotebook, boolean isDirty) {
\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
74 +"notebookModifiable, requireLogin, serviceCreated, shareKey, username, isDirty) "
\r
76 +":id, :userid, :notebookGuid, :email, "
\r
77 +":notebookModifiable, :requireLogin, :serviceCreated, "
\r
78 +":shareKey, :username, :isDirty)");
\r
80 +"notebookModifiable, requireLogin, serviceCreated, shareKey, username) "
\r
82 +":id, :userid, :notebookGuid, :email, "
\r
83 +":notebookModifiable, :requireLogin, :serviceCreated, "
\r
84 +":shareKey, :username)");
\r
85 >>>>>>> Add linked & shared notebook tables
86 query.bindValue(":id", tempNotebook.getId());
\r
87 query.bindValue(":userid", tempNotebook.getUserId());
\r
88 query.bindValue(":notebookGuid", tempNotebook.getNotebookGuid());
\r
89 query.bindValue(":email", tempNotebook.getEmail());
\r
90 query.bindValue(":notebookModifiable", tempNotebook.isNotebookModifiable());
\r
91 query.bindValue(":requireLogin", tempNotebook.isRequireLogin());
\r
93 StringBuilder serviceCreated = new StringBuilder(simple.format(tempNotebook.getServiceCreated()));
\r
94 query.bindValue(":serviceCreated", serviceCreated.toString());
\r
96 query.bindValue(":shareKey", tempNotebook.getShareKey());
\r
97 query.bindValue(":username", tempNotebook.getUsername());
\r
100 query.bindValue(":isDirty", true);
\r
102 query.bindValue(":isDirty", false);
\r
104 check = query.exec();
\r
106 logger.log(logger.MEDIUM, "SharedNotebook Table insert failed.");
\r
107 logger.log(logger.MEDIUM, query.lastError().toString());
\r
111 // Check if a notebook exists
\r
112 public boolean exists(long id) {
\r
113 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
114 boolean check = query.prepare("Select id from sharednotebook where id=:id");
\r
115 query.bindValue(":id", id);
\r
116 check = query.exec();
\r
118 logger.log(logger.MEDIUM, "SharedNotebook Table exists check failed.");
\r
119 logger.log(logger.MEDIUM, query.lastError().toString());
\r
125 // Delete the notebook based on a id
\r
127 // Delete the notebook based on a guid
\r
128 >>>>>>> Add linked & shared notebook tables
129 public void expungeNotebook(long id, boolean needsSync) {
\r
131 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
133 check = query.prepare("delete from SharedNotebook "
\r
136 logger.log(logger.EXTREME, "SharedNotebook SQL delete prepare has failed.");
\r
137 logger.log(logger.EXTREME, query.lastError().toString());
\r
139 query.bindValue(":id", id);
\r
140 check = query.exec();
\r
142 logger.log(logger.MEDIUM, "SharedNotebook delete failed.");
\r
144 // Signal the parent that work needs to be done
\r
146 DeletedTable deletedTable = new DeletedTable(logger, db);
\r
147 deletedTable.addDeletedItem(new Long(id).toString(), "SharedNotebook");
\r
151 // Delete the notebook based on a id
\r
152 public void expungeNotebookByGuid(String id, boolean needsSync) {
\r
154 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
156 check = query.prepare("delete from SharedNotebook "
\r
157 +"where guid=:id");
\r
159 logger.log(logger.EXTREME, "SharedNotebook SQL delete by notebook guid prepare has failed.");
\r
160 logger.log(logger.EXTREME, query.lastError().toString());
\r
162 query.bindValue(":id", id);
\r
163 check = query.exec();
\r
165 logger.log(logger.MEDIUM, "SharedNotebook delete by notebook guid failed.");
\r
167 // Signal the parent that work needs to be done
\r
169 DeletedTable deletedTable = new DeletedTable(logger, db);
\r
170 deletedTable.addDeletedItem(new Long(id).toString(), "SharedNotebook");
\r
175 // Update a notebook
\r
176 public void updateNotebook(SharedNotebook tempNotebook, boolean isDirty) {
\r
178 if (!exists(tempNotebook.getId())) {
\r
179 addNotebook(tempNotebook, isDirty);
\r
183 SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
\r
185 StringBuilder serviceCreated = new StringBuilder(simple.format(tempNotebook.getServiceCreated()));
\r
186 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
187 check = query.prepare("Update SharedNotebook set id=:id, userid=:userid, notebookGuid=:notebook, "
\r
188 + "email=:email, notebookModifiable=:mod, requireLogin=:rlogin, serviceCreated=:serviceCreated, "
\r
190 // Update a notebook
\r
191 public void updateNotebook(SharedNotebook tempNotebook, boolean isDirty) {
\r
194 SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
\r
196 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
197 check = query.prepare("Update SharedNotebook set id=:id, userid=:userid, notebookGuid=:notebook, "
\r
198 + "email=:email, notebookModifiable=:mod, requireLogin=:rlogin, serviceCreated=:created "
\r
199 >>>>>>> Add linked & shared notebook tables
200 + "shareKey=:shareKey, username=:username, isDirty=:isdirty");
\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
208 query.bindValue(":serviceCreated", serviceCreated.toString());
\r
209 query.bindValue(":shareKey", tempNotebook.getShareKey());
\r
210 query.bindValue(":username", tempNotebook.getUsername());
\r
212 query.bindValue(":shareKey", tempNotebook.getShareKey());
\r
213 query.bindValue(":username", tempNotebook.getUsername());
\r
215 StringBuilder serviceCreated = new StringBuilder(simple.format(tempNotebook.getServiceCreated()));
\r
216 query.bindValue(":serviceCreated", serviceCreated.toString());
\r
217 >>>>>>> Add linked & shared notebook tables
219 query.bindValue(":isDirty", isDirty);
\r
221 check = query.exec();
\r
223 logger.log(logger.MEDIUM, "SharedNotebook Table update failed.");
\r
224 logger.log(logger.MEDIUM, query.lastError().toString());
\r
227 // Load notebooks from the database
\r
228 public List<SharedNotebook> getAll() {
\r
229 SharedNotebook tempNotebook;
\r
230 List<SharedNotebook> index = new ArrayList<SharedNotebook>();
\r
233 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
235 check = query.exec("Select id, userid, notebookGuid, email, notebookModifiable, requireLogin, " +
\r
236 "serviceCreated, "+
\r
237 "shareKey, username from SharedNotebook");
\r
239 logger.log(logger.EXTREME, "Notebook SQL retrieve has failed.");
\r
240 while (query.next()) {
\r
241 tempNotebook = new SharedNotebook();
\r
242 tempNotebook.setId(query.valueLong(0));
\r
243 tempNotebook.setUserId(query.valueInteger(1));
\r
244 tempNotebook.setNotebookGuid(query.valueString(2));
\r
245 tempNotebook.setEmail(query.valueString(3));
\r
246 tempNotebook.setNotebookModifiable(query.valueBoolean(4,false));
\r
247 tempNotebook.setRequireLogin(query.valueBoolean(5,true));
\r
248 DateFormat indfm = null;
\r
250 indfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
\r
251 } catch (Exception e) { }
\r
253 tempNotebook.setServiceCreated(indfm.parse(query.valueString(6)).getTime());
\r
254 } catch (ParseException e) {
\r
255 e.printStackTrace();
\r
257 tempNotebook.setShareKey(query.valueString(7));
\r
258 tempNotebook.setUsername(query.valueString(8));
\r
260 index.add(tempNotebook);
\r
266 // Load notebooks from the database
\r
267 public List<SharedNotebook> getForNotebook(String guid) {
\r
268 SharedNotebook tempNotebook;
\r
269 List<SharedNotebook> index = new ArrayList<SharedNotebook>();
\r
272 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
274 check = query.prepare("Select id, userid, notebookGuid, email, notebookModifiable, requireLogin, " +
\r
275 "serviceCreated, "+
\r
276 "shareKey, username from SharedNotebook where notebookGuid=:notebookGuid ");
\r
278 logger.log(logger.EXTREME, "SharedNotebook getForNotebook SQL prepare has failed.");
\r
279 query.bindValue(":notebookGuid", guid);
\r
280 check = query.exec();
\r
282 logger.log(logger.EXTREME, "SharedNotebook getForNotebook SQL exec has failed.");
\r
284 while (query.next()) {
\r
285 tempNotebook = new SharedNotebook();
\r
286 tempNotebook.setId(query.valueLong(0));
\r
287 tempNotebook.setUserId(query.valueInteger(1));
\r
288 tempNotebook.setNotebookGuid(query.valueString(2));
\r
289 tempNotebook.setEmail(query.valueString(3));
\r
290 tempNotebook.setNotebookModifiable(query.valueBoolean(4,false));
\r
291 tempNotebook.setRequireLogin(query.valueBoolean(5,true));
\r
292 DateFormat indfm = null;
\r
294 indfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
\r
295 } catch (Exception e) { }
\r
297 tempNotebook.setServiceCreated(indfm.parse(query.valueString(6)).getTime());
\r
298 } catch (ParseException e) {
\r
299 e.printStackTrace();
\r
301 tempNotebook.setShareKey(query.valueString(7));
\r
302 tempNotebook.setUsername(query.valueString(8));
\r
304 index.add(tempNotebook);
\r
310 // Get a list of shared notebooks that need to be updated
\r
311 public List <Long> getDirtyIds() {
\r
312 List<Long> index = new ArrayList<Long>();
\r
314 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
316 check = query.exec("Select id from SharedNotebook where isDirty = true");
\r
318 logger.log(logger.EXTREME, "SharedNotebook SQL retrieve has failed in getdirtyIds.");
\r
319 while (query.next()) {
\r
320 index.add(query.valueLong(0));
\r
326 // does a record exist?
\r
327 public String findNotebookByName(String newname) {
\r
329 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
331 query.prepare("Select guid from sharednotebook where name=:newname");
\r
332 query.bindValue(":newname", newname);
\r
334 logger.log(logger.EXTREME, "notebook SQL retrieve has failed.");
\r
337 val = query.valueString(0);
\r
342 >>>>>>> Add linked & shared notebook tables