OSDN Git Service

Remove Global.dbClientWait, dbClientContinue, dbWait, dbContinue and related fields
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / Global.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 package cx.fbn.nevernote;\r
21 \r
22 \r
23 //import java.io.ByteArrayOutputStream;\r
24 \r
25 import java.io.PrintStream;\r
26 import java.text.SimpleDateFormat;\r
27 import java.util.ArrayList;\r
28 import java.util.Calendar;\r
29 import java.util.HashMap;\r
30 import java.util.List;\r
31 \r
32 import com.evernote.edam.type.Accounting;\r
33 import com.evernote.edam.type.PrivilegeLevel;\r
34 import com.evernote.edam.type.User;\r
35 import com.evernote.edam.type.UserAttributes;\r
36 import com.trolltech.qt.core.QByteArray;\r
37 import com.trolltech.qt.core.QSettings;\r
38 import com.trolltech.qt.gui.QPalette;\r
39 \r
40 import cx.fbn.nevernote.config.FileManager;\r
41 import cx.fbn.nevernote.config.InitializationException;\r
42 import cx.fbn.nevernote.config.StartupConfig;\r
43 import cx.fbn.nevernote.gui.ContainsAttributeFilterTable;\r
44 import cx.fbn.nevernote.gui.DateAttributeFilterTable;\r
45 import cx.fbn.nevernote.gui.ShortcutKeys;\r
46 import cx.fbn.nevernote.utilities.ApplicationLogger;\r
47 \r
48 public class Global {\r
49         public static String version = "0.88";\r
50     public static String username = ""; \r
51     public static String password = "";     \r
52     \r
53 \r
54     public static final int mainThreadId=0;\r
55     \r
56     public static final int syncThreadId=1;\r
57     \r
58     public static final int tagCounterThreadId=2;\r
59     \r
60     public static final int trashCounterThreadId=3;   // This should always be the highest thread ID\r
61 \r
62     public static final int indexThreadId=4;    // Thread for indexing words\r
63 \r
64     public static final int saveThreadId=5;     // Thread used for processing data to saving content\r
65 \r
66     public static final int notebookCounterThreadId=6;   // Notebook Thread\r
67 \r
68     public static final int indexThread03Id=7;   // unused\r
69 \r
70     public static final int indexThread04Id=8;   // unused\r
71     \r
72     public static final int dbThreadId=9;   // This should always be the highest thread ID\r
73     \r
74     \r
75     public static HashMap<String,String> passwordSafe = new HashMap<String, String>();\r
76     public static List<String> passwordRemember = new ArrayList<String>();\r
77     public static String currentNotebookGuid;\r
78     public static User user; \r
79     public static long authTimeRemaining;\r
80     public static long authRefreshTime;\r
81     public static long failedRefreshes = 0;\r
82     public static boolean keepRunning;\r
83     \r
84     public static String userStoreUrl;\r
85     public static String noteStoreUrl;\r
86     public static String noteStoreUrlBase;\r
87     \r
88     public static int noteTableCreationPosition = 0;\r
89     public static int noteTableTitlePosition = 1;\r
90     public static int noteTableTagPosition = 2;\r
91     public static int noteTableNotebookPosition = 3;\r
92     public static int noteTableChangedPosition = 4;\r
93     public static int noteTableGuidPosition = 5;\r
94     public static int noteTableAuthorPosition = 6;\r
95     public static int noteTableSourceUrlPosition = 7;\r
96     public static int noteTableSubjectDatePosition = 8;\r
97     public static int noteTableSynchronizedPosition = 9;\r
98     public static int noteTableColumnCount = 10;\r
99     public static Integer cryptCounter = 0;\r
100     \r
101     public static int minimumWordCount = 2;\r
102     private static String wordRegex;\r
103     public static boolean enableCarriageReturnFix = false;\r
104     \r
105     public static String name = null;\r
106     public static QSettings     settings;\r
107     public static boolean isConnected;\r
108     public static boolean showDeleted = false;\r
109     public static boolean disableUploads = false;\r
110         public static int messageLevel;\r
111         public static String tagDelimeter = ",";\r
112         public static String attachmentNameDelimeter = "------";\r
113         \r
114         public static String    databaseName = new String("NeverNote");\r
115         public static String    indexDatabaseName = new String("IndexDatabase.db");\r
116         public static DateAttributeFilterTable createdSinceFilter;\r
117         public static DateAttributeFilterTable createdBeforeFilter;\r
118         public static DateAttributeFilterTable changedSinceFilter;\r
119         public static DateAttributeFilterTable changedBeforeFilter;\r
120         public static ContainsAttributeFilterTable containsFilter;\r
121 //      public static DBLock                            dbLock;\r
122 //      public static DBLock                            indexLock;\r
123         public static ApplicationLogger    logger;\r
124         PrintStream stdoutStream;\r
125         public static QPalette                          originalPalette;\r
126         public static ShortcutKeys                      shortcutKeys;\r
127         public static boolean                           disableViewing;\r
128         \r
129         public static List<String>                              invalidElements = new ArrayList<String>();\r
130         public static HashMap<String, ArrayList<String>>        invalidAttributes = new HashMap<String, ArrayList<String>>();\r
131         public static boolean mimicEvernoteInterface;\r
132         public static HashMap<String,String> resourceMap;\r
133         public static String cipherPassword = "";\r
134         \r
135         static Calendar startTraceTime;\r
136         static Calendar intervalTraceTime;\r
137 \r
138         private static FileManager fileManager;\r
139         \r
140     // Do initial setup \r
141     public static void setup(StartupConfig startupConfig) throws InitializationException  {\r
142         settings = new QSettings("fbn.cx", startupConfig.getName());\r
143         disableViewing = startupConfig.getDisableViewing();\r
144 \r
145         fileManager = new FileManager(startupConfig.getHomeDirPath());\r
146 \r
147 \r
148                         getServer();\r
149                         settings.beginGroup("General");\r
150                         String regex = (String) settings.value("regex", "[,\\s]+");\r
151                         setWordRegex(regex);\r
152                         String wordString = settings.value("wordLength", "4").toString();\r
153                         Integer wordLen = new Integer(wordString);\r
154                         Global.minimumWordCount = wordLen;\r
155                         settings.endGroup();\r
156                         settings.beginGroup("Debug");\r
157                         String msglevel = (String) settings.value("messageLevel", "Low");\r
158                         settings.endGroup();\r
159                         messageLevel = 1;\r
160                         setMessageLevel(msglevel);\r
161                         keepRunning = true;\r
162                         disableUploads = disableUploads();\r
163                         enableCarriageReturnFix = enableCarriageReturnFix();\r
164 //                      dbLock = new DBLock();\r
165 //                      indexLock = new DBLock();\r
166                         logger = new ApplicationLogger("global.log");\r
167                         shortcutKeys = new ShortcutKeys();\r
168                         mimicEvernoteInterface = getMimicEvernoteInterface();\r
169                         resourceMap = new HashMap<String,String>();\r
170                                 \r
171     }\r
172 \r
173     public static String getWordRegex() {\r
174         return wordRegex;\r
175     }\r
176     public static void setWordRegex(String r) {\r
177         wordRegex = r;\r
178     }\r
179     public static void setMessageLevel(String msglevel) {\r
180         if (msglevel.equalsIgnoreCase("low")) \r
181                         messageLevel = 1;\r
182                 if (msglevel.equalsIgnoreCase("medium")) \r
183                         messageLevel = 2;\r
184                 if (msglevel.equalsIgnoreCase("high")) \r
185                                 messageLevel = 3;\r
186                 if (msglevel.equalsIgnoreCase("extreme")) \r
187                                         messageLevel = 4;\r
188                 settings.beginGroup("Debug");\r
189                 settings.setValue("messageLevel", msglevel);\r
190                 settings.endGroup();            \r
191     }\r
192 \r
193     public static void saveUserInformation(User user) {\r
194         settings.beginGroup("User");\r
195                 settings.setValue("id", user.getId());\r
196                 settings.setValue("username", user.getUsername());\r
197                 settings.setValue("email", user.getEmail());\r
198                 settings.setValue("name", user.getName());\r
199                 settings.setValue("timezone", user.getTimezone());\r
200                 settings.setValue("privilege", user.getPrivilege().getValue());\r
201                 settings.setValue("created", user.getCreated());\r
202                 settings.setValue("updated", user.getUpdated());\r
203                 settings.setValue("deleted", user.getDeleted());\r
204                 settings.endGroup();\r
205                 isPremium();\r
206                 if (user.getAttributes()!=null)\r
207                         saveUserAttributes(user.getAttributes());\r
208                 if (user.getAccounting()!=null)\r
209                         saveUserAccounting(user.getAccounting());\r
210 \r
211     }\r
212     public static void saveUserAttributes(UserAttributes attrib) {\r
213         settings.beginGroup("UserAttributes");\r
214                 settings.setValue("defaultLocationName", attrib.getDefaultLocationName());\r
215                 settings.setValue("defaultLatitude", attrib.getDefaultLocationName());\r
216                 settings.setValue("defaultLongitude", attrib.getDefaultLocationName());\r
217                 settings.setValue("incomingEmailAddress", attrib.getIncomingEmailAddress());\r
218                 settings.endGroup();\r
219     }\r
220     public static UserAttributes getUserAttributes() {\r
221         settings.beginGroup("UserAttributes");\r
222         UserAttributes attrib = new UserAttributes();\r
223                 attrib.setDefaultLocationName((String)settings.value("defaultLocationName",""));\r
224                 attrib.setDefaultLatitudeIsSet(false);\r
225                 attrib.setDefaultLongitudeIsSet(false);\r
226                 attrib.setIncomingEmailAddress((String)settings.value("incomingEmailAddress", ""));\r
227                 settings.endGroup();\r
228                 return attrib;\r
229     }\r
230     public static void saveUserAccounting(Accounting acc) {\r
231         settings.beginGroup("UserAccounting");\r
232                 settings.setValue("uploadLimit", acc.getUploadLimit());\r
233                 settings.setValue("uploadLimitEnd", acc.getUploadLimitEnd());\r
234                 settings.setValue("uploadLimitNextMonth", acc.getUploadLimitNextMonth());\r
235                 settings.setValue("premiumServiceStart", acc.getPremiumServiceStart());\r
236                 settings.setValue("nextPaymentDue", acc.getNextPaymentDue());\r
237                 settings.setValue("uploadAmount", acc.getUpdated());\r
238                 settings.endGroup();\r
239     }\r
240     public static long getUploadLimitEnd() {\r
241         Long limit;\r
242         settings.beginGroup("UserAccounting");\r
243         \r
244         // Upload limit\r
245                 try {\r
246                         String val  = (String)settings.value("uploadLimitEnd", "0");\r
247                         limit = new Long(val.trim());\r
248                 } catch (Exception e) {\r
249                         try {\r
250                                 limit = (Long)settings.value("uploadLimitEnd", 0);\r
251                         } catch (Exception e1) {\r
252                                 limit = new Long(0);\r
253                         }\r
254                 }\r
255         \r
256                 // return value\r
257         settings.endGroup();\r
258         return limit;\r
259     }\r
260     public static void saveUploadAmount(long amount) {\r
261         settings.beginGroup("UserAccounting");\r
262                 settings.setValue("uploadAmount", amount);\r
263                 settings.endGroup();\r
264    }\r
265     public static long getUploadAmount() {\r
266                 long amt=0;\r
267                 settings.beginGroup("UserAccounting");\r
268                 try {\r
269                         String num = (String)settings.value("uploadAmount", "0");\r
270                         amt = new Long(num.trim());\r
271                 } catch (Exception e) {\r
272                         try {\r
273                                 amt = (Integer)settings.value("uploadAmount", 0);\r
274                         } catch (Exception e1) {\r
275                                 amt = 0;\r
276                         }\r
277                 }\r
278                 settings.endGroup();\r
279                 return amt;\r
280     }\r
281     public static void saveEvernoteUpdateCount(long amount) {\r
282         settings.beginGroup("UserAccounting");\r
283                 settings.setValue("updateCount", amount);\r
284                 settings.endGroup();\r
285     }\r
286     public static long getEvernoteUpdateCount() {\r
287                 long amt;\r
288                 settings.beginGroup("UserAccounting");\r
289                 try {\r
290                         String num = (String)settings.value("updateCount", new Long(0).toString());\r
291                         amt = new Long(num.trim());\r
292                 } catch (java.lang.ClassCastException e) {\r
293                         amt = 0;\r
294                 }\r
295                 settings.endGroup();\r
296                 return amt;\r
297     }\r
298     public static boolean isPremium() {\r
299                 int level;\r
300                 settings.beginGroup("User");\r
301                 try {\r
302                         String num = (String)settings.value("privilege", "1");\r
303                         level = new Integer(num.trim());\r
304                 } catch (java.lang.ClassCastException e) {\r
305                         try {\r
306                                 level = (Integer)settings.value("privilege", 1);\r
307                         } catch (Exception e1) {\r
308                                 level = 1;\r
309                         }\r
310                 }\r
311                 settings.endGroup();\r
312                 PrivilegeLevel userLevel = PrivilegeLevel.findByValue(level);\r
313                 if (userLevel == PrivilegeLevel.NORMAL)\r
314                         return false;\r
315                 return true;\r
316                 \r
317    }\r
318     public static long getUploadLimit() {\r
319                 settings.beginGroup("UserAccounting");\r
320                 long limit;\r
321                 try {\r
322                         String num = (String)settings.value("uploadLimit", new Long(0).toString());\r
323                         limit = new Long(num.trim());\r
324                 } catch (java.lang.ClassCastException e) {\r
325                         limit = 0;\r
326                 }\r
327                 settings.endGroup();\r
328                 return limit;\r
329     }\r
330     public static boolean showTrayIcon() {\r
331                 settings.beginGroup("General");\r
332                 String max = (String) settings.value("showTrayIcon", "true");\r
333                 settings.endGroup();\r
334                 if (!max.equalsIgnoreCase("true"))\r
335                         return false;\r
336                 return true;    \r
337     }\r
338     public static void setShowTrayIcon(boolean val) {\r
339                 settings.beginGroup("General");\r
340                 if (val)\r
341                         settings.setValue("showTrayIcon", "true");\r
342                 else\r
343                         settings.setValue("showTrayIcon", "false");\r
344                 settings.endGroup();\r
345     }\r
346     public static boolean wasWindowMaximized() {\r
347                 settings.beginGroup("General");\r
348                 String max = (String) settings.value("isMaximized", "true");\r
349                 settings.endGroup();\r
350                 if (!max.equalsIgnoreCase("true"))\r
351                         return false;\r
352                 return true;    \r
353     }\r
354     public static void saveWindowMaximized(boolean isMax) {\r
355                 settings.beginGroup("General");\r
356                 if (isMax)\r
357                         settings.setValue("isMaximized", "true");\r
358                 else\r
359                         settings.setValue("isMaximized", "false");\r
360                 settings.endGroup();\r
361     }\r
362     public static String getLastViewedNoteGuid() {\r
363                 settings.beginGroup("General");\r
364                 String guid = (String) settings.value("lastViewedNote", "");\r
365                 settings.endGroup();\r
366                 return guid;    \r
367     }\r
368     public static void saveCurrentNoteGuid(String guid) {\r
369                 settings.beginGroup("General");\r
370                 if (guid != null)\r
371                         settings.setValue("lastViewedNote", guid);\r
372                 else\r
373                         settings.setValue("lastViewedNote", "");\r
374                 settings.endGroup();\r
375     }\r
376     public static void setSortColumn(int i) {\r
377                 settings.beginGroup("General");\r
378                 settings.setValue("sortColumn", i);\r
379                 settings.endGroup();\r
380     }\r
381     public static int getSortColumn() {;\r
382         settings.beginGroup("General");\r
383         int order;      \r
384         try {\r
385                 String val  = settings.value("sortColumn", new Integer(0)).toString();\r
386                 order = new Integer(val.trim());\r
387         } catch (Exception e) {\r
388                 try {\r
389                         order = (Integer)settings.value("sortColumn", 0);\r
390                 } catch (Exception e1) {\r
391                     order = 0;\r
392                 }\r
393         }\r
394         \r
395         settings.endGroup();\r
396         return order;\r
397     }\r
398     public static void setSortOrder(int i) {\r
399                 settings.beginGroup("General");\r
400                 settings.setValue("sortOrder", i);\r
401                 settings.endGroup();\r
402     }\r
403     public static int getSortOrder() {\r
404                 settings.beginGroup("General");\r
405                 int order;      \r
406                 try {\r
407                         String val  = settings.value("sortOrder", new Integer(0)).toString();\r
408                         order = new Integer(val.trim());\r
409                 } catch (Exception e) {\r
410                         try {\r
411                                 order = (Integer)settings.value("sortOrder", 0);\r
412                         } catch (Exception e1) {\r
413                             order = 0;\r
414                         }\r
415                 }\r
416                 \r
417                 settings.endGroup();\r
418                 return order;\r
419     }\r
420     public static boolean automaticLogin() {\r
421                 settings.beginGroup("General");\r
422                 String text = (String)settings.value("automaticLogin", "false");\r
423                 settings.endGroup();\r
424                 if (text.equalsIgnoreCase("true"))\r
425                         return true;\r
426                 else\r
427                         return false;           \r
428     }\r
429     public static void setAutomaticLogin(boolean val) {\r
430                 settings.beginGroup("General");\r
431                 if (val)\r
432                         settings.setValue("automaticLogin", "true");\r
433                 else\r
434                         settings.setValue("automaticLogin", "false");\r
435                 settings.endGroup();\r
436     }\r
437     public static boolean rememberPassword() {\r
438                 settings.beginGroup("General");\r
439                 String text = (String)settings.value("rememberPassword", "false");\r
440                 settings.endGroup();\r
441                 if (text.equalsIgnoreCase("true"))\r
442                         return true;\r
443                 else\r
444                         return false;           \r
445     }\r
446     public static void setRememberPassword(boolean val) {\r
447                 settings.beginGroup("General");\r
448                 if (val)\r
449                         settings.setValue("rememberPassword", "true");\r
450                 else\r
451                         settings.setValue("rememberPassword", "false");\r
452                 settings.endGroup();\r
453     }\r
454     public static void setServer(String server) {\r
455                 settings.beginGroup("General");\r
456                 settings.setValue("server", server);\r
457                 settings.endGroup();            \r
458     }\r
459     public static String getServer() {\r
460                 settings.beginGroup("General");\r
461                 String text = (String)settings.value("server", "www.evernote.com");\r
462                 if (text.equals("www.evernote.com")) {\r
463                         userStoreUrl = "https://www.evernote.com/edam/user";\r
464                     noteStoreUrlBase = "www.evernote.com/edam/note/";   \r
465                 } else {\r
466                         userStoreUrl = "https://sandbox.evernote.com/edam/user";\r
467                         noteStoreUrlBase = "sandbox.evernote.com/edam/note/";\r
468                 }\r
469                 settings.endGroup();\r
470                 if (isPremium())\r
471                         noteStoreUrlBase = "https://" + noteStoreUrlBase;\r
472                 else\r
473                         noteStoreUrlBase = "http://" + noteStoreUrlBase;\r
474                 return text;\r
475     }\r
476     public static boolean disableUploads() {\r
477                 settings.beginGroup("General");\r
478                 String text = (String)settings.value("disableUploads", "false");\r
479                 settings.endGroup();\r
480                 if (text.equalsIgnoreCase("true"))\r
481                         return true;\r
482                 else\r
483                         return false;\r
484     }\r
485     public static void setDisableUploads(boolean val) {\r
486                 settings.beginGroup("General");\r
487                 if (val)\r
488                         settings.setValue("disableUploads", "true");\r
489                 else\r
490                         settings.setValue("disableUploads", "false");\r
491                 settings.endGroup();\r
492                 disableUploads = val;\r
493     }\r
494     public static boolean pdfPreview() {\r
495                 settings.beginGroup("General");\r
496                 String text = (String)settings.value("pdfPreview", "true");\r
497                 settings.endGroup();\r
498                 if (text.equalsIgnoreCase("true"))\r
499                         return true;\r
500                 else\r
501                         return false;\r
502     }\r
503     public static void setPdfPreview(boolean val) {\r
504                 settings.beginGroup("General");\r
505                 if (val)\r
506                         settings.setValue("pdfPreview", "true");\r
507                 else\r
508                         settings.setValue("pdfPreview", "false");\r
509                 settings.endGroup();\r
510     }\r
511     public static void setMinimumWordLength(int len) {\r
512                 settings.beginGroup("General");\r
513                 settings.setValue("minimumWordLength", len);\r
514                 settings.endGroup();            \r
515     }\r
516     public static int getMinimumWordLength() {\r
517                 settings.beginGroup("General");\r
518                 Integer len = 4;\r
519                 try {\r
520                         String val  = (String)settings.value("minimumWordLength", "4");\r
521                         len = new Integer(val);\r
522                 } catch (Exception e) {\r
523                         try {\r
524                                 len = (Integer)settings.value("minimumWordLength", 4);\r
525                         } catch (Exception e1) {\r
526                                 len = 4;\r
527                         }\r
528                 }\r
529                 settings.endGroup();\r
530                 return len;\r
531                 \r
532     }\r
533     public static void setRecognitionWeight(int len) {\r
534                 settings.beginGroup("General");\r
535                 settings.setValue("recognitionWeight", len);\r
536                 settings.endGroup();            \r
537     }\r
538     public static int getRecognitionWeight() {\r
539                 settings.beginGroup("General");\r
540                 Integer len;\r
541                 try {\r
542                         len = (Integer)settings.value("recognitionWeight", 80);\r
543                 } catch (Exception e) {\r
544                         len = 80;\r
545                 }\r
546                 settings.endGroup();\r
547                 return len;\r
548     }\r
549     public static String getMessageLevel() {\r
550                 settings.beginGroup("Debug");\r
551                 String text = (String)settings.value("messageLevel", "Low");\r
552                 settings.endGroup();\r
553                 return text;\r
554     }\r
555     public static void setDateFormat(String format) {\r
556                 settings.beginGroup("General");\r
557                 settings.setValue("dateFormat", format);\r
558                 settings.endGroup();            \r
559     }\r
560     public static String getDateFormat() {\r
561                 settings.beginGroup("General");\r
562                 String text = (String)settings.value("dateFormat", "MM/dd/yyyy");\r
563                 settings.endGroup();\r
564                 return text;\r
565     }\r
566     public static void setTimeFormat(String format) {\r
567                 settings.beginGroup("General");\r
568                 settings.setValue("timeFormat", format);\r
569                 settings.endGroup();            \r
570     }\r
571     public static String getTimeFormat() {\r
572                 settings.beginGroup("General");\r
573                 String text = (String)settings.value("timeFormat", "HH:mm:ss");\r
574                 settings.endGroup();\r
575                 return text;\r
576     }\r
577     public static String getSyncInterval() {\r
578                 settings.beginGroup("General");\r
579                 String text = (String)settings.value("syncInterval", "15 minutes");\r
580                 settings.endGroup();\r
581                 return text;            \r
582     }\r
583     public static void setSyncInterval(String format) {\r
584                 settings.beginGroup("General");\r
585                 settings.setValue("syncInterval", format);\r
586                 settings.endGroup();            \r
587     }\r
588     public static void setColumnWidth(String col, int width) {\r
589                 settings.beginGroup("ColumnWidths");\r
590                 settings.setValue(col, width);\r
591                 settings.endGroup();\r
592     }\r
593     public static int getColumnWidth(String col) {\r
594                 settings.beginGroup("ColumnWidths");\r
595                 Integer width;\r
596                 try {\r
597                         String val  = (String)settings.value(col, "0");\r
598                         width = new Integer(val.trim());\r
599                 } catch (Exception e) {\r
600                         try {\r
601                                 width = (Integer)settings.value(col, 0);\r
602                         } catch (Exception e1) {\r
603                                 width = 0;\r
604                         }\r
605                 }\r
606                 settings.endGroup();\r
607                 return width;\r
608     }\r
609     public static void setColumnPosition(String col, int width) {\r
610                 settings.beginGroup("ColumnPosition");\r
611                 settings.setValue(col, width);\r
612                 settings.endGroup();\r
613     }\r
614     public static int getColumnPosition(String col) {\r
615                 settings.beginGroup("ColumnPosition");\r
616                 Integer width;\r
617                 try {\r
618                         String val  = (String)settings.value(col, "-1");\r
619                         width = new Integer(val.trim());\r
620                 } catch (Exception e) {\r
621                         try {\r
622                                 width = (Integer)settings.value(col, 0);\r
623                         } catch (Exception e1) {\r
624                                 width = 0;\r
625                         }\r
626                 }\r
627                 settings.endGroup();\r
628                 return width;\r
629     }\r
630     public static boolean verifyDelete() {\r
631                 settings.beginGroup("General");\r
632                 String text = (String)settings.value("verifyDelete", "true");\r
633                 settings.endGroup();\r
634                 if (text.equalsIgnoreCase("true"))\r
635                         return true;\r
636                 else\r
637                         return false;           \r
638     }\r
639     public static void setVerifyDelete(boolean val) {\r
640                 settings.beginGroup("General");\r
641                 if (val)\r
642                         settings.setValue("verifyDelete", "true");\r
643                 else\r
644                         settings.setValue("verifyDelete", "false");\r
645                 settings.endGroup();\r
646     }\r
647     public static boolean synchronizeDeletedContent() {\r
648                 settings.beginGroup("General");\r
649                 String text = (String)settings.value("syncDeletedContent", "false");\r
650                 settings.endGroup();\r
651                 if (text.equalsIgnoreCase("true"))\r
652                         return true;\r
653                 else\r
654                         return false;           \r
655     }\r
656     public static void setSynchronizeDeletedContent(boolean val) {\r
657                 settings.beginGroup("General");\r
658                 if (val)\r
659                         settings.setValue("syncDeletedContent", "true");\r
660                 else\r
661                         settings.setValue("syncDeletedContent", "false");\r
662                 settings.endGroup();\r
663     }\r
664     public static boolean isWindowVisible(String window) {\r
665                 settings.beginGroup("WindowsVisible");\r
666                 String text = (String)settings.value(window, "true");\r
667                 settings.endGroup();\r
668                 if (text.equalsIgnoreCase("true"))\r
669                         return true;\r
670                 else\r
671                         return false;           \r
672     }\r
673     public static void saveWindowVisible(String window, boolean val) {\r
674                 settings.beginGroup("WindowsVisible");\r
675                 if (val)\r
676                         settings.setValue(window, "true");\r
677                 else\r
678                         settings.setValue(window, "false");\r
679                 settings.endGroup();\r
680     }\r
681     public static boolean isColumnVisible(String window) {\r
682                 settings.beginGroup("ColumnsVisible");\r
683                 String text = (String)settings.value(window, "true");\r
684                 settings.endGroup();\r
685                 if (text.equalsIgnoreCase("true"))\r
686                         return true;\r
687                 else\r
688                         return false;   \r
689     }\r
690     public static void saveColumnVisible(String column, boolean val) {\r
691                 settings.beginGroup("ColumnsVisible");\r
692                 if (val)\r
693                         settings.setValue(column, "true");\r
694                 else\r
695                         settings.setValue(column, "false");\r
696                 settings.endGroup();\r
697     }\r
698     public static boolean isEditorButtonVisible(String window) {\r
699                 settings.beginGroup("EditorButtonsVisible");\r
700                 String text = (String)settings.value(window, "true");\r
701                 settings.endGroup();\r
702                 if (text.equalsIgnoreCase("true"))\r
703                         return true;\r
704                 else\r
705                         return false;   \r
706     }\r
707     public static void saveEditorButtonsVisible(String column, boolean val) {\r
708                 settings.beginGroup("EditorButtonsVisible");\r
709                 if (val)\r
710                         settings.setValue(column, "true");\r
711                 else\r
712                         settings.setValue(column, "false");\r
713                 settings.endGroup();\r
714     }\r
715     public static boolean enableCarriageReturnFix() {\r
716                 settings.beginGroup("Debug");\r
717                 String text = (String)settings.value("enableCarriageReturnFix", "false");\r
718                 settings.endGroup();\r
719                 if (text.equalsIgnoreCase("true"))\r
720                         return true;\r
721                 else\r
722                         return false;   \r
723     }\r
724     public static void saveCarriageReturnFix(boolean val) {\r
725                 settings.beginGroup("Debug");\r
726                 if (val)\r
727                         settings.setValue("enableCarriageReturnFix", "true");\r
728                 else\r
729                         settings.setValue("enableCarriageReturnFix", "false");\r
730                 settings.endGroup();\r
731     }\r
732     public static void setIndexThreads(int val) {\r
733                 settings.beginGroup("General");\r
734                 settings.setValue("indexThreads", val);\r
735                 settings.endGroup();\r
736     }\r
737     public static int getIndexThreads() {\r
738                 settings.beginGroup("General");\r
739                 Integer threads;\r
740                 try {\r
741                         String val  = (String)settings.value("indexThreads", "1");\r
742                         threads = new Integer(val.trim());\r
743                 } catch (Exception e) {\r
744                         try {\r
745                                 threads = (Integer)settings.value("indexThreads", 1);\r
746                         } catch (Exception e1) {\r
747                                 threads = 1;\r
748                         }\r
749                 }\r
750                 settings.endGroup();\r
751                 threads = 1;\r
752                 return threads;\r
753     }\r
754     public static void setZoomFactor(double val) {\r
755                 settings.beginGroup("General");\r
756                 settings.setValue("zoomFactor", val);\r
757                 settings.endGroup();\r
758     }\r
759     public static double getZoomFactor() {\r
760                 settings.beginGroup("General");\r
761                 Double threads;\r
762                 try {\r
763                         String val  = (String)settings.value("zoomFactor", "1.0");\r
764                         threads = new Double(val.trim());\r
765                 } catch (Exception e) {\r
766                         try {\r
767                                 threads = (Double)settings.value("zoomFactor", 1.0);\r
768                         } catch (Exception e1) {\r
769                                 threads = new Double(1);\r
770                         }\r
771                 }\r
772                 settings.endGroup();\r
773                 return threads;\r
774     }\r
775     public static void setTextSizeMultiplier(double val) {\r
776                 settings.beginGroup("General");\r
777                 settings.setValue("textMultiplier", val);\r
778                 settings.endGroup();\r
779     }\r
780     public static double getTextSizeMultiplier() {\r
781                 settings.beginGroup("General");\r
782                 Double threads;\r
783                 try {\r
784                         String val  = (String)settings.value("textMultiplier", "1");\r
785                         threads = new Double(val.trim());\r
786                 } catch (Exception e) {\r
787                         try {\r
788                                 threads = (Double)settings.value("textMultiplier", 1);\r
789                         } catch (Exception e1) {\r
790                                 threads = new Double(1);\r
791                         }\r
792                 }\r
793                 settings.endGroup();\r
794                 return threads;\r
795     }\r
796 \r
797     public static boolean getMimicEvernoteInterface() {\r
798                 settings.beginGroup("General");\r
799                 String text = (String)settings.value("mimicEvernoteInterface", "true");\r
800                 settings.endGroup();\r
801                 if (text.equalsIgnoreCase("true"))\r
802                         return true;\r
803                 else\r
804                         return false;\r
805     }\r
806     public static void setMimicEvernoteInterface(boolean value) {\r
807         settings.beginGroup("General");\r
808         if (value)\r
809                 settings.setValue("mimicEvernoteInterface", "true");\r
810         else\r
811                 settings.setValue("mimicEvernoteInterface", "false"); \r
812         settings.endGroup();\r
813     }\r
814     \r
815     public static boolean synchronizeOnClose() {\r
816                 settings.beginGroup("General");\r
817                 String text = (String)settings.value("synchronizeOnClose", "false");\r
818                 settings.endGroup();\r
819                 if (text.equalsIgnoreCase("true"))\r
820                         return true;\r
821                 else\r
822                         return false;\r
823     }\r
824     public static void setSynchronizeOnClose(boolean val) {\r
825                 settings.beginGroup("General");\r
826                 if (val)\r
827                         settings.setValue("synchronizeOnClose", "true");\r
828                 else\r
829                         settings.setValue("synchronizeOnClose", "false");\r
830                 settings.endGroup();\r
831     }\r
832     public static void setDatabaseVersion(String version) {\r
833                 settings.beginGroup("General");\r
834                 settings.setValue("databaseVersion", version);\r
835                 settings.endGroup();\r
836     }\r
837     public static String getDatabaseVersion() {\r
838                 settings.beginGroup("General");\r
839                 String val  = (String)settings.value("databaseVersion", "0.70");\r
840                 settings.endGroup();\r
841                 return val;\r
842     }\r
843     public static String getDatabaseUrl() {\r
844                 settings.beginGroup("General");\r
845                 String val  = (String)settings.value("DatabaseURL", "");\r
846                 settings.endGroup();\r
847                 if (val.equals(""))\r
848                         val = "jdbc:h2:"+Global.getFileManager().getDbDirPath(Global.databaseName);\r
849                 return val;\r
850     }\r
851     public static String getDatabaseUserid() {\r
852                 settings.beginGroup("General");\r
853                 String val  = (String)settings.value("databaseUserid", "");\r
854                 settings.endGroup();\r
855                 return val;\r
856     }\r
857     public static String getDatabaseUserPassword() {\r
858                 settings.beginGroup("General");\r
859                 String val  = (String)settings.value("databaseUserPassword", "");\r
860                 settings.endGroup();\r
861                 return val;\r
862     }\r
863     public static void setStyle(String style) {\r
864                 settings.beginGroup("General");\r
865                 settings.setValue("style", style);\r
866                 settings.endGroup();\r
867     }\r
868     public static String getStyle() {\r
869                 settings.beginGroup("General");\r
870                 String val  = (String)settings.value("style", "");\r
871                 settings.endGroup();\r
872                 return val;\r
873     }\r
874     public static boolean useStandardPalette() {\r
875                 settings.beginGroup("General");\r
876                 String text = (String)settings.value("standardPalette", "true");\r
877                 settings.endGroup();\r
878                 if (text.equalsIgnoreCase("true"))\r
879                         return true;\r
880                 else\r
881                         return false;\r
882     }\r
883     public static void setStandardPalette(boolean val) {\r
884                 settings.beginGroup("General");\r
885                 if (val)\r
886                         settings.setValue("standardPalette", "true");\r
887                 else\r
888                         settings.setValue("standardPalette", "false");\r
889                 settings.endGroup();\r
890     }\r
891     \r
892     public static void saveState(String name, QByteArray state) {\r
893                 settings.beginGroup("SaveState");\r
894                 settings.setValue(name, state);\r
895                 settings.endGroup();\r
896     }\r
897     \r
898     public static QByteArray restoreState(String name) {\r
899                 settings.beginGroup("SaveState");\r
900                 QByteArray state = (QByteArray)settings.value(name);\r
901                 settings.endGroup();\r
902                 return state;\r
903     }\r
904     public static void saveGeometry(String name, QByteArray state) {\r
905                 settings.beginGroup("SaveGeometry");\r
906                 settings.setValue(name, state);\r
907                 settings.endGroup();\r
908     }\r
909     \r
910     public static QByteArray restoreGeometry(String name) {\r
911                 settings.beginGroup("SaveGeometry");\r
912                 QByteArray state = (QByteArray)settings.value(name);\r
913                 settings.endGroup();\r
914                 return state;\r
915     }\r
916     \r
917     public static void setAutoSaveInterval(int interval) {\r
918                 settings.beginGroup("General");\r
919                 settings.setValue("autoSaveInterval", interval);\r
920                 settings.endGroup();\r
921     }\r
922     public static int getAutoSaveInterval() {\r
923                 settings.beginGroup("General");\r
924                 Integer value;\r
925                 try {\r
926                         String val  = (String)settings.value("autoSaveInterval", "5");\r
927                         value = new Integer(val.trim());\r
928                 } catch (Exception e) {\r
929                         try {\r
930                                 value = (Integer)settings.value("autoSaveInterval", 5);\r
931                         } catch (Exception e1) {\r
932                                 value = 0;\r
933                         }\r
934                 }\r
935                 settings.endGroup();\r
936                 return value;\r
937     }\r
938      \r
939     // Add invalid attributes\r
940     public static void addInvalidAttribute(String element, String attribute) {\r
941         \r
942                 List<String> attributes = invalidAttributes.get(element);\r
943                 if (attributes != null) {\r
944                         for (int i=0; i<attributes.size(); i++)\r
945                                 if (attribute.equalsIgnoreCase(attributes.get(i))) {\r
946                                         return;\r
947                         }\r
948         }\r
949         \r
950         ArrayList<String> attributeList;\r
951         if (!invalidAttributes.containsKey(element)) {\r
952                 attributeList = new ArrayList<String>();\r
953                 attributeList.add(attribute);\r
954                 invalidAttributes.put(element, attributeList);\r
955         }\r
956         else {\r
957                 attributeList = invalidAttributes.get(element);\r
958                 attributeList.add(attribute);\r
959                 invalidAttributes.put(element,attributeList);\r
960         }\r
961     }\r
962 \r
963     \r
964     // Add invalid attributes\r
965     public static void addInvalidElement(String element) {\r
966                 for (int i=0; i<invalidElements.size(); i++) {\r
967                         if (element.equalsIgnoreCase(invalidElements.get(i)))\r
968                                 return;\r
969                 }\r
970         invalidElements.add(element);\r
971     }\r
972     \r
973     // Convert a byte array to a hex string\r
974         public static String byteArrayToHexString(byte data[]) {\r
975                 StringBuffer buf = new StringBuffer();\r
976             for (byte element : data) {\r
977                 int halfbyte = (element >>> 4) & 0x0F;\r
978                 int two_halfs = 0;\r
979                 do {\r
980                         if ((0 <= halfbyte) && (halfbyte <= 9))\r
981                                buf.append((char) ('0' + halfbyte));\r
982                            else\r
983                                 buf.append((char) ('a' + (halfbyte - 10)));\r
984                         halfbyte = element & 0x0F;\r
985                 } while(two_halfs++ < 1);\r
986             }\r
987             return buf.toString();              \r
988         }\r
989 \r
990         \r
991         // What to do with inactive tags?\r
992         public static String tagBehavior() {\r
993                 settings.beginGroup("General");\r
994                 String text = (String)settings.value("tagBehavior", "DoNothing");\r
995                 settings.endGroup();\r
996                 return text;\r
997         }\r
998         // What to do with inactive tags?\r
999         public static void setTagBehavior(String value) {\r
1000                 settings.beginGroup("General");\r
1001                 settings.setValue("tagBehavior", value);\r
1002                 settings.endGroup();\r
1003         }\r
1004 \r
1005         \r
1006         // Print date/time.  Used mainly for performance tracing\r
1007         public static void trace(boolean resetInterval) {\r
1008                 String fmt = "MM/dd/yy HH:mm:ss.SSSSSS";\r
1009                 String dateTimeFormat = new String(fmt);\r
1010                 SimpleDateFormat simple = new SimpleDateFormat(dateTimeFormat);\r
1011                 Calendar cal = Calendar.getInstance();\r
1012                 if (intervalTraceTime == null) \r
1013                         intervalTraceTime = Calendar.getInstance();\r
1014                 if (startTraceTime == null)\r
1015                         startTraceTime = Calendar.getInstance();\r
1016                 \r
1017                 float interval = (cal.getTimeInMillis() - intervalTraceTime.getTimeInMillis());\r
1018                 float total = (cal.getTimeInMillis() - startTraceTime.getTimeInMillis());\r
1019                 \r
1020 //              if (interval > 00.0) {\r
1021                         StackTraceElement[] exceptions = Thread.currentThread().getStackTrace();\r
1022                         System.out.println("------------------------------------------");\r
1023 \r
1024                         System.out.println("Date/Time " +simple.format(cal.getTime()));\r
1025                         System.out.format("Interval Time: %-10.6f%n", interval);\r
1026                         System.out.format("Total Time: %-10.6f%n", total);\r
1027                         for (int i=2; i<5 && i<exceptions.length; i++) {\r
1028                                 System.out.println(exceptions[i]);\r
1029                         }\r
1030 //              }\r
1031                 if (resetInterval)\r
1032                         intervalTraceTime = cal;\r
1033         }\r
1034         public static void traceReset() {\r
1035                 intervalTraceTime = null;\r
1036                 startTraceTime = null;\r
1037         }\r
1038 \r
1039 \r
1040     public static FileManager getFileManager() {\r
1041         return fileManager;\r
1042     }\r
1043     public static boolean getDisableViewing() {\r
1044         return disableViewing;\r
1045     }\r
1046     \r
1047 \r
1048 }\r
1049 \r