forked from JabRef/jabref
-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathJabRefPreferences.java
1688 lines (1505 loc) · 80.4 KB
/
JabRefPreferences.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
package org.jabref.preferences;
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.StringReader;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.prefs.BackingStoreException;
import java.util.prefs.InvalidPreferencesFormatException;
import java.util.prefs.Preferences;
import java.util.stream.Collectors;
import javax.swing.JTable;
import javax.swing.UIManager;
import org.jabref.JabRefException;
import org.jabref.JabRefMain;
import org.jabref.gui.autocompleter.AutoCompleteFirstNameMode;
import org.jabref.gui.autocompleter.AutoCompletePreferences;
import org.jabref.gui.desktop.JabRefDesktop;
import org.jabref.gui.entryeditor.EntryEditorTabList;
import org.jabref.gui.keyboard.KeyBindingRepository;
import org.jabref.gui.preftabs.ImportSettingsTab;
import org.jabref.logic.bibtex.FieldContentParserPreferences;
import org.jabref.logic.bibtex.LatexFieldFormatterPreferences;
import org.jabref.logic.bibtexkeypattern.BibtexKeyPatternPreferences;
import org.jabref.logic.citationstyle.CitationStyle;
import org.jabref.logic.cleanup.CleanupPreferences;
import org.jabref.logic.cleanup.CleanupPreset;
import org.jabref.logic.cleanup.Cleanups;
import org.jabref.logic.importer.ImportFormatPreferences;
import org.jabref.logic.journals.JournalAbbreviationLoader;
import org.jabref.logic.journals.JournalAbbreviationPreferences;
import org.jabref.logic.l10n.Localization;
import org.jabref.logic.layout.LayoutFormatterPreferences;
import org.jabref.logic.layout.format.FileLinkPreferences;
import org.jabref.logic.layout.format.NameFormatterPreferences;
import org.jabref.logic.net.ProxyPreferences;
import org.jabref.logic.openoffice.OpenOfficePreferences;
import org.jabref.logic.openoffice.StyleLoader;
import org.jabref.logic.preferences.TimestampPreferences;
import org.jabref.logic.protectedterms.ProtectedTermsList;
import org.jabref.logic.protectedterms.ProtectedTermsLoader;
import org.jabref.logic.protectedterms.ProtectedTermsPreferences;
import org.jabref.logic.remote.RemotePreferences;
import org.jabref.logic.sharelatex.ShareLatexPreferences;
import org.jabref.logic.util.OS;
import org.jabref.logic.util.UpdateFieldPreferences;
import org.jabref.logic.util.Version;
import org.jabref.logic.util.io.AutoLinkPreferences;
import org.jabref.logic.util.io.FileHistory;
import org.jabref.logic.xmp.XMPPreferences;
import org.jabref.model.bibtexkeypattern.GlobalBibtexKeyPattern;
import org.jabref.model.database.BibDatabaseMode;
import org.jabref.model.entry.BibEntry;
import org.jabref.model.entry.CustomEntryType;
import org.jabref.model.entry.FieldName;
import org.jabref.model.entry.InternalBibtexFields;
import org.jabref.model.metadata.FileDirectoryPreferences;
import org.jabref.model.metadata.SaveOrderConfig;
import org.jabref.model.strings.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class JabRefPreferences implements PreferencesService {
// Push to application preferences
public static final String EMACS_PATH = "emacsPath";
public static final String EMACS_ADDITIONAL_PARAMETERS = "emacsParameters";
/* contents of the defaults HashMap that are defined in this class.
* There are more default parameters in this map which belong to separate preference classes.
*/
public static final String TEXSTUDIO_PATH = "TeXstudioPath";
public static final String WIN_EDT_PATH = "winEdtPath";
public static final String TEXMAKER_PATH = "texmakerPath";
public static final String VIM_SERVER = "vimServer";
public static final String VIM = "vim";
public static final String LYXPIPE = "lyxpipe";
public static final String EXTERNAL_FILE_TYPES = "externalFileTypes";
public static final String FONT_FAMILY = "fontFamily";
public static final String WIN_LOOK_AND_FEEL = "lookAndFeel";
public static final String FX_FONT_RENDERING_TWEAK = "fxFontRenderingTweak";
public static final String LANGUAGE = "language";
public static final String NAMES_LAST_ONLY = "namesLastOnly";
public static final String ABBR_AUTHOR_NAMES = "abbrAuthorNames";
public static final String NAMES_NATBIB = "namesNatbib";
public static final String NAMES_FIRST_LAST = "namesFf";
public static final String BIBLATEX_DEFAULT_MODE = "biblatexMode";
public static final String NAMES_AS_IS = "namesAsIs";
public static final String ENTRY_EDITOR_HEIGHT = "entryEditorHeight";
public static final String AUTO_RESIZE_MODE = "autoResizeMode";
public static final String WINDOW_MAXIMISED = "windowMaximised";
public static final String USE_DEFAULT_LOOK_AND_FEEL = "useDefaultLookAndFeel";
public static final String PROXY_PORT = "proxyPort";
public static final String PROXY_HOSTNAME = "proxyHostname";
public static final String PROXY_USE = "useProxy";
public static final String PROXY_USERNAME = "proxyUsername";
public static final String PROXY_PASSWORD = "proxyPassword";
public static final String PROXY_USE_AUTHENTICATION = "useProxyAuthentication";
public static final String TABLE_PRIMARY_SORT_FIELD = "priSort";
public static final String TABLE_PRIMARY_SORT_DESCENDING = "priDescending";
public static final String TABLE_SECONDARY_SORT_FIELD = "secSort";
public static final String TABLE_SECONDARY_SORT_DESCENDING = "secDescending";
public static final String TABLE_TERTIARY_SORT_FIELD = "terSort";
public static final String TABLE_TERTIARY_SORT_DESCENDING = "terDescending";
public static final String REFORMAT_FILE_ON_SAVE_AND_EXPORT = "reformatFileOnSaveAndExport";
public static final String EXPORT_IN_ORIGINAL_ORDER = "exportInOriginalOrder";
public static final String EXPORT_IN_SPECIFIED_ORDER = "exportInSpecifiedOrder";
public static final String EXPORT_PRIMARY_SORT_FIELD = "exportPriSort";
public static final String EXPORT_PRIMARY_SORT_DESCENDING = "exportPriDescending";
public static final String EXPORT_SECONDARY_SORT_FIELD = "exportSecSort";
public static final String EXPORT_SECONDARY_SORT_DESCENDING = "exportSecDescending";
public static final String EXPORT_TERTIARY_SORT_FIELD = "exportTerSort";
public static final String EXPORT_TERTIARY_SORT_DESCENDING = "exportTerDescending";
public static final String NEWLINE = "newline";
public static final String COLUMN_WIDTHS = "columnWidths";
public static final String COLUMN_NAMES = "columnNames";
public static final String SIDE_PANE_COMPONENT_PREFERRED_POSITIONS = "sidePaneComponentPreferredPositions";
public static final String SIDE_PANE_COMPONENT_NAMES = "sidePaneComponentNames";
public static final String XMP_PRIVACY_FILTERS = "xmpPrivacyFilters";
public static final String USE_XMP_PRIVACY_FILTER = "useXmpPrivacyFilter";
public static final String DEFAULT_AUTO_SORT = "defaultAutoSort";
public static final String DEFAULT_SHOW_SOURCE = "defaultShowSource";
// Window sizes
public static final String SIZE_Y = "mainWindowSizeY";
public static final String SIZE_X = "mainWindowSizeX";
public static final String POS_Y = "mainWindowPosY";
public static final String POS_X = "mainWindowPosX";
public static final String STRINGS_SIZE_Y = "stringsSizeY";
public static final String STRINGS_SIZE_X = "stringsSizeX";
public static final String STRINGS_POS_Y = "stringsPosY";
public static final String STRINGS_POS_X = "stringsPosX";
public static final String DUPLICATES_SIZE_Y = "duplicatesSizeY";
public static final String DUPLICATES_SIZE_X = "duplicatesSizeX";
public static final String DUPLICATES_POS_Y = "duplicatesPosY";
public static final String DUPLICATES_POS_X = "duplicatesPosX";
public static final String MERGEENTRIES_SIZE_Y = "mergeEntriesSizeY";
public static final String MERGEENTRIES_SIZE_X = "mergeEntriesSizeX";
public static final String MERGEENTRIES_POS_Y = "mergeEntriesPosY";
public static final String MERGEENTRIES_POS_X = "mergeEntriesPosX";
public static final String PREAMBLE_SIZE_Y = "preambleSizeY";
public static final String PREAMBLE_SIZE_X = "preambleSizeX";
public static final String PREAMBLE_POS_Y = "preamblePosY";
public static final String PREAMBLE_POS_X = "preamblePosX";
public static final String TERMS_SIZE_Y = "termsSizeY";
public static final String TERMS_SIZE_X = "termsSizeX";
public static final String TERMS_POS_Y = "termsPosY";
public static final String TERMS_POS_X = "termsPosX";
public static final String SEARCH_DIALOG_HEIGHT = "searchDialogHeight";
public static final String SEARCH_DIALOG_WIDTH = "searchDialogWidth";
public static final String IMPORT_INSPECTION_DIALOG_HEIGHT = "importInspectionDialogHeight";
public static final String IMPORT_INSPECTION_DIALOG_WIDTH = "importInspectionDialogWidth";
public static final String LAST_EDITED = "lastEdited";
public static final String OPEN_LAST_EDITED = "openLastEdited";
public static final String LAST_FOCUSED = "lastFocused";
public static final String BACKUP = "backup";
public static final String AUTO_OPEN_FORM = "autoOpenForm";
public static final String IMPORT_WORKING_DIRECTORY = "importWorkingDirectory";
public static final String EXPORT_WORKING_DIRECTORY = "exportWorkingDirectory";
public static final String PREFS_EXPORT_PATH = "prefsExportPath";
public static final String WORKING_DIRECTORY = "workingDirectory";
public static final String NUMBER_COL_WIDTH = "numberColWidth";
public static final String EDITOR_EMACS_KEYBINDINGS = "editorEMACSkeyBindings";
public static final String EDITOR_EMACS_KEYBINDINGS_REBIND_CA = "editorEMACSkeyBindingsRebindCA";
public static final String EDITOR_EMACS_KEYBINDINGS_REBIND_CF = "editorEMACSkeyBindingsRebindCF";
public static final String GROUPS_DEFAULT_FIELD = "groupsDefaultField";
public static final String GROUP_INTERSECT_SELECTIONS = "groupIntersectSelections";
public static final String KEYWORD_SEPARATOR = "groupKeywordSeparator";
public static final String AUTO_ASSIGN_GROUP = "autoAssignGroup";
public static final String LIST_OF_FILE_COLUMNS = "listOfFileColumns";
public static final String EXTRA_FILE_COLUMNS = "extraFileColumns";
public static final String ARXIV_COLUMN = "arxivColumn";
public static final String FILE_COLUMN = "fileColumn";
public static final String PREFER_URL_DOI = "preferUrlDoi";
public static final String URL_COLUMN = "urlColumn";
// Colors
public static final String TABLE_COLOR_CODES_ON = "tableColorCodesOn";
public static final String TABLE_RESOLVED_COLOR_CODES_ON = "tableResolvedColorCodesOn";
public static final String INCOMPLETE_ENTRY_BACKGROUND = "incompleteEntryBackground";
public static final String FIELD_EDITOR_TEXT_COLOR = "fieldEditorTextColor";
public static final String ACTIVE_FIELD_EDITOR_BACKGROUND_COLOR = "activeFieldEditorBackgroundColor";
public static final String INVALID_FIELD_BACKGROUND_COLOR = "invalidFieldBackgroundColor";
public static final String VALID_FIELD_BACKGROUND_COLOR = "validFieldBackgroundColor";
public static final String MARKED_ENTRY_BACKGROUND5 = "markedEntryBackground5";
public static final String MARKED_ENTRY_BACKGROUND4 = "markedEntryBackground4";
public static final String MARKED_ENTRY_BACKGROUND3 = "markedEntryBackground3";
public static final String MARKED_ENTRY_BACKGROUND2 = "markedEntryBackground2";
public static final String MARKED_ENTRY_BACKGROUND1 = "markedEntryBackground1";
public static final String MARKED_ENTRY_BACKGROUND0 = "markedEntryBackground0";
public static final String VERY_GRAYED_OUT_TEXT = "veryGrayedOutText";
public static final String VERY_GRAYED_OUT_BACKGROUND = "veryGrayedOutBackground";
public static final String GRAYED_OUT_TEXT = "grayedOutText";
public static final String GRAYED_OUT_BACKGROUND = "grayedOutBackground";
public static final String GRID_COLOR = "gridColor";
public static final String TABLE_TEXT = "tableText";
public static final String TABLE_OPT_FIELD_BACKGROUND = "tableOptFieldBackground";
public static final String TABLE_REQ_FIELD_BACKGROUND = "tableReqFieldBackground";
public static final String MARKED_ENTRY_BACKGROUND = "markedEntryBackground";
public static final String TABLE_RESOLVED_FIELD_BACKGROUND = "tableResolvedFieldBackground";
public static final String TABLE_BACKGROUND = "tableBackground";
public static final String ICON_ENABLED_COLOR = "iconEnabledColor";
public static final String ICON_DISABLED_COLOR = "iconDisabledColor";
public static final String TABLE_SHOW_GRID = "tableShowGrid";
public static final String TABLE_ROW_PADDING = "tableRowPadding";
public static final String MENU_FONT_SIZE = "menuFontSize";
public static final String OVERRIDE_DEFAULT_FONTS = "overrideDefaultFonts";
public static final String FONT_SIZE = "fontSize";
public static final String FONT_STYLE = "fontStyle";
public static final String ICON_SIZE_LARGE = "iconSizeLarge";
public static final String ICON_SIZE_SMALL = "iconSizeSmall";
public static final String RECENT_DATABASES = "recentDatabases";
public static final String RENAME_ON_MOVE_FILE_TO_FILE_DIR = "renameOnMoveFileToFileDir";
public static final String MEMORY_STICK_MODE = "memoryStickMode";
public static final String DEFAULT_OWNER = "defaultOwner";
public static final String DEFAULT_ENCODING = "defaultEncoding";
public static final String TOOLBAR_VISIBLE = "toolbarVisible";
// Timestamp preferences
public static final String USE_TIME_STAMP = "useTimeStamp";
public static final String UPDATE_TIMESTAMP = "updateTimestamp";
public static final String TIME_STAMP_FIELD = "timeStampField";
public static final String TIME_STAMP_FORMAT = "timeStampFormat";
public static final String OVERWRITE_TIME_STAMP = "overwriteTimeStamp";
// Sharelatex preferences
public static final String DEFAULT_NODE = "default";
public static final String PARENT_NODE = "jabref-sharelatex";
public static final String SHARELATEX_URL = "sharelatexUrl";
public static final String SHARELATEX_USER = "sharelatexUser";
public static final String SHARELATEX_PASSWORD = "sharelatexPassword";
public static final String SHARELATEX_REMEMBER_PASSWORD = "sharelatexRememberPassword";
public static final String SHARELATEX_PROJECT = "sharelatexProject";
public static final String WARN_ABOUT_DUPLICATES_IN_INSPECTION = "warnAboutDuplicatesInInspection";
public static final String UNMARK_ALL_ENTRIES_BEFORE_IMPORTING = "unmarkAllEntriesBeforeImporting";
public static final String MARK_IMPORTED_ENTRIES = "markImportedEntries";
public static final String GENERATE_KEYS_AFTER_INSPECTION = "generateKeysAfterInspection";
public static final String NON_WRAPPABLE_FIELDS = "nonWrappableFields";
public static final String RESOLVE_STRINGS_ALL_FIELDS = "resolveStringsAllFields";
public static final String DO_NOT_RESOLVE_STRINGS_FOR = "doNotResolveStringsFor";
public static final String MERGE_ENTRIES_DIFF_MODE = "mergeEntriesDiffMode";
public static final String CUSTOM_EXPORT_FORMAT = "customExportFormat";
public static final String CUSTOM_IMPORT_FORMAT = "customImportFormat";
public static final String KEY_PATTERN_REGEX = "KeyPatternRegex";
public static final String KEY_PATTERN_REPLACEMENT = "KeyPatternReplacement";
public static final String CONSOLE_COMMAND = "consoleCommand";
public static final String USE_DEFAULT_CONSOLE_APPLICATION = "useDefaultConsoleApplication";
public static final String ADOBE_ACROBAT_COMMAND = "adobeAcrobatCommand";
public static final String SUMATRA_PDF_COMMAND = "sumatraCommand";
public static final String USE_PDF_READER = "usePDFReader";
// Currently, it is not possible to specify defaults for specific entry types
// When this should be made possible, the code to inspect is org.jabref.gui.preftabs.BibtexKeyPatternPrefTab.storeSettings() -> LabelPattern keypatterns = getCiteKeyPattern(); etc
public static final String DEFAULT_BIBTEX_KEY_PATTERN = "defaultBibtexKeyPattern";
public static final String GRAY_OUT_NON_HITS = "grayOutNonHits";
public static final String CONFIRM_DELETE = "confirmDelete";
public static final String WARN_BEFORE_OVERWRITING_KEY = "warnBeforeOverwritingKey";
public static final String AVOID_OVERWRITING_KEY = "avoidOverwritingKey";
public static final String OVERWRITE_OWNER = "overwriteOwner";
public static final String USE_OWNER = "useOwner";
public static final String AUTOLINK_EXACT_KEY_ONLY = "autolinkExactKeyOnly";
public static final String SHOW_FILE_LINKS_UPGRADE_WARNING = "showFileLinksUpgradeWarning";
public static final String SIDE_PANE_WIDTH = "sidePaneWidth";
public static final String LAST_USED_EXPORT = "lastUsedExport";
public static final String FLOAT_MARKED_ENTRIES = "floatMarkedEntries";
public static final String CITE_COMMAND = "citeCommand";
public static final String GENERATE_KEYS_BEFORE_SAVING = "generateKeysBeforeSaving";
public static final String EMAIL_SUBJECT = "emailSubject";
public static final String OPEN_FOLDERS_OF_ATTACHED_FILES = "openFoldersOfAttachedFiles";
public static final String KEY_GEN_ALWAYS_ADD_LETTER = "keyGenAlwaysAddLetter";
public static final String KEY_GEN_FIRST_LETTER_A = "keyGenFirstLetterA";
public static final String ENFORCE_LEGAL_BIBTEX_KEY = "enforceLegalBibtexKey";
public static final String LOCAL_AUTO_SAVE = "localAutoSave";
public static final String RUN_AUTOMATIC_FILE_SEARCH = "runAutomaticFileSearch";
public static final String NUMERIC_FIELDS = "numericFields";
public static final String AUTOLINK_REG_EXP_SEARCH_EXPRESSION_KEY = "regExpSearchExpression";
public static final String AUTOLINK_USE_REG_EXP_SEARCH_KEY = "useRegExpSearch";
public static final String BIB_LOC_AS_PRIMARY_DIR = "bibLocAsPrimaryDir";
public static final String SELECTED_FETCHER_INDEX = "selectedFetcherIndex";
public static final String WEB_SEARCH_VISIBLE = "webSearchVisible";
public static final String GROUP_SIDEPANE_VISIBLE = "groupSidepaneVisible";
public static final String ALLOW_FILE_AUTO_OPEN_BROWSE = "allowFileAutoOpenBrowse";
public static final String CUSTOM_TAB_NAME = "customTabName_";
public static final String CUSTOM_TAB_FIELDS = "customTabFields_";
public static final String USE_UNIT_FORMATTER_ON_SEARCH = "useUnitFormatterOnSearch";
public static final String USE_CASE_KEEPER_ON_SEARCH = "useCaseKeeperOnSearch";
public static final String ASK_AUTO_NAMING_PDFS_AGAIN = "AskAutoNamingPDFsAgain";
public static final String CLEANUP_DOI = "CleanUpDOI";
public static final String CLEANUP_ISSN = "CleanUpISSN";
public static final String CLEANUP_MOVE_PDF = "CleanUpMovePDF";
public static final String CLEANUP_MAKE_PATHS_RELATIVE = "CleanUpMakePathsRelative";
public static final String CLEANUP_RENAME_PDF = "CleanUpRenamePDF";
public static final String CLEANUP_RENAME_PDF_ONLY_RELATIVE_PATHS = "CleanUpRenamePDFonlyRelativePaths";
public static final String CLEANUP_UPGRADE_EXTERNAL_LINKS = "CleanUpUpgradeExternalLinks";
public static final String CLEANUP_CONVERT_TO_BIBLATEX = "CleanUpConvertToBiblatex";
public static final String CLEANUP_CONVERT_TO_BIBTEX = "CleanUpConvertToBibtex";
public static final String CLEANUP_FIX_FILE_LINKS = "CleanUpFixFileLinks";
public static final String CLEANUP_FORMATTERS = "CleanUpFormatters";
public static final String IMPORT_DEFAULT_PDF_IMPORT_STYLE = "importDefaultPDFimportStyle";
public static final String IMPORT_ALWAYSUSE = "importAlwaysUsePDFImportStyle";
public static final String IMPORT_FILENAMEPATTERN = "importFileNamePattern";
public static final String IMPORT_FILEDIRPATTERN = "importFileDirPattern";
public static final String NAME_FORMATTER_VALUE = "nameFormatterFormats";
public static final String NAME_FORMATER_KEY = "nameFormatterNames";
public static final String PUSH_TO_APPLICATION = "pushToApplication";
public static final String SHOW_RECOMMENDATIONS = "showRecommendations";
public static final String VALIDATE_IN_ENTRY_EDITOR = "validateInEntryEditor";
// Dropped file handler
public static final String DROPPEDFILEHANDLER_RENAME = "DroppedFileHandler_RenameFile";
public static final String DROPPEDFILEHANDLER_MOVE = "DroppedFileHandler_MoveFile";
public static final String DROPPEDFILEHANDLER_COPY = "DroppedFileHandler_CopyFile";
public static final String DROPPEDFILEHANDLER_LEAVE = "DroppedFileHandler_LeaveFileInDir";
// Remote
public static final String USE_REMOTE_SERVER = "useRemoteServer";
public static final String REMOTE_SERVER_PORT = "remoteServerPort";
/**
* The OpenOffice/LibreOffice connection preferences are:
* OO_PATH main directory for OO/LO installation, used to detect location on Win/OS X when using manual connect
* OO_EXECUTABLE_PATH path to soffice-file
* OO_JARS_PATH directory that contains juh.jar, jurt.jar, ridl.jar, unoil.jar
* OO_SYNC_WHEN_CITING true if the reference list is updated when adding a new citation
* OO_SHOW_PANEL true if the OO panel is shown on startup
* OO_USE_ALL_OPEN_DATABASES true if all databases should be used when citing
* OO_BIBLIOGRAPHY_STYLE_FILE path to the used style file
* OO_EXTERNAL_STYLE_FILES list with paths to external style files
* STYLES_*_* size and position of "Select style" dialog
*/
public static final String OO_EXECUTABLE_PATH = "ooExecutablePath";
public static final String OO_PATH = "ooPath";
public static final String OO_JARS_PATH = "ooJarsPath";
public static final String OO_SHOW_PANEL = "showOOPanel";
public static final String OO_SYNC_WHEN_CITING = "syncOOWhenCiting";
public static final String OO_USE_ALL_OPEN_BASES = "useAllOpenBases";
public static final String OO_BIBLIOGRAPHY_STYLE_FILE = "ooBibliographyStyleFile";
public static final String OO_EXTERNAL_STYLE_FILES = "ooExternalStyleFiles";
public static final String STYLES_SIZE_Y = "stylesSizeY";
public static final String STYLES_SIZE_X = "stylesSizeX";
public static final String STYLES_POS_Y = "stylesPosY";
public static final String STYLES_POS_X = "stylesPosX";
// Special field preferences
public static final String SHOWCOLUMN_RELEVANCE = "showRelevanceColumn";
public static final String SHOWCOLUMN_READ = "showReadColumn";
public static final String SHOWCOLUMN_RANKING = "showRankingColumn";
public static final String SHOWCOLUMN_QUALITY = "showQualityColumn";
public static final String SHOWCOLUMN_PRIORITY = "showPriorityColumn";
public static final String SHOWCOLUMN_PRINTED = "showPrintedColumn";
public static final String SPECIALFIELDSENABLED = "specialFieldsEnabled";
// The choice between AUTOSYNCSPECIALFIELDSTOKEYWORDS and SERIALIZESPECIALFIELDS is mutually exclusive
public static final String SERIALIZESPECIALFIELDS = "serializeSpecialFields";
// The choice between AUTOSYNCSPECIALFIELDSTOKEYWORDS and SERIALIZESPECIALFIELDS is mutually exclusive
// At least in the settings, not in the implementation. But having both confused the users, therefore, having activated both options at the same time has been disabled
public static final String AUTOSYNCSPECIALFIELDSTOKEYWORDS = "autoSyncSpecialFieldsToKeywords";
// Prefs node for BibtexKeyPatterns
public static final String BIBTEX_KEY_PATTERNS_NODE = "bibtexkeypatterns";
// Prefs node for customized entry types
public static final String CUSTOMIZED_BIBTEX_TYPES = "customizedBibtexTypes";
public static final String CUSTOMIZED_BIBLATEX_TYPES = "customizedBiblatexTypes";
// Version
public static final String VERSION_IGNORED_UPDATE = "versionIgnoreUpdate";
//KeyBindings - keys - public because needed for pref migration
public static final String BINDINGS = "bindings";
//AutcompleteFields - public because needed for pref migration
public static final String AUTOCOMPLETER_COMPLETE_FIELDS = "autoCompleteFields";
// Auto completion
private static final String AUTO_COMPLETE = "autoComplete";
private static final String AUTOCOMPLETER_FIRSTNAME_MODE = "autoCompFirstNameMode";
private static final String AUTOCOMPLETER_LAST_FIRST = "autoCompLF";
private static final String AUTOCOMPLETER_FIRST_LAST = "autoCompFF";
private static final String BIND_NAMES = "bindNames";
// User
private static final String USER_ID = "userId";
private static final String EXTERNAL_JOURNAL_LISTS = "externalJournalLists";
private static final String PERSONAL_JOURNAL_LIST = "personalJournalList";
private static final String USE_IEEE_ABRV = "useIEEEAbrv";
// Telemetry collection
private static final String COLLECT_TELEMETRY = "collectTelemetry";
private static final String ALREADY_ASKED_TO_COLLECT_TELEMETRY = "askedCollectTelemetry";
private static final Logger LOGGER = LoggerFactory.getLogger(JabRefPreferences.class);
private static final Class PREFS_BASE_CLASS = JabRefMain.class;
private static final String DB_CONNECT_USERNAME = "dbConnectUsername";
private static final String DB_CONNECT_DATABASE = "dbConnectDatabase";
private static final String DB_CONNECT_HOSTNAME = "dbConnectHostname";
private static final String DB_CONNECT_SERVER_TYPE = "dbConnectServerType";
private static final String PROTECTED_TERMS_ENABLED_EXTERNAL = "protectedTermsEnabledExternal";
private static final String PROTECTED_TERMS_DISABLED_EXTERNAL = "protectedTermsDisabledExternal";
private static final String PROTECTED_TERMS_ENABLED_INTERNAL = "protectedTermsEnabledInternal";
private static final String PROTECTED_TERMS_DISABLED_INTERNAL = "protectedTermsDisabledInternal";
// Preview
private static final String CYCLE_PREVIEW_POS = "cyclePreviewPos";
private static final String CYCLE_PREVIEW = "cyclePreview";
private static final String PREVIEW_PANEL_HEIGHT = "previewPanelHeight";
private static final String PREVIEW_STYLE = "previewStyle";
private static final String PREVIEW_ENABLED = "previewEnabled";
// Helper string
private static final String USER_HOME = System.getProperty("user.home");
// solves the issue java.lang.RuntimeException: Internal graphics not initialized yet
private final static Integer UNSET_MENU_FONT_SIZE = -123;
// The only instance of this class:
private static JabRefPreferences singleton;
/**
* HashMap that contains all preferences which are set by default
*/
public final Map<String, Object> defaults = new HashMap<>();
public final String MARKING_WITH_NUMBER_PATTERN;
// Object containing custom export formats:
public final CustomExportList customExports;
/**
* Set with all custom {@link org.jabref.logic.importer.Importer}s
*/
public final CustomImportList customImports;
// The following field is used as a global variable during the export of a database.
// By setting this field to the path of the database's default file directory, formatters
// that should resolve external file paths can access this field. This is an ugly hack
// to solve the problem of formatters not having access to any context except for the
// string to be formatted and possible formatter arguments.
public List<String> fileDirForDatabase;
private final Preferences prefs;
private GlobalBibtexKeyPattern keyPattern;
// Object containing info about customized entry editor tabs.
private EntryEditorTabList tabList;
// The constructor is made private to enforce this as a singleton class:
private JabRefPreferences() {
try {
if (new File("jabref.xml").exists()) {
importPreferences("jabref.xml");
}
} catch (JabRefException e) {
LOGGER.warn("Could not import preferences from jabref.xml: " + e.getMessage(), e);
}
// load user preferences
prefs = Preferences.userNodeForPackage(PREFS_BASE_CLASS);
// Since some of the preference settings themselves use localized strings, we cannot set the language after
// the initialization of the preferences in main
// Otherwise that language framework will be instantiated and more importantly, statically initialized preferences
// like the SearchDisplayMode will never be translated.
Localization.setLanguage(prefs.get(LANGUAGE, "en"));
SearchPreferences.putDefaults(defaults);
defaults.put(TEXMAKER_PATH, JabRefDesktop.getNativeDesktop().detectProgramPath("texmaker", "Texmaker"));
defaults.put(WIN_EDT_PATH, JabRefDesktop.getNativeDesktop().detectProgramPath("WinEdt", "WinEdt Team\\WinEdt"));
defaults.put(TEXSTUDIO_PATH, JabRefDesktop.getNativeDesktop().detectProgramPath("texstudio", "TeXstudio"));
defaults.put(BIBLATEX_DEFAULT_MODE, Boolean.FALSE);
if (OS.OS_X) {
defaults.put(FONT_FAMILY, "SansSerif");
defaults.put(WIN_LOOK_AND_FEEL, UIManager.getSystemLookAndFeelClassName());
defaults.put(EMACS_PATH, "emacsclient");
} else if (OS.WINDOWS) {
defaults.put(WIN_LOOK_AND_FEEL, "com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
defaults.put(EMACS_PATH, "emacsclient.exe");
} else {
// Linux
defaults.put(FONT_FAMILY, "SansSerif");
defaults.put(WIN_LOOK_AND_FEEL, "javax.swing.plaf.nimbus.NimbusLookAndFeel");
defaults.put(EMACS_PATH, "emacsclient");
}
defaults.put(FX_FONT_RENDERING_TWEAK, OS.LINUX); //we turn this on per default on Linux
defaults.put(EMACS_ADDITIONAL_PARAMETERS, "-n -e");
defaults.put(PUSH_TO_APPLICATION, "TeXstudio");
defaults.put(RECENT_DATABASES, "");
defaults.put(EXTERNAL_FILE_TYPES, "");
defaults.put(KEY_PATTERN_REGEX, "");
defaults.put(KEY_PATTERN_REPLACEMENT, "");
// Proxy
defaults.put(PROXY_USE, Boolean.FALSE);
defaults.put(PROXY_HOSTNAME, "");
defaults.put(PROXY_PORT, "80");
defaults.put(PROXY_USE_AUTHENTICATION, Boolean.FALSE);
defaults.put(PROXY_USERNAME, "");
defaults.put(PROXY_PASSWORD, "");
defaults.put(USE_DEFAULT_LOOK_AND_FEEL, Boolean.TRUE);
defaults.put(LYXPIPE, USER_HOME + File.separator + ".lyx/lyxpipe");
defaults.put(VIM, "vim");
defaults.put(VIM_SERVER, "vim");
defaults.put(POS_X, 0);
defaults.put(POS_Y, 0);
defaults.put(SIZE_X, 1024);
defaults.put(SIZE_Y, 768);
defaults.put(WINDOW_MAXIMISED, Boolean.FALSE);
defaults.put(AUTO_RESIZE_MODE, JTable.AUTO_RESIZE_ALL_COLUMNS);
defaults.put(ENTRY_EDITOR_HEIGHT, 400);
defaults.put(TABLE_COLOR_CODES_ON, Boolean.FALSE);
defaults.put(TABLE_RESOLVED_COLOR_CODES_ON, Boolean.FALSE);
defaults.put(NAMES_AS_IS, Boolean.FALSE); // "Show names unchanged"
defaults.put(NAMES_FIRST_LAST, Boolean.FALSE); // "Show 'Firstname Lastname'"
defaults.put(NAMES_NATBIB, Boolean.TRUE); // "Natbib style"
defaults.put(ABBR_AUTHOR_NAMES, Boolean.TRUE); // "Abbreviate names"
defaults.put(NAMES_LAST_ONLY, Boolean.TRUE); // "Show last names only"
// system locale as default
defaults.put(LANGUAGE, Locale.getDefault().getLanguage());
// Sorting preferences
defaults.put(TABLE_PRIMARY_SORT_FIELD, FieldName.AUTHOR);
defaults.put(TABLE_PRIMARY_SORT_DESCENDING, Boolean.FALSE);
defaults.put(TABLE_SECONDARY_SORT_FIELD, FieldName.YEAR);
defaults.put(TABLE_SECONDARY_SORT_DESCENDING, Boolean.TRUE);
defaults.put(TABLE_TERTIARY_SORT_FIELD, FieldName.TITLE);
defaults.put(TABLE_TERTIARY_SORT_DESCENDING, Boolean.FALSE);
defaults.put(REFORMAT_FILE_ON_SAVE_AND_EXPORT, Boolean.FALSE);
// export order
defaults.put(EXPORT_IN_ORIGINAL_ORDER, Boolean.FALSE);
defaults.put(EXPORT_IN_SPECIFIED_ORDER, Boolean.FALSE);
// export order: if EXPORT_IN_SPECIFIED_ORDER, then use following criteria
defaults.put(EXPORT_PRIMARY_SORT_FIELD, BibEntry.KEY_FIELD);
defaults.put(EXPORT_PRIMARY_SORT_DESCENDING, Boolean.FALSE);
defaults.put(EXPORT_SECONDARY_SORT_FIELD, FieldName.AUTHOR);
defaults.put(EXPORT_SECONDARY_SORT_DESCENDING, Boolean.FALSE);
defaults.put(EXPORT_TERTIARY_SORT_FIELD, FieldName.TITLE);
defaults.put(EXPORT_TERTIARY_SORT_DESCENDING, Boolean.TRUE);
defaults.put(NEWLINE, System.lineSeparator());
defaults.put(SIDE_PANE_COMPONENT_NAMES, "");
defaults.put(SIDE_PANE_COMPONENT_PREFERRED_POSITIONS, "");
defaults.put(COLUMN_NAMES, "entrytype;author/editor;title;year;journal/booktitle;bibtexkey");
defaults.put(COLUMN_WIDTHS, "75;300;470;60;130;100");
defaults.put(XMP_PRIVACY_FILTERS, "pdf;timestamp;keywords;owner;note;review");
defaults.put(USE_XMP_PRIVACY_FILTER, Boolean.FALSE);
defaults.put(NUMBER_COL_WIDTH, 32);
defaults.put(WORKING_DIRECTORY, USER_HOME);
defaults.put(EXPORT_WORKING_DIRECTORY, USER_HOME);
// Remembers working directory of last import
defaults.put(IMPORT_WORKING_DIRECTORY, USER_HOME);
defaults.put(PREFS_EXPORT_PATH, USER_HOME);
defaults.put(AUTO_OPEN_FORM, Boolean.TRUE);
defaults.put(BACKUP, Boolean.TRUE);
defaults.put(OPEN_LAST_EDITED, Boolean.TRUE);
defaults.put(LAST_EDITED, "");
defaults.put(LAST_FOCUSED, "");
defaults.put(STRINGS_POS_X, 0);
defaults.put(STRINGS_POS_Y, 0);
defaults.put(STRINGS_SIZE_X, 600);
defaults.put(STRINGS_SIZE_Y, 400);
defaults.put(DUPLICATES_POS_X, 0);
defaults.put(DUPLICATES_POS_Y, 0);
defaults.put(DUPLICATES_SIZE_X, 800);
defaults.put(DUPLICATES_SIZE_Y, 600);
defaults.put(MERGEENTRIES_POS_X, 0);
defaults.put(MERGEENTRIES_POS_Y, 0);
defaults.put(MERGEENTRIES_SIZE_X, 800);
defaults.put(MERGEENTRIES_SIZE_Y, 600);
defaults.put(PREAMBLE_POS_X, 0);
defaults.put(PREAMBLE_POS_Y, 0);
defaults.put(PREAMBLE_SIZE_X, 600);
defaults.put(PREAMBLE_SIZE_Y, 400);
defaults.put(TERMS_POS_X, 0);
defaults.put(TERMS_POS_Y, 0);
defaults.put(TERMS_SIZE_X, 500);
defaults.put(TERMS_SIZE_Y, 500);
defaults.put(DEFAULT_SHOW_SOURCE, Boolean.FALSE);
defaults.put(DEFAULT_AUTO_SORT, Boolean.FALSE);
defaults.put(MERGE_ENTRIES_DIFF_MODE, 2);
defaults.put(SHOW_RECOMMENDATIONS, Boolean.TRUE);
defaults.put(VALIDATE_IN_ENTRY_EDITOR, Boolean.TRUE);
defaults.put(EDITOR_EMACS_KEYBINDINGS, Boolean.FALSE);
defaults.put(EDITOR_EMACS_KEYBINDINGS_REBIND_CA, Boolean.TRUE);
defaults.put(EDITOR_EMACS_KEYBINDINGS_REBIND_CF, Boolean.TRUE);
defaults.put(AUTO_COMPLETE, Boolean.FALSE);
defaults.put(AUTOCOMPLETER_FIRSTNAME_MODE, AutoCompleteFirstNameMode.BOTH.name());
defaults.put(AUTOCOMPLETER_FIRST_LAST, Boolean.FALSE); // "Autocomplete names in 'Firstname Lastname' format only"
defaults.put(AUTOCOMPLETER_LAST_FIRST, Boolean.FALSE); // "Autocomplete names in 'Lastname, Firstname' format only"
defaults.put(AUTOCOMPLETER_COMPLETE_FIELDS, "author;editor;title;journal;publisher;keywords;crossref;related;entryset");
defaults.put(GROUP_INTERSECT_SELECTIONS, Boolean.FALSE);
defaults.put(GROUPS_DEFAULT_FIELD, FieldName.KEYWORDS);
defaults.put(AUTO_ASSIGN_GROUP, Boolean.TRUE);
defaults.put(KEYWORD_SEPARATOR, ", ");
defaults.put(TOOLBAR_VISIBLE, Boolean.TRUE);
defaults.put(DEFAULT_ENCODING, StandardCharsets.UTF_8.name());
defaults.put(DEFAULT_OWNER, System.getProperty("user.name"));
defaults.put(MEMORY_STICK_MODE, Boolean.FALSE);
defaults.put(RENAME_ON_MOVE_FILE_TO_FILE_DIR, Boolean.TRUE);
defaults.put(FONT_STYLE, Font.PLAIN);
defaults.put(FONT_SIZE, 12);
defaults.put(OVERRIDE_DEFAULT_FONTS, Boolean.FALSE);
defaults.put(MENU_FONT_SIZE, UNSET_MENU_FONT_SIZE);
defaults.put(ICON_SIZE_LARGE, 24);
defaults.put(ICON_SIZE_SMALL, 16);
defaults.put(TABLE_ROW_PADDING, 9);
defaults.put(TABLE_SHOW_GRID, Boolean.FALSE);
// Main table color settings:
defaults.put(TABLE_BACKGROUND, "255:255:255");
defaults.put(TABLE_REQ_FIELD_BACKGROUND, "230:235:255");
defaults.put(TABLE_OPT_FIELD_BACKGROUND, "230:255:230");
defaults.put(TABLE_RESOLVED_FIELD_BACKGROUND, "240:240:240");
defaults.put(TABLE_TEXT, "0:0:0");
defaults.put(GRID_COLOR, "210:210:210");
defaults.put(GRAYED_OUT_BACKGROUND, "210:210:210");
defaults.put(GRAYED_OUT_TEXT, "40:40:40");
defaults.put(VERY_GRAYED_OUT_BACKGROUND, "180:180:180");
defaults.put(VERY_GRAYED_OUT_TEXT, "40:40:40");
defaults.put(MARKED_ENTRY_BACKGROUND0, "255:255:180");
defaults.put(MARKED_ENTRY_BACKGROUND1, "255:220:180");
defaults.put(MARKED_ENTRY_BACKGROUND2, "255:180:160");
defaults.put(MARKED_ENTRY_BACKGROUND3, "255:120:120");
defaults.put(MARKED_ENTRY_BACKGROUND4, "255:75:75");
defaults.put(MARKED_ENTRY_BACKGROUND5, "220:255:220");
defaults.put(VALID_FIELD_BACKGROUND_COLOR, "255:255:255");
defaults.put(INVALID_FIELD_BACKGROUND_COLOR, "255:0:0");
defaults.put(ACTIVE_FIELD_EDITOR_BACKGROUND_COLOR, "220:220:255");
defaults.put(FIELD_EDITOR_TEXT_COLOR, "0:0:0");
// default icon colors
defaults.put(ICON_ENABLED_COLOR, "79:95:143");
defaults.put(ICON_DISABLED_COLOR, "200:200:200");
defaults.put(INCOMPLETE_ENTRY_BACKGROUND, "250:175:175");
defaults.put(URL_COLUMN, Boolean.TRUE);
defaults.put(PREFER_URL_DOI, Boolean.FALSE);
defaults.put(FILE_COLUMN, Boolean.TRUE);
defaults.put(ARXIV_COLUMN, Boolean.FALSE);
defaults.put(EXTRA_FILE_COLUMNS, Boolean.FALSE);
defaults.put(LIST_OF_FILE_COLUMNS, "");
defaults.put(PROTECTED_TERMS_ENABLED_INTERNAL, convertListToString(ProtectedTermsLoader.getInternalLists()));
defaults.put(PROTECTED_TERMS_DISABLED_INTERNAL, "");
defaults.put(PROTECTED_TERMS_ENABLED_EXTERNAL, "");
defaults.put(PROTECTED_TERMS_DISABLED_EXTERNAL, "");
// OpenOffice/LibreOffice
if (OS.WINDOWS) {
defaults.put(OO_PATH, OpenOfficePreferences.DEFAULT_WINDOWS_PATH);
defaults.put(OO_EXECUTABLE_PATH, OpenOfficePreferences.DEFAULT_WIN_EXEC_PATH);
defaults.put(OO_JARS_PATH, OpenOfficePreferences.DEFAULT_WINDOWS_PATH);
} else if (OS.OS_X) {
defaults.put(OO_PATH, OpenOfficePreferences.DEFAULT_OSX_PATH);
defaults.put(OO_EXECUTABLE_PATH, OpenOfficePreferences.DEFAULT_OSX_EXEC_PATH);
defaults.put(OO_JARS_PATH, OpenOfficePreferences.DEFAULT_OSX_PATH);
} else { // Linux
defaults.put(OO_PATH, OpenOfficePreferences.DEFAULT_LINUX_PATH);
defaults.put(OO_EXECUTABLE_PATH, OpenOfficePreferences.DEFAULT_LINUX_EXEC_PATH);
defaults.put(OO_JARS_PATH, OpenOfficePreferences.DEFAULT_LINUX_PATH);
}
defaults.put(OO_SYNC_WHEN_CITING, Boolean.FALSE);
defaults.put(OO_SHOW_PANEL, Boolean.FALSE);
defaults.put(OO_USE_ALL_OPEN_BASES, Boolean.TRUE);
defaults.put(OO_BIBLIOGRAPHY_STYLE_FILE, StyleLoader.DEFAULT_AUTHORYEAR_STYLE_PATH);
defaults.put(OO_EXTERNAL_STYLE_FILES, "");
defaults.put(STYLES_POS_X, 0);
defaults.put(STYLES_POS_Y, 0);
defaults.put(STYLES_SIZE_X, 600);
defaults.put(STYLES_SIZE_Y, 400);
defaults.put(SPECIALFIELDSENABLED, Boolean.TRUE);
defaults.put(SHOWCOLUMN_PRIORITY, Boolean.FALSE);
defaults.put(SHOWCOLUMN_QUALITY, Boolean.FALSE);
defaults.put(SHOWCOLUMN_RANKING, Boolean.TRUE);
defaults.put(SHOWCOLUMN_RELEVANCE, Boolean.FALSE);
defaults.put(SHOWCOLUMN_PRINTED, Boolean.FALSE);
defaults.put(SHOWCOLUMN_READ, Boolean.FALSE);
defaults.put(AUTOSYNCSPECIALFIELDSTOKEYWORDS, Boolean.TRUE);
defaults.put(SERIALIZESPECIALFIELDS, Boolean.FALSE);
defaults.put(USE_OWNER, Boolean.FALSE);
defaults.put(OVERWRITE_OWNER, Boolean.FALSE);
defaults.put(AVOID_OVERWRITING_KEY, Boolean.FALSE);
defaults.put(WARN_BEFORE_OVERWRITING_KEY, Boolean.TRUE);
defaults.put(CONFIRM_DELETE, Boolean.TRUE);
defaults.put(GRAY_OUT_NON_HITS, Boolean.TRUE);
defaults.put(DEFAULT_BIBTEX_KEY_PATTERN, "[auth][year]");
defaults.put(DO_NOT_RESOLVE_STRINGS_FOR, FieldName.URL);
defaults.put(RESOLVE_STRINGS_ALL_FIELDS, Boolean.FALSE);
defaults.put(NON_WRAPPABLE_FIELDS, "pdf;ps;url;doi;file;isbn;issn");
defaults.put(GENERATE_KEYS_AFTER_INSPECTION, Boolean.TRUE);
defaults.put(MARK_IMPORTED_ENTRIES, Boolean.TRUE);
defaults.put(UNMARK_ALL_ENTRIES_BEFORE_IMPORTING, Boolean.TRUE);
defaults.put(WARN_ABOUT_DUPLICATES_IN_INSPECTION, Boolean.TRUE);
defaults.put(USE_TIME_STAMP, Boolean.FALSE);
defaults.put(OVERWRITE_TIME_STAMP, Boolean.FALSE);
// default time stamp follows ISO-8601. Reason: https://xkcd.com/1179/
defaults.put(TIME_STAMP_FORMAT, "yyyy-MM-dd");
defaults.put(TIME_STAMP_FIELD, FieldName.TIMESTAMP);
defaults.put(UPDATE_TIMESTAMP, Boolean.FALSE);
defaults.put(GENERATE_KEYS_BEFORE_SAVING, Boolean.FALSE);
defaults.put(USE_REMOTE_SERVER, Boolean.TRUE);
defaults.put(REMOTE_SERVER_PORT, 6050);
defaults.put(PERSONAL_JOURNAL_LIST, "");
defaults.put(EXTERNAL_JOURNAL_LISTS, "");
defaults.put(CITE_COMMAND, "\\cite"); // obsoleted by the app-specific ones (not any more?)
defaults.put(FLOAT_MARKED_ENTRIES, Boolean.TRUE);
defaults.put(LAST_USED_EXPORT, "");
defaults.put(SIDE_PANE_WIDTH, -1);
defaults.put(IMPORT_INSPECTION_DIALOG_WIDTH, 650);
defaults.put(IMPORT_INSPECTION_DIALOG_HEIGHT, 650);
defaults.put(SHOW_FILE_LINKS_UPGRADE_WARNING, Boolean.TRUE);
defaults.put(AUTOLINK_EXACT_KEY_ONLY, Boolean.FALSE);
defaults.put(NUMERIC_FIELDS, "mittnum;author");
defaults.put(RUN_AUTOMATIC_FILE_SEARCH, Boolean.FALSE);
defaults.put(LOCAL_AUTO_SAVE, Boolean.FALSE);
defaults.put(ENFORCE_LEGAL_BIBTEX_KEY, Boolean.TRUE);
// Curly brackets ({}) are the default delimiters, not quotes (") as these cause trouble when they appear within the field value:
// Currently, JabRef does not escape them
defaults.put(KEY_GEN_FIRST_LETTER_A, Boolean.TRUE);
defaults.put(KEY_GEN_ALWAYS_ADD_LETTER, Boolean.FALSE);
defaults.put(EMAIL_SUBJECT, Localization.lang("References"));
defaults.put(OPEN_FOLDERS_OF_ATTACHED_FILES, Boolean.FALSE);
defaults.put(ALLOW_FILE_AUTO_OPEN_BROWSE, Boolean.TRUE);
defaults.put(WEB_SEARCH_VISIBLE, Boolean.FALSE);
defaults.put(GROUP_SIDEPANE_VISIBLE, Boolean.FALSE);
defaults.put(SELECTED_FETCHER_INDEX, 0);
defaults.put(BIB_LOC_AS_PRIMARY_DIR, Boolean.FALSE);
defaults.put(DB_CONNECT_SERVER_TYPE, "MySQL");
defaults.put(DB_CONNECT_HOSTNAME, "localhost");
defaults.put(DB_CONNECT_DATABASE, "jabref");
defaults.put(DB_CONNECT_USERNAME, "root");
defaults.put(COLLECT_TELEMETRY, Boolean.FALSE);
defaults.put(ALREADY_ASKED_TO_COLLECT_TELEMETRY, Boolean.FALSE);
defaults.put(ASK_AUTO_NAMING_PDFS_AGAIN, Boolean.TRUE);
insertDefaultCleanupPreset(defaults);
// defaults for DroppedFileHandler UI
defaults.put(DROPPEDFILEHANDLER_LEAVE, Boolean.FALSE);
defaults.put(DROPPEDFILEHANDLER_COPY, Boolean.TRUE);
defaults.put(DROPPEDFILEHANDLER_MOVE, Boolean.FALSE);
defaults.put(DROPPEDFILEHANDLER_RENAME, Boolean.FALSE);
defaults.put(IMPORT_ALWAYSUSE, Boolean.FALSE);
defaults.put(IMPORT_DEFAULT_PDF_IMPORT_STYLE, ImportSettingsTab.DEFAULT_STYLE);
// use BibTeX key appended with filename as default pattern
defaults.put(IMPORT_FILENAMEPATTERN, ImportSettingsTab.DEFAULT_FILENAMEPATTERNS[1]);
//Default empty String to be backwards compatible
defaults.put(IMPORT_FILEDIRPATTERN, "");
customExports = new CustomExportList(new ExportComparator());
customImports = new CustomImportList(this);
MARKING_WITH_NUMBER_PATTERN = "\\[" + get(DEFAULT_OWNER).replaceAll("\\\\", "\\\\\\\\") + ":(\\d+)\\]";
String defaultExpression = "**/.*[bibtexkey].*\\\\.[extension]";
defaults.put(AUTOLINK_REG_EXP_SEARCH_EXPRESSION_KEY, defaultExpression);
defaults.put(AUTOLINK_USE_REG_EXP_SEARCH_KEY, Boolean.FALSE);
defaults.put(USE_IEEE_ABRV, Boolean.FALSE);
defaults.put(USE_CASE_KEEPER_ON_SEARCH, Boolean.TRUE);
defaults.put(USE_UNIT_FORMATTER_ON_SEARCH, Boolean.TRUE);
defaults.put(USE_DEFAULT_CONSOLE_APPLICATION, Boolean.TRUE);
if (OS.WINDOWS) {
defaults.put(CONSOLE_COMMAND, "C:\\Program Files\\ConEmu\\ConEmu64.exe /single /dir \"%DIR\"");
defaults.put(ADOBE_ACROBAT_COMMAND, "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader");
defaults.put(SUMATRA_PDF_COMMAND, "C:\\Program Files\\SumatraPDF");
defaults.put(USE_PDF_READER, ADOBE_ACROBAT_COMMAND);
} else {
defaults.put(CONSOLE_COMMAND, "");
defaults.put(ADOBE_ACROBAT_COMMAND, "");
defaults.put(SUMATRA_PDF_COMMAND, "");
defaults.put(USE_PDF_READER, "");
}
//versioncheck defaults
defaults.put(VERSION_IGNORED_UPDATE, "");
// preview
defaults.put(CYCLE_PREVIEW, "Preview;" + CitationStyle.DEFAULT);
defaults.put(CYCLE_PREVIEW_POS, 0);
defaults.put(PREVIEW_PANEL_HEIGHT, 200);
defaults.put(PREVIEW_ENABLED, Boolean.TRUE);
defaults.put(PREVIEW_STYLE,
"<font face=\"sans-serif\">"
+ "<b><i>\\bibtextype</i><a name=\"\\bibtexkey\">\\begin{bibtexkey} (\\bibtexkey)</a>"
+ "\\end{bibtexkey}</b><br>__NEWLINE__"
+ "\\begin{author} \\format[Authors(LastFirst,Initials,Semicolon,Amp),HTMLChars]{\\author}<BR>\\end{author}__NEWLINE__"
+ "\\begin{editor} \\format[Authors(LastFirst,Initials,Semicolon,Amp),HTMLChars]{\\editor} "
+ "<i>(\\format[IfPlural(Eds.,Ed.)]{\\editor})</i><BR>\\end{editor}__NEWLINE__"
+ "\\begin{title} \\format[HTMLChars]{\\title} \\end{title}<BR>__NEWLINE__"
+ "\\begin{chapter} \\format[HTMLChars]{\\chapter}<BR>\\end{chapter}__NEWLINE__"
+ "\\begin{journal} <em>\\format[HTMLChars]{\\journal}, </em>\\end{journal}__NEWLINE__"
// Include the booktitle field for @inproceedings, @proceedings, etc.
+ "\\begin{booktitle} <em>\\format[HTMLChars]{\\booktitle}, </em>\\end{booktitle}__NEWLINE__"
+ "\\begin{school} <em>\\format[HTMLChars]{\\school}, </em>\\end{school}__NEWLINE__"
+ "\\begin{institution} <em>\\format[HTMLChars]{\\institution}, </em>\\end{institution}__NEWLINE__"
+ "\\begin{publisher} <em>\\format[HTMLChars]{\\publisher}, </em>\\end{publisher}__NEWLINE__"
+ "\\begin{year}<b>\\year</b>\\end{year}\\begin{volume}<i>, \\volume</i>\\end{volume}"
+ "\\begin{pages}, \\format[FormatPagesForHTML]{\\pages} \\end{pages}__NEWLINE__"
+ "\\begin{abstract}<BR><BR><b>Abstract: </b> \\format[HTMLChars]{\\abstract} \\end{abstract}__NEWLINE__"
+ "\\begin{review}<BR><BR><b>Review: </b> \\format[HTMLChars]{\\review} \\end{review}"
+ "</dd>__NEWLINE__<p></p></font>");
}
public static JabRefPreferences getInstance() {
if (JabRefPreferences.singleton == null) {
JabRefPreferences.singleton = new JabRefPreferences();
}
return JabRefPreferences.singleton;
}
private static String convertListToString(List<String> value) {
return value.stream().map(val -> StringUtil.quote(val, ";", '\\')).collect(Collectors.joining(";"));
}
/**
* Looks up a color definition in preferences, and returns an array containing the RGB values.
*
* @param value The key for this setting.
* @return The RGB values corresponding to this color setting.
*/
private static int[] getRgb(String value) {
int[] values = new int[3];
if ((value != null) && !value.isEmpty()) {
String[] elements = value.split(":");
values[0] = Integer.parseInt(elements[0]);
values[1] = Integer.parseInt(elements[1]);
values[2] = Integer.parseInt(elements[2]);
} else {
values[0] = 0;
values[1] = 0;
values[2] = 0;
}
return values;
}
private static Preferences getPrefsNodeForCustomizedEntryTypes(BibDatabaseMode mode) {
if (mode == BibDatabaseMode.BIBLATEX) {
return Preferences.userNodeForPackage(PREFS_BASE_CLASS).node(CUSTOMIZED_BIBLATEX_TYPES);
}
if (mode == BibDatabaseMode.BIBTEX) {
return Preferences.userNodeForPackage(PREFS_BASE_CLASS).node(CUSTOMIZED_BIBTEX_TYPES);
}
throw new IllegalArgumentException("Unknown BibDatabaseMode: " + mode);
}
private static Optional<String> getNextUnit(Reader data) throws IOException {
// character last read
// -1 if end of stream
// initialization necessary, because of Java compiler
int c = -1;
// last character was escape symbol
boolean escape = false;
// true if a ";" is found
boolean done = false;
StringBuilder res = new StringBuilder();
while (!done && ((c = data.read()) != -1)) {
if (c == '\\') {
if (escape) {
escape = false;
res.append('\\');
} else {
escape = true;
}
} else {
if (c == ';') {
if (escape) {
res.append(';');
} else {
done = true;
}
} else {
res.append((char) c);
}
escape = false;
}
}
if (res.length() > 0) {
return Optional.of(res.toString());
} else if (c == -1) {
// end of stream
return Optional.empty();
} else {
return Optional.of("");
}
}
private static void insertDefaultCleanupPreset(Map<String, Object> storage) {
EnumSet<CleanupPreset.CleanupStep> deactivatedJobs = EnumSet.of(
CleanupPreset.CleanupStep.CLEAN_UP_UPGRADE_EXTERNAL_LINKS,
CleanupPreset.CleanupStep.MOVE_PDF,
CleanupPreset.CleanupStep.RENAME_PDF_ONLY_RELATIVE_PATHS,
CleanupPreset.CleanupStep.CONVERT_TO_BIBLATEX,
CleanupPreset.CleanupStep.CONVERT_TO_BIBTEX);
CleanupPreset preset = new CleanupPreset(EnumSet.complementOf(deactivatedJobs), Cleanups.DEFAULT_SAVE_ACTIONS);
storage.put(CLEANUP_DOI, preset.isCleanUpDOI());
storage.put(CLEANUP_ISSN, preset.isCleanUpISSN());
storage.put(CLEANUP_MOVE_PDF, preset.isMovePDF());
storage.put(CLEANUP_MAKE_PATHS_RELATIVE, preset.isMakePathsRelative());
storage.put(CLEANUP_RENAME_PDF, preset.isRenamePDF());
storage.put(CLEANUP_RENAME_PDF_ONLY_RELATIVE_PATHS, preset.isRenamePdfOnlyRelativePaths());
storage.put(CLEANUP_UPGRADE_EXTERNAL_LINKS, preset.isCleanUpUpgradeExternalLinks());
storage.put(CLEANUP_CONVERT_TO_BIBLATEX, preset.isConvertToBiblatex());
storage.put(CLEANUP_CONVERT_TO_BIBTEX, preset.isConvertToBibtex());
storage.put(CLEANUP_FIX_FILE_LINKS, preset.isFixFileLinks());
storage.put(CLEANUP_FORMATTERS, convertListToString(preset.getFormatterCleanups().getAsStringList(OS.NEWLINE)));
}
public int getFontSizeFX() {
// Decrease font size by 3 since JavaFX has default font size of 9, while Swing uses 12
return getInt(MENU_FONT_SIZE) - 3;
}
public String getUser() {
try {
return get(DEFAULT_OWNER) + '-' + InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException ex) {
LOGGER.debug("Hostname not found.", ex);
return get(DEFAULT_OWNER);
}
}
public List<String> getCustomTabFieldNames() {
List<String> customFields = new ArrayList<>();
int defNumber = 0;
while (true) {
// saved as CUSTOMTABNAME_def{number} and ; separated
String fields = (String) defaults.get(CUSTOM_TAB_FIELDS + "_def" + defNumber);
if ((fields == null) || fields.isEmpty()) {
break;
}
customFields.addAll(Arrays.asList(fields.split(";")));
defNumber++;
}
return customFields;
}
public void setLanguageDependentDefaultValues() {
// Entry editor tab 0:
defaults.put(CUSTOM_TAB_NAME + "_def0", Localization.lang("General"));
String fieldNames = InternalBibtexFields.DEFAULT_GENERAL_FIELDS.stream().collect(Collectors.joining(";"));
defaults.put(CUSTOM_TAB_FIELDS + "_def0", fieldNames);
// Entry editor tab 1:
defaults.put(CUSTOM_TAB_FIELDS + "_def1", FieldName.ABSTRACT);
defaults.put(CUSTOM_TAB_NAME + "_def1", Localization.lang("Abstract"));
// Entry editor tab 2: Review Field - used for research comments, etc.
defaults.put(CUSTOM_TAB_FIELDS + "_def2", FieldName.REVIEW);
defaults.put(CUSTOM_TAB_NAME + "_def2", Localization.lang("Review"));
defaults.put(EMAIL_SUBJECT, Localization.lang("References"));
}
/**
* Check whether a key is set (differently from null).
*
* @param key The key to check.
* @return true if the key is set, false otherwise.
*/
public boolean hasKey(String key) {