From 9c0576590edd2075afebe3f451788d85931f1fd2 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Mon, 23 Mar 2020 21:44:45 +0100 Subject: [PATCH 001/166] Add hint to YourKit --- docs/code-howtos.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/code-howtos.md b/docs/code-howtos.md index 0088427bf57..4e1fd925621 100644 --- a/docs/code-howtos.md +++ b/docs/code-howtos.md @@ -325,6 +325,10 @@ You can normalize the authors using `org.jabref.model.entry.AuthorList.fixAuthor * Return result of calculations \(either explicitly or via a `BlackHole` object\) * [List of examples](https://github.com/melix/jmh-gradle-example/tree/master/src/jmh/java/org/openjdk/jmh/samples) +## Measure performance + +Try out the [YourKit JAva Profiler](https://www.yourkit.com/). + ## equals When creating an `equals` method follow: From 0476a618e55c69abc4e7be441269ee4806d56930 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 24 Mar 2020 14:06:35 +0100 Subject: [PATCH 002/166] Remove incomplete list of supervisors --- docs/teaching.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/teaching.md b/docs/teaching.md index 57138231722..603b5d29694 100644 --- a/docs/teaching.md +++ b/docs/teaching.md @@ -67,7 +67,6 @@ This will help to reduce the load on the JabRef team and improve the quality of #### University of Stuttgart - Course [Studienprojekt](https://www.f05.uni-stuttgart.de/informatik/studierende/bachelor/stupro/) -- Supervisor: [Dr. Oliver Kopp](https://github.com/koppor/) - Summary: A group of nine students experienced the full software engineering process within one year. They worked part-time for the project. - Successfully run 2015/2016. From d36cb35023af84c4304bb6efb4753580fdd5645a Mon Sep 17 00:00:00 2001 From: Igor Steinmacher Date: Wed, 25 Mar 2020 04:22:37 -0700 Subject: [PATCH 003/166] Added Courses offered at NAU and UTFPR (#6173) I offered Open Source courses in which JabRef was one of the "objects" --- docs/teaching.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/teaching.md b/docs/teaching.md index 603b5d29694..d1a56f371f2 100644 --- a/docs/teaching.md +++ b/docs/teaching.md @@ -77,6 +77,22 @@ This will help to reduce the load on the JabRef team and improve the quality of - Course [DD2480 Software Engineering Fundamentals](https://www.kth.se/student/kurser/kurs/DD2480?l=en) - Summary: Groups of students from three to five persons experienced the whole software engineering process within a week: From the requirements specification to the final pull request. +### English + +#### Northern Arizona University (NAU) - US + +- Course [CS499 - Open Source Software Development](https://github.com/igorsteinmacher/CS499-OSS) +- Summary: Students experience the process of getting involved in an Open Source project by engaging with a real project. Their goal is to make a "substantial" contribution to a project. +- Course offered in 2018 + + +### Portuguese + +#### Federal University of Technology, Paraná - Brazil +- Course [Open Source Software](https://github.com/igorsteinmacher/DSL-UTFPR) +- Summary: Students are requested to contribute to an Open Source project to learn about maintenance and evolution of software projects. This project is the predecessor of NAU's CS499. +- Course offered from 2013 to 2016 with different names + ## References 1: Lientz B., Swanson E., 1980: Software Maintenance Management. Addison Wesley, Reading, MA. From a4d64d3d272cde5471fc2dec9b2dfae8b4597482 Mon Sep 17 00:00:00 2001 From: ctreude Date: Wed, 25 Mar 2020 22:11:47 +1030 Subject: [PATCH 004/166] Add course in China (#6176) --- docs/teaching.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/teaching.md b/docs/teaching.md index d1a56f371f2..a3de677f3f3 100644 --- a/docs/teaching.md +++ b/docs/teaching.md @@ -85,6 +85,11 @@ This will help to reduce the load on the JabRef team and improve the quality of - Summary: Students experience the process of getting involved in an Open Source project by engaging with a real project. Their goal is to make a "substantial" contribution to a project. - Course offered in 2018 +#### Harbin Institute of Technology (HIT), China + +- Course: Open Source Software Development +- Summary: In this course, students will be introduced to the processes and tools specific to Open Source Software development, and they will analyze existing projects to understand the architecture and processes of these projects. In addition, students will attempt to contribute source code to a large existing Open Source Software project. +- Course offered in 2018 and 2019. Examples of merged pull requests: [4217](https://github.com/JabRef/jabref/pull/4217), [4255](https://github.com/JabRef/jabref/pull/4255), [4227](https://github.com/JabRef/jabref/pull/4227), [4260](https://github.com/JabRef/jabref/pull/4260), [5150](https://github.com/JabRef/jabref/pull/5150) ### Portuguese From 09782da3efa23c805bc54cf0853741d102c825a7 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Wed, 25 Mar 2020 12:43:32 +0100 Subject: [PATCH 005/166] Fix markdown syntax --- docs/testing.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/testing.md b/docs/testing.md index 5f423fbe548..37c2a7164ee 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -6,9 +6,10 @@ To quickly host a local PostgreSQL database, execute following statement: -\`\`\`shell command docker run -d -e POSTGRES\_USER=postgres -e POSTGRES\_PASSWORD=postgres -e POSTGRES\_DB=postgres -p 5432:5432 --name db postgres:10 postgres -c log\_statement=all +```terminal +docker run -d -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=postgres -p 5432:5432 --name db postgres:10 postgres -c log_statement=all +``` -```text Set the environment variable `DBMS` to `postgres` (or leave it unset) Then, all DBMS Tests (annotated with `@org.jabref.testutils.category.DatabaseTest`) run properly. @@ -17,7 +18,7 @@ Then, all DBMS Tests (annotated with `@org.jabref.testutils.category.DatabaseTes A MySQL DBMS can be started using following command: -``´shell command +```terminal docker run -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=jabref -p 3800:3307 mysql:8.0 --port=3307 ``` From 460771444477fc0eb15ac1145ecd6d720ac91b45 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Wed, 25 Mar 2020 13:56:51 +0100 Subject: [PATCH 006/166] teaching.md: Reorder and add SoPra --- docs/teaching.md | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/docs/teaching.md b/docs/teaching.md index a3de677f3f3..ac6b4c99c77 100644 --- a/docs/teaching.md +++ b/docs/teaching.md @@ -52,9 +52,23 @@ This will help to reduce the load on the JabRef team and improve the quality of > In case your course is missing, feel free to add it. +### English + +#### Harbin Institute of Technology (HIT), China + +- Course: Open Source Software Development +- Summary: In this course, students will be introduced to the processes and tools specific to Open Source Software development, and they will analyze existing projects to understand the architecture and processes of these projects. In addition, students will attempt to contribute source code to a large existing Open Source Software project. +- Course offered in 2018 and 2019. Examples of merged pull requests: [4217](https://github.com/JabRef/jabref/pull/4217), [4255](https://github.com/JabRef/jabref/pull/4255), [4227](https://github.com/JabRef/jabref/pull/4227), [4260](https://github.com/JabRef/jabref/pull/4260), [5150](https://github.com/JabRef/jabref/pull/5150) + +#### Northern Arizona University (NAU), USA + +- Course [CS499 - Open Source Software Development](https://github.com/igorsteinmacher/CS499-OSS) +- Summary: Students experience the process of getting involved in an Open Source project by engaging with a real project. Their goal is to make a "substantial" contribution to a project. +- Course offered in 2018 + ### German -#### Universität Basel +#### Universität Basel, Switzerland - Course [10915-01: Software Engineering](https://dmi.unibas.ch/de/studium/computer-science-informatik/lehrangebot-hs18/vorlesung-software-engineering/) - Lecture Materials: @@ -64,7 +78,13 @@ This will help to reduce the load on the JabRef team and improve the quality of - Introduction to JabRef's code: [Exercise 5](https://github.com/unibas-marcelluethi/software-engineering/blob/master/docs/week5/exercises/practical-exercises.md): Introduction into JabRef code. - Prominent feature implenented: Parse full text references using Grobid. PR [#5614](https://github.com/JabRef/jabref/pull/5614). -#### University of Stuttgart +#### University of Stuttgart, Germany + +- Course "Softwarepraktikum" +- Summary: A group of three students experienced the full software engineering process within one semester. They worked part-time for the project. +- Course offered 2012 + +

- Course [Studienprojekt](https://www.f05.uni-stuttgart.de/informatik/studierende/bachelor/stupro/) - Summary: A group of nine students experienced the full software engineering process within one year. They worked part-time for the project. @@ -72,28 +92,14 @@ This will help to reduce the load on the JabRef team and improve the quality of ### Swedish -#### KTH Royal Institute of Technology +#### KTH Royal Institute of Technology, Sweden - Course [DD2480 Software Engineering Fundamentals](https://www.kth.se/student/kurser/kurs/DD2480?l=en) - Summary: Groups of students from three to five persons experienced the whole software engineering process within a week: From the requirements specification to the final pull request. -### English - -#### Northern Arizona University (NAU) - US - -- Course [CS499 - Open Source Software Development](https://github.com/igorsteinmacher/CS499-OSS) -- Summary: Students experience the process of getting involved in an Open Source project by engaging with a real project. Their goal is to make a "substantial" contribution to a project. -- Course offered in 2018 - -#### Harbin Institute of Technology (HIT), China - -- Course: Open Source Software Development -- Summary: In this course, students will be introduced to the processes and tools specific to Open Source Software development, and they will analyze existing projects to understand the architecture and processes of these projects. In addition, students will attempt to contribute source code to a large existing Open Source Software project. -- Course offered in 2018 and 2019. Examples of merged pull requests: [4217](https://github.com/JabRef/jabref/pull/4217), [4255](https://github.com/JabRef/jabref/pull/4255), [4227](https://github.com/JabRef/jabref/pull/4227), [4260](https://github.com/JabRef/jabref/pull/4260), [5150](https://github.com/JabRef/jabref/pull/5150) - ### Portuguese -#### Federal University of Technology, Paraná - Brazil +#### Federal University of Technology, Paraná, Brazil - Course [Open Source Software](https://github.com/igorsteinmacher/DSL-UTFPR) - Summary: Students are requested to contribute to an Open Source project to learn about maintenance and evolution of software projects. This project is the predecessor of NAU's CS499. - Course offered from 2013 to 2016 with different names From ae9640d58080e50a5b8eb6bcf055c1bff8eb7727 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Wed, 25 Mar 2020 15:41:21 +0100 Subject: [PATCH 007/166] Add PSE and years --- docs/teaching.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/teaching.md b/docs/teaching.md index ac6b4c99c77..d9b4ce652ca 100644 --- a/docs/teaching.md +++ b/docs/teaching.md @@ -82,13 +82,19 @@ This will help to reduce the load on the JabRef team and improve the quality of - Course "Softwarepraktikum" - Summary: A group of three students experienced the full software engineering process within one semester. They worked part-time for the project. -- Course offered 2012 +- Successfully run in 2012

- Course [Studienprojekt](https://www.f05.uni-stuttgart.de/informatik/studierende/bachelor/stupro/) - Summary: A group of nine students experienced the full software engineering process within one year. They worked part-time for the project. -- Successfully run 2015/2016. +- Successfully run in 2015/2016 + +

+ +- Course "Programming and Software Development" as part of the [BSc Software Engineering](https://www.uni-stuttgart.de/en/study/study-programs/Software-Engineering-B.Sc-00001./) +- Summary: One excersice to contribute a minor fix or feature to JabRef. Goal: learn contribution to an open source project using git and GitHub. +- Successfuly run in 2018 ### Swedish @@ -96,6 +102,7 @@ This will help to reduce the load on the JabRef team and improve the quality of - Course [DD2480 Software Engineering Fundamentals](https://www.kth.se/student/kurser/kurs/DD2480?l=en) - Summary: Groups of students from three to five persons experienced the whole software engineering process within a week: From the requirements specification to the final pull request. +- Successfuly run in 2020 ### Portuguese From 1ed7de7f1a6bd438052958788df6dd77d94f97ca Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Wed, 25 Mar 2020 15:47:07 +0100 Subject: [PATCH 008/166] Fix markdown for GitBook --- docs/teaching.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/docs/teaching.md b/docs/teaching.md index d9b4ce652ca..530ed22b224 100644 --- a/docs/teaching.md +++ b/docs/teaching.md @@ -84,13 +84,10 @@ This will help to reduce the load on the JabRef team and improve the quality of - Summary: A group of three students experienced the full software engineering process within one semester. They worked part-time for the project. - Successfully run in 2012 -

-- Course [Studienprojekt](https://www.f05.uni-stuttgart.de/informatik/studierende/bachelor/stupro/) -- Summary: A group of nine students experienced the full software engineering process within one year. They worked part-time for the project. -- Successfully run in 2015/2016 - -

++ Course [Studienprojekt](https://www.f05.uni-stuttgart.de/informatik/studierende/bachelor/stupro/) ++ Summary: A group of nine students experienced the full software engineering process within one year. They worked part-time for the project. ++ Successfully run in 2015/2016 - Course "Programming and Software Development" as part of the [BSc Software Engineering](https://www.uni-stuttgart.de/en/study/study-programs/Software-Engineering-B.Sc-00001./) - Summary: One excersice to contribute a minor fix or feature to JabRef. Goal: learn contribution to an open source project using git and GitHub. From 06e3b7259098f344606c8580fa4cd8feb3476ee9 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Thu, 26 Mar 2020 10:03:44 +0100 Subject: [PATCH 009/166] Fix formatting for GitBook --- docs/teaching.md | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/docs/teaching.md b/docs/teaching.md index 530ed22b224..e2fea5a56a2 100644 --- a/docs/teaching.md +++ b/docs/teaching.md @@ -56,13 +56,15 @@ This will help to reduce the load on the JabRef team and improve the quality of #### Harbin Institute of Technology (HIT), China -- Course: Open Source Software Development +Course: Open Source Software Development + - Summary: In this course, students will be introduced to the processes and tools specific to Open Source Software development, and they will analyze existing projects to understand the architecture and processes of these projects. In addition, students will attempt to contribute source code to a large existing Open Source Software project. - Course offered in 2018 and 2019. Examples of merged pull requests: [4217](https://github.com/JabRef/jabref/pull/4217), [4255](https://github.com/JabRef/jabref/pull/4255), [4227](https://github.com/JabRef/jabref/pull/4227), [4260](https://github.com/JabRef/jabref/pull/4260), [5150](https://github.com/JabRef/jabref/pull/5150) #### Northern Arizona University (NAU), USA -- Course [CS499 - Open Source Software Development](https://github.com/igorsteinmacher/CS499-OSS) +Course [CS499 - Open Source Software Development](https://github.com/igorsteinmacher/CS499-OSS) + - Summary: Students experience the process of getting involved in an Open Source project by engaging with a real project. Their goal is to make a "substantial" contribution to a project. - Course offered in 2018 @@ -70,7 +72,8 @@ This will help to reduce the load on the JabRef team and improve the quality of #### Universität Basel, Switzerland -- Course [10915-01: Software Engineering](https://dmi.unibas.ch/de/studium/computer-science-informatik/lehrangebot-hs18/vorlesung-software-engineering/) +Course [10915-01: Software Engineering](https://dmi.unibas.ch/de/studium/computer-science-informatik/lehrangebot-hs18/vorlesung-software-engineering/) + - Lecture Materials: - Successfully run Q3 2019. - Excercise touching JabRef: @@ -80,16 +83,18 @@ This will help to reduce the load on the JabRef team and improve the quality of #### University of Stuttgart, Germany -- Course "Softwarepraktikum" +Course "Softwarepraktikum" as part of the [BSc Informatik](https://www.f05.uni-stuttgart.de/informatik/interessierte/bachelor/informatik/) + - Summary: A group of three students experienced the full software engineering process within one semester. They worked part-time for the project. - Successfully run in 2012 +Course [Studienprojekt](https://www.f05.uni-stuttgart.de/informatik/studierende/bachelor/stupro/) as part of the [BSc Software Engineering](https://www.uni-stuttgart.de/en/study/study-programs/Software-Engineering-B.Sc-00001./) -+ Course [Studienprojekt](https://www.f05.uni-stuttgart.de/informatik/studierende/bachelor/stupro/) -+ Summary: A group of nine students experienced the full software engineering process within one year. They worked part-time for the project. -+ Successfully run in 2015/2016 +- Summary: A group of nine students experienced the full software engineering process within one year. They worked part-time for the project. +- Successfully run in 2015/2016 + +Course "Programming and Software Development" as part of the [BSc Software Engineering](https://www.uni-stuttgart.de/en/study/study-programs/Software-Engineering-B.Sc-00001./) -- Course "Programming and Software Development" as part of the [BSc Software Engineering](https://www.uni-stuttgart.de/en/study/study-programs/Software-Engineering-B.Sc-00001./) - Summary: One excersice to contribute a minor fix or feature to JabRef. Goal: learn contribution to an open source project using git and GitHub. - Successfuly run in 2018 @@ -97,14 +102,17 @@ This will help to reduce the load on the JabRef team and improve the quality of #### KTH Royal Institute of Technology, Sweden -- Course [DD2480 Software Engineering Fundamentals](https://www.kth.se/student/kurser/kurs/DD2480?l=en) +Course [DD2480 Software Engineering Fundamentals](https://www.kth.se/student/kurser/kurs/DD2480?l=en) + - Summary: Groups of students from three to five persons experienced the whole software engineering process within a week: From the requirements specification to the final pull request. - Successfuly run in 2020 ### Portuguese #### Federal University of Technology, Paraná, Brazil -- Course [Open Source Software](https://github.com/igorsteinmacher/DSL-UTFPR) + +Course [Open Source Software](https://github.com/igorsteinmacher/DSL-UTFPR) + - Summary: Students are requested to contribute to an Open Source project to learn about maintenance and evolution of software projects. This project is the predecessor of NAU's CS499. - Course offered from 2013 to 2016 with different names From 64e35c1aab302bed505f9829c82132adee1d05ad Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> Date: Sat, 28 Mar 2020 20:11:05 +0100 Subject: [PATCH 010/166] Refactored general preferences (#6171) * Refactored general preferences to a new preferences class * Rewording to reduce unnecessary changes --- src/main/java/org/jabref/gui/BasePanel.java | 6 +- .../BibtexExtractorViewModel.java | 19 +- .../FindUnlinkedFilesDialog.java | 4 +- .../gui/externalfiles/ImportHandler.java | 21 +- .../org/jabref/gui/importer/ImportAction.java | 2 +- .../gui/importer/ImportEntriesViewModel.java | 4 +- .../actions/AppendDatabaseAction.java | 9 +- .../org/jabref/gui/maintable/MainTable.java | 4 +- .../gui/preferences/GeneralTabViewModel.java | 113 +++++---- .../logic/preferences/OwnerPreferences.java | 27 ++ .../preferences/TimestampPreferences.java | 19 +- .../org/jabref/logic/util/UpdateField.java | 46 ++-- .../logic/util/UpdateFieldPreferences.java | 55 ---- .../preferences/GeneralPreferences.java | 74 ++++++ .../jabref/preferences/JabRefPreferences.java | 239 +++++++++++------- .../preferences/PreferencesService.java | 43 +++- .../org/jabref/JabRefPreferencesTest.java | 7 +- 17 files changed, 424 insertions(+), 268 deletions(-) create mode 100644 src/main/java/org/jabref/logic/preferences/OwnerPreferences.java delete mode 100644 src/main/java/org/jabref/logic/util/UpdateFieldPreferences.java create mode 100644 src/main/java/org/jabref/preferences/GeneralPreferences.java diff --git a/src/main/java/org/jabref/gui/BasePanel.java b/src/main/java/org/jabref/gui/BasePanel.java index 330463448ed..934f93c8133 100644 --- a/src/main/java/org/jabref/gui/BasePanel.java +++ b/src/main/java/org/jabref/gui/BasePanel.java @@ -261,7 +261,11 @@ public void insertEntries(final List entries) { // Set owner and timestamp for (BibEntry entry : entries) { - UpdateField.setAutomaticFields(entry, true, true, Globals.prefs.getUpdateFieldPreferences()); + UpdateField.setAutomaticFields(entry, + true, + true, + Globals.prefs.getOwnerPreferences(), + Globals.prefs.getTimestampPreferences()); } // Create an UndoableInsertEntries object. getUndoManager().addEdit(new UndoableInsertEntries(bibDatabaseContext.getDatabase(), entries)); diff --git a/src/main/java/org/jabref/gui/bibtexextractor/BibtexExtractorViewModel.java b/src/main/java/org/jabref/gui/bibtexextractor/BibtexExtractorViewModel.java index c68ae79c3a8..f69dfd51675 100644 --- a/src/main/java/org/jabref/gui/bibtexextractor/BibtexExtractorViewModel.java +++ b/src/main/java/org/jabref/gui/bibtexextractor/BibtexExtractorViewModel.java @@ -30,12 +30,25 @@ public class BibtexExtractorViewModel { private TaskExecutor taskExecutor; private ImportHandler importHandler; - public BibtexExtractorViewModel(BibDatabaseContext bibdatabaseContext, DialogService dialogService, - JabRefPreferences jabRefPreferences, FileUpdateMonitor fileUpdateMonitor, TaskExecutor taskExecutor, UndoManager undoManager, StateManager stateManager) { + public BibtexExtractorViewModel(BibDatabaseContext bibdatabaseContext, + DialogService dialogService, + JabRefPreferences jabRefPreferences, + FileUpdateMonitor fileUpdateMonitor, + TaskExecutor taskExecutor, + UndoManager undoManager, + StateManager stateManager) { + this.dialogService = dialogService; currentCitationfetcher = new GrobidCitationFetcher(jabRefPreferences.getImportFormatPreferences()); this.taskExecutor = taskExecutor; - this.importHandler = new ImportHandler(dialogService, bibdatabaseContext, ExternalFileTypes.getInstance(), jabRefPreferences.getFilePreferences(), jabRefPreferences.getImportFormatPreferences(), jabRefPreferences.getUpdateFieldPreferences(), fileUpdateMonitor, undoManager, stateManager); + this.importHandler = new ImportHandler( + dialogService, + bibdatabaseContext, + ExternalFileTypes.getInstance(), + jabRefPreferences, + fileUpdateMonitor, + undoManager, + stateManager); } public StringProperty inputTextProperty() { diff --git a/src/main/java/org/jabref/gui/externalfiles/FindUnlinkedFilesDialog.java b/src/main/java/org/jabref/gui/externalfiles/FindUnlinkedFilesDialog.java index ff250cb7a6b..9c2698126db 100644 --- a/src/main/java/org/jabref/gui/externalfiles/FindUnlinkedFilesDialog.java +++ b/src/main/java/org/jabref/gui/externalfiles/FindUnlinkedFilesDialog.java @@ -86,9 +86,7 @@ public FindUnlinkedFilesDialog(BibDatabaseContext database, DialogService dialog dialogService, databaseContext, ExternalFileTypes.getInstance(), - Globals.prefs.getFilePreferences(), - Globals.prefs.getImportFormatPreferences(), - Globals.prefs.getUpdateFieldPreferences(), + preferences, Globals.getFileUpdateMonitor(), undoManager, Globals.stateManager); diff --git a/src/main/java/org/jabref/gui/externalfiles/ImportHandler.java b/src/main/java/org/jabref/gui/externalfiles/ImportHandler.java index 6e155fee70e..2739d923945 100644 --- a/src/main/java/org/jabref/gui/externalfiles/ImportHandler.java +++ b/src/main/java/org/jabref/gui/externalfiles/ImportHandler.java @@ -15,9 +15,7 @@ import org.jabref.gui.undo.UndoableInsertEntries; import org.jabref.logic.bibtexkeypattern.BibtexKeyGenerator; import org.jabref.logic.externalfiles.ExternalFilesContentImporter; -import org.jabref.logic.importer.ImportFormatPreferences; import org.jabref.logic.util.UpdateField; -import org.jabref.logic.util.UpdateFieldPreferences; import org.jabref.logic.util.io.FileUtil; import org.jabref.model.FieldChange; import org.jabref.model.database.BibDatabaseContext; @@ -25,13 +23,13 @@ import org.jabref.model.entry.field.StandardField; import org.jabref.model.groups.GroupEntryChanger; import org.jabref.model.groups.GroupTreeNode; -import org.jabref.model.metadata.FilePreferences; import org.jabref.model.util.FileUpdateMonitor; +import org.jabref.preferences.PreferencesService; public class ImportHandler { private final BibDatabaseContext database; - private final UpdateFieldPreferences updateFieldPreferences; + private final PreferencesService preferencesService; private final DialogService dialogService; private final FileUpdateMonitor fileUpdateMonitor; private final ExternalFilesEntryLinker linker; @@ -42,21 +40,20 @@ public class ImportHandler { public ImportHandler(DialogService dialogService, BibDatabaseContext database, ExternalFileTypes externalFileTypes, - FilePreferences filePreferences, - ImportFormatPreferences importFormatPreferences, - UpdateFieldPreferences updateFieldPreferences, + PreferencesService preferencesService, FileUpdateMonitor fileupdateMonitor, UndoManager undoManager, StateManager stateManager) { this.dialogService = dialogService; this.database = database; - this.updateFieldPreferences = updateFieldPreferences; + + this.preferencesService = preferencesService; this.fileUpdateMonitor = fileupdateMonitor; this.stateManager = stateManager; - this.linker = new ExternalFilesEntryLinker(externalFileTypes, filePreferences, database); - this.contentImporter = new ExternalFilesContentImporter(importFormatPreferences); + this.linker = new ExternalFilesEntryLinker(externalFileTypes, preferencesService.getFilePreferences(), database); + this.contentImporter = new ExternalFilesContentImporter(preferencesService.getImportFormatPreferences()); this.undoManager = undoManager; } @@ -114,7 +111,9 @@ public void importEntries(List entries) { database.getDatabase().insertEntries(entries); // Set owner/timestamp - UpdateField.setAutomaticFields(entries, updateFieldPreferences); + UpdateField.setAutomaticFields(entries, + preferencesService.getOwnerPreferences(), + preferencesService.getTimestampPreferences()); // Generate bibtex keys generateKeys(entries); diff --git a/src/main/java/org/jabref/gui/importer/ImportAction.java b/src/main/java/org/jabref/gui/importer/ImportAction.java index 2221c2e439c..e2cda21768e 100644 --- a/src/main/java/org/jabref/gui/importer/ImportAction.java +++ b/src/main/java/org/jabref/gui/importer/ImportAction.java @@ -153,7 +153,7 @@ private ParserResult mergeImportResults(List entriesToImport) dialogService, database, ExternalFileTypes.getInstance(), - preferences.getFilePreferences(), - preferences.getImportFormatPreferences(), - preferences.getUpdateFieldPreferences(), + preferences, fileUpdateMonitor, undoManager, stateManager); diff --git a/src/main/java/org/jabref/gui/importer/actions/AppendDatabaseAction.java b/src/main/java/org/jabref/gui/importer/actions/AppendDatabaseAction.java index 60feebd3548..2f1825631ff 100644 --- a/src/main/java/org/jabref/gui/importer/actions/AppendDatabaseAction.java +++ b/src/main/java/org/jabref/gui/importer/actions/AppendDatabaseAction.java @@ -73,12 +73,15 @@ private static void mergeFromBibtex(BasePanel panel, ParserResult parserResult, if (importEntries) { // Add entries boolean overwriteOwner = Globals.prefs.getBoolean(JabRefPreferences.OVERWRITE_OWNER); - boolean overwriteTimeStamp = Globals.prefs.getTimestampPreferences().overwriteTimestamp(); + boolean overwriteTimeStamp = Globals.prefs.getTimestampPreferences().isOverwriteTimestamp(); for (BibEntry originalEntry : fromDatabase.getEntries()) { BibEntry entry = (BibEntry) originalEntry.clone(); - UpdateField.setAutomaticFields(entry, overwriteOwner, overwriteTimeStamp, - Globals.prefs.getUpdateFieldPreferences()); + UpdateField.setAutomaticFields(entry, + overwriteOwner, + overwriteTimeStamp, + Globals.prefs.getOwnerPreferences(), + Globals.prefs.getTimestampPreferences()); entriesToAppend.add(entry); } database.insertEntries(entriesToAppend); diff --git a/src/main/java/org/jabref/gui/maintable/MainTable.java b/src/main/java/org/jabref/gui/maintable/MainTable.java index 24fa8753183..f182dbaf07d 100644 --- a/src/main/java/org/jabref/gui/maintable/MainTable.java +++ b/src/main/java/org/jabref/gui/maintable/MainTable.java @@ -69,9 +69,7 @@ public MainTable(MainTableDataModel model, JabRefFrame frame, importHandler = new ImportHandler( frame.getDialogService(), database, externalFileTypes, - Globals.prefs.getFilePreferences(), - Globals.prefs.getImportFormatPreferences(), - Globals.prefs.getUpdateFieldPreferences(), + Globals.prefs, Globals.getFileUpdateMonitor(), undoManager, Globals.stateManager); diff --git a/src/main/java/org/jabref/gui/preferences/GeneralTabViewModel.java b/src/main/java/org/jabref/gui/preferences/GeneralTabViewModel.java index ff32611f19a..270325f036a 100644 --- a/src/main/java/org/jabref/gui/preferences/GeneralTabViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/GeneralTabViewModel.java @@ -19,8 +19,12 @@ import org.jabref.logic.l10n.Encodings; import org.jabref.logic.l10n.Language; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preferences.OwnerPreferences; +import org.jabref.logic.preferences.TimestampPreferences; import org.jabref.model.database.BibDatabaseMode; -import org.jabref.preferences.JabRefPreferences; +import org.jabref.model.entry.field.FieldFactory; +import org.jabref.preferences.GeneralPreferences; +import org.jabref.preferences.PreferencesService; import de.saxsys.mvvmfx.utils.validation.FunctionBasedValidator; import de.saxsys.mvvmfx.utils.validation.ValidationMessage; @@ -54,14 +58,20 @@ public class GeneralTabViewModel implements PreferenceTabViewModel { private Validator markTimeStampFormatValidator; private final DialogService dialogService; - private final JabRefPreferences preferences; + private final PreferencesService preferencesService; + private final GeneralPreferences initialGeneralPreferences; + private final OwnerPreferences initialOwnerPreferences; + private final TimestampPreferences initialTimestampPreferences; private List restartWarning = new ArrayList<>(); @SuppressWarnings("ReturnValueIgnored") - public GeneralTabViewModel(DialogService dialogService, JabRefPreferences preferences) { + public GeneralTabViewModel(DialogService dialogService, PreferencesService preferencesService) { this.dialogService = dialogService; - this.preferences = preferences; + this.preferencesService = preferencesService; + this.initialGeneralPreferences = preferencesService.getGeneralPreferences(); + this.initialOwnerPreferences = preferencesService.getOwnerPreferences(); + this.initialTimestampPreferences = preferencesService.getTimestampPreferences(); markTimeStampFormatValidator = new FunctionBasedValidator<>( markTimeStampFormatProperty, @@ -85,70 +95,69 @@ public GeneralTabViewModel(DialogService dialogService, JabRefPreferences prefer public void setValues() { languagesListProperty.setValue(FXCollections.observableArrayList(Language.values())); - selectedLanguageProperty.setValue(preferences.getLanguage()); + selectedLanguageProperty.setValue(preferencesService.getLanguage()); encodingsListProperty.setValue(FXCollections.observableArrayList(Encodings.getCharsets())); - selectedEncodingProperty.setValue(preferences.getDefaultEncoding()); + selectedEncodingProperty.setValue(initialGeneralPreferences.getDefaultEncoding()); bibliographyModeListProperty.setValue(FXCollections.observableArrayList(BibDatabaseMode.values())); - if (preferences.getBoolean(JabRefPreferences.BIBLATEX_DEFAULT_MODE)) { - selectedBiblatexModeProperty.setValue(BibDatabaseMode.BIBLATEX); - } else { - selectedBiblatexModeProperty.setValue(BibDatabaseMode.BIBTEX); - } - - inspectionWarningDuplicateProperty.setValue(preferences.getBoolean(JabRefPreferences.WARN_ABOUT_DUPLICATES_IN_INSPECTION)); - confirmDeleteProperty.setValue(preferences.getBoolean(JabRefPreferences.CONFIRM_DELETE)); - enforceLegalKeysProperty.setValue(preferences.getBoolean(JabRefPreferences.ENFORCE_LEGAL_BIBTEX_KEY)); - allowIntegerEditionProperty.setValue(preferences.getBoolean(JabRefPreferences.ALLOW_INTEGER_EDITION_BIBTEX)); - memoryStickModeProperty.setValue(preferences.getBoolean(JabRefPreferences.MEMORY_STICK_MODE)); - collectTelemetryProperty.setValue(preferences.shouldCollectTelemetry()); - showAdvancedHintsProperty.setValue(preferences.getBoolean(JabRefPreferences.SHOW_ADVANCED_HINTS)); - - markOwnerProperty.setValue(preferences.getBoolean(JabRefPreferences.USE_OWNER)); - markOwnerNameProperty.setValue(preferences.get(JabRefPreferences.DEFAULT_OWNER)); - markOwnerOverwriteProperty.setValue(preferences.getBoolean(JabRefPreferences.OVERWRITE_OWNER)); - - markTimestampProperty.setValue(preferences.getBoolean(JabRefPreferences.USE_TIME_STAMP)); - markTimeStampFormatProperty.setValue(preferences.get(JabRefPreferences.TIME_STAMP_FORMAT)); - markTimeStampOverwriteProperty.setValue(preferences.getBoolean(JabRefPreferences.OVERWRITE_TIME_STAMP)); - markTimeStampFieldNameProperty.setValue(preferences.get(JabRefPreferences.TIME_STAMP_FIELD)); - updateTimeStampProperty.setValue(preferences.getBoolean(JabRefPreferences.UPDATE_TIMESTAMP)); + selectedBiblatexModeProperty.setValue(initialGeneralPreferences.getDefaultBibDatabaseMode()); + + inspectionWarningDuplicateProperty.setValue(initialGeneralPreferences.isWarnAboutDuplicatesInInspection()); + confirmDeleteProperty.setValue(initialGeneralPreferences.isConfirmDelete()); + enforceLegalKeysProperty.setValue(initialGeneralPreferences.isEnforceLegalBibtexKey()); + allowIntegerEditionProperty.setValue(initialGeneralPreferences.isAllowIntegerEditionBibtex()); + memoryStickModeProperty.setValue(initialGeneralPreferences.isMemoryStickMode()); + collectTelemetryProperty.setValue(preferencesService.shouldCollectTelemetry()); + showAdvancedHintsProperty.setValue(initialGeneralPreferences.isShowAdvancedHints()); + + markOwnerProperty.setValue(initialOwnerPreferences.isUseOwner()); + markOwnerNameProperty.setValue(initialOwnerPreferences.getDefaultOwner()); + markOwnerOverwriteProperty.setValue(initialOwnerPreferences.isOverwriteOwner()); + + markTimestampProperty.setValue(initialTimestampPreferences.isUseTimestamps()); + markTimeStampFormatProperty.setValue(initialTimestampPreferences.getTimestampFormat()); + markTimeStampOverwriteProperty.setValue(initialTimestampPreferences.isOverwriteTimestamp()); + markTimeStampFieldNameProperty.setValue(initialTimestampPreferences.getTimestampField().getName()); + updateTimeStampProperty.setValue(initialTimestampPreferences.isUpdateTimestamp()); } public void storeSettings() { Language newLanguage = selectedLanguageProperty.getValue(); - if (newLanguage != preferences.getLanguage()) { - preferences.setLanguage(newLanguage); + if (newLanguage != preferencesService.getLanguage()) { + preferencesService.setLanguage(newLanguage); Localization.setLanguage(newLanguage); restartWarning.add(Localization.lang("Changed language") + ": " + newLanguage.getDisplayName()); } - preferences.setDefaultEncoding(selectedEncodingProperty.getValue()); - preferences.putBoolean(JabRefPreferences.BIBLATEX_DEFAULT_MODE, selectedBiblatexModeProperty.getValue() == BibDatabaseMode.BIBLATEX); - - preferences.putBoolean(JabRefPreferences.WARN_ABOUT_DUPLICATES_IN_INSPECTION, inspectionWarningDuplicateProperty.getValue()); - preferences.putBoolean(JabRefPreferences.CONFIRM_DELETE, confirmDeleteProperty.getValue()); - preferences.putBoolean(JabRefPreferences.ENFORCE_LEGAL_BIBTEX_KEY, enforceLegalKeysProperty.getValue()); - preferences.putBoolean(JabRefPreferences.ALLOW_INTEGER_EDITION_BIBTEX, allowIntegerEditionProperty.getValue()); - if (preferences.getBoolean(JabRefPreferences.MEMORY_STICK_MODE) && !memoryStickModeProperty.getValue()) { + if (initialGeneralPreferences.isMemoryStickMode() && !memoryStickModeProperty.getValue()) { dialogService.showInformationDialogAndWait(Localization.lang("Memory stick mode"), Localization.lang("To disable the memory stick mode" + " rename or remove the jabref.xml file in the same folder as JabRef.")); } - preferences.putBoolean(JabRefPreferences.MEMORY_STICK_MODE, memoryStickModeProperty.getValue()); - preferences.setShouldCollectTelemetry(collectTelemetryProperty.getValue()); - preferences.putBoolean(JabRefPreferences.SHOW_ADVANCED_HINTS, showAdvancedHintsProperty.getValue()); - - preferences.putBoolean(JabRefPreferences.USE_OWNER, markOwnerProperty.getValue()); - preferences.put(JabRefPreferences.DEFAULT_OWNER, markOwnerNameProperty.getValue().trim()); - preferences.putBoolean(JabRefPreferences.OVERWRITE_OWNER, markOwnerOverwriteProperty.getValue()); - - preferences.putBoolean(JabRefPreferences.USE_TIME_STAMP, markTimestampProperty.getValue()); - preferences.put(JabRefPreferences.TIME_STAMP_FORMAT, markTimeStampFormatProperty.getValue().trim()); - preferences.put(JabRefPreferences.TIME_STAMP_FIELD, markTimeStampFieldNameProperty.getValue().trim()); - preferences.putBoolean(JabRefPreferences.OVERWRITE_TIME_STAMP, markTimeStampOverwriteProperty.getValue()); - preferences.putBoolean(JabRefPreferences.UPDATE_TIMESTAMP, updateTimeStampProperty.getValue()); + + preferencesService.storeGeneralPreferences(new GeneralPreferences( + selectedEncodingProperty.getValue(), + selectedBiblatexModeProperty.getValue(), + inspectionWarningDuplicateProperty.getValue(), + confirmDeleteProperty.getValue(), + enforceLegalKeysProperty.getValue(), + allowIntegerEditionProperty.getValue(), + memoryStickModeProperty.getValue(), + collectTelemetryProperty.getValue(), + showAdvancedHintsProperty.getValue())); + + preferencesService.storeOwnerPreferences(new OwnerPreferences( + markOwnerProperty.getValue(), + markOwnerNameProperty.getValue().trim(), + markOwnerOverwriteProperty.getValue())); + + preferencesService.storeTimestampPreferences(new TimestampPreferences( + markTimestampProperty.getValue(), + updateTimeStampProperty.getValue(), + FieldFactory.parseField(markTimeStampFieldNameProperty.getValue().trim()), + markTimeStampFormatProperty.getValue().trim(), + markTimeStampOverwriteProperty.getValue())); } public ValidationStatus markTimeStampFormatValidationStatus() { diff --git a/src/main/java/org/jabref/logic/preferences/OwnerPreferences.java b/src/main/java/org/jabref/logic/preferences/OwnerPreferences.java new file mode 100644 index 00000000000..8c18d099124 --- /dev/null +++ b/src/main/java/org/jabref/logic/preferences/OwnerPreferences.java @@ -0,0 +1,27 @@ +package org.jabref.logic.preferences; + +public class OwnerPreferences { + private final boolean useOwner; + private final String defaultOwner; + private final boolean overwriteOwner; + + public OwnerPreferences(boolean useOwner, + String defaultOwner, + boolean overwriteOwner) { + this.useOwner = useOwner; + this.defaultOwner = defaultOwner; + this.overwriteOwner = overwriteOwner; + } + + public boolean isUseOwner() { + return useOwner; + } + + public String getDefaultOwner() { + return defaultOwner; + } + + public boolean isOverwriteOwner() { + return overwriteOwner; + } +} diff --git a/src/main/java/org/jabref/logic/preferences/TimestampPreferences.java b/src/main/java/org/jabref/logic/preferences/TimestampPreferences.java index cb143709d58..fc24b3f5d1d 100644 --- a/src/main/java/org/jabref/logic/preferences/TimestampPreferences.java +++ b/src/main/java/org/jabref/logic/preferences/TimestampPreferences.java @@ -7,25 +7,25 @@ public class TimestampPreferences { private final boolean useTimestamps; - private final boolean useModifiedTimestamp; + private final boolean updateTimestamp; private final Field timestampField; private final String timestampFormat; private final boolean overwriteTimestamp; - public TimestampPreferences(boolean useTimestamps, boolean useModifiedTimestamp, Field timestampField, String timestampFormat, boolean overwriteTimestamp) { + public TimestampPreferences(boolean useTimestamps, boolean updateTimestamp, Field timestampField, String timestampFormat, boolean overwriteTimestamp) { this.useTimestamps = useTimestamps; - this.useModifiedTimestamp = useModifiedTimestamp; + this.updateTimestamp = updateTimestamp; this.timestampField = timestampField; this.timestampFormat = timestampFormat; this.overwriteTimestamp = overwriteTimestamp; } - public boolean includeCreatedTimestamp() { + public boolean isUseTimestamps() { return useTimestamps; } - public boolean includeModifiedTimestamp() { - return useModifiedTimestamp; + public boolean isUpdateTimestamp() { + return updateTimestamp; } public Field getTimestampField() { @@ -36,16 +36,15 @@ public String getTimestampFormat() { return timestampFormat; } - public boolean overwriteTimestamp() { + public boolean isOverwriteTimestamp() { return overwriteTimestamp; } public boolean includeTimestamps() { - return useTimestamps && useModifiedTimestamp; + return useTimestamps && updateTimestamp; } public String now() { - String timeStampFormat = timestampFormat; - return DateTimeFormatter.ofPattern(timeStampFormat).format(LocalDateTime.now()); + return DateTimeFormatter.ofPattern(timestampFormat).format(LocalDateTime.now()); } } diff --git a/src/main/java/org/jabref/logic/util/UpdateField.java b/src/main/java/org/jabref/logic/util/UpdateField.java index d16c0ffc70e..681571cb53c 100644 --- a/src/main/java/org/jabref/logic/util/UpdateField.java +++ b/src/main/java/org/jabref/logic/util/UpdateField.java @@ -5,6 +5,8 @@ import java.util.Collection; import java.util.Optional; +import org.jabref.logic.preferences.OwnerPreferences; +import org.jabref.logic.preferences.TimestampPreferences; import org.jabref.model.FieldChange; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.Field; @@ -89,18 +91,23 @@ public static Optional updateField(BibEntry be, Field field, String * @param overwriteTimestamp Indicates whether timestamp should be set if it is already set. */ public static void setAutomaticFields(BibEntry entry, boolean overwriteOwner, boolean overwriteTimestamp, - UpdateFieldPreferences prefs) { - String defaultOwner = prefs.getDefaultOwner(); - String timestamp = DateTimeFormatter.ofPattern(prefs.getTimeStampFormat()).format(LocalDateTime.now()); - Field timeStampField = prefs.getTimeStampField(); - boolean setOwner = prefs.isUseOwner() && (overwriteOwner || (!entry.hasField(InternalField.OWNER))); - boolean setTimeStamp = prefs.isUseTimeStamp() && (overwriteTimestamp || (!entry.hasField(timeStampField))); + OwnerPreferences ownerPreferences, TimestampPreferences timestampPreferences) { + String defaultOwner = ownerPreferences.getDefaultOwner(); + String timestamp = DateTimeFormatter.ofPattern(timestampPreferences.getTimestampFormat()).format(LocalDateTime.now()); + Field timeStampField = timestampPreferences.getTimestampField(); + boolean setOwner = ownerPreferences.isUseOwner() && (overwriteOwner || (!entry.hasField(InternalField.OWNER))); + boolean setTimeStamp = timestampPreferences.isUseTimestamps() && (overwriteTimestamp || (!entry.hasField(timeStampField))); setAutomaticFields(entry, setOwner, defaultOwner, setTimeStamp, timeStampField, timestamp); } - public static void setAutomaticFields(BibEntry entry, UpdateFieldPreferences prefs) { - UpdateField.setAutomaticFields(entry, prefs.isOverwriteOwner(), prefs.isOverwriteTimeStamp(), prefs); + public static void setAutomaticFields(BibEntry entry, + OwnerPreferences ownerPreferences, TimestampPreferences timestampPreferences) { + UpdateField.setAutomaticFields(entry, + ownerPreferences.isOverwriteOwner(), + timestampPreferences.isOverwriteTimestamp(), + ownerPreferences, + timestampPreferences); } private static void setAutomaticFields(BibEntry entry, boolean setOwner, String owner, boolean setTimeStamp, @@ -123,20 +130,20 @@ private static void setAutomaticFields(BibEntry entry, boolean setOwner, String * * @param bibs List of bibtex entries */ - public static void setAutomaticFields(Collection bibs, boolean overwriteOwner, - boolean overwriteTimestamp, UpdateFieldPreferences prefs) { + public static void setAutomaticFields(Collection bibs, boolean overwriteOwner, boolean overwriteTimestamp, + OwnerPreferences ownerPreferences, TimestampPreferences timestampPreferences) { - boolean globalSetOwner = prefs.isUseOwner(); - boolean globalSetTimeStamp = prefs.isUseTimeStamp(); + boolean globalSetOwner = ownerPreferences.isUseOwner(); + boolean globalSetTimeStamp = timestampPreferences.isUseTimestamps(); // Do not need to do anything if all options are disabled if (!(globalSetOwner || globalSetTimeStamp)) { return; } - Field timeStampField = prefs.getTimeStampField(); - String defaultOwner = prefs.getDefaultOwner(); - String timestamp = DateTimeFormatter.ofPattern(prefs.getTimeStampFormat()).format(LocalDateTime.now()); + Field timeStampField = timestampPreferences.getTimestampField(); + String defaultOwner = ownerPreferences.getDefaultOwner(); + String timestamp = DateTimeFormatter.ofPattern(timestampPreferences.getTimestampFormat()).format(LocalDateTime.now()); // Iterate through all entries for (BibEntry curEntry : bibs) { @@ -146,7 +153,12 @@ public static void setAutomaticFields(Collection bibs, boolean overwri } } - public static void setAutomaticFields(Collection bibs, UpdateFieldPreferences prefs) { - UpdateField.setAutomaticFields(bibs, prefs.isOverwriteOwner(), prefs.isOverwriteTimeStamp(), prefs); + public static void setAutomaticFields(Collection bibs, + OwnerPreferences ownerPreferences, TimestampPreferences timestampPreferences) { + UpdateField.setAutomaticFields(bibs, + ownerPreferences.isOverwriteOwner(), + timestampPreferences.isOverwriteTimestamp(), + ownerPreferences, + timestampPreferences); } } diff --git a/src/main/java/org/jabref/logic/util/UpdateFieldPreferences.java b/src/main/java/org/jabref/logic/util/UpdateFieldPreferences.java deleted file mode 100644 index 4274a4477b1..00000000000 --- a/src/main/java/org/jabref/logic/util/UpdateFieldPreferences.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.jabref.logic.util; - -import org.jabref.model.entry.field.Field; - -public class UpdateFieldPreferences { - - private final boolean useOwner; - private final boolean useTimeStamp; - private final boolean overwriteOwner; - private final boolean overwriteTimeStamp; - private final Field timeStampField; - private final String timeStampFormat; - private final String defaultOwner; - - - public UpdateFieldPreferences(boolean useOwner, boolean overwriteOwner, String defaultOwner, boolean useTimeStamp, - boolean overwriteTimeStamp, Field timeStampField, - String timeStampFormat) { - this.useOwner = useOwner; - this.overwriteOwner = overwriteOwner; - this.defaultOwner = defaultOwner; - this.useTimeStamp = useTimeStamp; - this.overwriteTimeStamp = overwriteTimeStamp; - this.timeStampField = timeStampField; - this.timeStampFormat = timeStampFormat; - } - - public boolean isUseOwner() { - return useOwner; - } - - public boolean isUseTimeStamp() { - return useTimeStamp; - } - - public Field getTimeStampField() { - return timeStampField; - } - - public String getDefaultOwner() { - return defaultOwner; - } - - public String getTimeStampFormat() { - return timeStampFormat; - } - - public boolean isOverwriteOwner() { - return overwriteOwner; - } - - public boolean isOverwriteTimeStamp() { - return overwriteTimeStamp; - } -} diff --git a/src/main/java/org/jabref/preferences/GeneralPreferences.java b/src/main/java/org/jabref/preferences/GeneralPreferences.java new file mode 100644 index 00000000000..40e0092361e --- /dev/null +++ b/src/main/java/org/jabref/preferences/GeneralPreferences.java @@ -0,0 +1,74 @@ +package org.jabref.preferences; + +import java.nio.charset.Charset; + +import org.jabref.model.database.BibDatabaseMode; + +public class GeneralPreferences { + private final Charset defaultEncoding; + private final BibDatabaseMode defaultBibDatabaseMode; + + private final boolean warnAboutDuplicatesInInspection; + private final boolean confirmDelete; + private final boolean enforceLegalBibtexKey; + private final boolean allowIntegerEditionBibtex; + private final boolean memoryStickMode; + private final boolean collectTelemetry; + private final boolean showAdvancedHints; + + public GeneralPreferences(Charset defaultEncoding, + BibDatabaseMode defaultBibDatabaseMode, + boolean warnAboutDuplicatesInInspection, + boolean confirmDelete, + boolean enforceLegalBibtexKey, + boolean allowIntegerEditionBibtex, + boolean memoryStickMode, + boolean collectTelemetry, + boolean showAdvancedHints) { + this.defaultEncoding = defaultEncoding; + this.defaultBibDatabaseMode = defaultBibDatabaseMode; + this.warnAboutDuplicatesInInspection = warnAboutDuplicatesInInspection; + this.confirmDelete = confirmDelete; + this.enforceLegalBibtexKey = enforceLegalBibtexKey; + this.allowIntegerEditionBibtex = allowIntegerEditionBibtex; + this.memoryStickMode = memoryStickMode; + this.collectTelemetry = collectTelemetry; + this.showAdvancedHints = showAdvancedHints; + } + + public Charset getDefaultEncoding() { + return defaultEncoding; + } + + public BibDatabaseMode getDefaultBibDatabaseMode() { + return defaultBibDatabaseMode; + } + + public boolean isWarnAboutDuplicatesInInspection() { + return warnAboutDuplicatesInInspection; + } + + public boolean isConfirmDelete() { + return confirmDelete; + } + + public boolean isEnforceLegalBibtexKey() { + return enforceLegalBibtexKey; + } + + public boolean isAllowIntegerEditionBibtex() { + return allowIntegerEditionBibtex; + } + + public boolean isMemoryStickMode() { + return memoryStickMode; + } + + public boolean isCollectTelemetry() { + return collectTelemetry; + } + + public boolean isShowAdvancedHints() { + return showAdvancedHints; + } +} diff --git a/src/main/java/org/jabref/preferences/JabRefPreferences.java b/src/main/java/org/jabref/preferences/JabRefPreferences.java index 1ef1fa19bf3..096396915f3 100644 --- a/src/main/java/org/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/org/jabref/preferences/JabRefPreferences.java @@ -79,6 +79,7 @@ import org.jabref.logic.net.ProxyPreferences; import org.jabref.logic.openoffice.OpenOfficePreferences; import org.jabref.logic.openoffice.StyleLoader; +import org.jabref.logic.preferences.OwnerPreferences; import org.jabref.logic.preferences.TimestampPreferences; import org.jabref.logic.protectedterms.ProtectedTermsList; import org.jabref.logic.protectedterms.ProtectedTermsLoader; @@ -86,7 +87,6 @@ import org.jabref.logic.remote.RemotePreferences; import org.jabref.logic.shared.prefs.SharedDatabasePreferences; 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; @@ -185,9 +185,12 @@ public class JabRefPreferences implements PreferencesService { public static final String RENAME_ON_MOVE_FILE_TO_FILE_DIR = "renameOnMoveFileToFileDir"; public static final String MEMORY_STICK_MODE = "memoryStickMode"; public static final String SHOW_ADVANCED_HINTS = "showAdvancedHints"; - public static final String DEFAULT_OWNER = "defaultOwner"; public static final String DEFAULT_ENCODING = "defaultEncoding"; - // Timestamp preferences + + public static final String USE_OWNER = "useOwner"; + public static final String DEFAULT_OWNER = "defaultOwner"; + public static final String OVERWRITE_OWNER = "overwriteOwner"; + public static final String USE_TIME_STAMP = "useTimeStamp"; public static final String UPDATE_TIMESTAMP = "updateTimestamp"; public static final String TIME_STAMP_FIELD = "timeStampField"; @@ -215,8 +218,6 @@ public class JabRefPreferences implements PreferencesService { 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 = "sidePaneWidthFX"; @@ -1206,16 +1207,6 @@ public Map> getEntryEditorTabList() { return tabList; } - @Override - public boolean getEnforceLegalKeys() { - return getBoolean(ENFORCE_LEGAL_BIBTEX_KEY); - } - - @Override - public boolean getAllowIntegerEdition() { - return getBoolean(ALLOW_INTEGER_EDITION_BIBTEX); - } - @Override public void updateEntryEditorTabList() { tabList = EntryEditorTabList.create(this); @@ -1274,16 +1265,6 @@ public String getWrappedUsername() { return '[' + get(DEFAULT_OWNER) + ']'; } - @Override - public Charset getDefaultEncoding() { - return Charset.forName(get(DEFAULT_ENCODING)); - } - - @Override - public void setDefaultEncoding(Charset encoding) { - put(DEFAULT_ENCODING, encoding.name()); - } - public FileHistory getFileHistory() { return new FileHistory(getStringList(RECENT_DATABASES).stream().map(Paths::get).collect(Collectors.toList())); } @@ -1299,20 +1280,13 @@ public FilePreferences getFilePreferences() { Map fieldDirectories = Stream.of(StandardField.FILE, StandardField.PDF, StandardField.PS) .collect(Collectors.toMap(field -> field, field -> get(field.getName() + FilePreferences.DIR_SUFFIX, ""))); return new FilePreferences( - getUser(), - fieldDirectories, - getBoolean(JabRefPreferences.BIB_LOC_AS_PRIMARY_DIR), - get(IMPORT_FILENAMEPATTERN), + getUser(), + fieldDirectories, + getBoolean(JabRefPreferences.BIB_LOC_AS_PRIMARY_DIR), + get(IMPORT_FILENAMEPATTERN), get(IMPORT_FILEDIRPATTERN)); } - @Override - public UpdateFieldPreferences getUpdateFieldPreferences() { - return new UpdateFieldPreferences(getBoolean(USE_OWNER), getBoolean(OVERWRITE_OWNER), get(DEFAULT_OWNER), - getBoolean(USE_TIME_STAMP), getBoolean(OVERWRITE_TIME_STAMP), FieldFactory.parseField(get(TIME_STAMP_FIELD)), - get(TIME_STAMP_FORMAT)); - } - public FieldWriterPreferences getFieldWriterPreferences() { return new FieldWriterPreferences( getBoolean(RESOLVE_STRINGS_ALL_FIELDS), @@ -1396,10 +1370,6 @@ public BibtexKeyPatternPreferences getBibtexKeyPatternPreferences() { getKeywordDelimiter()); } - public TimestampPreferences getTimestampPreferences() { - return new TimestampPreferences(getBoolean(USE_TIME_STAMP), getBoolean(UPDATE_TIMESTAMP), FieldFactory.parseField(get(TIME_STAMP_FIELD)), get(TIME_STAMP_FORMAT), getBoolean(OVERWRITE_TIME_STAMP)); - } - @Override public LayoutFormatterPreferences getLayoutFormatterPreferences(JournalAbbreviationLoader journalAbbreviationLoader) { Objects.requireNonNull(journalAbbreviationLoader); @@ -1416,26 +1386,26 @@ public XmpPreferences getXMPPreferences() { @Override public OpenOfficePreferences getOpenOfficePreferences() { return new OpenOfficePreferences( - this.get(JabRefPreferences.OO_JARS_PATH), - this.get(JabRefPreferences.OO_EXECUTABLE_PATH), - this.get(JabRefPreferences.OO_PATH), - this.getBoolean(JabRefPreferences.OO_USE_ALL_OPEN_BASES), - this.getBoolean(JabRefPreferences.OO_SYNC_WHEN_CITING), - this.getBoolean(JabRefPreferences.OO_SHOW_PANEL), - this.getStringList(JabRefPreferences.OO_EXTERNAL_STYLE_FILES), - this.get(JabRefPreferences.OO_BIBLIOGRAPHY_STYLE_FILE)); + get(JabRefPreferences.OO_JARS_PATH), + get(JabRefPreferences.OO_EXECUTABLE_PATH), + get(JabRefPreferences.OO_PATH), + getBoolean(JabRefPreferences.OO_USE_ALL_OPEN_BASES), + getBoolean(JabRefPreferences.OO_SYNC_WHEN_CITING), + getBoolean(JabRefPreferences.OO_SHOW_PANEL), + getStringList(JabRefPreferences.OO_EXTERNAL_STYLE_FILES), + get(JabRefPreferences.OO_BIBLIOGRAPHY_STYLE_FILE)); } @Override public void setOpenOfficePreferences(OpenOfficePreferences openOfficePreferences) { - this.put(JabRefPreferences.OO_JARS_PATH, openOfficePreferences.getJarsPath()); - this.put(JabRefPreferences.OO_EXECUTABLE_PATH, openOfficePreferences.getExecutablePath()); - this.put(JabRefPreferences.OO_PATH, openOfficePreferences.getInstallationPath()); - this.putBoolean(JabRefPreferences.OO_USE_ALL_OPEN_BASES, openOfficePreferences.getUseAllDatabases()); - this.putBoolean(JabRefPreferences.OO_SYNC_WHEN_CITING, openOfficePreferences.getSyncWhenCiting()); - this.putBoolean(JabRefPreferences.OO_SHOW_PANEL, openOfficePreferences.getShowPanel()); - this.putStringList(JabRefPreferences.OO_EXTERNAL_STYLE_FILES, openOfficePreferences.getExternalStyles()); - this.put(JabRefPreferences.OO_BIBLIOGRAPHY_STYLE_FILE, openOfficePreferences.getCurrentStyle()); + put(JabRefPreferences.OO_JARS_PATH, openOfficePreferences.getJarsPath()); + put(JabRefPreferences.OO_EXECUTABLE_PATH, openOfficePreferences.getExecutablePath()); + put(JabRefPreferences.OO_PATH, openOfficePreferences.getInstallationPath()); + putBoolean(JabRefPreferences.OO_USE_ALL_OPEN_BASES, openOfficePreferences.getUseAllDatabases()); + putBoolean(JabRefPreferences.OO_SYNC_WHEN_CITING, openOfficePreferences.getSyncWhenCiting()); + putBoolean(JabRefPreferences.OO_SHOW_PANEL, openOfficePreferences.getShowPanel()); + putStringList(JabRefPreferences.OO_EXTERNAL_STYLE_FILES, openOfficePreferences.getExternalStyles()); + put(JabRefPreferences.OO_BIBLIOGRAPHY_STYLE_FILE, openOfficePreferences.getCurrentStyle()); } private NameFormatterPreferences getNameFormatterPreferences() { @@ -1655,22 +1625,6 @@ public String getOrCreateUserId() { } } - public Boolean shouldCollectTelemetry() { - return getBoolean(COLLECT_TELEMETRY); - } - - public void setShouldCollectTelemetry(boolean value) { - putBoolean(COLLECT_TELEMETRY, value); - } - - public Boolean shouldAskToCollectTelemetry() { - return getBoolean(ALREADY_ASKED_TO_COLLECT_TELEMETRY); - } - - public void askedToCollectTelemetry() { - putBoolean(ALREADY_ASKED_TO_COLLECT_TELEMETRY, true); - } - @Override public void storeKeyBindingRepository(KeyBindingRepository keyBindingRepository) { putStringList(JabRefPreferences.BIND_NAMES, keyBindingRepository.getBindNames()); @@ -1864,10 +1818,6 @@ public Optional getFontSize() { } } - public String getFontFamily() { - return get(FONT_FAMILY); - } - public String setLastPreferencesExportPath() { return get(PREFS_EXPORT_PATH); } @@ -1876,23 +1826,6 @@ public void setLastPreferencesExportPath(Path exportFile) { put(PREFS_EXPORT_PATH, exportFile.toString()); } - public Language getLanguage() { - String languageId = get(LANGUAGE); - return Stream.of(Language.values()) - .filter(language -> language.getId().equalsIgnoreCase(languageId)) - .findFirst() - .orElse(Language.ENGLISH); - } - - public void setLanguage(Language language) { - Language oldLanguage = getLanguage(); - put(LANGUAGE, language.getId()); - if (language != oldLanguage) { - // Update any defaults that might be language dependent: - setLanguageDependentDefaultValues(); - } - } - public void setIdBasedFetcherForEntryGenerator(String fetcherName) { put(ID_ENTRY_GENERATOR, fetcherName); } @@ -1980,7 +1913,6 @@ private void saveCustomEntryTypes(BibDatabaseMode bibDatabaseMode) { .map(entryType -> entryType).collect(Collectors.toList()); storeBibEntryTypes(customBiblatexBibTexTypes, bibDatabaseMode); - } public PushToApplication getActivePushToApplication(PushToApplicationsManager manager) { @@ -2005,4 +1937,123 @@ public void setNewLineSeparator(NewLineSeparator newLineSeparator) { // we also have to change Globals variable as globals is not a getter, but a constant OS.NEWLINE = escapeChars; } + + //************************************************************************************************************* + // GeneralPreferences + //************************************************************************************************************* + + @Override + public Language getLanguage() { + String languageId = get(LANGUAGE); + return Stream.of(Language.values()) + .filter(language -> language.getId().equalsIgnoreCase(languageId)) + .findFirst() + .orElse(Language.ENGLISH); + } + + @Override + public void setLanguage(Language language) { + Language oldLanguage = getLanguage(); + put(LANGUAGE, language.getId()); + if (language != oldLanguage) { + // Update any defaults that might be language dependent: + setLanguageDependentDefaultValues(); + } + } + + @Override + public Charset getDefaultEncoding() { + return Charset.forName(get(DEFAULT_ENCODING)); + } + + @Override + public boolean shouldCollectTelemetry() { + return getBoolean(COLLECT_TELEMETRY); + } + + @Override + public void setShouldCollectTelemetry(boolean value) { + putBoolean(COLLECT_TELEMETRY, value); + } + + @Override + public boolean shouldAskToCollectTelemetry() { + return getBoolean(ALREADY_ASKED_TO_COLLECT_TELEMETRY); + } + + @Override + public void askedToCollectTelemetry() { + putBoolean(ALREADY_ASKED_TO_COLLECT_TELEMETRY, true); + } + + @Override + public boolean getEnforceLegalKeys() { + return getBoolean(ENFORCE_LEGAL_BIBTEX_KEY); + } + + @Override + public boolean getAllowIntegerEdition() { + return getBoolean(ALLOW_INTEGER_EDITION_BIBTEX); + } + + @Override + public GeneralPreferences getGeneralPreferences() { + return new GeneralPreferences( + getDefaultEncoding(), + getBoolean(BIBLATEX_DEFAULT_MODE) ? BibDatabaseMode.BIBLATEX : BibDatabaseMode.BIBTEX, + getBoolean(WARN_ABOUT_DUPLICATES_IN_INSPECTION), + getBoolean(CONFIRM_DELETE), + getBoolean(ENFORCE_LEGAL_BIBTEX_KEY), + getBoolean(ALLOW_INTEGER_EDITION_BIBTEX), + getBoolean(MEMORY_STICK_MODE), + shouldCollectTelemetry(), + getBoolean(SHOW_ADVANCED_HINTS)); + } + + @Override + public void storeGeneralPreferences(GeneralPreferences preferences) { + put(DEFAULT_ENCODING, preferences.getDefaultEncoding().name()); + putBoolean(BIBLATEX_DEFAULT_MODE, (preferences.getDefaultBibDatabaseMode() == BibDatabaseMode.BIBLATEX)); + putBoolean(WARN_ABOUT_DUPLICATES_IN_INSPECTION, preferences.isWarnAboutDuplicatesInInspection()); + putBoolean(CONFIRM_DELETE, preferences.isConfirmDelete()); + putBoolean(ENFORCE_LEGAL_BIBTEX_KEY, preferences.isEnforceLegalBibtexKey()); + putBoolean(ALLOW_INTEGER_EDITION_BIBTEX, preferences.isAllowIntegerEditionBibtex()); + putBoolean(MEMORY_STICK_MODE, preferences.isMemoryStickMode()); + setShouldCollectTelemetry(preferences.isCollectTelemetry()); + putBoolean(SHOW_ADVANCED_HINTS, preferences.isShowAdvancedHints()); + } + + @Override + public OwnerPreferences getOwnerPreferences() { + return new OwnerPreferences( + getBoolean(USE_OWNER), + get(DEFAULT_OWNER), + getBoolean(OVERWRITE_OWNER)); + } + + @Override + public void storeOwnerPreferences(OwnerPreferences preferences) { + putBoolean(USE_OWNER, preferences.isUseOwner()); + put(DEFAULT_OWNER, preferences.getDefaultOwner()); + putBoolean(OVERWRITE_OWNER, preferences.isOverwriteOwner()); + } + + @Override + public TimestampPreferences getTimestampPreferences() { + return new TimestampPreferences( + getBoolean(USE_TIME_STAMP), + getBoolean(UPDATE_TIMESTAMP), + FieldFactory.parseField(get(TIME_STAMP_FIELD)), + get(TIME_STAMP_FORMAT), + getBoolean(OVERWRITE_TIME_STAMP)); + } + + @Override + public void storeTimestampPreferences(TimestampPreferences preferences) { + putBoolean(USE_TIME_STAMP, preferences.isUseTimestamps()); + putBoolean(UPDATE_TIMESTAMP, preferences.isUpdateTimestamp()); + put(TIME_STAMP_FIELD, preferences.getTimestampField().getName()); + put(TIME_STAMP_FORMAT, preferences.getTimestampFormat()); + putBoolean(OVERWRITE_TIME_STAMP, preferences.isOverwriteTimestamp()); + } } diff --git a/src/main/java/org/jabref/preferences/PreferencesService.java b/src/main/java/org/jabref/preferences/PreferencesService.java index 39dbb37ea1d..0bfba40b231 100644 --- a/src/main/java/org/jabref/preferences/PreferencesService.java +++ b/src/main/java/org/jabref/preferences/PreferencesService.java @@ -15,10 +15,12 @@ import org.jabref.logic.importer.ImportFormatPreferences; import org.jabref.logic.journals.JournalAbbreviationLoader; import org.jabref.logic.journals.JournalAbbreviationPreferences; +import org.jabref.logic.l10n.Language; import org.jabref.logic.layout.LayoutFormatterPreferences; import org.jabref.logic.openoffice.OpenOfficePreferences; +import org.jabref.logic.preferences.OwnerPreferences; +import org.jabref.logic.preferences.TimestampPreferences; import org.jabref.logic.protectedterms.ProtectedTermsLoader; -import org.jabref.logic.util.UpdateFieldPreferences; import org.jabref.logic.util.io.AutoLinkPreferences; import org.jabref.logic.xmp.XmpPreferences; import org.jabref.model.database.BibDatabaseMode; @@ -59,8 +61,6 @@ public interface PreferencesService { Map> getEntryEditorTabList(); - boolean getEnforceLegalKeys(); - Map getCustomTabsNamesAndFields(); void setCustomTabsNameAndFields(String name, String fields, int defNumber); @@ -75,8 +75,6 @@ public interface PreferencesService { LayoutFormatterPreferences getLayoutFormatterPreferences(JournalAbbreviationLoader loader); - UpdateFieldPreferences getUpdateFieldPreferences(); - ImportFormatPreferences getImportFormatPreferences(); boolean isKeywordSyncEnabled(); @@ -89,8 +87,6 @@ public interface PreferencesService { Charset getDefaultEncoding(); - void setDefaultEncoding(Charset encoding); - String getUser(); String getTheme(); @@ -105,8 +101,6 @@ public interface PreferencesService { void saveCustomEntryTypes(); - boolean getAllowIntegerEdition(); - EntryEditorPreferences getEntryEditorPreferences(); List loadBibEntryTypes(BibDatabaseMode mode); @@ -116,4 +110,35 @@ public interface PreferencesService { CleanupPreset getCleanupPreset(); void setCleanupPreset(CleanupPreset cleanupPreset); + + // General + + Language getLanguage(); + + void setLanguage(Language language); + + boolean shouldCollectTelemetry(); + + void setShouldCollectTelemetry(boolean value); + + boolean shouldAskToCollectTelemetry(); + + void askedToCollectTelemetry(); + + boolean getEnforceLegalKeys(); + + boolean getAllowIntegerEdition(); + + GeneralPreferences getGeneralPreferences(); + + void storeGeneralPreferences(GeneralPreferences preferences); + + OwnerPreferences getOwnerPreferences(); + + void storeOwnerPreferences(OwnerPreferences preferences); + + TimestampPreferences getTimestampPreferences(); + + void storeTimestampPreferences(TimestampPreferences preferences); + } diff --git a/src/test/java/org/jabref/JabRefPreferencesTest.java b/src/test/java/org/jabref/JabRefPreferencesTest.java index 187bab026a6..eb2557a5030 100644 --- a/src/test/java/org/jabref/JabRefPreferencesTest.java +++ b/src/test/java/org/jabref/JabRefPreferencesTest.java @@ -7,7 +7,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -21,9 +20,11 @@ void setUp() { when(prefs.getDefaultEncoding()).thenReturn(StandardCharsets.UTF_8); } + // FIXME: This test is not testing anything. prefs.getDefaultEncoding() will always return StandardCharsets.UTF_8 + // because of setUp(): when(prefs.getDefaultEnconding()).thenReturn(StandardCharsets.UTF_8); @Test void getDefaultEncodingReturnsPreviouslyStoredEncoding() { - prefs.setDefaultEncoding(StandardCharsets.UTF_8); - assertEquals(StandardCharsets.UTF_8, prefs.getDefaultEncoding()); + // prefs.setDefaultEncoding(StandardCharsets.UTF_8); + // assertEquals(StandardCharsets.UTF_8, prefs.getDefaultEncoding()); } } From 30a2d09ff95b666711210d8aee11928240b9628f Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sat, 28 Mar 2020 21:27:34 +0100 Subject: [PATCH 011/166] Update checkstyle doc for IntelliJ 2019 --- docs/guidelines-for-setting-up-a-local-workspace.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/guidelines-for-setting-up-a-local-workspace.md b/docs/guidelines-for-setting-up-a-local-workspace.md index 1c8d1d8310a..a1b938e2d7a 100644 --- a/docs/guidelines-for-setting-up-a-local-workspace.md +++ b/docs/guidelines-for-setting-up-a-local-workspace.md @@ -214,13 +214,14 @@ Contributions to JabRef's source code need to have a code formatting that is con * Go to **File \| Settings \| Editor \| Code Style** * Click on the settings wheel \(next to the scheme chooser\), then click "Import Scheme" * Select the IntelliJ configuration file `config/IntelliJ Code Style.xml`. -* Go to **File \| Settings \| Other Settings \| Checkstyle \| Configuration File** +* Go to **File \| Settings \| Checkstyle \| Configuration File** 1. Import the CheckStyle configuration file by clicking the \[+\] button - 2. For the description provide e.g. "CheckStyle" + 2. For the description provide e.g. "JabRef" 3. Click "Browse" and choose `config/checkstyle/checkstyle.xml` - 4. Click "Next" and "Finish" - 5. Activate the CheckStyle configuration file by ticking it in the list - 6. Save settings by clicking "OK" + 4. Check "Store relative to project location" + 5. Click "Next" and "Finish" + 6. Activate the CheckStyle configuration file by ticking it in the list + 7. Save settings by clicking "OK" #### Troubleshooting when using both IDEA and Eclipse From 093a6fb1ebd0fbcbd9bcd365bd828273255ca794 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sat, 28 Mar 2020 22:41:01 +0100 Subject: [PATCH 012/166] Remove obsolete creation of task (we ship it with our code) --- ...elines-for-setting-up-a-local-workspace.md | 41 ------------------- 1 file changed, 41 deletions(-) diff --git a/docs/guidelines-for-setting-up-a-local-workspace.md b/docs/guidelines-for-setting-up-a-local-workspace.md index a1b938e2d7a..431d4aa410c 100644 --- a/docs/guidelines-for-setting-up-a-local-workspace.md +++ b/docs/guidelines-for-setting-up-a-local-workspace.md @@ -161,47 +161,6 @@ To use IntelliJ IDEA's internal build system when you build JabRef through **Bui "Test using" is set to "IntelliJ IDEA". -To use the "JabRef Main" run configuration, open **Run \| Edit Configurations... \| Application \| JabRef Main** and - -* Verify, that your JDK 14 is used -* Set "VM Options" to the following: - - ```text - --patch-module org.jabref=build/resources/main - --add-exports javafx.controls/com.sun.javafx.scene.control=org.jabref - --add-exports org.controlsfx.controls/impl.org.controlsfx.skin=org.jabref - --add-exports javafx.graphics/com.sun.javafx.scene=org.controlsfx.controls - --add-exports javafx.graphics/com.sun.javafx.scene.traversal=org.controlsfx.controls - --add-exports javafx.graphics/com.sun.javafx.css=org.controlsfx.controls - --add-exports javafx.controls/com.sun.javafx.scene.control.behavior=org.controlsfx.controls - --add-exports javafx.controls/com.sun.javafx.scene.control=org.controlsfx.controls - --add-exports javafx.controls/com.sun.javafx.scene.control.inputmap=org.controlsfx.controls - --add-exports javafx.base/com.sun.javafx.event=org.controlsfx.controls - --add-exports javafx.base/com.sun.javafx.collections=org.controlsfx.controls - --add-exports javafx.base/com.sun.javafx.runtime=org.controlsfx.controls - --add-exports javafx.web/com.sun.webkit=org.controlsfx.controls - --add-exports javafx.graphics/com.sun.javafx.css=org.controlsfx.controls - --add-exports javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix - --add-exports com.oracle.truffle.regex/com.oracle.truffle.regex=org.graalvm.truffle - --add-opens javafx.controls/javafx.scene.control=org.jabref - --add-opens org.controlsfx.controls/org.controlsfx.control.textfield=org.jabref - --add-opens javafx.controls/javafx.scene.control.skin=org.controlsfx.controls - --add-opens javafx.graphics/javafx.scene=org.controlsfx.controls - --add-opens javafx.controls/com.sun.javafx.scene.control=org.jabref - --add-opens javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix - --add-opens javafx.base/com.sun.javafx.binding=com.jfoenix - --add-opens javafx.graphics/com.sun.javafx.stage=com.jfoenix - --add-opens javafx.base/com.sun.javafx.event=com.jfoenix - ``` - - Optionally the following entries can also be added \(but they currently only produce warnings and they are not needed\): - - ```text - --patch-module test=fastparse_2.12-1.0.0.jar - --patch-module test2=fastparse-utils_2.12-1.0.0.jar - --patch-module test3=sourcecode_2.12-0.1.4.jar - ``` - Essentially, you now have the best of both worlds: You can run Gradle tasks using the Gradle Tool Window and unless you haven't made changes to input files that generate sources, you can compile and run with IntelliJ's faster internal build system. #### Using JabRef's code-style From e46152315e63f057986899bd48513ef516bc0570 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 29 Mar 2020 14:08:25 +0200 Subject: [PATCH 013/166] Fix .gitignore --- .gitignore | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 50a6afa7703..ba242f57346 100644 --- a/.gitignore +++ b/.gitignore @@ -50,6 +50,8 @@ gradle.properties jabref.xml *.sonargraph +## !! IN CASE YOU UPDATE, PLEASE KEEP THE LINES AT THE END OF THE FILE !! + # Created by https://www.gitignore.io/api/gradle,java,jabref,intellij,eclipse,netbeans,windows,linux,macos,node,snapcraft # Edit at https://www.gitignore.io/?templates=gradle,java,jabref,intellij,eclipse,netbeans,windows,linux,macos,node,snapcraft @@ -370,8 +372,16 @@ typings/ # nuxt.js build output .nuxt -# react / gatsby -public/ +# rollup.js default build output + +# Uncomment the public line if your project uses Gatsby +# https://nextjs.org/blog/next-9-1#public-directory-support +# https://create-react-app.dev/docs/using-the-public-folder/#docsNav +# public + +# Storybook build outputs +.out +.storybook-out # vuepress build output .vuepress/dist @@ -385,6 +395,9 @@ public/ # DynamoDB Local files .dynamodb/ +# Temporary folders +temp/ + ### Snapcraft ### /parts/ /stage/ @@ -444,15 +457,17 @@ gradle-app.setting # End of https://www.gitignore.io/api/gradle,java,jabref,intellij,eclipse,netbeans,windows,linux,macos,node,snapcraft --# we really version .jar files - needs to be go after the www.gitignore.io-generated ones, because they ignore *.jar files --!/lib/*.jar -- --# do not distribute Oracle's JDBC driver --lib/ojdbc.jar -- --# do not ignore the source of the build --!/buildSrc/src/ --!/buildSrc/src/main/groovy/org/jabref/build -- --# do not ignore JabRef icons (they are ignored by the macos setting above) --!src/main/java/org/jabref/gui/icon +## !! KEEP THESE LINES !! + +# we really version .jar files - needs to be go after the www.gitignore.io-generated ones, because they ignore *.jar files +!/lib/*.jar + +# do not distribute Oracle's JDBC driver +lib/ojdbc.jar + +# do not ignore the source of the build +!/buildSrc/src/ +!/buildSrc/src/main/groovy/org/jabref/build + +# do not ignore JabRef icons (they are ignored by the macos setting above) +!src/main/java/org/jabref/gui/icon From 14e979051abc329e4d111c0066c0610fe8eb1b44 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 29 Mar 2020 14:18:52 +0200 Subject: [PATCH 014/166] Fix package of PreviewLayout (#5702) ... and also improve (bst) VM (and introduce BstPreviewLayout) * Move PreviewLayout to org.jabref.logic.preview * Modernize code of (bst) VM * Add IEEEtran.bst * Introduce BstPreviewLayout * Fix Bst.g to allow "_" as identifier * Fix quotes and other output of IEEEtran.bst * Use public final instead of getters --- ...008-use-public-final-instead-of-getters.md | 22 +++++ .../jabref/gui/DragAndDropDataFormats.java | 2 +- .../jabref/gui/maintable/RightClickMenu.java | 2 +- .../gui/openoffice/StyleSelectDialogView.java | 2 +- .../gui/preferences/PreviewTabView.java | 2 +- .../gui/preferences/PreviewTabViewModel.java | 4 +- .../gui/preview/CopyCitationAction.java | 2 +- .../org/jabref/gui/preview/PreviewPanel.java | 2 +- .../org/jabref/gui/preview/PreviewViewer.java | 2 +- .../jabref/gui/util/CustomLocalDragboard.java | 2 +- .../jabref/logic/bibtex/BibEntryWriter.java | 6 +- .../logic/bibtex/FieldContentFormatter.java | 1 - .../FieldContentFormatterPreferences.java | 4 +- .../org/jabref/logic/bibtex/FieldWriter.java | 56 ++++++++----- .../logic/bibtex/FieldWriterPreferences.java | 4 + .../jabref/logic/bst/BstPreviewLayout.java | 83 +++++++++++++++++++ src/main/java/org/jabref/logic/bst/VM.java | 79 +++++++++++------- .../citationstyle/CitationStyleCache.java | 1 + .../CitationStylePreviewLayout.java | 1 + .../TextBasedPreviewLayout.java | 9 +- .../logic/layout/format/RemoveWhitespace.java | 3 - .../PreviewLayout.java | 5 +- .../org/jabref/model/strings/StringUtil.java | 31 ++++--- .../jabref/preferences/JabRefPreferences.java | 4 +- .../preferences/PreviewPreferences.java | 4 +- .../logic/bst/BstPreviewLayoutTest.java | 66 +++++++++++++++ .../java/org/jabref/logic/bst/TestVM.java | 10 +-- 27 files changed, 314 insertions(+), 95 deletions(-) create mode 100644 docs/adr/0008-use-public-final-instead-of-getters.md create mode 100644 src/main/java/org/jabref/logic/bst/BstPreviewLayout.java rename src/main/java/org/jabref/logic/{citationstyle => layout}/TextBasedPreviewLayout.java (87%) rename src/main/java/org/jabref/logic/{citationstyle => preview}/PreviewLayout.java (58%) create mode 100644 src/test/java/org/jabref/logic/bst/BstPreviewLayoutTest.java diff --git a/docs/adr/0008-use-public-final-instead-of-getters.md b/docs/adr/0008-use-public-final-instead-of-getters.md new file mode 100644 index 00000000000..daf781194ab --- /dev/null +++ b/docs/adr/0008-use-public-final-instead-of-getters.md @@ -0,0 +1,22 @@ +# Use `public final` instead of getters to offer access to immutable variables + +## Context and Problem Statement + +When making immutable data accessible in a java class, should it be using getters or by non-modifiable fields? + +## Considered Options + +* Offer public static field +* Offer getters + +## Decision Outcome + +Chosen option: "Offer public static field", because getters used to be a convention which was even more manifested due to libraries depending on the existence on getters/setters. In the case of immutable variables, adding public getters is just useless since one is not hiding anything. + +### Positive Consequences + +* Shorter code + +### Negative Consequences + +* new comers could get confused, because getters/setters are still teached diff --git a/src/main/java/org/jabref/gui/DragAndDropDataFormats.java b/src/main/java/org/jabref/gui/DragAndDropDataFormats.java index 67aa1cefce0..8b658a1655e 100644 --- a/src/main/java/org/jabref/gui/DragAndDropDataFormats.java +++ b/src/main/java/org/jabref/gui/DragAndDropDataFormats.java @@ -4,7 +4,7 @@ import javafx.scene.input.DataFormat; -import org.jabref.logic.citationstyle.PreviewLayout; +import org.jabref.logic.preview.PreviewLayout; /** * Contains all the different {@link DataFormat}s that may occur in JabRef. diff --git a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java index 359569fbfd4..58e5088175e 100644 --- a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java +++ b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java @@ -23,7 +23,7 @@ import org.jabref.gui.specialfields.SpecialFieldMenuItemFactory; import org.jabref.logic.citationstyle.CitationStyleOutputFormat; import org.jabref.logic.citationstyle.CitationStylePreviewLayout; -import org.jabref.logic.citationstyle.PreviewLayout; +import org.jabref.logic.preview.PreviewLayout; import org.jabref.model.entry.field.SpecialField; import org.jabref.preferences.JabRefPreferences; import org.jabref.preferences.PreferencesService; diff --git a/src/main/java/org/jabref/gui/openoffice/StyleSelectDialogView.java b/src/main/java/org/jabref/gui/openoffice/StyleSelectDialogView.java index 3ac1ba09e55..d4fac5b02ce 100644 --- a/src/main/java/org/jabref/gui/openoffice/StyleSelectDialogView.java +++ b/src/main/java/org/jabref/gui/openoffice/StyleSelectDialogView.java @@ -18,8 +18,8 @@ import org.jabref.gui.util.BaseDialog; import org.jabref.gui.util.ValueTableCellFactory; import org.jabref.gui.util.ViewModelTableRowFactory; -import org.jabref.logic.citationstyle.TextBasedPreviewLayout; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.layout.TextBasedPreviewLayout; import org.jabref.logic.openoffice.OOBibStyle; import org.jabref.logic.openoffice.StyleLoader; import org.jabref.logic.util.TestEntry; diff --git a/src/main/java/org/jabref/gui/preferences/PreviewTabView.java b/src/main/java/org/jabref/gui/preferences/PreviewTabView.java index c366341c729..8d387006ce7 100644 --- a/src/main/java/org/jabref/gui/preferences/PreviewTabView.java +++ b/src/main/java/org/jabref/gui/preferences/PreviewTabView.java @@ -29,8 +29,8 @@ import org.jabref.gui.preview.PreviewViewer; import org.jabref.gui.util.IconValidationDecorator; import org.jabref.gui.util.ViewModelListCellFactory; -import org.jabref.logic.citationstyle.PreviewLayout; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preview.PreviewLayout; import org.jabref.logic.util.TestEntry; import org.jabref.model.database.BibDatabaseContext; import org.jabref.preferences.JabRefPreferences; diff --git a/src/main/java/org/jabref/gui/preferences/PreviewTabViewModel.java b/src/main/java/org/jabref/gui/preferences/PreviewTabViewModel.java index 08a7b0c18d3..1ff3f88a73b 100644 --- a/src/main/java/org/jabref/gui/preferences/PreviewTabViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/PreviewTabViewModel.java @@ -34,9 +34,9 @@ import org.jabref.gui.util.TaskExecutor; import org.jabref.logic.citationstyle.CitationStyle; import org.jabref.logic.citationstyle.CitationStylePreviewLayout; -import org.jabref.logic.citationstyle.PreviewLayout; -import org.jabref.logic.citationstyle.TextBasedPreviewLayout; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.layout.TextBasedPreviewLayout; +import org.jabref.logic.preview.PreviewLayout; import org.jabref.preferences.JabRefPreferences; import org.jabref.preferences.PreviewPreferences; diff --git a/src/main/java/org/jabref/gui/preview/CopyCitationAction.java b/src/main/java/org/jabref/gui/preview/CopyCitationAction.java index 46e671147c2..ce7cbba25d6 100644 --- a/src/main/java/org/jabref/gui/preview/CopyCitationAction.java +++ b/src/main/java/org/jabref/gui/preview/CopyCitationAction.java @@ -18,11 +18,11 @@ import org.jabref.logic.citationstyle.CitationStyleGenerator; import org.jabref.logic.citationstyle.CitationStyleOutputFormat; import org.jabref.logic.citationstyle.CitationStylePreviewLayout; -import org.jabref.logic.citationstyle.PreviewLayout; import org.jabref.logic.l10n.Localization; import org.jabref.logic.layout.Layout; import org.jabref.logic.layout.LayoutFormatterPreferences; import org.jabref.logic.layout.LayoutHelper; +import org.jabref.logic.preview.PreviewLayout; import org.jabref.logic.util.OS; import org.jabref.model.entry.BibEntry; import org.jabref.preferences.PreviewPreferences; diff --git a/src/main/java/org/jabref/gui/preview/PreviewPanel.java b/src/main/java/org/jabref/gui/preview/PreviewPanel.java index 941818ae8ef..3c8f9b69c6f 100644 --- a/src/main/java/org/jabref/gui/preview/PreviewPanel.java +++ b/src/main/java/org/jabref/gui/preview/PreviewPanel.java @@ -23,8 +23,8 @@ import org.jabref.gui.icon.IconTheme; import org.jabref.gui.keyboard.KeyBinding; import org.jabref.gui.keyboard.KeyBindingRepository; -import org.jabref.logic.citationstyle.PreviewLayout; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preview.PreviewLayout; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.jabref.preferences.JabRefPreferences; diff --git a/src/main/java/org/jabref/gui/preview/PreviewViewer.java b/src/main/java/org/jabref/gui/preview/PreviewViewer.java index 6a0c42b0837..2ac50ebee2b 100644 --- a/src/main/java/org/jabref/gui/preview/PreviewViewer.java +++ b/src/main/java/org/jabref/gui/preview/PreviewViewer.java @@ -23,9 +23,9 @@ import org.jabref.gui.util.BackgroundTask; import org.jabref.gui.util.TaskExecutor; import org.jabref.gui.util.ThemeLoader; -import org.jabref.logic.citationstyle.PreviewLayout; import org.jabref.logic.exporter.ExporterFactory; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preview.PreviewLayout; import org.jabref.logic.search.SearchQuery; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; diff --git a/src/main/java/org/jabref/gui/util/CustomLocalDragboard.java b/src/main/java/org/jabref/gui/util/CustomLocalDragboard.java index a36ec2cb969..3ba1b83de10 100644 --- a/src/main/java/org/jabref/gui/util/CustomLocalDragboard.java +++ b/src/main/java/org/jabref/gui/util/CustomLocalDragboard.java @@ -7,7 +7,7 @@ import org.jabref.gui.DragAndDropDataFormats; import org.jabref.gui.StateManager; -import org.jabref.logic.citationstyle.PreviewLayout; +import org.jabref.logic.preview.PreviewLayout; import org.jabref.model.entry.BibEntry; /** diff --git a/src/main/java/org/jabref/logic/bibtex/BibEntryWriter.java b/src/main/java/org/jabref/logic/bibtex/BibEntryWriter.java index a5be765f4fe..257777abb69 100644 --- a/src/main/java/org/jabref/logic/bibtex/BibEntryWriter.java +++ b/src/main/java/org/jabref/logic/bibtex/BibEntryWriter.java @@ -87,11 +87,7 @@ public void writeWithoutPrependedNewlines(BibEntry entry, Writer out, BibDatabas } /** - * Write fields in the order of requiredFields, optionalFields and other fields, but does not sort the fields. - * - * @param entry - * @param out - * @throws IOException + * Writes fields in the order of requiredFields, optionalFields and other fields, but does not sort the fields. */ private void writeRequiredFieldsFirstRemainingFieldsSecond(BibEntry entry, Writer out, BibDatabaseMode bibDatabaseMode) throws IOException { diff --git a/src/main/java/org/jabref/logic/bibtex/FieldContentFormatter.java b/src/main/java/org/jabref/logic/bibtex/FieldContentFormatter.java index 5b2a2c6171d..183f174608c 100644 --- a/src/main/java/org/jabref/logic/bibtex/FieldContentFormatter.java +++ b/src/main/java/org/jabref/logic/bibtex/FieldContentFormatter.java @@ -43,7 +43,6 @@ public FieldContentFormatter(FieldContentFormatterPreferences preferences) { */ public String format(String fieldContent, Field field) { if (multiLineFields.contains(field)) { - // Unify line breaks return StringUtil.unifyLineBreaks(fieldContent, OS.NEWLINE); } diff --git a/src/main/java/org/jabref/logic/bibtex/FieldContentFormatterPreferences.java b/src/main/java/org/jabref/logic/bibtex/FieldContentFormatterPreferences.java index 26f13248b85..02df6c020c0 100644 --- a/src/main/java/org/jabref/logic/bibtex/FieldContentFormatterPreferences.java +++ b/src/main/java/org/jabref/logic/bibtex/FieldContentFormatterPreferences.java @@ -9,8 +9,10 @@ public class FieldContentFormatterPreferences { private final List nonWrappableFields; + /** + * Constructor defining that there are not any non-wrappable fields + */ public FieldContentFormatterPreferences() { - // This constructor is only to allow an empty constructor in SavePreferences this.nonWrappableFields = Collections.emptyList(); } diff --git a/src/main/java/org/jabref/logic/bibtex/FieldWriter.java b/src/main/java/org/jabref/logic/bibtex/FieldWriter.java index e0ddfc9ace0..c7ce8ea8a10 100644 --- a/src/main/java/org/jabref/logic/bibtex/FieldWriter.java +++ b/src/main/java/org/jabref/logic/bibtex/FieldWriter.java @@ -6,20 +6,22 @@ import org.jabref.model.entry.field.StandardField; import org.jabref.model.strings.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** - * Obeys following settings: - * * JabRefPreferences.RESOLVE_STRINGS_ALL_FIELDS - * * JabRefPreferences.DO_NOT_RESOLVE_STRINGS_FOR - * * JabRefPreferences.WRITEFIELD_WRAPFIELD + * Converts JabRef's internal BibTeX representation of a BibTeX field to BibTeX text representation */ public class FieldWriter { + private static final Logger LOGGER = LoggerFactory.getLogger(FieldWriter.class); + private static final char FIELD_START = '{'; private static final char FIELD_END = '}'; + private final boolean neverFailOnHashes; private final FieldWriterPreferences preferences; private final FieldContentFormatter formatter; - private StringBuilder stringBuilder; public FieldWriter(FieldWriterPreferences preferences) { this(true, preferences); @@ -58,12 +60,15 @@ private static void checkBraces(String text) throws InvalidFieldValueException { // Then we throw an exception if the error criteria are met. if (!(right == 0) && (left == 0)) { + LOGGER.error("Unescaped '}' character without opening bracket ends string prematurely. Field value: {}", text ); throw new InvalidFieldValueException("Unescaped '}' character without opening bracket ends string prematurely. Field value: " + text); } if (!(right == 0) && (right < left)) { + LOGGER.error("Unescaped '}' character without opening bracket ends string prematurely. Field value: {}", text); throw new InvalidFieldValueException("Unescaped '}' character without opening bracket ends string prematurely. Field value: " + text); } if (left != right) { + LOGGER.error("Braces don't match. Field value: {}", text); throw new InvalidFieldValueException("Braces don't match. Field value: " + text); } } @@ -95,9 +100,10 @@ public String write(Field field, String content) throws InvalidFieldValueExcepti * For instance, #jan# - #feb# gets jan #{ - } # feb (see @link{org.jabref.logic.bibtex.LatexFieldFormatterTests#makeHashEnclosedWordsRealStringsInMonthField()}) */ private String formatAndResolveStrings(String content, Field field) throws InvalidFieldValueException { - stringBuilder = new StringBuilder(); checkBraces(content); + StringBuilder stringBuilder = new StringBuilder(); + // Here we assume that the user encloses any bibtex strings in #, e.g.: // #jan# - #feb# // ...which will be written to the file like this: @@ -126,6 +132,9 @@ private String formatAndResolveStrings(String content, Field field) throws Inval if (neverFailOnHashes) { pos1 = content.length(); // just write out the rest of the text, and throw no exception } else { + LOGGER.error("The # character is not allowed in BibTeX strings unless escaped as in '\\#'. " + + "In JabRef, use pairs of # characters to indicate a string. " + + "Note that the entry causing the problem has been selected. Field value: {}", content); throw new InvalidFieldValueException( "The # character is not allowed in BibTeX strings unless escaped as in '\\#'.\n" + "In JabRef, use pairs of # characters to indicate a string.\n" @@ -135,13 +144,13 @@ private String formatAndResolveStrings(String content, Field field) throws Inval } if (pos1 > pivot) { - writeText(content, pivot, pos1); + writeText(stringBuilder, content, pivot, pos1); } if ((pos1 < content.length()) && ((pos2 - 1) > pos1)) { // We check that the string label is not empty. That means // an occurrence of ## will simply be ignored. Should it instead // cause an error message? - writeStringLabel(content, pos1 + 1, pos2, pos1 == pivot, + writeStringLabel(stringBuilder, content, pos1 + 1, pos2, pos1 == pivot, (pos2 + 1) == content.length()); } @@ -168,28 +177,33 @@ private boolean shouldResolveStrings(Field field) { private String formatWithoutResolvingStrings(String content, Field field) throws InvalidFieldValueException { checkBraces(content); - stringBuilder = new StringBuilder(String.valueOf(FIELD_START)); - + StringBuilder stringBuilder = new StringBuilder(String.valueOf(FIELD_START)); stringBuilder.append(formatter.format(content, field)); - stringBuilder.append(FIELD_END); - return stringBuilder.toString(); } - private void writeText(String text, int startPos, int endPos) { + /** + * @param stringBuilder the StringBuilder to append the text to + * @param text the text to append + */ + private void writeText(StringBuilder stringBuilder, String text, int startPos, int endPos) { stringBuilder.append(FIELD_START); stringBuilder.append(text, startPos, endPos); stringBuilder.append(FIELD_END); } - private void writeStringLabel(String text, int startPos, int endPos, boolean first, boolean last) { - putIn((first ? "" : " # ") + text.substring(startPos, endPos) - + (last ? "" : " # ")); - } - - private void putIn(String s) { - stringBuilder.append(StringUtil.wrap(s, preferences.getLineLength(), OS.NEWLINE)); + /** + * @param stringBuilder the StringBuilder to append the text to + * @param text the text use as basis to get the text to append + * @param startPos the position in text where the text to add starts + * @param endPos the position in text where the text to add ends + * @param isFirst true if the label to write is the first one to write + * @param isLast true if the label to write is the last one to write + */ + private void writeStringLabel(StringBuilder stringBuilder, String text, int startPos, int endPos, boolean isFirst, boolean isLast) { + String line = (isFirst ? "" : " # ") + text.substring(startPos, endPos) + (isLast ? "" : " # "); + String wrappedLine = StringUtil.wrap(line, preferences.getLineLength(), OS.NEWLINE); + stringBuilder.append(wrappedLine); } - } diff --git a/src/main/java/org/jabref/logic/bibtex/FieldWriterPreferences.java b/src/main/java/org/jabref/logic/bibtex/FieldWriterPreferences.java index 5caaa76de1b..51654c788a8 100644 --- a/src/main/java/org/jabref/logic/bibtex/FieldWriterPreferences.java +++ b/src/main/java/org/jabref/logic/bibtex/FieldWriterPreferences.java @@ -19,6 +19,10 @@ public FieldWriterPreferences(boolean resolveStringsAllFields, List doNot this.fieldContentFormatterPreferences = fieldContentFormatterPreferences; } + /** + * Creates an instance with default values (not obeying any user preferences). This constructor should be used with + * caution. The other constructor has to be preferred. + */ public FieldWriterPreferences() { // This constructor is only to allow an empty constructor in SavePreferences this(true, Collections.emptyList(), new FieldContentFormatterPreferences()); diff --git a/src/main/java/org/jabref/logic/bst/BstPreviewLayout.java b/src/main/java/org/jabref/logic/bst/BstPreviewLayout.java new file mode 100644 index 00000000000..312df6bbf98 --- /dev/null +++ b/src/main/java/org/jabref/logic/bst/BstPreviewLayout.java @@ -0,0 +1,83 @@ +package org.jabref.logic.bst; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +import org.jabref.logic.cleanup.ConvertToBibtexCleanup; +import org.jabref.logic.formatter.bibtexfields.RemoveNewlinesFormatter; +import org.jabref.logic.l10n.Localization; +import org.jabref.logic.layout.format.LatexToUnicodeFormatter; +import org.jabref.logic.layout.format.RemoveLatexCommandsFormatter; +import org.jabref.logic.layout.format.RemoveTilde; +import org.jabref.logic.preview.PreviewLayout; +import org.jabref.model.database.BibDatabase; +import org.jabref.model.entry.BibEntry; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class BstPreviewLayout implements PreviewLayout { + + private static final Logger LOGGER = LoggerFactory.getLogger(BstPreviewLayout.class); + + private final String name; + + private VM vm; + private String error; + + public BstPreviewLayout(Path path) { + name = path.getFileName().toString(); + if (!Files.exists(path)) { + LOGGER.error("File {} not found", path.toAbsolutePath()); + error = Localization.lang("Error opening file '%0'.", path.toString()); + return; + } + try { + vm = new VM(path.toFile()); + } catch (Exception e) { + LOGGER.error("Could not read {}.", path.toAbsolutePath(), e); + error = Localization.lang("Error opening file '%0'.", path.toString()); + } + } + + @Override + public String generatePreview(BibEntry originalEntry, BibDatabase database) { + if (error != null) { + return error; + } + // ensure that the entry is of BibTeX format (and do not modify the original entry) + BibEntry entry = (BibEntry) originalEntry.clone(); + new ConvertToBibtexCleanup().cleanup(entry); + String result = vm.run(List.of(entry)); + // Remove all comments + result = result.replaceAll("%.*", ""); + // Remove all LaTeX comments + // The RemoveLatexCommandsFormatter keeps the words inside latex environments. Therefore, we remove them manually + result = result.replace("\\begin{thebibliography}{1}", ""); + result = result.replace("\\end{thebibliography}", ""); + // The RemoveLatexCommandsFormatter keeps the word inside the latex command, but we want to remove that completely + result = result.replaceAll("\\\\bibitem[{].*[}]", ""); + // We want to replace \newblock by a space instead of completely removing it + result = result.replace("\\newblock", " "); + // remove all latex commands statements - assumption: command in a separate line + result = result.replaceAll("(?m)^\\\\.*$", ""); + // remove some IEEEtran.bst output (resulting from a multiline \providecommand) + result = result.replace("#2}}", ""); + // Have quotes right - and more + result = new LatexToUnicodeFormatter().format(result); + result = result.replace("``", "\""); + result = result.replace("''", "\""); + // Final cleanup + result = new RemoveNewlinesFormatter().format(result); + result = new RemoveLatexCommandsFormatter().format(result); + result = new RemoveTilde().format(result); + result = result.trim().replaceAll(" +", " "); + return result; + } + + @Override + public String getName() { + return name; + } +} diff --git a/src/main/java/org/jabref/logic/bst/VM.java b/src/main/java/org/jabref/logic/bst/VM.java index 448266e9c89..f3dce6d5cfb 100644 --- a/src/main/java/org/jabref/logic/bst/VM.java +++ b/src/main/java/org/jabref/logic/bst/VM.java @@ -14,9 +14,13 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.jabref.logic.bibtex.FieldWriter; +import org.jabref.logic.bibtex.FieldWriterPreferences; +import org.jabref.logic.bibtex.InvalidFieldValueException; import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.AuthorList; import org.jabref.model.entry.BibEntry; +import org.jabref.model.entry.Month; import org.jabref.model.entry.field.Field; import org.jabref.model.entry.field.FieldFactory; import org.jabref.model.entry.field.StandardField; @@ -136,7 +140,7 @@ private VM(CommonTree tree) { stack.push(((Integer) o1).compareTo((Integer) o2) > 0 ? VM.TRUE : VM.FALSE); }); - /* Analogous. */ + /* Analogous to >. */ buildInFunctions.put("<", context -> { if (stack.size() < 2) { throw new VMException("Not enough operands on stack for operation <"); @@ -270,7 +274,7 @@ private VM(CommonTree tree) { if (context == null) { throw new VMException("Call.type$ can only be called from within a context (ITERATE or REVERSE)."); } - VM.this.execute(context.getBibtexEntry().getType().getName(), context); + VM.this.execute(context.entry.getType().getName(), context); }); buildInFunctions.put("change.case$", new ChangeCaseFunction(this)); @@ -303,7 +307,7 @@ private VM(CommonTree tree) { if (context == null) { throw new VMException("Must have an entry to cite$"); } - stack.push(context.getBibtexEntry().getCiteKeyOptional().orElse(null)); + stack.push(context.entry.getCiteKeyOptional().orElse(null)); }); /* @@ -581,7 +585,7 @@ private VM(CommonTree tree) { throw new VMException("type$ need a context."); } - stack.push(context.getBibtexEntry().getType().getName()); + stack.push(context.entry.getType().getName()); }); /* @@ -843,11 +847,14 @@ public String run(Collection bibtex) { } /** - * @param bibtex list of entries to convert + * Transforms the given list of BibEntries to a rendered list of references using the underlying bst file + * + * @param bibEntries list of entries to convert * @param bibDatabase (may be null) the bibDatabase used for resolving strings / crossref + * @return list of references in plain text form */ - public String run(Collection bibtex, BibDatabase bibDatabase) { - Objects.requireNonNull(bibtex); + public String run(Collection bibEntries, BibDatabase bibDatabase) { + Objects.requireNonNull(bibEntries); // Reset bbl = new StringBuilder(); @@ -864,8 +871,8 @@ public String run(Collection bibtex, BibDatabase bibDatabase) { stack = new Stack<>(); // Create entries - entries = new ArrayList<>(bibtex.size()); - for (BibEntry entry : bibtex) { + entries = new ArrayList<>(bibEntries.size()); + for (BibEntry entry : bibEntries) { entries.add(new BstEntry(entry)); } @@ -921,17 +928,40 @@ public String run(Collection bibtex, BibDatabase bibDatabase) { * @param bibDatabase */ private void read(BibDatabase bibDatabase) { + FieldWriter fieldWriter = new FieldWriter(new FieldWriterPreferences()); for (BstEntry e : entries) { - for (Map.Entry mEntry : e.getFields().entrySet()) { + for (Map.Entry mEntry : e.fields.entrySet()) { Field field = FieldFactory.parseField(mEntry.getKey()); - String fieldValue = e.getBibtexEntry().getResolvedFieldOrAlias(field, bibDatabase).orElse(null); + String fieldValue = e.entry.getResolvedFieldOrAlias(field, bibDatabase) + .map(content -> { + try { + String result = fieldWriter.write(field, content); + if (result.startsWith("{")) { + // Strip enclosing {} from the output + return result.substring(1, result.length() - 1); + } + if (field == StandardField.MONTH) { + // We don't have the internal BibTeX strings at hand. + // We nevertheless want to have the full month name. + // Thus, we lookup the full month name here. + return Month.parse(result) + .map(month -> month.getFullName()) + .orElse(result); + } + return result; + } catch (InvalidFieldValueException invalidFieldValueException) { + // in case there is something wrong with the content, just return the content itself + return content; + } + }) + .orElse(null); mEntry.setValue(fieldValue); } } for (BstEntry e : entries) { - if (!e.getFields().containsKey(StandardField.CROSSREF.getName())) { - e.getFields().put(StandardField.CROSSREF.getName(), null); + if (!e.fields.containsKey(StandardField.CROSSREF.getName())) { + e.fields.put(StandardField.CROSSREF.getName(), null); } } } @@ -978,7 +1008,7 @@ private void entry(Tree child) { String name = t.getChild(i).getText(); for (BstEntry entry : entries) { - entry.getFields().put(name, null); + entry.fields.put(name, null); } } @@ -1103,8 +1133,8 @@ private void execute(String name, BstEntry context) { if (context != null) { - if (context.getFields().containsKey(name)) { - stack.push(context.getFields().get(name)); + if (context.fields.containsKey(name)) { + stack.push(context.fields.get(name)); return; } if (context.localStrings.containsKey(name)) { @@ -1171,25 +1201,18 @@ private void strings(Tree child) { public static class BstEntry { - private final BibEntry entry; + public final BibEntry entry; - private final Map localStrings = new HashMap<>(); + public final Map localStrings = new HashMap<>(); - private final Map fields = new HashMap<>(); + // keys filled by org.jabref.logic.bst.VM.entry based on the contents of the bst file + public final Map fields = new HashMap<>(); - private final Map localIntegers = new HashMap<>(); + public final Map localIntegers = new HashMap<>(); public BstEntry(BibEntry e) { this.entry = e; } - - public Map getFields() { - return fields; - } - - public BibEntry getBibtexEntry() { - return entry; - } } private void push(Integer integer) { diff --git a/src/main/java/org/jabref/logic/citationstyle/CitationStyleCache.java b/src/main/java/org/jabref/logic/citationstyle/CitationStyleCache.java index 0e9a546b2c3..bb7ba7f1f50 100644 --- a/src/main/java/org/jabref/logic/citationstyle/CitationStyleCache.java +++ b/src/main/java/org/jabref/logic/citationstyle/CitationStyleCache.java @@ -2,6 +2,7 @@ import java.util.Objects; +import org.jabref.logic.preview.PreviewLayout; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.event.EntriesRemovedEvent; import org.jabref.model.entry.BibEntry; diff --git a/src/main/java/org/jabref/logic/citationstyle/CitationStylePreviewLayout.java b/src/main/java/org/jabref/logic/citationstyle/CitationStylePreviewLayout.java index c07bce6ebfd..d40e86c7414 100644 --- a/src/main/java/org/jabref/logic/citationstyle/CitationStylePreviewLayout.java +++ b/src/main/java/org/jabref/logic/citationstyle/CitationStylePreviewLayout.java @@ -1,5 +1,6 @@ package org.jabref.logic.citationstyle; +import org.jabref.logic.preview.PreviewLayout; import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.BibEntry; diff --git a/src/main/java/org/jabref/logic/citationstyle/TextBasedPreviewLayout.java b/src/main/java/org/jabref/logic/layout/TextBasedPreviewLayout.java similarity index 87% rename from src/main/java/org/jabref/logic/citationstyle/TextBasedPreviewLayout.java rename to src/main/java/org/jabref/logic/layout/TextBasedPreviewLayout.java index 193a0fd6949..011eced3f4e 100644 --- a/src/main/java/org/jabref/logic/citationstyle/TextBasedPreviewLayout.java +++ b/src/main/java/org/jabref/logic/layout/TextBasedPreviewLayout.java @@ -1,18 +1,19 @@ -package org.jabref.logic.citationstyle; +package org.jabref.logic.layout; import java.io.IOException; import java.io.StringReader; import org.jabref.logic.l10n.Localization; -import org.jabref.logic.layout.Layout; -import org.jabref.logic.layout.LayoutFormatterPreferences; -import org.jabref.logic.layout.LayoutHelper; +import org.jabref.logic.preview.PreviewLayout; import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.BibEntry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Implements the preview based JabRef's Custom export fitlters. + */ public class TextBasedPreviewLayout implements PreviewLayout { private static final Logger LOGGER = LoggerFactory.getLogger(TextBasedPreviewLayout.class); diff --git a/src/main/java/org/jabref/logic/layout/format/RemoveWhitespace.java b/src/main/java/org/jabref/logic/layout/format/RemoveWhitespace.java index 747c726a880..15dc444965e 100644 --- a/src/main/java/org/jabref/logic/layout/format/RemoveWhitespace.java +++ b/src/main/java/org/jabref/logic/layout/format/RemoveWhitespace.java @@ -4,14 +4,11 @@ /** * Remove non printable character formatter. - * - * Based on the RemoveBrackets.java class (Revision 1.2) by mortenalver */ public class RemoveWhitespace implements LayoutFormatter { @Override public String format(String fieldEntry) { - if (fieldEntry == null) { return null; } diff --git a/src/main/java/org/jabref/logic/citationstyle/PreviewLayout.java b/src/main/java/org/jabref/logic/preview/PreviewLayout.java similarity index 58% rename from src/main/java/org/jabref/logic/citationstyle/PreviewLayout.java rename to src/main/java/org/jabref/logic/preview/PreviewLayout.java index e47eec9f01c..3f6626924b0 100644 --- a/src/main/java/org/jabref/logic/citationstyle/PreviewLayout.java +++ b/src/main/java/org/jabref/logic/preview/PreviewLayout.java @@ -1,8 +1,11 @@ -package org.jabref.logic.citationstyle; +package org.jabref.logic.preview; import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.BibEntry; +/** + * Used for displaying a rendered entry in the UI. Due to historical reasons, "rendering" is called "layout". + */ public interface PreviewLayout { String generatePreview(BibEntry entry, BibDatabase database); diff --git a/src/main/java/org/jabref/model/strings/StringUtil.java b/src/main/java/org/jabref/model/strings/StringUtil.java index a5f4a2fca0e..c3a46c0adfc 100644 --- a/src/main/java/org/jabref/model/strings/StringUtil.java +++ b/src/main/java/org/jabref/model/strings/StringUtil.java @@ -193,20 +193,19 @@ public static String getCorrectFileName(String orgName, String defaultExtension) } /** - * Formats field contents for output. Must be "symmetric" with the parse method above, - * so stored and reloaded fields are not mangled. + * Formats field contents for output. Must be "symmetric" with the parse method above, so stored and reloaded fields + * are not mangled. * - * @param in - * @param wrapAmount - * @param newline - * @return the wrapped String. + * @param in the string to wrap + * @param wrapAmount the number of characters belonging to a line of text + * @param newline the newline character(s) + * @return the wrapped string */ public static String wrap(String in, int wrapAmount, String newline) { - String[] lines = in.split("\n"); StringBuilder result = new StringBuilder(); // remove all whitespace at the end of the string, this especially includes \r created when the field content has \r\n as line separator - addWrappedLine(result, CharMatcher.whitespace().trimTrailingFrom(lines[0]), wrapAmount, newline); // See + addWrappedLine(result, CharMatcher.whitespace().trimTrailingFrom(lines[0]), wrapAmount, newline); for (int i = 1; i < lines.length; i++) { if (lines[i].trim().isEmpty()) { @@ -225,12 +224,21 @@ public static String wrap(String in, int wrapAmount, String newline) { return result.toString(); } - private static void addWrappedLine(StringBuilder result, String line, int wrapAmount, String newline) { + /** + * Appends a text to a string builder. Wraps the text so that each line is approx wrapAmount characters long. + * Wrapping is done using newline and tab character. + * + * @param line the line of text to be wrapped and appended + * @param wrapAmount the number of characters belonging to a line of text + * @param newlineString a string containing the newline character(s) + */ + private static void addWrappedLine(StringBuilder result, String line, int wrapAmount, String newlineString) { // Set our pointer to the beginning of the new line in the StringBuffer: int length = result.length(); // Add the line, unmodified: result.append(line); + // insert newlines and one tab character at each position, where wrapping is necessary while (length < result.length()) { int current = result.indexOf(" ", length + wrapAmount); if ((current < 0) || (current >= result.length())) { @@ -238,9 +246,8 @@ private static void addWrappedLine(StringBuilder result, String line, int wrapAm } result.deleteCharAt(current); - result.insert(current, newline + "\t"); - length = current + newline.length(); - + result.insert(current, newlineString + "\t"); + length = current + newlineString.length(); } } diff --git a/src/main/java/org/jabref/preferences/JabRefPreferences.java b/src/main/java/org/jabref/preferences/JabRefPreferences.java index 096396915f3..82f8ca3dd1e 100644 --- a/src/main/java/org/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/org/jabref/preferences/JabRefPreferences.java @@ -59,8 +59,6 @@ import org.jabref.logic.bibtexkeypattern.BibtexKeyPatternPreferences; import org.jabref.logic.citationstyle.CitationStyle; import org.jabref.logic.citationstyle.CitationStylePreviewLayout; -import org.jabref.logic.citationstyle.PreviewLayout; -import org.jabref.logic.citationstyle.TextBasedPreviewLayout; import org.jabref.logic.cleanup.CleanupPreferences; import org.jabref.logic.cleanup.CleanupPreset; import org.jabref.logic.cleanup.Cleanups; @@ -74,6 +72,7 @@ import org.jabref.logic.l10n.Language; import org.jabref.logic.l10n.Localization; import org.jabref.logic.layout.LayoutFormatterPreferences; +import org.jabref.logic.layout.TextBasedPreviewLayout; import org.jabref.logic.layout.format.FileLinkPreferences; import org.jabref.logic.layout.format.NameFormatterPreferences; import org.jabref.logic.net.ProxyPreferences; @@ -81,6 +80,7 @@ import org.jabref.logic.openoffice.StyleLoader; import org.jabref.logic.preferences.OwnerPreferences; import org.jabref.logic.preferences.TimestampPreferences; +import org.jabref.logic.preview.PreviewLayout; import org.jabref.logic.protectedterms.ProtectedTermsList; import org.jabref.logic.protectedterms.ProtectedTermsLoader; import org.jabref.logic.protectedterms.ProtectedTermsPreferences; diff --git a/src/main/java/org/jabref/preferences/PreviewPreferences.java b/src/main/java/org/jabref/preferences/PreviewPreferences.java index efec4035934..c6a7ad20742 100644 --- a/src/main/java/org/jabref/preferences/PreviewPreferences.java +++ b/src/main/java/org/jabref/preferences/PreviewPreferences.java @@ -3,9 +3,9 @@ import java.util.List; import org.jabref.Globals; -import org.jabref.logic.citationstyle.PreviewLayout; -import org.jabref.logic.citationstyle.TextBasedPreviewLayout; import org.jabref.logic.layout.LayoutFormatterPreferences; +import org.jabref.logic.layout.TextBasedPreviewLayout; +import org.jabref.logic.preview.PreviewLayout; public class PreviewPreferences { diff --git a/src/test/java/org/jabref/logic/bst/BstPreviewLayoutTest.java b/src/test/java/org/jabref/logic/bst/BstPreviewLayoutTest.java new file mode 100644 index 00000000000..945d5294abe --- /dev/null +++ b/src/test/java/org/jabref/logic/bst/BstPreviewLayoutTest.java @@ -0,0 +1,66 @@ +package org.jabref.logic.bst; + +import java.nio.file.Paths; + +import org.jabref.model.database.BibDatabase; +import org.jabref.model.entry.BibEntry; +import org.jabref.model.entry.field.StandardField; +import org.jabref.model.entry.types.StandardEntryType; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; + +class BstPreviewLayoutTest { + + private BibDatabase bibDatabase = mock(BibDatabase.class); + + @Test + public void generatePreviewForSimpleEntryUsingAbbr() throws Exception { + BstPreviewLayout bstPreviewLayout = new BstPreviewLayout(Paths.get(BstPreviewLayoutTest.class.getResource("abbrv.bst").toURI())); + BibEntry entry = new BibEntry().withField(StandardField.AUTHOR, "Oliver Kopp") + .withField(StandardField.TITLE, "Thoughts on Development"); + BibDatabase bibDatabase = mock(BibDatabase.class); + String preview = bstPreviewLayout.generatePreview(entry, bibDatabase); + assertEquals("O. Kopp. Thoughts on development.", preview); + } + + @Test + public void monthMayIsCorrectlyRendered() throws Exception { + BstPreviewLayout bstPreviewLayout = new BstPreviewLayout(Paths.get(BstPreviewLayoutTest.class.getResource("abbrv.bst").toURI())); + BibEntry entry = new BibEntry().withField(StandardField.AUTHOR, "Oliver Kopp") + .withField(StandardField.TITLE, "Thoughts on Development") + .withField(StandardField.MONTH, "#May#"); + BibDatabase bibDatabase = mock(BibDatabase.class); + String preview = bstPreviewLayout.generatePreview(entry, bibDatabase); + assertEquals("O. Kopp. Thoughts on development, May.", preview); + } + + @Test + public void generatePreviewForSliceTheoremPaperUsingAbbr() throws Exception { + BstPreviewLayout bstPreviewLayout = new BstPreviewLayout(Paths.get(BstPreviewLayoutTest.class.getResource("abbrv.bst").toURI())); + String preview = bstPreviewLayout.generatePreview(getSliceTheoremPaper(), bibDatabase); + assertEquals("T. Diez. Slice theorem for fréchet group actions and covariant symplectic field theory. May 2014.", preview); + } + + @Test + public void generatePreviewForSliceTheoremPaperUsingIEEE() throws Exception { + BstPreviewLayout bstPreviewLayout = new BstPreviewLayout(Paths.get(ClassLoader.getSystemResource("bst/IEEEtran.bst").toURI())); + String preview = bstPreviewLayout.generatePreview(getSliceTheoremPaper(), bibDatabase); + assertEquals("T. Diez, \"Slice theorem for fréchet group actions and covariant symplectic field theory\" May 2014.", preview); + } + + private static BibEntry getSliceTheoremPaper() { + return new BibEntry(StandardEntryType.Article) + .withField(StandardField.AUTHOR, "Tobias Diez") + .withField(StandardField.TITLE, "Slice theorem for Fréchet group actions and covariant symplectic field theory") + .withField(StandardField.DATE, "2014-05-09") + .withField(StandardField.ABSTRACT, "A general slice theorem for the action of a Fr\\'echet Lie group on a Fr\\'echet manifolds is established. The Nash-Moser theorem provides the fundamental tool to generalize the result of Palais to this infinite-dimensional setting. The presented slice theorem is illustrated by its application to gauge theories: the action of the gauge transformation group admits smooth slices at every point and thus the gauge orbit space is stratified by Fr\\'echet manifolds. Furthermore, a covariant and symplectic formulation of classical field theory is proposed and extensively discussed. At the root of this novel framework is the incorporation of field degrees of freedom F and spacetime M into the product manifold F * M. The induced bigrading of differential forms is used in order to carry over the usual symplectic theory to this new setting. The examples of the Klein-Gordon field and general Yang-Mills theory illustrate that the presented approach conveniently handles the occurring symmetries.") + .withField(StandardField.EPRINT, "1405.2249v1") + .withField(StandardField.FILE, ":http\\://arxiv.org/pdf/1405.2249v1:PDF") + .withField(StandardField.EPRINTTYPE, "arXiv") + .withField(StandardField.EPRINTCLASS, "math-ph") + .withField(StandardField.KEYWORDS, "math-ph, math.DG, math.MP, math.SG, 58B99, 58Z05, 58B25, 22E65, 58D19, 53D20, 53D42"); + } +} diff --git a/src/test/java/org/jabref/logic/bst/TestVM.java b/src/test/java/org/jabref/logic/bst/TestVM.java index 35d42d7e217..f468889d55a 100644 --- a/src/test/java/org/jabref/logic/bst/TestVM.java +++ b/src/test/java/org/jabref/logic/bst/TestVM.java @@ -54,7 +54,7 @@ public void testVMSimple() throws RecognitionException, IOException { assertEquals(2, vm.getStrings().size()); assertEquals(7, vm.getIntegers().size()); assertEquals(1, vm.getEntries().size()); - assertEquals(5, vm.getEntries().get(0).getFields().size()); + assertEquals(5, vm.getEntries().get(0).fields.size()); assertEquals(38, vm.getFunctions().size()); } @@ -366,10 +366,10 @@ public void testSort() throws RecognitionException, IOException { vm.run(v); List v2 = vm.getEntries(); - assertEquals(Optional.of("a"), v2.get(0).getBibtexEntry().getCiteKeyOptional()); - assertEquals(Optional.of("b"), v2.get(1).getBibtexEntry().getCiteKeyOptional()); - assertEquals(Optional.of("c"), v2.get(2).getBibtexEntry().getCiteKeyOptional()); - assertEquals(Optional.of("d"), v2.get(3).getBibtexEntry().getCiteKeyOptional()); + assertEquals(Optional.of("a"), v2.get(0).entry.getCiteKeyOptional()); + assertEquals(Optional.of("b"), v2.get(1).entry.getCiteKeyOptional()); + assertEquals(Optional.of("c"), v2.get(2).entry.getCiteKeyOptional()); + assertEquals(Optional.of("d"), v2.get(3).entry.getCiteKeyOptional()); } @Test From 2566fe02e3693067b2ae40ca7481c2e1330fca27 Mon Sep 17 00:00:00 2001 From: github actions Date: Sun, 29 Mar 2020 12:25:49 +0000 Subject: [PATCH 015/166] Squashed 'src/main/resources/csl-styles/' changes from fa6bb226d2..ddf2572f36 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ddf2572f36 Create universitat-stuttgart-mpp-standard.csl (#4639) bde92d6a13 Update environmental-microbiology.csl (#4641) efa68bce16 Update presses-universitaires-de-rennes.csl (#4640) 0872e3eb7a Fixes #4648 (#4649) 9a159a49f1 Create studi-e-materiali-di-storia-delle-religioni.csl (#4642) e63f13e8e2 further updates for websites and paper-conference Update ieee.csl (#4646) 0cb6762e0b Create Bulletin du Centre d’études médiévales d’Auxerre (#4635) 784a1c9f86 Update instituto-de-pesquisas-energeticas-e-nucleares.csl (#4634) e5f9eeddb7 Update ieee.csl (#4636) e82a783830 Fix paper-conference in journal-of-new-zealand-grasslands.csl (#4637) 7365ce89fe fix editor label for french apa.csl (#4616) git-subtree-dir: src/main/resources/csl-styles git-subtree-split: ddf2572f366ff14d53aff6d80dcd1e321f803137 --- apa-5th-edition.csl | 8 + apa-6th-edition.csl | 8 + apa-annotated-bibliography.csl | 4 + apa-cv.csl | 4 + apa-no-ampersand.csl | 4 + apa-no-doi-no-issue.csl | 8 + apa-old-doi-prefix.csl | 8 + apa-single-spaced.csl | 4 + apa-with-abstract.csl | 4 + apa.csl | 4 + associacao-brasileira-de-normas-tecnicas.csl | 6 +- ...-du-centre-detudes-medievales-dauxerre.csl | 249 +++++++++ environmental-microbiology.csl | 8 +- ieee.csl | 67 ++- ...o-de-pesquisas-energeticas-e-nucleares.csl | 5 +- journal-of-new-zealand-grasslands.csl | 43 +- presses-universitaires-de-rennes.csl | 36 +- ...-e-materiali-di-storia-delle-religioni.csl | 473 ++++++++++++++++++ ...at-stuttgart-planung-und-partizipation.csl | 399 +++++++++++++++ 19 files changed, 1275 insertions(+), 67 deletions(-) create mode 100644 bulletin-du-centre-detudes-medievales-dauxerre.csl create mode 100644 studi-e-materiali-di-storia-delle-religioni.csl create mode 100644 universitat-stuttgart-planung-und-partizipation.csl diff --git a/apa-5th-edition.csl b/apa-5th-edition.csl index 7e22c594594..a2784ca4b5b 100644 --- a/apa-5th-edition.csl +++ b/apa-5th-edition.csl @@ -30,6 +30,14 @@ 2012-09-27T22:06:38+00:00 This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License + + + + éd. + éds. + + + diff --git a/apa-6th-edition.csl b/apa-6th-edition.csl index 24d2881272f..da2f966217b 100644 --- a/apa-6th-edition.csl +++ b/apa-6th-edition.csl @@ -84,6 +84,14 @@ et al. + + + + éd. + éds. + + + diff --git a/apa-annotated-bibliography.csl b/apa-annotated-bibliography.csl index 977fade834a..5a1fdff33cb 100644 --- a/apa-annotated-bibliography.csl +++ b/apa-annotated-bibliography.csl @@ -80,6 +80,10 @@ communication personnelle lettre + + éd. + éds. + diff --git a/apa-cv.csl b/apa-cv.csl index 7669e75a320..b2b5805b4c3 100644 --- a/apa-cv.csl +++ b/apa-cv.csl @@ -80,6 +80,10 @@ communication personnelle lettre + + éd. + éds. + diff --git a/apa-no-ampersand.csl b/apa-no-ampersand.csl index 8aa2810d492..48a1c7ac76e 100644 --- a/apa-no-ampersand.csl +++ b/apa-no-ampersand.csl @@ -80,6 +80,10 @@ communication personnelle lettre + + éd. + éds. + diff --git a/apa-no-doi-no-issue.csl b/apa-no-doi-no-issue.csl index 878e1a51323..3c1d12571ec 100644 --- a/apa-no-doi-no-issue.csl +++ b/apa-no-doi-no-issue.csl @@ -85,6 +85,14 @@ et al. + + + + éd. + éds. + + + diff --git a/apa-old-doi-prefix.csl b/apa-old-doi-prefix.csl index 8fce4d5cca6..02bbbaf90d4 100644 --- a/apa-old-doi-prefix.csl +++ b/apa-old-doi-prefix.csl @@ -85,6 +85,14 @@ et al. + + + + éd. + éds. + + + diff --git a/apa-single-spaced.csl b/apa-single-spaced.csl index b0da8c769b1..7c902d8ee75 100644 --- a/apa-single-spaced.csl +++ b/apa-single-spaced.csl @@ -80,6 +80,10 @@ communication personnelle lettre + + éd. + éds. + diff --git a/apa-with-abstract.csl b/apa-with-abstract.csl index fad2cb5a05c..6c28d7f889a 100644 --- a/apa-with-abstract.csl +++ b/apa-with-abstract.csl @@ -80,6 +80,10 @@ communication personnelle lettre + + éd. + éds. + diff --git a/apa.csl b/apa.csl index 002b6587e66..284e56ca1ce 100644 --- a/apa.csl +++ b/apa.csl @@ -80,6 +80,10 @@ communication personnelle lettre + + éd. + éds. + diff --git a/associacao-brasileira-de-normas-tecnicas.csl b/associacao-brasileira-de-normas-tecnicas.csl index d2be79865a5..089a5641f32 100644 --- a/associacao-brasileira-de-normas-tecnicas.csl +++ b/associacao-brasileira-de-normas-tecnicas.csl @@ -106,9 +106,8 @@ tendo as inicias separadas por ponto.--> - - + @@ -201,8 +200,7 @@ autores, exceto em arquivos do tipo 'artigo de jornal, artigo de revista, artigo - - + diff --git a/bulletin-du-centre-detudes-medievales-dauxerre.csl b/bulletin-du-centre-detudes-medievales-dauxerre.csl new file mode 100644 index 00000000000..fe4fc51abc7 --- /dev/null +++ b/bulletin-du-centre-detudes-medievales-dauxerre.csl @@ -0,0 +1,249 @@ + + diff --git a/environmental-microbiology.csl b/environmental-microbiology.csl index 84b62debd75..8403fcfb95b 100644 --- a/environmental-microbiology.csl +++ b/environmental-microbiology.csl @@ -29,7 +29,7 @@ - + @@ -116,11 +116,11 @@ - + + + - - diff --git a/ieee.csl b/ieee.csl index cecf0ba784f..0bb98571d2b 100644 --- a/ieee.csl +++ b/ieee.csl @@ -30,6 +30,9 @@ g.silano89@gmail.com http://giuseppesilano.net + + Patrick O'Brien + @@ -77,16 +80,22 @@ - + + + + + + + - - - + + + @@ -184,17 +193,13 @@ - - - - - - - - + + + + - - + + @@ -205,6 +210,23 @@ + + + + + + + + + + + + + + + + + @@ -271,14 +293,17 @@ - - - - - - + + + + + + + + + - + diff --git a/instituto-de-pesquisas-energeticas-e-nucleares.csl b/instituto-de-pesquisas-energeticas-e-nucleares.csl index 18a4cf66f96..13ba9a3da64 100644 --- a/instituto-de-pesquisas-energeticas-e-nucleares.csl +++ b/instituto-de-pesquisas-energeticas-e-nucleares.csl @@ -22,7 +22,7 @@ The Brazilian standard style - 2020-03-11T08:37:01+00:00 + 2020-03-21T08:37:01+00:00 This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License @@ -561,8 +561,7 @@ - - + diff --git a/journal-of-new-zealand-grasslands.csl b/journal-of-new-zealand-grasslands.csl index 5ace1e175aa..2812f9731c5 100644 --- a/journal-of-new-zealand-grasslands.csl +++ b/journal-of-new-zealand-grasslands.csl @@ -15,7 +15,7 @@ 2463-2872 2463-2880 - 2020-03-13T14:38:52+00:00 + 2020-03-23T13:00:00+00:00 This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License @@ -55,6 +55,11 @@ + + + + + @@ -73,19 +78,6 @@ - - - - - - - - - - - - - @@ -141,16 +133,29 @@ - - - - + + + + + + + + + + + + + + + + + + - diff --git a/presses-universitaires-de-rennes.csl b/presses-universitaires-de-rennes.csl index 57d6ff9e3c4..83286badb8f 100644 --- a/presses-universitaires-de-rennes.csl +++ b/presses-universitaires-de-rennes.csl @@ -1,5 +1,6 @@ - diff --git a/universitat-stuttgart-planung-und-partizipation.csl b/universitat-stuttgart-planung-und-partizipation.csl new file mode 100644 index 00000000000..72cac70dc1c --- /dev/null +++ b/universitat-stuttgart-planung-und-partizipation.csl @@ -0,0 +1,399 @@ + + From d6073fd1463cb86eb56ef13766f53a8ee9ae9bde Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 29 Mar 2020 15:47:25 +0200 Subject: [PATCH 016/166] Update gradle wrapper from 6.3-rc-3 to 6.3 --- gradle/wrapper/gradle-wrapper.jar | Bin 58695 -> 58694 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index f3d88b1c2faf2fc91d853cd5d4242b5547257070..490fda8577df6c95960ba7077c43220e5bb2c0d9 100644 GIT binary patch delta 6577 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 MViXjGx&OBR0?kH%b^rhX delta 6547 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 Date: Sun, 29 Mar 2020 16:30:15 +0200 Subject: [PATCH 017/166] Fix test to obey added documentation --- src/test/java/org/jabref/model/strings/StringUtilTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/jabref/model/strings/StringUtilTest.java b/src/test/java/org/jabref/model/strings/StringUtilTest.java index 5f9569eaa58..307fd886899 100644 --- a/src/test/java/org/jabref/model/strings/StringUtilTest.java +++ b/src/test/java/org/jabref/model/strings/StringUtilTest.java @@ -21,7 +21,7 @@ void StringUtilClassIsSmall() throws Exception { Path path = Paths.get("src", "main", "java", StringUtil.class.getName().replace('.', '/') + ".java"); int lineCount = Files.readAllLines(path, StandardCharsets.UTF_8).size(); - assertTrue(lineCount <= 749, "StringUtil increased in size to " + lineCount + ". " + assertTrue(lineCount <= 756, "StringUtil increased in size to " + lineCount + ". " + "We try to keep this class as small as possible. " + "Thus think twice if you add something to StringUtil."); } From 4172fcdbcb83b0aedb836598463cc405b56e28c7 Mon Sep 17 00:00:00 2001 From: dimitra-karadima Date: Sun, 29 Mar 2020 17:41:30 +0300 Subject: [PATCH 018/166] Add tooltips for all entry types for #6074 Change: Add tooltips in the "Select entry type" dialog. You can see the tooltip when hovering a button of an entry type. --- .../java/org/jabref/gui/EntryTypeView.java | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/src/main/java/org/jabref/gui/EntryTypeView.java b/src/main/java/org/jabref/gui/EntryTypeView.java index d7d45501a8e..d9aa1b66b67 100644 --- a/src/main/java/org/jabref/gui/EntryTypeView.java +++ b/src/main/java/org/jabref/gui/EntryTypeView.java @@ -12,6 +12,7 @@ import javafx.scene.control.ComboBox; import javafx.scene.control.TextField; import javafx.scene.control.TitledPane; +import javafx.scene.control.Tooltip; import javafx.scene.layout.FlowPane; import org.jabref.Globals; @@ -26,6 +27,8 @@ import org.jabref.model.entry.types.BibtexEntryTypeDefinitions; import org.jabref.model.entry.types.EntryType; import org.jabref.model.entry.types.IEEETranEntryTypeDefinitions; +import org.jabref.model.entry.types.StandardEntryType; +import org.jabref.model.strings.StringUtil; import org.jabref.preferences.JabRefPreferences; import com.airhacks.afterburner.views.ViewLoader; @@ -92,6 +95,13 @@ private void addEntriesToPane(FlowPane pane, Collection entryButton.setUserData(entryType); entryButton.setOnAction(event -> setEntryTypeForReturnAndClose(Optional.of(entryType))); pane.getChildren().add(entryButton); + + String description = getDescription(entryType); + if (StringUtil.isNotBlank(description)) { + Tooltip tooltip = new Tooltip(); + tooltip.setText(description); + entryButton.setTooltip(tooltip); + } } } @@ -168,4 +178,82 @@ private void setEntryTypeForReturnAndClose(Optional entryType) { viewModel.stopFetching(); this.close(); } + + public String getDescription(BibEntryType selectedType) { + EntryType entryType = selectedType.getType(); + try { + StandardEntryType entry = (StandardEntryType) entryType; + switch (entry) { + case Article: + return Localization.lang("An article from a journal or magazine."); + case Book: + return Localization.lang("A book with an explicit publisher."); + case Booklet: + return Localization.lang("A work that is printed and bound, but without a named publisher orsponsoring institution."); + case Collection: + return Localization.lang("A single-volume collection with multiple, self-contained contributions by distinct authors which have their own title. The work as a whole has no overall author but it will usually have an editor."); + case Conference: + return Localization.lang("The same as Inproceedings, included for Scribe compatibility."); + case InBook: + return Localization.lang("A part of a book, which may be a chapter(or section or whatever) and/or a range of pages."); + case InCollection: + return Localization.lang("A part of a book having its own title."); + case InProceedings: + return Localization.lang("An article in a conference proceedings."); + case Manual: + return Localization.lang("Technical documentation."); + case MastersThesis: + return Localization.lang("A Master’s thesis."); + case Misc: + return Localization.lang("Use this type when nothing else fits"); + case PhdThesis: + return Localization.lang("A PhD thesis."); + case Proceedings: + return Localization.lang("The proceedings of a conference."); + case TechReport: + return Localization.lang("A report published by a school or other institution, usually numbered within a series."); + case Unpublished: + return Localization.lang("A document having an author and title, but not formally published."); + case BookInBook: + return Localization.lang("This type is similar to inbook but intended for works originally published as astand-alone book."); + case InReference: + return Localization.lang("An article in a work of reference."); + case MvBook: + return Localization.lang("A multi-volume book."); + case MvCollection: + return Localization.lang("A multi-volume collection."); + case MvProceedings: + return Localization.lang("A multi-volume proceedings entry."); + case MvReference: + return Localization.lang("A multi-volume reference entry. The standard styles will treat this entry typeas an alias for mvcollection."); + case Online: + return Localization.lang("This entry type is intended for sources such as web sites which are intrinsically online resources."); + case Reference: + return Localization.lang("A single-volume work of reference such as an encyclopedia or a dictionary."); + case Report: + return Localization.lang("A technical report, research report, or white paper published by a university or someother institution."); + case Set: + return Localization.lang("An entry set is a group of entries which are cited as a single reference and listed as a single item in the bibliography."); + case SuppBook: + return Localization.lang("Supplemental material in a book. This type is provided for elements such as prefaces, introductions, forewords, afterwords, etc. which often have a generic title only."); + case SuppCollection: + return Localization.lang("Supplemental material in a collection."); + case SuppPeriodical: + return Localization.lang("Supplemental material in a periodical. This type may be useful when referring to items such as regular columns, obituaries, letters to the editor, etc. which only have a generic title."); + case Thesis: + return Localization.lang("A thesis written for an educational institution to satisfy the requirements for a degree."); + case WWW: + return Localization.lang("An alias for online, provided for jurabib compatibility."); + case Software: + return Localization.lang("Computer software. The standard styles will treat this entry type as an alias for misc."); + case DATESET: + return Localization.lang("A data set or a similar collection of (mostly) raw data."); + } + return ""; + } catch (Exception e) { + return ""; + } + + } + } From c2bd8988d37049b51013f86639e3d5b37c195c06 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 29 Mar 2020 19:28:11 +0200 Subject: [PATCH 019/166] Remove redundant RegExp character replace (#6200) Found by IntelliJ: https://www.jetbrains.com/help/phpstorm/regexp-redundant-character-escape.html --- .../logic/formatter/bibtexfields/HtmlToUnicodeFormatter.java | 2 +- src/main/java/org/jabref/logic/layout/format/HTMLChars.java | 2 +- src/main/java/org/jabref/logic/openoffice/OOPreFormatter.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/jabref/logic/formatter/bibtexfields/HtmlToUnicodeFormatter.java b/src/main/java/org/jabref/logic/formatter/bibtexfields/HtmlToUnicodeFormatter.java index 153ac1cbb0f..09d8a9b9799 100644 --- a/src/main/java/org/jabref/logic/formatter/bibtexfields/HtmlToUnicodeFormatter.java +++ b/src/main/java/org/jabref/logic/formatter/bibtexfields/HtmlToUnicodeFormatter.java @@ -33,6 +33,6 @@ public String getExampleInput() { @Override public String format(String fieldText) { // StringEscapeUtils converts characters and regex kills tags - return StringEscapeUtils.unescapeHtml4(fieldText).replaceAll("\\<[^>]*>",""); + return StringEscapeUtils.unescapeHtml4(fieldText).replaceAll("<[^>]*>",""); } } diff --git a/src/main/java/org/jabref/logic/layout/format/HTMLChars.java b/src/main/java/org/jabref/logic/layout/format/HTMLChars.java index 5a713834096..d648583d800 100644 --- a/src/main/java/org/jabref/logic/layout/format/HTMLChars.java +++ b/src/main/java/org/jabref/logic/layout/format/HTMLChars.java @@ -20,7 +20,7 @@ public String format(String inField) { .replaceAll("[\\n]{2,}", "

") // Replace double line breaks with

.replace("\n", "
") // Replace single line breaks with
.replace("\\$", "$") // Replace \$ with $ - .replaceAll("\\$([^\\$]*)\\$", "\\{$1\\}"); // Replace $...$ with {...} to simplify conversion + .replaceAll("\\$([^$]*)\\$", "\\{$1\\}"); // Replace $...$ with {...} to simplify conversion StringBuilder sb = new StringBuilder(); StringBuilder currentCommand = null; diff --git a/src/main/java/org/jabref/logic/openoffice/OOPreFormatter.java b/src/main/java/org/jabref/logic/openoffice/OOPreFormatter.java index 1e7fc1076e6..91e954dd44b 100644 --- a/src/main/java/org/jabref/logic/openoffice/OOPreFormatter.java +++ b/src/main/java/org/jabref/logic/openoffice/OOPreFormatter.java @@ -19,7 +19,7 @@ public String format(String field) { int i; String finalResult = field.replaceAll("&|\\\\&", "&") // Replace & and \& with & .replace("\\$", "$") // Replace \$ with $ - .replaceAll("\\$([^\\$]*)\\$", "\\{$1\\}"); // Replace $...$ with {...} to simplify conversion + .replaceAll("\\$([^$]*)\\$", "\\{$1\\}"); // Replace $...$ with {...} to simplify conversion StringBuilder sb = new StringBuilder(); StringBuilder currentCommand = null; From 05bc41cc74338a806f094abfc50a12ce4a8c1c16 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 29 Mar 2020 23:11:34 +0200 Subject: [PATCH 020/166] Enable building snapcraft image from snapcraft branch --- .github/workflows/snap.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/snap.yml b/.github/workflows/snap.yml index fe175294cbf..aef1f092186 100644 --- a/.github/workflows/snap.yml +++ b/.github/workflows/snap.yml @@ -1,6 +1,9 @@ name: Snap on: + push: + branches: + - snapcraft schedule: # run on each day - cron: '33 4 * * *' From 556ef4eaa7bb3a9063453e8a5f7e6dd6cf31428c Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Mon, 30 Mar 2020 00:26:22 +0200 Subject: [PATCH 021/166] Set grade to stable --- snap/snapcraft.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 3734858e789..ef33d746b49 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -5,7 +5,7 @@ license: MIT summary: Bibliography manager description: JabRef is an open source bibliography reference manager. The native file format used by JabRef is BibTeX, the standard LaTeX bibliography format. -grade: devel +grade: stable confinement: strict base: core18 license: MIT From 7ec1d0cbdec3595bdf9e373da6109c9a8f31e5f0 Mon Sep 17 00:00:00 2001 From: gtam25 Date: Mon, 30 Mar 2020 04:59:32 +0530 Subject: [PATCH 022/166] Fix overwritting downloaded files with same name (#6174) - fixes #6068 Co-authored-by: Goutam Lavudiya --- CHANGELOG.md | 2 +- .../gui/fieldeditors/LinkedFileViewModel.java | 2 + .../logic/util/io/FileNameUniqueness.java | 46 +++++++++++++++++ .../logic/util/io/FileNameUniquenessTest.java | 50 +++++++++++++++++++ 4 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/jabref/logic/util/io/FileNameUniqueness.java create mode 100644 src/test/java/org/jabref/logic/util/io/FileNameUniquenessTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 149ea8d8bc7..1cbf79c286c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We fixed an issue where opening a library from the recent libraries menu was not possible. [#5939](https://github.com/JabRef/jabref/issues/5939) - We fixed an issue with inconsistent capitalization of file extensions when downloading files [#6115](https://github.com/JabRef/jabref/issues/6115) - We fixed the display of language and encoding in the preferences dialog. [#6130](https://github.com/JabRef/jabref/pull/6130) - +- We fixed an issue where search full-text documents downloaded files with same name, overwriting existing files. [#6174](https://github.com/JabRef/jabref/pull/6174) ### Removed - We removed the obsolete `External programs / Open PDF` section in the preferences, as the default application to open PDFs is now set in the `Manage external file types` dialog. [#6130](https://github.com/JabRef/jabref/pull/6130) diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedFileViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedFileViewModel.java index d52a24b9f95..e57513db0b7 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedFileViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedFileViewModel.java @@ -38,6 +38,7 @@ import org.jabref.logic.externalfiles.LinkedFileHandler; import org.jabref.logic.l10n.Localization; import org.jabref.logic.net.URLDownload; +import org.jabref.logic.util.io.FileNameUniqueness; import org.jabref.logic.xmp.XmpPreferences; import org.jabref.logic.xmp.XmpUtilWriter; import org.jabref.model.database.BibDatabaseContext; @@ -419,6 +420,7 @@ public BackgroundTask prepareDownloadTask(Path targetDirectory, URLDownloa String suggestedTypeName = externalFileType.getName(); linkedFile.setFileType(suggestedTypeName); String suggestedName = linkedFileHandler.getSuggestedFileName(externalFileType.getExtension()); + suggestedName = FileNameUniqueness.getNonOverWritingFileName(targetDirectory, suggestedName); return targetDirectory.resolve(suggestedName); }) .then(destination -> new FileDownloadTask(urlDownload.getSource(), destination)) diff --git a/src/main/java/org/jabref/logic/util/io/FileNameUniqueness.java b/src/main/java/org/jabref/logic/util/io/FileNameUniqueness.java new file mode 100644 index 00000000000..3d2f0fe4755 --- /dev/null +++ b/src/main/java/org/jabref/logic/util/io/FileNameUniqueness.java @@ -0,0 +1,46 @@ +package org.jabref.logic.util.io; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Optional; + +public class FileNameUniqueness { + + /** + * Returns a file-name such that it does not match any existing files in targetDirectory + * + * @param targetDirectory The directory in which file name should be unique + * @param fileName Suggested name for the file + * @return a file-name such that it does not match any existing files in targetDirectory. + * */ + public static String getNonOverWritingFileName(Path targetDirectory, String fileName) { + + Optional extensionOptional = FileUtil.getFileExtension(fileName); + + // the suffix include the '.' , if extension is present Eg: ".pdf" + String extensionSuffix; + String fileNameWithoutExtension; + + if (extensionOptional.isPresent()) { + extensionSuffix = '.' + extensionOptional.get(); + fileNameWithoutExtension = fileName.substring(0, fileName.lastIndexOf('.')); + } + else { + extensionSuffix = ""; + fileNameWithoutExtension = fileName; + } + + String newFileName = fileName; + + int counter = 1; + while ( Files.exists( + targetDirectory.resolve(newFileName)) + ) { + newFileName = fileNameWithoutExtension + + " (" + counter + ")" + + extensionSuffix; + counter++; + } + return newFileName; + } +} diff --git a/src/test/java/org/jabref/logic/util/io/FileNameUniquenessTest.java b/src/test/java/org/jabref/logic/util/io/FileNameUniquenessTest.java new file mode 100644 index 00000000000..5e331870a4c --- /dev/null +++ b/src/test/java/org/jabref/logic/util/io/FileNameUniquenessTest.java @@ -0,0 +1,50 @@ +package org.jabref.logic.util.io; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + +public class FileNameUniquenessTest { + + @TempDir + protected Path tempDir; + + @Test + public void testGetNonOverWritingFileNameReturnsSameName() throws IOException { + + assertFalse( + Files.exists(tempDir.resolve("sameFile.txt")) + ); + + String outputFileName = FileNameUniqueness.getNonOverWritingFileName(tempDir, "sameFile.txt"); + assertEquals("sameFile.txt", outputFileName); + } + + @Test + public void testGetNonOverWritingFileNameReturnsUniqueNameOver1Conflict() throws IOException { + Path dummyFilePath1 = tempDir.resolve("differentFile.txt"); + + Files.createFile(dummyFilePath1); + + String outputFileName = FileNameUniqueness.getNonOverWritingFileName(tempDir, "differentFile.txt"); + assertEquals("differentFile (1).txt", outputFileName); + } + + @Test + public void testGetNonOverWritingFileNameReturnsUniqueNameOverNConflicts() throws IOException { + Path dummyFilePath1 = tempDir.resolve("manyfiles.txt"); + Path dummyFilePath2 = tempDir.resolve("manyfiles (1).txt"); + + Files.createFile(dummyFilePath1); + Files.createFile(dummyFilePath2); + + String outputFileName = FileNameUniqueness.getNonOverWritingFileName(tempDir, "manyfiles.txt"); + assertEquals("manyfiles (2).txt", outputFileName); + } +} From 778e70faaf1fe3197dee0b44ada5249e5c7563e5 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Mon, 30 Mar 2020 01:32:10 +0200 Subject: [PATCH 023/166] Reformat code of FileNameUniqueness --- CHANGELOG.md | 1 + .../jabref/logic/util/io/FileNameUniqueness.java | 16 +++++++--------- .../logic/util/io/FileNameUniquenessTest.java | 5 +---- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cbf79c286c..296403a1291 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We fixed an issue with inconsistent capitalization of file extensions when downloading files [#6115](https://github.com/JabRef/jabref/issues/6115) - We fixed the display of language and encoding in the preferences dialog. [#6130](https://github.com/JabRef/jabref/pull/6130) - We fixed an issue where search full-text documents downloaded files with same name, overwriting existing files. [#6174](https://github.com/JabRef/jabref/pull/6174) + ### Removed - We removed the obsolete `External programs / Open PDF` section in the preferences, as the default application to open PDFs is now set in the `Manage external file types` dialog. [#6130](https://github.com/JabRef/jabref/pull/6130) diff --git a/src/main/java/org/jabref/logic/util/io/FileNameUniqueness.java b/src/main/java/org/jabref/logic/util/io/FileNameUniqueness.java index 3d2f0fe4755..ef3ea64f780 100644 --- a/src/main/java/org/jabref/logic/util/io/FileNameUniqueness.java +++ b/src/main/java/org/jabref/logic/util/io/FileNameUniqueness.java @@ -7,12 +7,12 @@ public class FileNameUniqueness { /** - * Returns a file-name such that it does not match any existing files in targetDirectory + * Returns a file name such that it does not match any existing files in targetDirectory * * @param targetDirectory The directory in which file name should be unique - * @param fileName Suggested name for the file - * @return a file-name such that it does not match any existing files in targetDirectory. - * */ + * @param fileName Suggested name for the file + * @return a file name such that it does not match any existing files in targetDirectory + */ public static String getNonOverWritingFileName(Path targetDirectory, String fileName) { Optional extensionOptional = FileUtil.getFileExtension(fileName); @@ -24,8 +24,7 @@ public static String getNonOverWritingFileName(Path targetDirectory, String file if (extensionOptional.isPresent()) { extensionSuffix = '.' + extensionOptional.get(); fileNameWithoutExtension = fileName.substring(0, fileName.lastIndexOf('.')); - } - else { + } else { extensionSuffix = ""; fileNameWithoutExtension = fileName; } @@ -33,14 +32,13 @@ public static String getNonOverWritingFileName(Path targetDirectory, String file String newFileName = fileName; int counter = 1; - while ( Files.exists( - targetDirectory.resolve(newFileName)) - ) { + while (Files.exists(targetDirectory.resolve(newFileName))) { newFileName = fileNameWithoutExtension + " (" + counter + ")" + extensionSuffix; counter++; } + return newFileName; } } diff --git a/src/test/java/org/jabref/logic/util/io/FileNameUniquenessTest.java b/src/test/java/org/jabref/logic/util/io/FileNameUniquenessTest.java index 5e331870a4c..bf48ee8bc45 100644 --- a/src/test/java/org/jabref/logic/util/io/FileNameUniquenessTest.java +++ b/src/test/java/org/jabref/logic/util/io/FileNameUniquenessTest.java @@ -17,10 +17,7 @@ public class FileNameUniquenessTest { @Test public void testGetNonOverWritingFileNameReturnsSameName() throws IOException { - - assertFalse( - Files.exists(tempDir.resolve("sameFile.txt")) - ); + assertFalse(Files.exists(tempDir.resolve("sameFile.txt"))); String outputFileName = FileNameUniqueness.getNonOverWritingFileName(tempDir, "sameFile.txt"); assertEquals("sameFile.txt", outputFileName); From 0045e847a63b9115f0e251cdd79602b9966999b1 Mon Sep 17 00:00:00 2001 From: fabgio Date: Mon, 30 Mar 2020 01:35:00 +0200 Subject: [PATCH 024/166] Edition should not start capitalize letter (#6149) Fixes #6144 --- CHANGELOG.md | 1 + .../logic/integrity/EditionChecker.java | 28 +++++++++---------- .../logic/integrity/EditionCheckerTest.java | 28 +++++++++++++++++++ 3 files changed, 42 insertions(+), 15 deletions(-) create mode 100644 src/test/java/org/jabref/logic/integrity/EditionCheckerTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 296403a1291..676baf7503a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve ### Added - We added support for searching ShortScience for an entry through the user's browser. [#6018](https://github.com/JabRef/jabref/pull/6018) +- We updated EditionChecker to permit edition to start with a number. [#6144](https://github.com/JabRef/jabref/issues/6144) - We added tooltips for most fields in the entry editor containing a short description. [#5847](https://github.com/JabRef/jabref/issues/5847) ### Changed diff --git a/src/main/java/org/jabref/logic/integrity/EditionChecker.java b/src/main/java/org/jabref/logic/integrity/EditionChecker.java index fe5a0faabe3..d7a46603c0b 100644 --- a/src/main/java/org/jabref/logic/integrity/EditionChecker.java +++ b/src/main/java/org/jabref/logic/integrity/EditionChecker.java @@ -13,28 +13,24 @@ public class EditionChecker implements ValueChecker { private static final Predicate FIRST_LETTER_CAPITALIZED = Pattern.compile("^[A-Z]").asPredicate(); private static final Predicate ONLY_NUMERALS_OR_LITERALS = Pattern.compile("^([0-9]+|[^0-9].+)$") - .asPredicate(); + .asPredicate(); private static final Predicate ONLY_NUMERALS = Pattern.compile("[0-9]+").asPredicate(); private static final String FIRST_EDITION = "1"; private final BibDatabaseContext bibDatabaseContextEdition; private final boolean allowIntegerEdition; - public EditionChecker(BibDatabaseContext bibDatabaseContext, boolean allowIntegerEdition) { this.bibDatabaseContextEdition = Objects.requireNonNull(bibDatabaseContext); this.allowIntegerEdition = allowIntegerEdition; } /** - * Checks, if field contains only an integer or a literal (biblatex mode) - * Checks, if the first letter is capitalized (BibTeX mode) - * biblatex package documentation: - * The edition of a printed publication. This must be an integer, not an ordinal. - * It is also possible to give the edition as a literal string, for example "Third, revised and expanded edition". - * Official BibTeX specification: - * The edition of a book-for example, "Second". - * This should be an ordinal, and should have the first letter capitalized. + * Checks, if field contains only an integer or a literal (biblatex mode) Checks, if the first letter is capitalized + * (BibTeX mode) biblatex package documentation: The edition of a printed publication. This must be an integer, not + * an ordinal. It is also possible to give the edition as a literal string, for example "Third, revised and expanded + * edition". Official BibTeX specification: The edition of a book-for example, "Second". This should be an ordinal, + * and should have the first letter capitalized. */ @Override public Optional checkValue(String value) { @@ -53,17 +49,19 @@ public Optional checkValue(String value) { //BibTeX if (!bibDatabaseContextEdition.isBiblatexMode()) { - if (!allowIntegerEdition) { - if (!FIRST_LETTER_CAPITALIZED.test(value.trim())) { - return Optional.of(Localization.lang("should have the first letter capitalized")); - } + if (!isFirstCharDigit(value) && (!allowIntegerEdition) && !FIRST_LETTER_CAPITALIZED.test(value.trim())) { + return Optional.of(Localization.lang("should have the first letter capitalized")); } else { if (!ONLY_NUMERALS.test(value.trim()) && !FIRST_LETTER_CAPITALIZED.test(value.trim())) { return Optional.of(Localization.lang("should have the first letter capitalized")); } } } - return Optional.empty(); } + + boolean isFirstCharDigit(String input) { + char[] array = input.toCharArray(); + return Character.isDigit(array[0]); + } } diff --git a/src/test/java/org/jabref/logic/integrity/EditionCheckerTest.java b/src/test/java/org/jabref/logic/integrity/EditionCheckerTest.java new file mode 100644 index 00000000000..afb6c1e172e --- /dev/null +++ b/src/test/java/org/jabref/logic/integrity/EditionCheckerTest.java @@ -0,0 +1,28 @@ +package org.jabref.logic.integrity; + +import org.jabref.model.database.BibDatabaseContext; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class EditionCheckerTest { + @Test + void isFirstCharacterANumber() { + boolean allowIntegerEdition = false; + var bibDatabaseContextEdition = new BibDatabaseContext(); + var editionChecker = new EditionChecker(bibDatabaseContextEdition, allowIntegerEdition); + var stringWithNumber = "0HelloWorld"; + assertTrue(editionChecker.isFirstCharDigit(stringWithNumber)); + } + + @Test + void isFirstCharacterNotANumber() { + boolean allowIntegerEdition = false; + var bibDatabaseContextEdition = new BibDatabaseContext(); + var editionChecker = new EditionChecker(bibDatabaseContextEdition, allowIntegerEdition); + var stringWithLetter = "HelloWorld"; + assertFalse(editionChecker.isFirstCharDigit(stringWithLetter)); + } +} From 766862e9f6a11ead4d3fe42fdc072fcd9b38693d Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Mon, 30 Mar 2020 01:47:12 +0200 Subject: [PATCH 025/166] Improve isFirstCharDigit (and add some tests) --- .../logic/integrity/EditionChecker.java | 5 ++-- .../logic/integrity/EditionCheckerTest.java | 29 +++++++++++++++---- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/jabref/logic/integrity/EditionChecker.java b/src/main/java/org/jabref/logic/integrity/EditionChecker.java index d7a46603c0b..1e6d83b5431 100644 --- a/src/main/java/org/jabref/logic/integrity/EditionChecker.java +++ b/src/main/java/org/jabref/logic/integrity/EditionChecker.java @@ -9,6 +9,8 @@ import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.strings.StringUtil; +import com.google.common.base.Strings; + public class EditionChecker implements ValueChecker { private static final Predicate FIRST_LETTER_CAPITALIZED = Pattern.compile("^[A-Z]").asPredicate(); @@ -61,7 +63,6 @@ public Optional checkValue(String value) { } boolean isFirstCharDigit(String input) { - char[] array = input.toCharArray(); - return Character.isDigit(array[0]); + return !Strings.isNullOrEmpty(input) && Character.isDigit(input.charAt(0)); } } diff --git a/src/test/java/org/jabref/logic/integrity/EditionCheckerTest.java b/src/test/java/org/jabref/logic/integrity/EditionCheckerTest.java index afb6c1e172e..9ec01b020fe 100644 --- a/src/test/java/org/jabref/logic/integrity/EditionCheckerTest.java +++ b/src/test/java/org/jabref/logic/integrity/EditionCheckerTest.java @@ -1,28 +1,45 @@ package org.jabref.logic.integrity; +import java.util.Optional; + import org.jabref.model.database.BibDatabaseContext; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; public class EditionCheckerTest { + + public BibDatabaseContext bibDatabaseContextEdition = new BibDatabaseContext(); + @Test void isFirstCharacterANumber() { boolean allowIntegerEdition = false; - var bibDatabaseContextEdition = new BibDatabaseContext(); var editionChecker = new EditionChecker(bibDatabaseContextEdition, allowIntegerEdition); - var stringWithNumber = "0HelloWorld"; - assertTrue(editionChecker.isFirstCharDigit(stringWithNumber)); + assertTrue(editionChecker.isFirstCharDigit("0HelloWorld")); + } + + @Test + void isFirstCharacterANumberFalseForEmptyString() { + boolean allowIntegerEdition = false; + var editionChecker = new EditionChecker(bibDatabaseContextEdition, allowIntegerEdition); + assertFalse(editionChecker.isFirstCharDigit("")); } @Test void isFirstCharacterNotANumber() { boolean allowIntegerEdition = false; - var bibDatabaseContextEdition = new BibDatabaseContext(); var editionChecker = new EditionChecker(bibDatabaseContextEdition, allowIntegerEdition); - var stringWithLetter = "HelloWorld"; - assertFalse(editionChecker.isFirstCharDigit(stringWithLetter)); + assertFalse(editionChecker.isFirstCharDigit("HelloWorld")); + } + + @Test + void editionCheckerDoesNotComplainIfAllowIntegerEditionIsEnabled() { + boolean allowIntegerEdition = true; + var editionChecker = new EditionChecker(bibDatabaseContextEdition, allowIntegerEdition); + assertEquals(Optional.empty(), editionChecker.checkValue("2")); } + } From 7dab8f0ab4d383b481201af38fdb246a9e853777 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Mon, 30 Mar 2020 11:39:14 +0200 Subject: [PATCH 026/166] Delete tests-oracle.yml (#6217) The oracle tests are failing now for quite some time already. I couldn't find a way to (temporarily) disable a workflow, thus I've deleted it. Fixing it would be nice in the long term. --- .github/workflows/tests-oracle.yml | 89 ------------------------------ 1 file changed, 89 deletions(-) delete mode 100644 .github/workflows/tests-oracle.yml diff --git a/.github/workflows/tests-oracle.yml b/.github/workflows/tests-oracle.yml deleted file mode 100644 index 35ca84862ba..00000000000 --- a/.github/workflows/tests-oracle.yml +++ /dev/null @@ -1,89 +0,0 @@ -name: Oracle Tests - -on: - push: - # we need to trigger on all branches, because sometimes need copy of branches, because secrets are only available on "internal" pull requests - paths: - - 'src/test/java/org/jabref/model/database/**' - - 'src/test/java/org/jabref/logic/shared/**' - - '.github/workflows/tests-oracle.yml' - - 'build.gradle' - pull_request: - paths: - - 'src/test/java/org/jabref/model/database/**' - - 'src/test/java/org/jabref/logic/shared/**' - - '.github/workflows/tests-oracle.yml' - - 'build.gradle' - schedule: - # run on each Wednesday - - cron: '2 3 * * 3' - -env: - SpringerNatureAPIKey: ${{ secrets.SpringerNatureAPIKey }} - -jobs: - oracletests: - name: Oracle tests - runs-on: ubuntu-latest - steps: - - name: Check secrets presence - id: checksecrets - shell: bash - run: | - if [ "CCRYPT" == "" ]; then - echo ::set-output name=secretspresent::false - else - echo ::set-output name=secretspresent::true - fi - env: - SNAPCRAFT_LOGIN_FILE: ${{ secrets.CCRYPT }} - - name: Checkout source - uses: actions/checkout@v2 - - name: Set up JDK - if: ${{ steps.checksecrets.outputs.secretspresent }} - uses: actions/setup-java@v1 - with: - java-version: 14 - - name: Restore gradle chache - if: ${{ steps.checksecrets.outputs.secretspresent }} - uses: actions/cache@v1 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} - restore-keys: | - ${{ runner.OS }}-gradle-${{ env.cache-name }}- - ${{ runner.OS }}-gradle- - ${{ runner.OS }}- - - name: Restore gradle wrapper - if: ${{ steps.checksecrets.outputs.secretspresent }} - uses: actions/cache@v1 - with: - path: ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} - - name: Start Oracle XE - if: ${{ steps.checksecrets.outputs.secretspresent }} - run: | - mkdir ~/oracle-xe || true - cd ~/oracle-xe - wget -qN https://github.com/deusaquilus/docker-oracle-xe/archive/master.zip - unzip master.zip - cd docker-oracle-xe-master - wget -qN http://ccrypt.sourceforge.net/download/1.11/ccrypt-1.11.linux-x86_64.tar.gz - wget -qN -O files/oracle-database-xe-18c-1.0-1.x86_64.rpm.cpt https://files.jabref.org/thing.cpt - pwd - tar xzf ccrypt-1.11.linux-x86_64.tar.gz - ccrypt-1.11.linux-x86_64/ccrypt -d -E CCRYPT files/oracle-database-xe-18c-1.0-1.x86_64.rpm.cpt - docker build -t oracle-xe:18c . - docker run -d -p 32118:1521 -p 35518:5500 --name=oracle-xe oracle-xe:18c - # give oracle some time to start - sleep 300 - docker logs oracle-xe - # path `/opt/oracle/product/18c/dbhomeXE` is taken from the `Dockerfile` used to build "oracle-xe" - docker exec -i oracle-xe bash -c "source /home/oracle/.bashrc; /bin/bash -c '/opt/oracle/product/18c/dbhomeXE/bin/sqlplus sys/Oracle18@localhost/XE as sysdba'" < $GITHUB_WORKSPACE/buildres/setup-test-oracle.sql - env: - CCRYPT: ${{ secrets.CCRYPT }} - - name: Run database test - if: ${{ steps.checksecrets.outputs.secretspresent }} - run: ./gradlew databaseTest --rerun-tasks - env: - DBMS: "oracle" From 73f349dc3395a220d870c3768ebc1a2e50eb2957 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Mon, 30 Mar 2020 11:43:07 +0200 Subject: [PATCH 027/166] Fix edition test --- .../logic/integrity/EditionChecker.java | 8 ++- .../logic/integrity/IntegrityCheckTest.java | 49 +++++++++---------- 2 files changed, 26 insertions(+), 31 deletions(-) diff --git a/src/main/java/org/jabref/logic/integrity/EditionChecker.java b/src/main/java/org/jabref/logic/integrity/EditionChecker.java index 1e6d83b5431..bbe9ec1b537 100644 --- a/src/main/java/org/jabref/logic/integrity/EditionChecker.java +++ b/src/main/java/org/jabref/logic/integrity/EditionChecker.java @@ -9,8 +9,6 @@ import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.strings.StringUtil; -import com.google.common.base.Strings; - public class EditionChecker implements ValueChecker { private static final Predicate FIRST_LETTER_CAPITALIZED = Pattern.compile("^[A-Z]").asPredicate(); @@ -30,7 +28,7 @@ public EditionChecker(BibDatabaseContext bibDatabaseContext, boolean allowIntege /** * Checks, if field contains only an integer or a literal (biblatex mode) Checks, if the first letter is capitalized * (BibTeX mode) biblatex package documentation: The edition of a printed publication. This must be an integer, not - * an ordinal. It is also possible to give the edition as a literal string, for example "Third, revised and expanded + * aninal. It is also possible to give the edition as a literal string, for example "Third, revised and expanded * edition". Official BibTeX specification: The edition of a book-for example, "Second". This should be an ordinal, * and should have the first letter capitalized. */ @@ -54,7 +52,7 @@ public Optional checkValue(String value) { if (!isFirstCharDigit(value) && (!allowIntegerEdition) && !FIRST_LETTER_CAPITALIZED.test(value.trim())) { return Optional.of(Localization.lang("should have the first letter capitalized")); } else { - if (!ONLY_NUMERALS.test(value.trim()) && !FIRST_LETTER_CAPITALIZED.test(value.trim())) { + if (ONLY_NUMERALS.test(value.trim()) && (!allowIntegerEdition) && !FIRST_LETTER_CAPITALIZED.test(value.trim())) { return Optional.of(Localization.lang("should have the first letter capitalized")); } } @@ -63,6 +61,6 @@ public Optional checkValue(String value) { } boolean isFirstCharDigit(String input) { - return !Strings.isNullOrEmpty(input) && Character.isDigit(input.charAt(0)); + return !StringUtil.isNullOrEmpty(input) && Character.isDigit(input.charAt(0)); } } diff --git a/src/test/java/org/jabref/logic/integrity/IntegrityCheckTest.java b/src/test/java/org/jabref/logic/integrity/IntegrityCheckTest.java index 6f5639e9c13..136a91e0ad0 100644 --- a/src/test/java/org/jabref/logic/integrity/IntegrityCheckTest.java +++ b/src/test/java/org/jabref/logic/integrity/IntegrityCheckTest.java @@ -86,11 +86,10 @@ void testEditionChecks() { assertWrong(withMode(createContext(StandardField.EDITION, "2nd"), BibDatabaseMode.BIBTEX)); assertCorrect(withMode(createContext(StandardField.EDITION, "2"), BibDatabaseMode.BIBLATEX)); assertCorrect(withMode(createContext(StandardField.EDITION, "10"), BibDatabaseMode.BIBLATEX)); - assertCorrect( - withMode(createContext(StandardField.EDITION, "Third, revised and expanded edition"), BibDatabaseMode.BIBLATEX)); + assertCorrect(withMode(createContext(StandardField.EDITION, "Third, revised and expanded edition"), BibDatabaseMode.BIBLATEX)); assertCorrect(withMode(createContext(StandardField.EDITION, "Edition 2000"), BibDatabaseMode.BIBLATEX)); assertWrong(withMode(createContext(StandardField.EDITION, "2nd"), BibDatabaseMode.BIBLATEX)); - assertWrong(createContext(StandardField.EDITION, "1")); + assertWrong(withMode(createContext(StandardField.EDITION, "1"), BibDatabaseMode.BIBTEX)); } @Test @@ -367,10 +366,10 @@ void testEntryIsUnchangedAfterChecks() { BibDatabaseContext context = new BibDatabaseContext(bibDatabase); new IntegrityCheck(context, - mock(FilePreferences.class), - createBibtexKeyPatternPreferences(), + mock(FilePreferences.class), + createBibtexKeyPatternPreferences(), new JournalAbbreviationRepository(new Abbreviation("IEEE Software", "IEEE SW")), true, false) - .checkDatabase(); + .checkDatabase(); assertEquals(clonedEntry, entry); } @@ -407,42 +406,40 @@ private BibDatabaseContext createContext(Field field, String value) { private void assertWrong(BibDatabaseContext context) { List messages = new IntegrityCheck(context, - mock(FilePreferences.class), - createBibtexKeyPatternPreferences(), - new JournalAbbreviationRepository(new Abbreviation("IEEE Software", "IEEE SW")), true, false) - .checkDatabase(); + mock(FilePreferences.class), + createBibtexKeyPatternPreferences(), + new JournalAbbreviationRepository(new Abbreviation("IEEE Software", "IEEE SW")), true, false) + .checkDatabase(); assertNotEquals(Collections.emptyList(), messages); } private void assertCorrect(BibDatabaseContext context) { List messages = new IntegrityCheck(context, - mock(FilePreferences.class), - createBibtexKeyPatternPreferences(), - new JournalAbbreviationRepository(new Abbreviation("IEEE Software", "IEEE SW")), true, false - ).checkDatabase(); + mock(FilePreferences.class), + createBibtexKeyPatternPreferences(), + new JournalAbbreviationRepository(new Abbreviation("IEEE Software", "IEEE SW")), true, false).checkDatabase(); assertEquals(Collections.emptyList(), messages); } private void assertCorrect(BibDatabaseContext context, boolean allowIntegerEdition) { List messages = new IntegrityCheck(context, - mock(FilePreferences.class), - createBibtexKeyPatternPreferences(), - new JournalAbbreviationRepository(new Abbreviation("IEEE Software", "IEEE SW")), true, - allowIntegerEdition - ).checkDatabase(); + mock(FilePreferences.class), + createBibtexKeyPatternPreferences(), + new JournalAbbreviationRepository(new Abbreviation("IEEE Software", "IEEE SW")), true, + allowIntegerEdition).checkDatabase(); assertEquals(Collections.emptyList(), messages); } private BibtexKeyPatternPreferences createBibtexKeyPatternPreferences() { final GlobalBibtexKeyPattern keyPattern = GlobalBibtexKeyPattern.fromPattern("[auth][year]"); return new BibtexKeyPatternPreferences( - "", - "", - false, - false, - false, - keyPattern, - ','); + "", + "", + false, + false, + false, + keyPattern, + ','); } private BibDatabaseContext withMode(BibDatabaseContext context, BibDatabaseMode mode) { From 7eef9cd9078fcbb3c8da36e23f5192e4e2b411d5 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Mon, 30 Mar 2020 11:46:06 +0200 Subject: [PATCH 028/166] Fix some formatting --- .../logic/integrity/EditionChecker.java | 2 +- .../logic/integrity/IntegrityCheckTest.java | 44 ++++++++++--------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/jabref/logic/integrity/EditionChecker.java b/src/main/java/org/jabref/logic/integrity/EditionChecker.java index bbe9ec1b537..b59168ff250 100644 --- a/src/main/java/org/jabref/logic/integrity/EditionChecker.java +++ b/src/main/java/org/jabref/logic/integrity/EditionChecker.java @@ -28,7 +28,7 @@ public EditionChecker(BibDatabaseContext bibDatabaseContext, boolean allowIntege /** * Checks, if field contains only an integer or a literal (biblatex mode) Checks, if the first letter is capitalized * (BibTeX mode) biblatex package documentation: The edition of a printed publication. This must be an integer, not - * aninal. It is also possible to give the edition as a literal string, for example "Third, revised and expanded + * an ordinal. It is also possible to give the edition as a literal string, for example "Third, revised and expanded * edition". Official BibTeX specification: The edition of a book-for example, "Second". This should be an ordinal, * and should have the first letter capitalized. */ diff --git a/src/test/java/org/jabref/logic/integrity/IntegrityCheckTest.java b/src/test/java/org/jabref/logic/integrity/IntegrityCheckTest.java index 136a91e0ad0..6f2a4a62009 100644 --- a/src/test/java/org/jabref/logic/integrity/IntegrityCheckTest.java +++ b/src/test/java/org/jabref/logic/integrity/IntegrityCheckTest.java @@ -366,10 +366,10 @@ void testEntryIsUnchangedAfterChecks() { BibDatabaseContext context = new BibDatabaseContext(bibDatabase); new IntegrityCheck(context, - mock(FilePreferences.class), - createBibtexKeyPatternPreferences(), + mock(FilePreferences.class), + createBibtexKeyPatternPreferences(), new JournalAbbreviationRepository(new Abbreviation("IEEE Software", "IEEE SW")), true, false) - .checkDatabase(); + .checkDatabase(); assertEquals(clonedEntry, entry); } @@ -406,40 +406,42 @@ private BibDatabaseContext createContext(Field field, String value) { private void assertWrong(BibDatabaseContext context) { List messages = new IntegrityCheck(context, - mock(FilePreferences.class), - createBibtexKeyPatternPreferences(), - new JournalAbbreviationRepository(new Abbreviation("IEEE Software", "IEEE SW")), true, false) - .checkDatabase(); + mock(FilePreferences.class), + createBibtexKeyPatternPreferences(), + new JournalAbbreviationRepository(new Abbreviation("IEEE Software", "IEEE SW")), true, false) + .checkDatabase(); assertNotEquals(Collections.emptyList(), messages); } private void assertCorrect(BibDatabaseContext context) { List messages = new IntegrityCheck(context, - mock(FilePreferences.class), - createBibtexKeyPatternPreferences(), - new JournalAbbreviationRepository(new Abbreviation("IEEE Software", "IEEE SW")), true, false).checkDatabase(); + mock(FilePreferences.class), + createBibtexKeyPatternPreferences(), + new JournalAbbreviationRepository(new Abbreviation("IEEE Software", "IEEE SW")), true, false + ).checkDatabase(); assertEquals(Collections.emptyList(), messages); } private void assertCorrect(BibDatabaseContext context, boolean allowIntegerEdition) { List messages = new IntegrityCheck(context, - mock(FilePreferences.class), - createBibtexKeyPatternPreferences(), - new JournalAbbreviationRepository(new Abbreviation("IEEE Software", "IEEE SW")), true, - allowIntegerEdition).checkDatabase(); + mock(FilePreferences.class), + createBibtexKeyPatternPreferences(), + new JournalAbbreviationRepository(new Abbreviation("IEEE Software", "IEEE SW")), true, + allowIntegerEdition + ).checkDatabase(); assertEquals(Collections.emptyList(), messages); } private BibtexKeyPatternPreferences createBibtexKeyPatternPreferences() { final GlobalBibtexKeyPattern keyPattern = GlobalBibtexKeyPattern.fromPattern("[auth][year]"); return new BibtexKeyPatternPreferences( - "", - "", - false, - false, - false, - keyPattern, - ','); + "", + "", + false, + false, + false, + keyPattern, + ','); } private BibDatabaseContext withMode(BibDatabaseContext context, BibDatabaseMode mode) { From 5b56a97eaafd285684360d351d5abf0007013902 Mon Sep 17 00:00:00 2001 From: Sandro Speth Date: Mon, 30 Mar 2020 11:48:49 +0200 Subject: [PATCH 029/166] Fix typos and grammar mistakes in teaching.md (#6216) --- docs/teaching.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/teaching.md b/docs/teaching.md index e2fea5a56a2..a6c17231286 100644 --- a/docs/teaching.md +++ b/docs/teaching.md @@ -1,21 +1,21 @@ # JabRef as Basis for Teaching Material -JabRef can be used as training object for software engineering. +JabRef can be used as a training object for software engineering. -As instructor, please follow this check list: +As an instructor, please follow this checklist: 1. Be aware that JabRef is run by volunteers. This implies that the development team cannot ensure to provide feedback on code within hours. 2. Be aware that from the first pull request to the final acceptance the typical time needed is two weeks. 3. Be aware that JabRef tries to achieve high code quality. This leads to code reviews requiring actions from the contributors. This also applies for code of students. Read on at our [Development Strategy](development-strategy.md) for more details. -4. Choose tasks from one of the folowing boards. Write a comment to each issue so that it can be reserved to your course. +4. Choose tasks from one of the following boards. Write a comment on each issue so that it can be reserved for your course. - Feature Board: - Bug Board: -5. Be aware that the difficuly of bugs and feature vary. A task should be chosen with care. The JabRef team can help here: The majority of the team has experiences in teaching -6. Get in touch with the JabRef team to discuss details. We offer email, skype, [gitter.im](https://gitter.im/JabRef/jabref), discort. Get in touch with [@koppor](https://github.com/koppor/) to find the right channel and to start forming the success of your course. +5. Be aware that the difficulty of bugs and feature vary. A task should be chosen with care. The JabRef team can help here: The majority of the team has experiences in teaching +6. Get in touch with the JabRef team to discuss details. We offer email, skype, [gitter.im](https://gitter.im/JabRef/jabref), discord. Get in touch with [@koppor](https://github.com/koppor/) to find the right channel and to start forming the success of your course. For a near-to-perfect preparation and effect of the course, we ask you to get in touch with us **four weeks** in advance. Then, the JabRef team can a) learn about the starting skill level of the students, b) the aimed skill level at the end of the course, c) the amount of time the students are given to learn about and contribute to JabRef, d) check the [feature board](https://github.com/JabRef/jabref/projects/7) for appropriate tasks (and fill it as needed), e) recommend appropriate features. -It is also possible to just direct students to our [Contribution Guide](https://github.com/JabRef/jabref/blob/master/CONTRIBUTING.md#contributing-guide). The learning effect may be lower as time of the students has to be spend to a) learn about JabRef and b) select an appropriate issue. +It is also possible to just direct students to our [Contribution Guide](https://github.com/JabRef/jabref/blob/master/CONTRIBUTING.md#contributing-guide). The learning effect may be lower as the time of the students has to be spent to a) learn about JabRef and b) select an appropriate issue. Since a huge fraction of software costs is spend on [software maintenance](https://en.wikipedia.org/wiki/Software_maintenance), adding new features also educates in that aspect: perfective maintenance[1](#LientzSwanson) is trained. When fixing bugs, corrective maintenance[1](#LientzSwanson) is trained. @@ -29,17 +29,17 @@ The syntax is [BPMN](https://en.wikipedia.org/wiki/Business_Process_Model_and_No [![process](images/contribution-process-reviews.svg)](images/contribution-process-reviews.svg) In short, the contribution is **reviewed by two JabRef developers**. -Typically, they have constructive feedback on the contribution. -This means, that the contributors get comments on their contriubiton enabling them to level-up their coding skill. -Incorporating the improvments takes time, too. -The benifit is two fold: a) contributors improve their coding skills and b) JabRef's code quality improves. -All in all, we ask to respect the aims of the JabRef team and to reserve time to incorporate the reviewer's comemnts +Typically, they have constructive feedback on their contribution. +This means, that the contributors get comments on their contribution enabling them to level-up their coding skill. +Incorporating improvements takes time, too. +The benefit is two-fold: a) contributors improve their coding skills and b) JabRef's code quality improves. +All in all, we ask to respect the aims of the JabRef team and to reserve time to incorporate the reviewer's comments ## Process for Java newcomers Newcomers are invited to follow the process described above. -In case the capacity of the instructing university allows, we propose a three step approach. -First the contributors prepare their contribution as usual. +In case the capacity of the instructing university allows, we propose a three-step approach. +First, the contributors prepare their contribution as usual. Then, they submit the pull request *to a separate repository*. There, the instructor reviews the pull request and provides feedback. This happens in a loop until the instructor shows the green light. @@ -58,7 +58,7 @@ This will help to reduce the load on the JabRef team and improve the quality of Course: Open Source Software Development -- Summary: In this course, students will be introduced to the processes and tools specific to Open Source Software development, and they will analyze existing projects to understand the architecture and processes of these projects. In addition, students will attempt to contribute source code to a large existing Open Source Software project. +- Summary: In this course, students will be introduced to the processes and tools specific to Open Source Software development, and they will analyze existing projects to understand the architecture and processes of these projects. Besides, students will attempt to contribute source code to a large existing Open Source Software project. - Course offered in 2018 and 2019. Examples of merged pull requests: [4217](https://github.com/JabRef/jabref/pull/4217), [4255](https://github.com/JabRef/jabref/pull/4255), [4227](https://github.com/JabRef/jabref/pull/4227), [4260](https://github.com/JabRef/jabref/pull/4260), [5150](https://github.com/JabRef/jabref/pull/5150) #### Northern Arizona University (NAU), USA @@ -77,9 +77,9 @@ Course [10915-01: Software Engineering](https://dmi.unibas.ch/de/studium/compute - Lecture Materials: - Successfully run Q3 2019. - Excercise touching JabRef: - - General idea: identify a feature missing in JabRef and develop specification, system design, and implementiation of the feature. + - General idea: identify a feature missing in JabRef and develop the specification, system design, and implementation of the feature. - Introduction to JabRef's code: [Exercise 5](https://github.com/unibas-marcelluethi/software-engineering/blob/master/docs/week5/exercises/practical-exercises.md): Introduction into JabRef code. - - Prominent feature implenented: Parse full text references using Grobid. PR [#5614](https://github.com/JabRef/jabref/pull/5614). + - Prominent feature implemented: Parse full-text references using Grobid. PR [#5614](https://github.com/JabRef/jabref/pull/5614). #### University of Stuttgart, Germany @@ -95,8 +95,8 @@ Course [Studienprojekt](https://www.f05.uni-stuttgart.de/informatik/studierende/ Course "Programming and Software Development" as part of the [BSc Software Engineering](https://www.uni-stuttgart.de/en/study/study-programs/Software-Engineering-B.Sc-00001./) -- Summary: One excersice to contribute a minor fix or feature to JabRef. Goal: learn contribution to an open source project using git and GitHub. -- Successfuly run in 2018 +- Summary: One exercise to contribute a minor fix or feature to JabRef. Goal: learn contribution to an open-source project using git and GitHub. +- Successfully run in 2018 ### Swedish @@ -105,7 +105,7 @@ Course "Programming and Software Development" as part of the [BSc Software Engin Course [DD2480 Software Engineering Fundamentals](https://www.kth.se/student/kurser/kurs/DD2480?l=en) - Summary: Groups of students from three to five persons experienced the whole software engineering process within a week: From the requirements specification to the final pull request. -- Successfuly run in 2020 +- Successfully run in 2020 ### Portuguese @@ -113,7 +113,7 @@ Course [DD2480 Software Engineering Fundamentals](https://www.kth.se/student/kur Course [Open Source Software](https://github.com/igorsteinmacher/DSL-UTFPR) -- Summary: Students are requested to contribute to an Open Source project to learn about maintenance and evolution of software projects. This project is the predecessor of NAU's CS499. +- Summary: Students are requested to contribute to an Open Source project to learn about the maintenance and evolution of software projects. This project is the predecessor of NAU's CS499. - Course offered from 2013 to 2016 with different names ## References From 1a4d2b77ede4106dd20656315915013b688ad079 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2020 11:59:07 +0200 Subject: [PATCH 030/166] Bump checkstyle from 8.30 to 8.31 (#6215) Bumps [checkstyle](https://github.com/checkstyle/checkstyle) from 8.30 to 8.31. - [Release notes](https://github.com/checkstyle/checkstyle/releases) - [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-8.30...checkstyle-8.31) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b0953b82aae..eb7668fe002 100644 --- a/build.gradle +++ b/build.gradle @@ -212,7 +212,7 @@ dependencies { testImplementation "org.testfx:testfx-junit5:4.0.17-alpha-SNAPSHOT" testImplementation "org.hamcrest:hamcrest-library:2.2" - checkstyle 'com.puppycrawl.tools:checkstyle:8.30' + checkstyle 'com.puppycrawl.tools:checkstyle:8.31' xjc group: 'org.glassfish.jaxb', name: 'jaxb-xjc', version: '2.3.2' jython 'org.python:jython-standalone:2.7.1' } From 79feeddc020e0a24534db50f05cef6d17c6c01ca Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2020 12:00:18 +0200 Subject: [PATCH 031/166] Bump org.beryx.jlink from 2.17.3 to 2.17.4 (#6214) Bumps org.beryx.jlink from 2.17.3 to 2.17.4. Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index eb7668fe002..6975c260051 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ plugins { id 'com.github.ben-manes.versions' version '0.28.0' id 'org.javamodularity.moduleplugin' version '1.5.0' id 'org.openjfx.javafxplugin' version '0.0.8' - id 'org.beryx.jlink' version '2.17.3' + id 'org.beryx.jlink' version '2.17.4' // nicer test outputs during running and completion id 'com.adarshr.test-logger' version '2.0.0' From 7a4e0252ef3c110c69b2d925f8490072ea24841a Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2020 12:04:23 +0200 Subject: [PATCH 032/166] Bump jython-standalone from 2.7.1 to 2.7.2 (#6209) * Bump jython-standalone from 2.7.1 to 2.7.2 Bumps jython-standalone from 2.7.1 to 2.7.2. Signed-off-by: dependabot-preview[bot] * Update build.gradle Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> Co-authored-by: Tobias Diez --- build.gradle | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index 6975c260051..edd1434d171 100644 --- a/build.gradle +++ b/build.gradle @@ -214,7 +214,7 @@ dependencies { checkstyle 'com.puppycrawl.tools:checkstyle:8.31' xjc group: 'org.glassfish.jaxb', name: 'jaxb-xjc', version: '2.3.2' - jython 'org.python:jython-standalone:2.7.1' + jython 'org.python:jython-standalone:2.7.2' } dependencyUpdates { @@ -232,11 +232,6 @@ dependencyUpdates.resolutionStrategy = { selection.reject('Release candidate') } } - rules.withModule("org.python:jython-standalone") { ComponentSelection selection -> - if (selection.candidate.version ==~ /2.7.2b\d/ || selection.candidate.version ==~ /2.7.2rc\d/) { - selection.reject('Release candidate') - } - } rules.withModule("de.jensd:fontawesomefx-materialdesignfont") { ComponentSelection selection -> if (selection.candidate.version ==~ /2.0.26.*/) { selection.reject('1.7.22-11 is actually newer (strange version system)') From 8329cb93b2f79e1e94272de2ea802fa3ca59eb98 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Mon, 30 Mar 2020 13:03:38 +0200 Subject: [PATCH 033/166] remove superlous check --- src/main/java/org/jabref/logic/integrity/EditionChecker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/logic/integrity/EditionChecker.java b/src/main/java/org/jabref/logic/integrity/EditionChecker.java index b59168ff250..c0119d1e1bd 100644 --- a/src/main/java/org/jabref/logic/integrity/EditionChecker.java +++ b/src/main/java/org/jabref/logic/integrity/EditionChecker.java @@ -52,7 +52,7 @@ public Optional checkValue(String value) { if (!isFirstCharDigit(value) && (!allowIntegerEdition) && !FIRST_LETTER_CAPITALIZED.test(value.trim())) { return Optional.of(Localization.lang("should have the first letter capitalized")); } else { - if (ONLY_NUMERALS.test(value.trim()) && (!allowIntegerEdition) && !FIRST_LETTER_CAPITALIZED.test(value.trim())) { + if (ONLY_NUMERALS.test(value.trim()) && (!allowIntegerEdition)) { return Optional.of(Localization.lang("should have the first letter capitalized")); } } From 704fd29151e9da1cb543c3fac28ba1179ad809b7 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2020 13:16:37 +0200 Subject: [PATCH 034/166] Bump classgraph from 4.8.65 to 4.8.66 (#6213) Bumps [classgraph](https://github.com/classgraph/classgraph) from 4.8.65 to 4.8.66. - [Release notes](https://github.com/classgraph/classgraph/releases) - [Commits](https://github.com/classgraph/classgraph/commits) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index edd1434d171..ec1dd6cbf63 100644 --- a/build.gradle +++ b/build.gradle @@ -196,7 +196,7 @@ dependencies { } - testImplementation 'io.github.classgraph:classgraph:4.8.65' + testImplementation 'io.github.classgraph:classgraph:4.8.66' testImplementation 'org.junit.jupiter:junit-jupiter:5.6.1' testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.6.1' testImplementation 'org.junit.platform:junit-platform-launcher:1.6.1' From 87844454cc25de56112eca660b3d12c837e7ca60 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2020 13:17:09 +0200 Subject: [PATCH 035/166] Bump tika-core from 1.23 to 1.24 (#6210) Bumps [tika-core](https://github.com/apache/tika) from 1.23 to 1.24. - [Release notes](https://github.com/apache/tika/releases) - [Changelog](https://github.com/apache/tika/blob/master/CHANGES.txt) - [Commits](https://github.com/apache/tika/compare/1.23...1.24) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ec1dd6cbf63..d418764f9bc 100644 --- a/build.gradle +++ b/build.gradle @@ -117,7 +117,7 @@ dependencies { implementation group: 'org.apache.commons', name: 'commons-csv', version: '1.8' - implementation group: 'org.apache.tika', name: 'tika-core', version: '1.23' + implementation group: 'org.apache.tika', name: 'tika-core', version: '1.24' // required for reading write-protected PDFs - see https://github.com/JabRef/jabref/pull/942#issuecomment-209252635 implementation 'org.bouncycastle:bcprov-jdk15on:1.64' From b8c0b315642d555356197a54710d2ab31a4c1a70 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2020 13:18:15 +0200 Subject: [PATCH 036/166] Bump byte-buddy-parent from 1.10.8 to 1.10.9 (#6211) Bumps [byte-buddy-parent](https://github.com/raphw/byte-buddy) from 1.10.8 to 1.10.9. - [Release notes](https://github.com/raphw/byte-buddy/releases) - [Changelog](https://github.com/raphw/byte-buddy/blob/master/release-notes.md) - [Commits](https://github.com/raphw/byte-buddy/compare/byte-buddy-1.10.8...byte-buddy-1.10.9) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index d418764f9bc..0e0031b434e 100644 --- a/build.gradle +++ b/build.gradle @@ -201,7 +201,7 @@ dependencies { testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.6.1' testImplementation 'org.junit.platform:junit-platform-launcher:1.6.1' - testImplementation 'net.bytebuddy:byte-buddy-parent:1.10.8' + testImplementation 'net.bytebuddy:byte-buddy-parent:1.10.9' testRuntime group: 'org.apache.logging.log4j', name: 'log4j-core', version: '3.0.0-SNAPSHOT' testRuntime group: 'org.apache.logging.log4j', name: 'log4j-jul', version: '3.0.0-SNAPSHOT' testImplementation 'org.mockito:mockito-core:3.3.3' From d1a83cd0601ef9e6ecc9ed8efbc4a0648f7cf681 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Mon, 30 Mar 2020 14:54:08 +0200 Subject: [PATCH 037/166] Fix some IntelliJ findings (#6204) * Fix some IntelliJ findings - Fix bug in TagBar (added itself instead of newTags) - Wrong number of LOGGER paramters - Inner class may be static - Fix comment typo - Bulk operation can be used instead of iteration - Arrays.asList with only one element - Optimized count by using numbers earlier - Chained append for StringBuilder - Initialize ArrayList by passing the initial contents in the constructor * Fix checkstyle * Revert partially "Fix some IntelliJ findings" This partially reverts commit 167558dfe1aaa090e57b9bae672e40a76a78abd0. --- src/main/java/org/jabref/JabRefExecutorService.java | 2 +- src/main/java/org/jabref/gui/SidePaneManager.java | 2 +- src/main/java/org/jabref/gui/copyfiles/CopyFilesTask.java | 2 +- .../org/jabref/gui/duplicationFinder/DuplicateSearch.java | 2 +- .../org/jabref/gui/exporter/ExportToClipboardAction.java | 2 +- src/main/java/org/jabref/gui/groups/GroupTreeView.java | 2 +- .../java/org/jabref/gui/groups/UndoableModifySubtree.java | 4 +--- src/main/java/org/jabref/gui/util/BackgroundTask.java | 2 +- .../java/org/jabref/gui/util/CurrentThreadTaskExecutor.java | 2 +- .../java/org/jabref/gui/util/IconValidationDecorator.java | 4 ++-- src/main/java/org/jabref/gui/util/component/TagBar.java | 2 +- .../org/jabref/logic/bibtex/comparator/FieldComparator.java | 6 +++--- src/main/java/org/jabref/logic/bst/VM.java | 4 ++-- .../java/org/jabref/logic/exporter/BibTeXMLExporter.java | 2 +- .../java/org/jabref/logic/exporter/TemplateExporter.java | 6 +++--- .../java/org/jabref/logic/importer/ImportFormatReader.java | 5 +---- .../jabref/logic/importer/fileformat/MrDLibImporter.java | 2 +- src/main/java/org/jabref/logic/layout/format/RTFChars.java | 2 +- .../org/jabref/logic/openoffice/OpenOfficeFileSearch.java | 3 ++- 19 files changed, 26 insertions(+), 30 deletions(-) diff --git a/src/main/java/org/jabref/JabRefExecutorService.java b/src/main/java/org/jabref/JabRefExecutorService.java index df127df89f6..10fd1ee19cc 100644 --- a/src/main/java/org/jabref/JabRefExecutorService.java +++ b/src/main/java/org/jabref/JabRefExecutorService.java @@ -143,7 +143,7 @@ public void shutdownEverything() { timer.cancel(); } - private class NamedRunnable implements Runnable { + private static class NamedRunnable implements Runnable { private final String name; diff --git a/src/main/java/org/jabref/gui/SidePaneManager.java b/src/main/java/org/jabref/gui/SidePaneManager.java index 324810dd6ed..55b55d4f795 100644 --- a/src/main/java/org/jabref/gui/SidePaneManager.java +++ b/src/main/java/org/jabref/gui/SidePaneManager.java @@ -176,7 +176,7 @@ private void updateView() { /** * Helper class for sorting visible components based on their preferred position. */ - private class PreferredIndexSort implements Comparator { + private static class PreferredIndexSort implements Comparator { private final Map preferredPositions; diff --git a/src/main/java/org/jabref/gui/copyfiles/CopyFilesTask.java b/src/main/java/org/jabref/gui/copyfiles/CopyFilesTask.java index 2b78f4dd74d..aa3c7982175 100644 --- a/src/main/java/org/jabref/gui/copyfiles/CopyFilesTask.java +++ b/src/main/java/org/jabref/gui/copyfiles/CopyFilesTask.java @@ -50,7 +50,7 @@ public CopyFilesTask(BibDatabaseContext databaseContext, List entries, this.databaseContext = databaseContext; this.entries = entries; this.exportPath = path; - totalFilesCount = entries.stream().flatMap(entry -> entry.getFiles().stream()).count(); + totalFilesCount = entries.stream().mapToLong(entry -> entry.getFiles().size()).sum(); } @Override diff --git a/src/main/java/org/jabref/gui/duplicationFinder/DuplicateSearch.java b/src/main/java/org/jabref/gui/duplicationFinder/DuplicateSearch.java index 2c7dc4db6ab..1336e505afc 100644 --- a/src/main/java/org/jabref/gui/duplicationFinder/DuplicateSearch.java +++ b/src/main/java/org/jabref/gui/duplicationFinder/DuplicateSearch.java @@ -184,7 +184,7 @@ private void handleDuplicates(DuplicateSearchResult result) { * Uses {@link System#identityHashCode(Object)} for identifying objects for removal, as completely identical * {@link BibEntry BibEntries} are equal to each other. */ - class DuplicateSearchResult { + static class DuplicateSearchResult { private final Map toRemove = new HashMap<>(); private final List toAdd = new ArrayList<>(); diff --git a/src/main/java/org/jabref/gui/exporter/ExportToClipboardAction.java b/src/main/java/org/jabref/gui/exporter/ExportToClipboardAction.java index 94b63150d15..606706a89da 100644 --- a/src/main/java/org/jabref/gui/exporter/ExportToClipboardAction.java +++ b/src/main/java/org/jabref/gui/exporter/ExportToClipboardAction.java @@ -150,7 +150,7 @@ private String readFileToString(Path tmp) throws IOException { } } - private class ExportResult { + private static class ExportResult { final String content; final FileType fileType; diff --git a/src/main/java/org/jabref/gui/groups/GroupTreeView.java b/src/main/java/org/jabref/gui/groups/GroupTreeView.java index c26db16fc85..856edb67a19 100644 --- a/src/main/java/org/jabref/gui/groups/GroupTreeView.java +++ b/src/main/java/org/jabref/gui/groups/GroupTreeView.java @@ -393,7 +393,7 @@ private void setupClearButtonField(CustomTextField customTextField) { } } - private class DragExpansionHandler { + private static class DragExpansionHandler { private static final long DRAG_TIME_BEFORE_EXPANDING_MS = 1000; private TreeItem draggedItem; private long dragStarted; diff --git a/src/main/java/org/jabref/gui/groups/UndoableModifySubtree.java b/src/main/java/org/jabref/gui/groups/UndoableModifySubtree.java index f8d83ed5c5a..1f04933adde 100644 --- a/src/main/java/org/jabref/gui/groups/UndoableModifySubtree.java +++ b/src/main/java/org/jabref/gui/groups/UndoableModifySubtree.java @@ -43,9 +43,7 @@ public void undo() { m_modifiedSubtree.clear(); // get node to edit final GroupTreeNode subtreeRoot = m_groupRoot.getDescendant(m_subtreeRootPath).get(); //TODO: NULL - for (GroupTreeNode child : subtreeRoot.getChildren()) { - m_modifiedSubtree.add(child); - } + m_modifiedSubtree.addAll(subtreeRoot.getChildren()); // keep subtree handle, but restore everything else from backup subtreeRoot.removeAllChildren(); for (GroupTreeNode child : m_subtreeBackup.getChildren()) { diff --git a/src/main/java/org/jabref/gui/util/BackgroundTask.java b/src/main/java/org/jabref/gui/util/BackgroundTask.java index c07f3b70485..f3f2cd24d09 100644 --- a/src/main/java/org/jabref/gui/util/BackgroundTask.java +++ b/src/main/java/org/jabref/gui/util/BackgroundTask.java @@ -233,7 +233,7 @@ public BackgroundTask withInitialMessage(String message) { return this; } - class BackgroundProgress { + static class BackgroundProgress { private final double workDone; private final double max; diff --git a/src/main/java/org/jabref/gui/util/CurrentThreadTaskExecutor.java b/src/main/java/org/jabref/gui/util/CurrentThreadTaskExecutor.java index a5f8ec393a1..e615225f715 100644 --- a/src/main/java/org/jabref/gui/util/CurrentThreadTaskExecutor.java +++ b/src/main/java/org/jabref/gui/util/CurrentThreadTaskExecutor.java @@ -74,7 +74,7 @@ public DelayTaskThrottler createThrottler(int delay) { return throttler; } - private class FailedFuture implements Future { + private static class FailedFuture implements Future { private final Throwable exception; FailedFuture(Throwable exception) { diff --git a/src/main/java/org/jabref/gui/util/IconValidationDecorator.java b/src/main/java/org/jabref/gui/util/IconValidationDecorator.java index ada1bf7ab21..2608c5c0663 100644 --- a/src/main/java/org/jabref/gui/util/IconValidationDecorator.java +++ b/src/main/java/org/jabref/gui/util/IconValidationDecorator.java @@ -1,7 +1,7 @@ package org.jabref.gui.util; -import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import javafx.geometry.Pos; import javafx.scene.Node; @@ -61,6 +61,6 @@ protected Tooltip createTooltip(ValidationMessage message) { @Override protected Collection createValidationDecorations(ValidationMessage message) { - return Arrays.asList(new GraphicDecoration(createDecorationNode(message), position)); + return Collections.singletonList(new GraphicDecoration(createDecorationNode(message), position)); } } diff --git a/src/main/java/org/jabref/gui/util/component/TagBar.java b/src/main/java/org/jabref/gui/util/component/TagBar.java index 3c7161ae05d..3265567869b 100644 --- a/src/main/java/org/jabref/gui/util/component/TagBar.java +++ b/src/main/java/org/jabref/gui/util/component/TagBar.java @@ -56,7 +56,7 @@ public ObservableList getTags() { } public void setTags(Collection newTags) { - this.tags.setAll(tags); + this.tags.setAll(newTags); } public ListProperty tagsProperty() { diff --git a/src/main/java/org/jabref/logic/bibtex/comparator/FieldComparator.java b/src/main/java/org/jabref/logic/bibtex/comparator/FieldComparator.java index f0f4912780a..005ef6577ee 100644 --- a/src/main/java/org/jabref/logic/bibtex/comparator/FieldComparator.java +++ b/src/main/java/org/jabref/logic/bibtex/comparator/FieldComparator.java @@ -130,13 +130,13 @@ public int compare(BibEntry e1, BibEntry e2) { // Ok, parsing was successful. Update f1 and f2: return i1.get().compareTo(i2.get()) * multiplier; } else if (i1.isPresent()) { - // The first one was parseable, but not the second one. + // The first one was parsable, but not the second one. // This means we consider one < two return -1 * multiplier; } else if (i2.isPresent()) { - // The second one was parseable, but not the first one. + // The second one was parsable, but not the first one. // This means we consider one > two - return 1 * multiplier; + return multiplier; } // Else none of them were parseable, and we can fall back on comparing strings. } diff --git a/src/main/java/org/jabref/logic/bst/VM.java b/src/main/java/org/jabref/logic/bst/VM.java index f3dce6d5cfb..7b120710e1b 100644 --- a/src/main/java/org/jabref/logic/bst/VM.java +++ b/src/main/java/org/jabref/logic/bst/VM.java @@ -510,7 +510,7 @@ private VM(CommonTree tree) { */ buildInFunctions.put("stack$", context -> { while (!stack.empty()) { - LOGGER.debug("Stack entry", stack.pop()); + LOGGER.debug("Stack entry {}", stack.pop()); } }); @@ -574,7 +574,7 @@ private VM(CommonTree tree) { /* * Pops and prints the top of the stack to the log file. It's useful for debugging. */ - buildInFunctions.put("top$", context -> LOGGER.debug("Stack entry", stack.pop())); + buildInFunctions.put("top$", context -> LOGGER.debug("Stack entry {}", stack.pop())); /* * Pushes the current entry's type (book, article, etc.), but pushes diff --git a/src/main/java/org/jabref/logic/exporter/BibTeXMLExporter.java b/src/main/java/org/jabref/logic/exporter/BibTeXMLExporter.java index 1e5b6b310ca..db32ced0e5d 100644 --- a/src/main/java/org/jabref/logic/exporter/BibTeXMLExporter.java +++ b/src/main/java/org/jabref/logic/exporter/BibTeXMLExporter.java @@ -211,7 +211,7 @@ private void parse(T entryType, BibEntry bibEntry, Entry entry) { try { method.invoke(entryType, new BigInteger(value)); } catch (NumberFormatException exception) { - LOGGER.warn("The value %s of the 'number' field is not an integer and thus is ignored for the export", value); + LOGGER.warn("The value {} of the 'number' field is not an integer and thus is ignored for the export", value); } break; } else if (StandardField.MONTH.equals(key)) { diff --git a/src/main/java/org/jabref/logic/exporter/TemplateExporter.java b/src/main/java/org/jabref/logic/exporter/TemplateExporter.java index 3b04572b50b..3d95d91a3da 100644 --- a/src/main/java/org/jabref/logic/exporter/TemplateExporter.java +++ b/src/main/java/org/jabref/logic/exporter/TemplateExporter.java @@ -247,7 +247,7 @@ public void export(final BibDatabaseContext databaseContext, final Path file, if (defLayout != null) { missingFormatters.addAll(defLayout.getMissingFormatters()); if (!missingFormatters.isEmpty()) { - LOGGER.warn("Missing formatters found ", missingFormatters); + LOGGER.warn("Missing formatters found: {}", missingFormatters); } } Map layouts = new HashMap<>(); @@ -310,10 +310,10 @@ public void export(final BibDatabaseContext databaseContext, final Path file, // Clear custom name formatters: layoutPreferences.clearCustomExportNameFormatters(); - if (!missingFormatters.isEmpty()) { + if (!missingFormatters.isEmpty() && LOGGER.isWarnEnabled()) { StringBuilder sb = new StringBuilder("The following formatters could not be found: "); sb.append(String.join(", ", missingFormatters)); - LOGGER.warn("Formatters not found", sb); + LOGGER.warn("Formatters {} not found", sb.toString()); } } } diff --git a/src/main/java/org/jabref/logic/importer/ImportFormatReader.java b/src/main/java/org/jabref/logic/importer/ImportFormatReader.java index aa7e0207e7d..2f56dffd0ad 100644 --- a/src/main/java/org/jabref/logic/importer/ImportFormatReader.java +++ b/src/main/java/org/jabref/logic/importer/ImportFormatReader.java @@ -12,7 +12,6 @@ import org.jabref.logic.importer.fileformat.BiblioscapeImporter; import org.jabref.logic.importer.fileformat.BibtexImporter; import org.jabref.logic.importer.fileformat.CopacImporter; -import org.jabref.logic.importer.fileformat.CustomImporter; import org.jabref.logic.importer.fileformat.EndnoteImporter; import org.jabref.logic.importer.fileformat.EndnoteXmlImporter; import org.jabref.logic.importer.fileformat.InspecImporter; @@ -71,9 +70,7 @@ public void resetImportFormats(ImportFormatPreferences newImportFormatPreference formats.add(new SilverPlatterImporter()); // Get custom import formats - for (CustomImporter importer : importFormatPreferences.getCustomImportList()) { - formats.add(importer); - } + formats.addAll(importFormatPreferences.getCustomImportList()); } /** diff --git a/src/main/java/org/jabref/logic/importer/fileformat/MrDLibImporter.java b/src/main/java/org/jabref/logic/importer/fileformat/MrDLibImporter.java index fcc72396631..4924b1f50f0 100644 --- a/src/main/java/org/jabref/logic/importer/fileformat/MrDLibImporter.java +++ b/src/main/java/org/jabref/logic/importer/fileformat/MrDLibImporter.java @@ -91,7 +91,7 @@ private String convertToString(BufferedReader input) throws IOException { /** * Small pair-class to ensure the right order of the recommendations. */ - private class RankedBibEntry { + private static class RankedBibEntry { public BibEntry entry; public Integer rank; diff --git a/src/main/java/org/jabref/logic/layout/format/RTFChars.java b/src/main/java/org/jabref/logic/layout/format/RTFChars.java index 61945a01d51..e9d58e32a6d 100644 --- a/src/main/java/org/jabref/logic/layout/format/RTFChars.java +++ b/src/main/java/org/jabref/logic/layout/format/RTFChars.java @@ -15,7 +15,7 @@ * * 1.) Remove LaTeX-Command sequences. * - * 2.) Replace LaTeX-Special chars with RTF aquivalents. + * 2.) Replace LaTeX-Special chars with RTF equivalents. * * 3.) Replace emph and textit and textbf with their RTF replacements. * diff --git a/src/main/java/org/jabref/logic/openoffice/OpenOfficeFileSearch.java b/src/main/java/org/jabref/logic/openoffice/OpenOfficeFileSearch.java index 5ca89ec4009..6a5302e8d7f 100644 --- a/src/main/java/org/jabref/logic/openoffice/OpenOfficeFileSearch.java +++ b/src/main/java/org/jabref/logic/openoffice/OpenOfficeFileSearch.java @@ -5,6 +5,7 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; @@ -67,7 +68,7 @@ private static List findWindowsOpenOfficeDirs() { } private static List findOSXOpenOfficeDirs() { - List sourceList = Arrays.asList(Paths.get("/Applications")); + List sourceList = Collections.singletonList(Paths.get("/Applications")); return findOpenOfficeDirectories(sourceList); } From 073a60cd8d8b83d2bad236f53c5d082ed4e891be Mon Sep 17 00:00:00 2001 From: dimitra-karadima Date: Mon, 30 Mar 2020 20:31:17 +0300 Subject: [PATCH 038/166] Change the tooltips' description for #6074 Add the following changes: -tooltips' description comes from biblatex documentation -comment about the biblatex manual -description to the english localization file --- .../java/org/jabref/gui/EntryTypeView.java | 137 +++++++++++------- src/main/resources/l10n/JabRef_en.properties | 33 +++++ 2 files changed, 120 insertions(+), 50 deletions(-) diff --git a/src/main/java/org/jabref/gui/EntryTypeView.java b/src/main/java/org/jabref/gui/EntryTypeView.java index d9aa1b66b67..5bc6aea6c82 100644 --- a/src/main/java/org/jabref/gui/EntryTypeView.java +++ b/src/main/java/org/jabref/gui/EntryTypeView.java @@ -179,77 +179,114 @@ private void setEntryTypeForReturnAndClose(Optional entryType) { this.close(); } + //The description is coming from biblatex manual chapter 2 + //Biblatex documentation is favored over the bibtex, + //since bibtex is a subset of biblatex and biblatex is better documented. public String getDescription(BibEntryType selectedType) { EntryType entryType = selectedType.getType(); try { StandardEntryType entry = (StandardEntryType) entryType; switch (entry) { - case Article: - return Localization.lang("An article from a journal or magazine."); - case Book: - return Localization.lang("A book with an explicit publisher."); - case Booklet: - return Localization.lang("A work that is printed and bound, but without a named publisher orsponsoring institution."); - case Collection: + case Article -> { + return Localization.lang("An article in a journal, magazine, newspaper, or other periodical which forms a self-contained unit with its own title."); + } + case Book -> { + return Localization.lang("A single-volume book with one or more authors where the authors share credit for the work as a whole."); + } + case Booklet -> { + return Localization.lang("A book-like work without a formal publisher or sponsoring institution."); + } + case Collection -> { return Localization.lang("A single-volume collection with multiple, self-contained contributions by distinct authors which have their own title. The work as a whole has no overall author but it will usually have an editor."); - case Conference: - return Localization.lang("The same as Inproceedings, included for Scribe compatibility."); - case InBook: - return Localization.lang("A part of a book, which may be a chapter(or section or whatever) and/or a range of pages."); - case InCollection: - return Localization.lang("A part of a book having its own title."); - case InProceedings: + } + case Conference -> { + return Localization.lang("A legacy alias for inproceedings."); + } + case InBook -> { + return Localization.lang("A part of a book which forms a self-contained unit with its own title."); + } + case InCollection -> { + return Localization.lang("A contribution to a collection which forms a self-contained unit with a distinct author and title."); + } + case InProceedings -> { return Localization.lang("An article in a conference proceedings."); - case Manual: - return Localization.lang("Technical documentation."); - case MastersThesis: - return Localization.lang("A Master’s thesis."); - case Misc: - return Localization.lang("Use this type when nothing else fits"); - case PhdThesis: - return Localization.lang("A PhD thesis."); - case Proceedings: - return Localization.lang("The proceedings of a conference."); - case TechReport: - return Localization.lang("A report published by a school or other institution, usually numbered within a series."); - case Unpublished: - return Localization.lang("A document having an author and title, but not formally published."); - case BookInBook: - return Localization.lang("This type is similar to inbook but intended for works originally published as astand-alone book."); - case InReference: - return Localization.lang("An article in a work of reference."); - case MvBook: + } + case Manual -> { + return Localization.lang("Technical or other documentation, not necessarily in printed form."); + } + case MastersThesis -> { + return Localization.lang("Similar to thesis except that the type field is optional and defaults to the localised term Master's thesis."); + } + case Misc -> { + return Localization.lang("A fallback type for entries which do not fit into any other category."); + } + case PhdThesis -> { + return Localization.lang("Similar to thesis except that the type field is optional and defaults to the localised term PhD thesis."); + } + case Proceedings -> { + return Localization.lang("A single-volume conference proceedings. This type is very similar to collection."); + } + case TechReport -> { + return Localization.lang("Similar to report except that the type field is optional and defaults to the localised term technical report."); + } + case Unpublished -> { + return Localization.lang("A work with an author and a title which has not been formally published, such as a manuscript or the script of a talk."); + } + case BookInBook -> { + return Localization.lang("This type is similar to inbook but intended for works originally published as a stand-alone book."); + } + case InReference -> { + return Localization.lang("An article in a work of reference. This is a more specific variant of the generic incollection entry type."); + } + case MvBook -> { return Localization.lang("A multi-volume book."); - case MvCollection: + } + case MvCollection -> { return Localization.lang("A multi-volume collection."); - case MvProceedings: + } + case MvProceedings -> { return Localization.lang("A multi-volume proceedings entry."); - case MvReference: - return Localization.lang("A multi-volume reference entry. The standard styles will treat this entry typeas an alias for mvcollection."); - case Online: + } + case MvReference -> { + return Localization.lang("A multi-volume reference entry. The standard styles will treat this entry type as an alias for mvcollection."); + } + case Online -> { return Localization.lang("This entry type is intended for sources such as web sites which are intrinsically online resources."); - case Reference: + } + case Reference -> { return Localization.lang("A single-volume work of reference such as an encyclopedia or a dictionary."); - case Report: - return Localization.lang("A technical report, research report, or white paper published by a university or someother institution."); - case Set: + } + case Report -> { + return Localization.lang("A technical report, research report, or white paper published by a university or some other institution."); + } + case Set -> { return Localization.lang("An entry set is a group of entries which are cited as a single reference and listed as a single item in the bibliography."); - case SuppBook: + } + case SuppBook -> { return Localization.lang("Supplemental material in a book. This type is provided for elements such as prefaces, introductions, forewords, afterwords, etc. which often have a generic title only."); - case SuppCollection: + } + case SuppCollection -> { return Localization.lang("Supplemental material in a collection."); - case SuppPeriodical: + } + case SuppPeriodical -> { return Localization.lang("Supplemental material in a periodical. This type may be useful when referring to items such as regular columns, obituaries, letters to the editor, etc. which only have a generic title."); - case Thesis: + } + case Thesis -> { return Localization.lang("A thesis written for an educational institution to satisfy the requirements for a degree."); - case WWW: + } + case WWW -> { return Localization.lang("An alias for online, provided for jurabib compatibility."); - case Software: + } + case Software -> { return Localization.lang("Computer software. The standard styles will treat this entry type as an alias for misc."); - case DATESET: + } + case DATESET -> { return Localization.lang("A data set or a similar collection of (mostly) raw data."); + } + default -> { + return ""; + } } - return ""; } catch (Exception e) { return ""; } diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index 125b07a0806..f28279d40fd 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -2169,3 +2169,36 @@ Year\ of\ publication.=Year of publication. Remove\ formatter\ for\ %0=Remove formatter for %0 Remove\ formatter\ '%0'=Remove formatter '%0' + +An\ article\ in\ a\ journal,\ magazine,\ newspaper,\ or\ other\ periodical\ which\ forms\ a\ self-contained\ unit\ with\ its\ own\ title.=An article in a journal, magazine, newspaper, or other periodical which forms aself-contained unit with its own title. +A\ single-volume\ book\ with\ one\ or\ more\ authors\ where\ the\ authors\ share\ credit\ for\ the\ work\ as\ a\ whole.=A single-volume book with one or more authors where the authors share credit for the work as a whole. +A\ book-like\ work\ without\ a\ formal\ publisher\ or\ sponsoring\ institution.=A book-like work without a formal publisher or sponsoring institution. +A\ single-volume\ collection\ with\ multiple,\ self-contained\ contributions\ by\ distinct\ authors\ which\ have\ their\ own\ title.\ The\ work\ as\ a\ whole\ has\ no\ overall\ author\ but\ it\ will\ usually\ have\ an\ editor.=A single-volume collection with multiple, self-contained contributions by distinct authors which have their own title. The work as a whole has no overall author but it will usually have an editor. +A\ legacy\ alias\ for\ inproceedings.=A legacy alias for inproceedings. +A\ part\ of\ a\ book\ which\ forms\ a\ self-contained\ unit\ with\ its\ own\ title.=A part of a book which forms a self-contained unit with its own title. +A\ contribution\ to\ a\ collection\ which\ forms\ a\ self-contained\ unit\ with\ a\ distinct\ author\ and\ title.=A contribution to a collection which forms a self-contained unit with a distinct author and title. +An\ article\ in\ a\ conference\ proceedings.=An article in a conference proceedings. +Technical\ or\ other\ documentation,\ not\ necessarily\ in\ printed\ form.=Technical or other documentation, not necessarily in printed form. +Similar\ to\ thesis\ except\ that\ the\ type\ field\ is\ optional\ and\ defaults\ to\ the\ localised\ term\ Master's\ thesis.=Similar to thesis except that the type field is optional and defaults to the localised term Master's thesis. +A\ fallback\ type\ for\ entries\ which\ do\ not\ fit\ into\ any\ other\ category.=A fallback type for entries which do not fit into any other category. +Similar\ to\ thesis\ except\ that\ the\ type\ field\ is\ optional\ and\ defaults\ to\ the\ localised\ term\ PhD\ thesis.=Similar to thesis except that the type field is optional and defaults to the localised term PhD thesis. +A\ single-volume\ conference\ proceedings.\ This\ type\ is\ very\ similar\ to\ collection.=A single-volume conference proceedings. This type is very similar to collection. +Similar\ to\ report\ except\ that\ the\ type\ field\ is\ optional\ and\ defaults\ to\ the\ localised\ term\ technical\ report.=Similar to report except that the type field is optional and defaults to the localised term technical report. +A\ work\ with\ an\ author\ and\ a\ title\ which\ has\ not\ been\ formally\ published,\ such\ as\ a\ manuscript\ or\ the\ script\ of\ a\ talk.=A work with an author and a title which has not been formally published, such as a manuscript or the script of a talk. +This\ type\ is\ similar\ to\ inbook\ but\ intended\ for\ works\ originally\ published\ as\ a\ stand-alone\ book.=This type is similar to inbook but intended for works originally published as a stand-alone book. +An\ article\ in\ a\ work\ of\ reference.\ This\ is\ a\ more\ specific\ variant\ of\ the\ generic\ incollection\ entry\ type.=An article in a work of reference. This is a more specific variant of the generic incollection entry type. +A\ multi-volume\ book.=A multi-volume book. +A\ multi-volume\ collection.=A multi-volume collection. +A\ multi-volume\ proceedings\ entry.=A multi-volume proceedings entry. +A\ multi-volume\ reference\ entry.\ The\ standard\ styles\ will\ treat\ this\ entry\ type\ as\ an\ alias\ for\ mvcollection.=A multi-volume reference entry. The standard styles will treat this entry type as an alias for mvcollection. +This\ entry\ type\ is\ intended\ for\ sources\ such\ as\ web\ sites\ which\ are\ intrinsically\ online\ resources.=This entry type is intended for sources such as web sites which are intrinsically online resources. +A\ single-volume\ work\ of\ reference\ such\ as\ an\ encyclopedia\ or\ a\ dictionary.=A single-volume work of reference such as an encyclopedia or a dictionary. +A\ technical\ report,\ research\ report,\ or\ white\ paper\ published\ by\ a\ university\ or\ some\ other\ institution.=A technical report, research report, or white paper published by a university or some other institution. +An\ entry\ set\ is\ a\ group\ of\ entries\ which\ are\ cited\ as\ a\ single\ reference\ and\ listed\ as\ a\ single\ item\ in\ the\ bibliography.=An entry set is a group of entries which are cited as a single reference and listed as a single item in the bibliography. +Supplemental\ material\ in\ a\ book.\ This\ type\ is\ provided\ for\ elements\ such\ as\ prefaces,\ introductions,\ forewords,\ afterwords,\ etc.\ which\ often\ have\ a\ generic\ title\ only.=Supplemental material in a book. This type is provided for elements such as prefaces, introductions, forewords, afterwords, etc. which often have a generic title only. +Supplemental\ material\ in\ a\ collection.=Supplemental material in a collection. +Supplemental\ material\ in\ a\ periodical.\ This\ type\ may\ be\ useful\ when\ referring\ to\ items\ such\ as\ regular\ columns,\ obituaries,\ letters\ to\ the\ editor,\ etc.\ which\ only\ have\ a\ generic\ title.=Supplemental material in a periodical. This type may be useful when referring to items such as regular columns, obituaries, letters to the editor, etc. which only have a generic title. +A\ thesis\ written\ for\ an\ educational\ institution\ to\ satisfy\ the\ requirements\ for\ a\ degree.=A thesis written for an educational institution to satisfy the requirements for a degree. +An\ alias\ for\ online,\ provided\ for\ jurabib\ compatibility.=An alias for online, provided for jurabib compatibility. +Computer\ software.\ The\ standard\ styles\ will\ treat\ this\ entry\ type\ as\ an\ alias\ for\ misc.=Computer software. The standard styles will treat this entry type as an alias for misc. +A\ data\ set\ or\ a\ similar\ collection\ of\ (mostly)\ raw\ data.=A data set or a similar collection of (mostly) raw data. From 764a86501e71c54f6b0ad2c1d829971d5bacaddf Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Mon, 30 Mar 2020 19:31:39 +0200 Subject: [PATCH 039/166] Small code improvements suggested by IntelliJ --- .../bibtexfields/HtmlToLatexFormatter.java | 2 +- .../jabref/logic/layout/format/HTMLChars.java | 33 ++++--------------- .../jabref/logic/layout/format/RTFChars.java | 2 +- .../ReplaceUnicodeLigaturesFormatter.java | 2 +- .../logic/openoffice/OOPreFormatter.java | 33 ++++--------------- 5 files changed, 17 insertions(+), 55 deletions(-) diff --git a/src/main/java/org/jabref/logic/formatter/bibtexfields/HtmlToLatexFormatter.java b/src/main/java/org/jabref/logic/formatter/bibtexfields/HtmlToLatexFormatter.java index 060c1ee5b48..c903627e670 100644 --- a/src/main/java/org/jabref/logic/formatter/bibtexfields/HtmlToLatexFormatter.java +++ b/src/main/java/org/jabref/logic/formatter/bibtexfields/HtmlToLatexFormatter.java @@ -91,7 +91,7 @@ public String format(String text) { m = ESCAPED_PATTERN3.matcher(result); while (m.find()) { int num = Integer.decode(m.group(1).replace("x", "#") + m.group(3)); - LOGGER.warn("HTML escaped char not converted: " + m.group(1) + m.group(2) + m.group(3) + " = " + Integer.toString(num)); + LOGGER.warn("HTML escaped char not converted: {}{}{} = {}", m.group(1), m.group(2), m.group(3), " = ", num); } // Remove $$ in case of two adjacent conversions diff --git a/src/main/java/org/jabref/logic/layout/format/HTMLChars.java b/src/main/java/org/jabref/logic/layout/format/HTMLChars.java index d648583d800..5961d5c7f76 100644 --- a/src/main/java/org/jabref/logic/layout/format/HTMLChars.java +++ b/src/main/java/org/jabref/logic/layout/format/HTMLChars.java @@ -1,6 +1,7 @@ package org.jabref.logic.layout.format; import java.util.Map; +import java.util.Objects; import org.jabref.logic.layout.LayoutFormatter; import org.jabref.logic.util.strings.HTMLUnicodeConversionMaps; @@ -39,11 +40,7 @@ public String format(String inField) { /* Close Command */ String command = currentCommand.toString(); String result = HTML_CHARS.get(command); - if (result == null) { - sb.append(command); - } else { - sb.append(result); - } + sb.append(Objects.requireNonNullElse(result, command)); } escaped = true; incommand = true; @@ -79,11 +76,7 @@ public String format(String inField) { } String result = HTML_CHARS.get(command + commandBody); - if (result == null) { - sb.append(commandBody); - } else { - sb.append(result); - } + sb.append(Objects.requireNonNullElse(result, commandBody)); incommand = false; escaped = false; @@ -96,11 +89,7 @@ public String format(String inField) { * then keep * the text of the parameter intact. */ - if (result == null) { - sb.append(command); - } else { - sb.append(result); - } + sb.append(Objects.requireNonNullElse(result, command)); } } @@ -143,19 +132,11 @@ public String format(String inField) { // constructs like {\aa}. The correct behaviour should be to // substitute the evaluated command and swallow the brace: String result = HTML_CHARS.get(command); - if (result == null) { - // If the command is unknown, just print it: - sb.append(command); - } else { - sb.append(result); - } + // If the command is unknown, just print it: + sb.append(Objects.requireNonNullElse(result, command)); } else { String result = HTML_CHARS.get(command); - if (result == null) { - sb.append(command); - } else { - sb.append(result); - } + sb.append(Objects.requireNonNullElse(result, command)); sb.append(' '); } } else { diff --git a/src/main/java/org/jabref/logic/layout/format/RTFChars.java b/src/main/java/org/jabref/logic/layout/format/RTFChars.java index e9d58e32a6d..85bfa75fd03 100644 --- a/src/main/java/org/jabref/logic/layout/format/RTFChars.java +++ b/src/main/java/org/jabref/logic/layout/format/RTFChars.java @@ -31,7 +31,7 @@ public class RTFChars implements LayoutFormatter { @Override public String format(String field) { - StringBuilder sb = new StringBuilder(""); + StringBuilder sb = new StringBuilder(); StringBuilder currentCommand = null; boolean escaped = false; boolean incommand = false; diff --git a/src/main/java/org/jabref/logic/layout/format/ReplaceUnicodeLigaturesFormatter.java b/src/main/java/org/jabref/logic/layout/format/ReplaceUnicodeLigaturesFormatter.java index cce05eb57dc..5afa3bc90fc 100644 --- a/src/main/java/org/jabref/logic/layout/format/ReplaceUnicodeLigaturesFormatter.java +++ b/src/main/java/org/jabref/logic/layout/format/ReplaceUnicodeLigaturesFormatter.java @@ -11,7 +11,7 @@ public class ReplaceUnicodeLigaturesFormatter extends Formatter implements LayoutFormatter { - private Map ligaturesMap; + private final Map ligaturesMap; public ReplaceUnicodeLigaturesFormatter() { ligaturesMap = new HashMap<>(); diff --git a/src/main/java/org/jabref/logic/openoffice/OOPreFormatter.java b/src/main/java/org/jabref/logic/openoffice/OOPreFormatter.java index 91e954dd44b..61127acb12d 100644 --- a/src/main/java/org/jabref/logic/openoffice/OOPreFormatter.java +++ b/src/main/java/org/jabref/logic/openoffice/OOPreFormatter.java @@ -1,6 +1,7 @@ package org.jabref.logic.openoffice; import java.util.Map; +import java.util.Objects; import org.jabref.logic.layout.LayoutFormatter; import org.jabref.logic.util.strings.HTMLUnicodeConversionMaps; @@ -38,11 +39,7 @@ public String format(String field) { /* Close Command */ String command = currentCommand.toString(); String result = OOPreFormatter.CHARS.get(command); - if (result == null) { - sb.append(command); - } else { - sb.append(result); - } + sb.append(Objects.requireNonNullElse(result, command)); } escaped = true; incommand = true; @@ -94,11 +91,7 @@ public String format(String field) { * then keep * the text of the parameter intact. */ - if (result == null) { - sb.append(command); - } else { - sb.append(result); - } + sb.append(Objects.requireNonNullElse(result, command)); } } @@ -128,29 +121,17 @@ public String format(String field) { // If found, then use translated version. If not, then keep // the // text of the parameter intact. - if (result == null) { - sb.append(argument); - } else { - sb.append(result); - } + sb.append(Objects.requireNonNullElse(result, argument)); } else if (c == '}') { // This end brace terminates a command. This can be the case in // constructs like {\aa}. The correct behaviour should be to // substitute the evaluated command and swallow the brace: String result = OOPreFormatter.CHARS.get(command); - if (result == null) { - // If the command is unknown, just print it: - sb.append(command); - } else { - sb.append(result); - } + // If the command is unknown, just print it: + sb.append(Objects.requireNonNullElse(result, command)); } else { String result = OOPreFormatter.CHARS.get(command); - if (result == null) { - sb.append(command); - } else { - sb.append(result); - } + sb.append(Objects.requireNonNullElse(result, command)); sb.append(' '); } } /* else if (c == '}') { From 1f9408cb9777a9a84c8a32781ad82ad7895176b5 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Mon, 30 Mar 2020 21:38:15 +0200 Subject: [PATCH 040/166] Rewrite EditionChecker to use return not followed by else --- .../logic/integrity/EditionChecker.java | 25 +++++++++---------- src/main/resources/l10n/JabRef_en.properties | 1 + 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/jabref/logic/integrity/EditionChecker.java b/src/main/java/org/jabref/logic/integrity/EditionChecker.java index c0119d1e1bd..697ca38e85c 100644 --- a/src/main/java/org/jabref/logic/integrity/EditionChecker.java +++ b/src/main/java/org/jabref/logic/integrity/EditionChecker.java @@ -18,6 +18,8 @@ public class EditionChecker implements ValueChecker { private static final String FIRST_EDITION = "1"; private final BibDatabaseContext bibDatabaseContextEdition; + + // Allow integers in 'edition' field in BibTeX mode --> see GeneralTab.fml private final boolean allowIntegerEdition; public EditionChecker(BibDatabaseContext bibDatabaseContext, boolean allowIntegerEdition) { @@ -42,20 +44,17 @@ public Optional checkValue(String value) { return Optional.of(Localization.lang("edition of book reported as just 1")); } - //biblatex - if (bibDatabaseContextEdition.isBiblatexMode() && !ONLY_NUMERALS_OR_LITERALS.test(value.trim())) { - return Optional.of(Localization.lang("should contain an integer or a literal")); - } - - //BibTeX - if (!bibDatabaseContextEdition.isBiblatexMode()) { - if (!isFirstCharDigit(value) && (!allowIntegerEdition) && !FIRST_LETTER_CAPITALIZED.test(value.trim())) { - return Optional.of(Localization.lang("should have the first letter capitalized")); - } else { - if (ONLY_NUMERALS.test(value.trim()) && (!allowIntegerEdition)) { - return Optional.of(Localization.lang("should have the first letter capitalized")); - } + if (bibDatabaseContextEdition.isBiblatexMode()) { + if (!ONLY_NUMERALS_OR_LITERALS.test(value.trim())) { + return Optional.of(Localization.lang("should contain an integer or a literal")); } + } else { + if (ONLY_NUMERALS.test(value) && (!allowIntegerEdition)) { + return Optional.of(Localization.lang("no integer as values for edition allowed")); + } + } + if (!isFirstCharDigit(value) && !FIRST_LETTER_CAPITALIZED.test(value.trim())) { + return Optional.of(Localization.lang("should have the first letter capitalized")); } return Optional.empty(); } diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index 125b07a0806..0af1b17e915 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -1696,6 +1696,7 @@ shared=shared should\ contain\ an\ integer\ or\ a\ literal=should contain an integer or a literal should\ have\ the\ first\ letter\ capitalized=should have the first letter capitalized edition\ of\ book\ reported\ as\ just\ 1=edition of book reported as just 1 +no\ integer\ as\ values\ for\ edition\ allowed=no integer as values for edition allowed Tools=Tools What\'s\ new\ in\ this\ version?=What\'s new in this version? Want\ to\ help?=Want to help? From 97fcf38ec609cc237d7ec86bcd70fa4b2c0fe75c Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 31 Mar 2020 08:28:07 +0200 Subject: [PATCH 041/166] Refine description of CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 676baf7503a..831a593fb9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `#NUM`. +In case, there is no issue present, the pull request implementing the feature is linked. + Note that this project **does not** adhere to [Semantic Versioning](http://semver.org/). ## [Unreleased] From 5edf5beb685cabe56c2eed1f51cf135fb5e5bfed Mon Sep 17 00:00:00 2001 From: Christoph Date: Tue, 31 Mar 2020 14:01:54 +0200 Subject: [PATCH 042/166] Update l10n part --- docs/code-howtos.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/code-howtos.md b/docs/code-howtos.md index 4e1fd925621..82519ed9ce8 100644 --- a/docs/code-howtos.md +++ b/docs/code-howtos.md @@ -170,11 +170,10 @@ General hints: The tests check whether translation strings appear correctly in the resource bundles. -1. Add new `Localization.lang("KEY")` to Java file. +1. Add new `Localization.lang("KEY")` to Java file. Run the `LocalizationConsistencyTest`under (src/test/org.jabref.logic.l10n) 2. Tests fail. In the test output a snippet is generated which must be added to the English translation file. There is also a snippet generated for the non-English files, but this is irrelevant. 3. Add snippet to English translation file located at `src/main/resources/l10n/JabRef_en.properties` -4. With `gradlew localizationUpdate` the "KEY" is added to the other translation files as well \(you can use `gradlew localizationUpdateExtended` for extended output\). [Crowdin](http://translate.jabref.org) will add them as required. -5. Tests are green again. +4. Please do not add tranlsations for other languages direclty in the properties. They will be overwritten by [Crowdin](https://crowdin.com/project/jabref) ## Cleanup and Formatters From e86610672b00fc5bb1eabd0cde3d6ad44d831a4d Mon Sep 17 00:00:00 2001 From: Stefan Kolb Date: Tue, 31 Mar 2020 18:06:20 +0200 Subject: [PATCH 043/166] Groups: Searching for keywords field mandatory value not checked (#6110) * Groups: Searching for keywords field mandatory value not checked * Dialog should not close after error message is displayed Fixes #6108 Co-authored-by: Oliver Kopp --- .../jabref/gui/groups/GroupDialogView.java | 15 +- .../gui/groups/GroupDialogViewModel.java | 293 +++++++++++------- src/main/resources/l10n/JabRef_en.properties | 1 + 3 files changed, 198 insertions(+), 111 deletions(-) diff --git a/src/main/java/org/jabref/gui/groups/GroupDialogView.java b/src/main/java/org/jabref/gui/groups/GroupDialogView.java index 67b7122c553..9d11fc25bb4 100644 --- a/src/main/java/org/jabref/gui/groups/GroupDialogView.java +++ b/src/main/java/org/jabref/gui/groups/GroupDialogView.java @@ -3,7 +3,9 @@ import java.util.EnumMap; import javafx.application.Platform; +import javafx.event.ActionEvent; import javafx.fxml.FXML; +import javafx.scene.control.Button; import javafx.scene.control.ButtonType; import javafx.scene.control.CheckBox; import javafx.scene.control.ColorPicker; @@ -59,8 +61,8 @@ public class GroupDialogView extends BaseDialog { @FXML private TextField texGroupFilePath; - private final EnumMap hierarchyText = new EnumMap<>(GroupHierarchyType.class); - private final EnumMap hierarchyToolTip = new EnumMap<>(GroupHierarchyType.class); + private final EnumMap hierarchyText = new EnumMap<>(GroupHierarchyType.class); + private final EnumMap hierarchyToolTip = new EnumMap<>(GroupHierarchyType.class); private final ControlsFxVisualizer validationVisualizer = new ControlsFxVisualizer(); private final GroupDialogViewModel viewModel; @@ -80,6 +82,10 @@ public GroupDialogView(DialogService dialogService, BibDatabaseContext currentDa setResultConverter(viewModel::resultConverter); getDialogPane().getButtonTypes().setAll(ButtonType.OK, ButtonType.CANCEL); + + final Button confirmDialogButton = (Button) getDialogPane().lookupButton(ButtonType.OK); + // handle validation before closing dialog and calling resultConverter + confirmDialogButton.addEventFilter(ActionEvent.ACTION, viewModel::validationHandler); } @FXML @@ -135,11 +141,12 @@ public void initialize() { validationVisualizer.initVisualization(viewModel.searchSearchTermEmptyValidationStatus(), searchGroupSearchTerm); validationVisualizer.initVisualization(viewModel.keywordRegexValidationStatus(), keywordGroupSearchTerm); validationVisualizer.initVisualization(viewModel.keywordSearchTermEmptyValidationStatus(), keywordGroupSearchTerm); + validationVisualizer.initVisualization(viewModel.keywordFieldEmptyValidationStatus(), keywordGroupSearchField); }); // Binding to the button throws a NPE, since it doesn't exist yet. Working around. - viewModel.validationStatus().validProperty().addListener((obs, oldValue, newValue) -> { - if (newValue) { + viewModel.validationStatus().validProperty().addListener((obs, _oldValue, validationStatus) -> { + if (validationStatus) { getDialogPane().lookupButton(ButtonType.OK).setDisable(false); } else { getDialogPane().lookupButton(ButtonType.OK).setDisable(true); diff --git a/src/main/java/org/jabref/gui/groups/GroupDialogViewModel.java b/src/main/java/org/jabref/gui/groups/GroupDialogViewModel.java index 2a465886d3d..2da487145e3 100644 --- a/src/main/java/org/jabref/gui/groups/GroupDialogViewModel.java +++ b/src/main/java/org/jabref/gui/groups/GroupDialogViewModel.java @@ -18,6 +18,7 @@ import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.collections.FXCollections; +import javafx.event.Event; import javafx.scene.control.ButtonType; import javafx.scene.paint.Color; @@ -56,7 +57,6 @@ import de.saxsys.mvvmfx.utils.validation.Validator; public class GroupDialogViewModel { - // Basic Settings private final StringProperty nameProperty = new SimpleStringProperty(""); private final StringProperty descriptionProperty = new SimpleStringProperty(""); @@ -95,6 +95,7 @@ public class GroupDialogViewModel { private Validator nameContainsDelimiterValidator; private Validator sameNameValidator; private Validator keywordRegexValidator; + private Validator keywordFieldEmptyValidator; private Validator keywordSearchTermEmptyValidator; private Validator searchRegexValidator; private Validator searchSearchTermEmptyValidator; @@ -173,6 +174,11 @@ private void setupValidation() { Localization.lang("Keywords"), Localization.lang("Invalid regular expression.")))); + keywordFieldEmptyValidator = new FunctionBasedValidator<>( + keywordGroupSearchFieldProperty, + StringUtil::isNotBlank, + ValidationMessage.error(Localization.lang("Please enter a field name to search for keywords."))); + keywordSearchTermEmptyValidator = new FunctionBasedValidator<>( keywordGroupSearchTermProperty, input -> !StringUtil.isNullOrEmpty(input), @@ -214,103 +220,106 @@ private void setupValidation() { validator.addValidators(nameValidator, sameNameValidator); - typeSearchProperty.addListener((obs,oldVal,newVal) -> { - if (newVal) { + typeSearchProperty.addListener((obs, _oldValue, isSelected) -> { + if (isSelected) { validator.addValidators(searchRegexValidator, searchSearchTermEmptyValidator); } else { validator.removeValidators(searchRegexValidator, searchSearchTermEmptyValidator); } }); - typeKeywordsProperty.addListener((obs,oldVal,newVal) -> { - if (newVal) { - validator.addValidators(keywordRegexValidator, keywordSearchTermEmptyValidator); + typeKeywordsProperty.addListener((obs, _oldValue, isSelected) -> { + if (isSelected) { + validator.addValidators(keywordFieldEmptyValidator, keywordRegexValidator, keywordSearchTermEmptyValidator); } else { - validator.removeValidators(keywordRegexValidator, keywordSearchTermEmptyValidator); + validator.removeValidators(keywordFieldEmptyValidator, keywordRegexValidator, keywordSearchTermEmptyValidator); } }); } + public void validationHandler(Event event) { + ValidationStatus validationStatus = validator.getValidationStatus(); + if (validationStatus.getHighestMessage().isPresent()) { + dialogService.showErrorDialogAndWait(validationStatus.getHighestMessage().get().getMessage()); + // consume the event to prevent the dialog to close + event.consume(); + } + } + public AbstractGroup resultConverter(ButtonType button) { - if (button == ButtonType.OK) { - ValidationStatus validationStatus = validator.getValidationStatus(); - if (validationStatus.getHighestMessage().isPresent()) { - dialogService.showErrorDialogAndWait(validationStatus.getHighestMessage().get().getMessage()); - return null; - } + if (button != ButtonType.OK) { + return null; + } - AbstractGroup resultingGroup = null; - try { - String groupName = nameProperty.getValue().trim(); - if (typeExplicitProperty.getValue()) { - resultingGroup = new ExplicitGroup( + AbstractGroup resultingGroup = null; + try { + String groupName = nameProperty.getValue().trim(); + if (typeExplicitProperty.getValue()) { + resultingGroup = new ExplicitGroup( + groupName, + groupHierarchySelectedProperty.getValue(), + preferencesService.getKeywordDelimiter()); + } else if (typeKeywordsProperty.getValue()) { + if (keywordGroupRegexProperty.getValue()) { + resultingGroup = new RegexKeywordGroup( groupName, groupHierarchySelectedProperty.getValue(), - preferencesService.getKeywordDelimiter()); - } else if (typeKeywordsProperty.getValue()) { - if (keywordGroupRegexProperty.getValue()) { - resultingGroup = new RegexKeywordGroup( - groupName, - groupHierarchySelectedProperty.getValue(), - FieldFactory.parseField(keywordGroupSearchFieldProperty.getValue().trim()), - keywordGroupSearchTermProperty.getValue().trim(), - keywordGroupCaseSensitiveProperty.getValue()); - } else { - resultingGroup = new WordKeywordGroup( - groupName, - groupHierarchySelectedProperty.getValue(), - FieldFactory.parseField(keywordGroupSearchFieldProperty.getValue().trim()), - keywordGroupSearchTermProperty.getValue().trim(), - keywordGroupCaseSensitiveProperty.getValue(), - preferencesService.getKeywordDelimiter(), - false); - } - } else if (typeSearchProperty.getValue()) { - resultingGroup = new SearchGroup( + FieldFactory.parseField(keywordGroupSearchFieldProperty.getValue().trim()), + keywordGroupSearchTermProperty.getValue().trim(), + keywordGroupCaseSensitiveProperty.getValue()); + } else { + resultingGroup = new WordKeywordGroup( groupName, groupHierarchySelectedProperty.getValue(), - searchGroupSearchTermProperty.getValue().trim(), - searchGroupCaseSensitiveProperty.getValue(), - searchGroupRegexProperty.getValue()); - } else if (typeAutoProperty.getValue()) { - if (autoGroupKeywordsOptionProperty.getValue()) { - resultingGroup = new AutomaticKeywordGroup( - groupName, - groupHierarchySelectedProperty.getValue(), - FieldFactory.parseField(autoGroupKeywordsFieldProperty.getValue().trim()), - autoGroupKeywordsDelimiterProperty.getValue().charAt(0), - autoGroupKeywordsHierarchicalDelimiterProperty.getValue().charAt(0)); - } else { - resultingGroup = new AutomaticPersonsGroup( - groupName, - groupHierarchySelectedProperty.getValue(), - FieldFactory.parseField(autoGroupPersonsFieldProperty.getValue().trim())); - } - } else if (typeTexProperty.getValue()) { - resultingGroup = TexGroup.create( + FieldFactory.parseField(keywordGroupSearchFieldProperty.getValue().trim()), + keywordGroupSearchTermProperty.getValue().trim(), + keywordGroupCaseSensitiveProperty.getValue(), + preferencesService.getKeywordDelimiter(), + false); + } + } else if (typeSearchProperty.getValue()) { + resultingGroup = new SearchGroup( + groupName, + groupHierarchySelectedProperty.getValue(), + searchGroupSearchTermProperty.getValue().trim(), + searchGroupCaseSensitiveProperty.getValue(), + searchGroupRegexProperty.getValue()); + } else if (typeAutoProperty.getValue()) { + if (autoGroupKeywordsOptionProperty.getValue()) { + resultingGroup = new AutomaticKeywordGroup( groupName, groupHierarchySelectedProperty.getValue(), - Paths.get(texGroupFilePathProperty.getValue().trim()), - new DefaultAuxParser(new BibDatabase()), - Globals.getFileUpdateMonitor(), - currentDatabase.getMetaData()); - } - - if (resultingGroup != null) { - resultingGroup.setColor(colorProperty.getValue()); - resultingGroup.setDescription(descriptionProperty.getValue()); - resultingGroup.setIconName(iconProperty.getValue()); - return resultingGroup; + FieldFactory.parseField(autoGroupKeywordsFieldProperty.getValue().trim()), + autoGroupKeywordsDelimiterProperty.getValue().charAt(0), + autoGroupKeywordsHierarchicalDelimiterProperty.getValue().charAt(0)); } else { - return null; + resultingGroup = new AutomaticPersonsGroup( + groupName, + groupHierarchySelectedProperty.getValue(), + FieldFactory.parseField(autoGroupPersonsFieldProperty.getValue().trim())); } + } else if (typeTexProperty.getValue()) { + resultingGroup = TexGroup.create( + groupName, + groupHierarchySelectedProperty.getValue(), + Paths.get(texGroupFilePathProperty.getValue().trim()), + new DefaultAuxParser(new BibDatabase()), + Globals.getFileUpdateMonitor(), + currentDatabase.getMetaData()); + } - } catch (IllegalArgumentException | IOException exception) { - dialogService.showErrorDialogAndWait(exception.getLocalizedMessage(), exception); - return null; + if (resultingGroup != null) { + resultingGroup.setColor(colorProperty.getValue()); + resultingGroup.setDescription(descriptionProperty.getValue()); + resultingGroup.setIconName(iconProperty.getValue()); + return resultingGroup; } + + return null; + } catch (IllegalArgumentException | IOException exception) { + dialogService.showErrorDialogAndWait(exception.getLocalizedMessage(), exception); + return null; } - return null; } public void setValues() { @@ -397,69 +406,139 @@ private List getFileDirectoriesAsPaths() { return fileDirs; } - public ValidationStatus validationStatus() { return validator.getValidationStatus(); } + public ValidationStatus validationStatus() { + return validator.getValidationStatus(); + } - public ValidationStatus nameValidationStatus() { return nameValidator.getValidationStatus(); } + public ValidationStatus nameValidationStatus() { + return nameValidator.getValidationStatus(); + } - public ValidationStatus nameContainsDelimiterValidationStatus() { return nameContainsDelimiterValidator.getValidationStatus(); } + public ValidationStatus nameContainsDelimiterValidationStatus() { + return nameContainsDelimiterValidator.getValidationStatus(); + } - public ValidationStatus sameNameValidationStatus() { return sameNameValidator.getValidationStatus(); } + public ValidationStatus sameNameValidationStatus() { + return sameNameValidator.getValidationStatus(); + } - public ValidationStatus searchRegexValidationStatus() { return searchRegexValidator.getValidationStatus(); } + public ValidationStatus searchRegexValidationStatus() { + return searchRegexValidator.getValidationStatus(); + } - public ValidationStatus searchSearchTermEmptyValidationStatus() { return searchSearchTermEmptyValidator.getValidationStatus(); } + public ValidationStatus searchSearchTermEmptyValidationStatus() { + return searchSearchTermEmptyValidator.getValidationStatus(); + } - public ValidationStatus keywordRegexValidationStatus() { return keywordRegexValidator.getValidationStatus(); } + public ValidationStatus keywordRegexValidationStatus() { + return keywordRegexValidator.getValidationStatus(); + } - public ValidationStatus keywordSearchTermEmptyValidationStatus() { return keywordSearchTermEmptyValidator.getValidationStatus(); } + public ValidationStatus keywordFieldEmptyValidationStatus() { + return keywordFieldEmptyValidator.getValidationStatus(); + } - public StringProperty nameProperty() { return nameProperty; } + public ValidationStatus keywordSearchTermEmptyValidationStatus() { + return keywordSearchTermEmptyValidator.getValidationStatus(); + } - public StringProperty descriptionProperty() { return descriptionProperty; } + public StringProperty nameProperty() { + return nameProperty; + } - public StringProperty iconProperty() { return iconProperty; } + public StringProperty descriptionProperty() { + return descriptionProperty; + } - public ObjectProperty colorFieldProperty() { return colorProperty; } + public StringProperty iconProperty() { + return iconProperty; + } - public ListProperty groupHierarchyListProperty() { return groupHierarchyListProperty; } + public ObjectProperty colorFieldProperty() { + return colorProperty; + } - public ObjectProperty groupHierarchySelectedProperty() { return groupHierarchySelectedProperty; } + public ListProperty groupHierarchyListProperty() { + return groupHierarchyListProperty; + } - public BooleanProperty typeExplicitProperty() { return typeExplicitProperty; } + public ObjectProperty groupHierarchySelectedProperty() { + return groupHierarchySelectedProperty; + } - public BooleanProperty typeKeywordsProperty() { return typeKeywordsProperty; } + public BooleanProperty typeExplicitProperty() { + return typeExplicitProperty; + } - public BooleanProperty typeSearchProperty() { return typeSearchProperty; } + public BooleanProperty typeKeywordsProperty() { + return typeKeywordsProperty; + } + + public BooleanProperty typeSearchProperty() { + return typeSearchProperty; + } - public BooleanProperty typeAutoProperty() { return typeAutoProperty; } + public BooleanProperty typeAutoProperty() { + return typeAutoProperty; + } - public BooleanProperty typeTexProperty() { return typeTexProperty; } + public BooleanProperty typeTexProperty() { + return typeTexProperty; + } - public StringProperty keywordGroupSearchTermProperty() { return keywordGroupSearchTermProperty; } + public StringProperty keywordGroupSearchTermProperty() { + return keywordGroupSearchTermProperty; + } - public StringProperty keywordGroupSearchFieldProperty() { return keywordGroupSearchFieldProperty; } + public StringProperty keywordGroupSearchFieldProperty() { + return keywordGroupSearchFieldProperty; + } - public BooleanProperty keywordGroupCaseSensitiveProperty() { return keywordGroupCaseSensitiveProperty; } + public BooleanProperty keywordGroupCaseSensitiveProperty() { + return keywordGroupCaseSensitiveProperty; + } - public BooleanProperty keywordGroupRegexProperty() { return keywordGroupRegexProperty; } + public BooleanProperty keywordGroupRegexProperty() { + return keywordGroupRegexProperty; + } - public StringProperty searchGroupSearchTermProperty() { return searchGroupSearchTermProperty; } + public StringProperty searchGroupSearchTermProperty() { + return searchGroupSearchTermProperty; + } - public BooleanProperty searchGroupCaseSensitiveProperty() { return searchGroupCaseSensitiveProperty; } + public BooleanProperty searchGroupCaseSensitiveProperty() { + return searchGroupCaseSensitiveProperty; + } - public BooleanProperty searchGroupRegexProperty() { return searchGroupRegexProperty; } + public BooleanProperty searchGroupRegexProperty() { + return searchGroupRegexProperty; + } - public BooleanProperty autoGroupKeywordsOptionProperty() { return autoGroupKeywordsOptionProperty; } + public BooleanProperty autoGroupKeywordsOptionProperty() { + return autoGroupKeywordsOptionProperty; + } - public StringProperty autoGroupKeywordsFieldProperty() { return autoGroupKeywordsFieldProperty; } + public StringProperty autoGroupKeywordsFieldProperty() { + return autoGroupKeywordsFieldProperty; + } - public StringProperty autoGroupKeywordsDeliminatorProperty() { return autoGroupKeywordsDelimiterProperty; } + public StringProperty autoGroupKeywordsDeliminatorProperty() { + return autoGroupKeywordsDelimiterProperty; + } - public StringProperty autoGroupKeywordsHierarchicalDeliminatorProperty() { return autoGroupKeywordsHierarchicalDelimiterProperty; } + public StringProperty autoGroupKeywordsHierarchicalDeliminatorProperty() { + return autoGroupKeywordsHierarchicalDelimiterProperty; + } - public BooleanProperty autoGroupPersonsOptionProperty() { return autoGroupPersonsOptionProperty; } + public BooleanProperty autoGroupPersonsOptionProperty() { + return autoGroupPersonsOptionProperty; + } - public StringProperty autoGroupPersonsFieldProperty() { return autoGroupPersonsFieldProperty; } + public StringProperty autoGroupPersonsFieldProperty() { + return autoGroupPersonsFieldProperty; + } - public StringProperty texGroupFilePathProperty() { return texGroupFilePathProperty; } + public StringProperty texGroupFilePathProperty() { + return texGroupFilePathProperty; + } } diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index 0af1b17e915..306d6291454 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -2107,6 +2107,7 @@ Unable\ to\ open\ ShortScience.=Unable to open ShortScience. Shared\ database=Shared database Lookup=Lookup +Please\ enter\ a\ field\ name\ to\ search\ for\ keywords.=Please enter a field name to search for keywords. Access\ date\ of\ the\ address\ specified\ in\ the\ url\ field.=Access date of the address specified in the url field. Additional\ information\ related\ to\ the\ resource\ indicated\ by\ the\ eprint\ field.=Additional information related to the resource indicated by the eprint field. Annex\ to\ the\ eventtitle\ field.=Annex to the eventtitle field. From 956916a2b890d63fa456073b7b3b83827c9d7241 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 31 Mar 2020 22:04:38 +0200 Subject: [PATCH 044/166] Remove the option to configure to create .bib.bak (#6226) - remove obsolete method getEncodingOrDefault - simplify code for adding a "*" for a modified library --- CHANGELOG.md | 1 + src/main/java/org/jabref/gui/BasePanel.java | 7 ++++--- .../org/jabref/gui/preferences/FileTab.fxml | 1 - .../jabref/gui/preferences/FileTabView.java | 2 -- .../gui/preferences/FileTabViewModel.java | 5 ----- .../jabref/logic/exporter/SavePreferences.java | 18 +++++++++++++----- .../jabref/preferences/JabRefPreferences.java | 4 ---- src/main/resources/l10n/JabRef_en.properties | 2 -- 8 files changed, 18 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 831a593fb9c..7da4a3afa99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve ### Removed - We removed the obsolete `External programs / Open PDF` section in the preferences, as the default application to open PDFs is now set in the `Manage external file types` dialog. [#6130](https://github.com/JabRef/jabref/pull/6130) +- We removed the option to configure whether a `.bib.bak` file should be generated upon save. It is now always enabled. Documentation at . [#6092](https://github.com/JabRef/jabref/issues/6092) ## [5.0] – 2020-03-06 diff --git a/src/main/java/org/jabref/gui/BasePanel.java b/src/main/java/org/jabref/gui/BasePanel.java index 934f93c8133..266065520b4 100644 --- a/src/main/java/org/jabref/gui/BasePanel.java +++ b/src/main/java/org/jabref/gui/BasePanel.java @@ -149,9 +149,10 @@ public String getTabTitle() { if (databaseLocation == DatabaseLocation.LOCAL) { if (this.bibDatabaseContext.getDatabasePath().isPresent()) { - // check if file is modified - String changeFlag = isModified() && !isAutosaveEnabled ? "*" : ""; - title.append(this.bibDatabaseContext.getDatabasePath().get().getFileName()).append(changeFlag); + title.append(this.bibDatabaseContext.getDatabasePath().get().getFileName()); + if (isModified() && !isAutosaveEnabled) { + title.append("*"); + } } else { title.append(Localization.lang("untitled")); diff --git a/src/main/java/org/jabref/gui/preferences/FileTab.fxml b/src/main/java/org/jabref/gui/preferences/FileTab.fxml index 5fddfd20114..dd1f0d4c949 100644 --- a/src/main/java/org/jabref/gui/preferences/FileTab.fxml +++ b/src/main/java/org/jabref/gui/preferences/FileTab.fxml @@ -20,7 +20,6 @@

kjP4f%}lKFR2x>!2XW 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 j`> Date: Thu, 2 Apr 2020 21:44:49 +0200 Subject: [PATCH 050/166] Update GitVersion from 5.1.3 to 5.2.4 (#6147) * Update git tools from 5.1.3 to 5.2.4 * Use build cache from other OS as fallback --- .github/workflows/deployment.yml | 48 ++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index 1f244e61c89..03d6b558c2d 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -25,15 +25,15 @@ jobs: matrix: os: [ubuntu-latest, windows-latest, macOS-latest] include: - - os: ubuntu-latest - displayName: linux - archivePortable: tar -c -C build/distribution JabRef | pigz --rsyncable > build/distribution/JabRef-portable_linux.tar.gz && rm -R build/distribution/JabRef - - os: windows-latest - displayName: windows - archivePortable: 7z a -r build/distribution/JabRef-portable_windows.zip ./build/distribution/JabRef && rm -R build/distribution/JabRef - - os: macOS-latest - displayName: macOS - archivePortable: brew install pigz && tar -c -C build/distribution JabRef.app | pigz --rsyncable > build/distribution/JabRef-portable_macos.tar.gz && rm -R build/distribution/JabRef.app + - os: ubuntu-latest + displayName: linux + archivePortable: tar -c -C build/distribution JabRef | pigz --rsyncable > build/distribution/JabRef-portable_linux.tar.gz && rm -R build/distribution/JabRef + - os: windows-latest + displayName: windows + archivePortable: 7z a -r build/distribution/JabRef-portable_windows.zip ./build/distribution/JabRef && rm -R build/distribution/JabRef + - os: macOS-latest + displayName: macOS + archivePortable: brew install pigz && tar -c -C build/distribution JabRef.app | pigz --rsyncable > build/distribution/JabRef-portable_macos.tar.gz && rm -R build/distribution/JabRef.app runs-on: ${{ matrix.os }} name: Create installer and portable version for ${{ matrix.displayName }} @@ -44,31 +44,37 @@ jobs: - name: Fetch all history for all tags and branches run: git fetch --prune --unshallow - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v0.9.1 + uses: gittools/actions/gitversion/setup@v0.9.2 with: - versionSpec: '5.1.3' + versionSpec: '5.2.x' - name: Run GitVersion id: gitversion - uses: gittools/actions/gitversion/execute@v0.9.1 + uses: gittools/actions/gitversion/execute@v0.9.2 - name: Set up JDK uses: actions/setup-java@v1 with: java-version: 14 - # configuration based on https://github.com/actions/cache/blob/master/examples.md#java---gradle - uses: actions/cache@v1 name: Restore gradle cache with: path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} + key: ${{ runner.os }}-gradle-cache-${{ hashFiles('**/*.gradle') }} + # in case there is no cache for the current OS, fall back to any other OS restore-keys: | - ${{ runner.OS }}-gradle-${{ env.cache-name }}- - ${{ runner.OS }}-gradle- - ${{ runner.OS }}- + ${{ runner.os }}-gradle-cache- + Linux-gradle-cache-${{ hashFiles('**/*.gradle') }} + Windows-gradle-cache-${{ hashFiles('**/*.gradle') }} + macOS-gradle-cache-${{ hashFiles('**/*.gradle') }} - uses: actions/cache@v1 name: Cache gradle wrapper with: path: ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} + key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} + # in case there is no cache for the current OS, fall back to any other OS + restore-keys: | + Linux-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} + Windows-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} + macOS-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} - name: Build runtime image run: ./gradlew -PprojVersion="${{ steps.gitversion.outputs.AssemblySemVer }}" -PprojVersionInfo="${{ steps.gitversion.outputs.InformationalVersion }}" jlinkZip - name: Build installer @@ -109,12 +115,12 @@ jobs: - name: Fetch all history for all tags and branches run: git fetch --prune --unshallow - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v0.9.1 + uses: gittools/actions/gitversion/setup@v0.9.2 with: - versionSpec: '5.1.3' + versionSpec: '5.2.x' - name: Run GitVersion id: gitversion - uses: gittools/actions/gitversion/execute@v0.9.1 + uses: gittools/actions/gitversion/execute@v0.9.2 - name: Get linux binaries uses: actions/download-artifact@master with: From d4e46b099faaab5787c6df89898014a1ec34a61c Mon Sep 17 00:00:00 2001 From: AlexanderGirgis <11259344+AlexanderGirgis@users.noreply.github.com> Date: Sat, 4 Apr 2020 00:17:27 +0200 Subject: [PATCH 051/166] Allow basic markup syntax custom previews (#6232) Add MarkdownFormatter using https://github.com/vsch/flexmark-java/ to format markdown. To configure Markdown in custom previews add the "Markdown" formatter. Markdown is enabled by default for the comment field as requested in https://github.com/JabRef/jabref/issues/6194 --- CHANGELOG.md | 1 + build.gradle | 1 + external-libraries.txt | 5 ++ src/main/java/module-info.java | 6 ++ .../org/jabref/logic/layout/LayoutEntry.java | 3 + .../layout/format/MarkdownFormatter.java | 41 ++++++++++ .../migrations/PreferencesMigrations.java | 7 ++ .../jabref/preferences/JabRefPreferences.java | 2 +- .../layout/format/MarkdownFormatterTest.java | 57 ++++++++++++++ .../migrations/PreferencesMigrationsTest.java | 74 ++++++++++++++++++- 10 files changed, 194 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/jabref/logic/layout/format/MarkdownFormatter.java create mode 100644 src/test/java/org/jabref/logic/layout/format/MarkdownFormatterTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 9aaaa4312fc..d713bed9d8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We added support for searching ShortScience for an entry through the user's browser. [#6018](https://github.com/JabRef/jabref/pull/6018) - We updated EditionChecker to permit edition to start with a number. [#6144](https://github.com/JabRef/jabref/issues/6144) - We added tooltips for most fields in the entry editor containing a short description. [#5847](https://github.com/JabRef/jabref/issues/5847) +- We added support for basic markdown in custom formatted previews [#6194](https://github.com/JabRef/jabref/issues/6194) ### Changed diff --git a/build.gradle b/build.gradle index 0e0031b434e..ebb001d5086 100644 --- a/build.gradle +++ b/build.gradle @@ -195,6 +195,7 @@ dependencies { exclude module: "log4j-core" } + implementation 'com.vladsch.flexmark:flexmark-all:0.60.2' testImplementation 'io.github.classgraph:classgraph:4.8.66' testImplementation 'org.junit.jupiter:junit-jupiter:5.6.1' diff --git a/external-libraries.txt b/external-libraries.txt index f67e09af7fd..05e11258f7d 100644 --- a/external-libraries.txt +++ b/external-libraries.txt @@ -334,6 +334,11 @@ Project: OpenOffice.org URL: http://www.openoffice.org/api/SDK License: Apache-2.0 +Id: com.vladsch.flexmark:flexmark-all +Project: flexmark-java +URL: https://github.com/vsch/flexmark-java +License: BSD-2-Clause + ## Sorted list of runtime dependencies output by gradle ```text diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 91b721e8a4a..6bbf87db090 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -82,4 +82,10 @@ requires org.antlr.antlr4.runtime; requires flowless; requires org.apache.tika.core; + + requires flexmark; + requires flexmark.ext.gfm.strikethrough; + requires flexmark.ext.gfm.tasklist; + requires flexmark.util.ast; + requires flexmark.util.data; } diff --git a/src/main/java/org/jabref/logic/layout/LayoutEntry.java b/src/main/java/org/jabref/logic/layout/LayoutEntry.java index ec7d6067a7e..ee6632a7046 100644 --- a/src/main/java/org/jabref/logic/layout/LayoutEntry.java +++ b/src/main/java/org/jabref/logic/layout/LayoutEntry.java @@ -57,6 +57,7 @@ import org.jabref.logic.layout.format.JournalAbbreviator; import org.jabref.logic.layout.format.LastPage; import org.jabref.logic.layout.format.LatexToUnicodeFormatter; +import org.jabref.logic.layout.format.MarkdownFormatter; import org.jabref.logic.layout.format.NameFormatter; import org.jabref.logic.layout.format.NoSpaceBetweenAbbreviations; import org.jabref.logic.layout.format.NotFoundFormatter; @@ -536,6 +537,8 @@ private LayoutFormatter getLayoutFormatterByName(String name) { return new WrapContent(); case "WrapFileLinks": return new WrapFileLinks(prefs.getFileLinkPreferences()); + case "Markdown": + return new MarkdownFormatter(); default: return null; } diff --git a/src/main/java/org/jabref/logic/layout/format/MarkdownFormatter.java b/src/main/java/org/jabref/logic/layout/format/MarkdownFormatter.java new file mode 100644 index 00000000000..e8eadf2bded --- /dev/null +++ b/src/main/java/org/jabref/logic/layout/format/MarkdownFormatter.java @@ -0,0 +1,41 @@ +package org.jabref.logic.layout.format; + +import java.util.List; +import java.util.Objects; + +import org.jabref.logic.layout.LayoutFormatter; + +import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughExtension; +import com.vladsch.flexmark.ext.gfm.tasklist.TaskListExtension; +import com.vladsch.flexmark.html.HtmlRenderer; +import com.vladsch.flexmark.parser.Parser; +import com.vladsch.flexmark.util.ast.Node; +import com.vladsch.flexmark.util.data.MutableDataSet; + +public class MarkdownFormatter implements LayoutFormatter { + + private final Parser parser; + private final HtmlRenderer renderer; + + public MarkdownFormatter() { + MutableDataSet options = new MutableDataSet(); + options.set(Parser.EXTENSIONS, List.of( + StrikethroughExtension.create(), + TaskListExtension.create() + )); + + parser = Parser.builder(options).build(); + renderer = HtmlRenderer.builder(options).build(); + } + + @Override + public String format(final String fieldText) { + Objects.requireNonNull(fieldText, "Field Text should not be null, when handed to formatter"); + + Node document = parser.parse(fieldText); + String html = renderer.render(document); + + // workaround HTMLChars transforming "\n" into
by returning a one liner + return html.replaceAll("\\r\\n|\\r|\\n", " ").trim(); + } +} diff --git a/src/main/java/org/jabref/migrations/PreferencesMigrations.java b/src/main/java/org/jabref/migrations/PreferencesMigrations.java index d841a6c0c08..27f6c67fed3 100644 --- a/src/main/java/org/jabref/migrations/PreferencesMigrations.java +++ b/src/main/java/org/jabref/migrations/PreferencesMigrations.java @@ -49,6 +49,7 @@ public static void runMigrations() { addCrossRefRelatedFieldsForAutoComplete(Globals.prefs); upgradePreviewStyleFromReviewToComment(Globals.prefs); upgradeColumnPreferences(Globals.prefs); + upgradePreviewStyleAllowMarkdown(Globals.prefs); } /** @@ -301,6 +302,12 @@ static void upgradePreviewStyleFromReviewToComment(JabRefPreferences prefs) { prefs.setPreviewStyle(migratedStyle); } + static void upgradePreviewStyleAllowMarkdown(JabRefPreferences prefs) { + String currentPreviewStyle = prefs.getPreviewStyle(); + String migratedStyle = currentPreviewStyle.replace("\\format[HTMLChars]{\\comment}", "\\format[Markdown,HTMLChars]{\\comment}"); + prefs.setPreviewStyle(migratedStyle); + } + /** * The former preferences default of columns was a simple list of strings ("author;title;year;..."). Since 5.0 * the preferences store the type of the column too, so that the formerly hardwired columns like the graphic groups diff --git a/src/main/java/org/jabref/preferences/JabRefPreferences.java b/src/main/java/org/jabref/preferences/JabRefPreferences.java index c3cc1adef51..45326331cba 100644 --- a/src/main/java/org/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/org/jabref/preferences/JabRefPreferences.java @@ -672,7 +672,7 @@ private JabRefPreferences() { + "\\begin{year}\\year\\end{year}\\begin{volume}, \\volume\\end{volume}" + "\\begin{pages}, \\format[FormatPagesForHTML]{\\pages} \\end{pages}__NEWLINE__" + "\\begin{abstract}

Abstract: \\format[HTMLChars]{\\abstract} \\end{abstract}__NEWLINE__" - + "\\begin{comment}

Comment: \\format[HTMLChars]{\\comment} \\end{comment}" + + "\\begin{comment}

Comment: \\format[Markdown,HTMLChars]{\\comment} \\end{comment}" + "__NEWLINE__

"); // set default theme diff --git a/src/test/java/org/jabref/logic/layout/format/MarkdownFormatterTest.java b/src/test/java/org/jabref/logic/layout/format/MarkdownFormatterTest.java new file mode 100644 index 00000000000..595bc6fcc1d --- /dev/null +++ b/src/test/java/org/jabref/logic/layout/format/MarkdownFormatterTest.java @@ -0,0 +1,57 @@ +package org.jabref.logic.layout.format; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class MarkdownFormatterTest { + + private MarkdownFormatter markdownFormatter; + + @BeforeEach + void setUp() { + markdownFormatter = new MarkdownFormatter(); + } + + @Test + void formatWhenFormattingPlainTextThenReturnsTextWrappedInParagraph() { + assertEquals("

Hello World

", markdownFormatter.format("Hello World")); + } + + @Test + void formatWhenFormattingComplexMarkupThenReturnsOnlyOneLine() { + assertFalse(markdownFormatter.format("Markup\n\n* list item one\n* list item 2\n\n rest").contains("\n")); + } + + @Test + void formatWhenFormattingEmptyStringThenReturnsEmptyString() { + assertEquals("", markdownFormatter.format("")); + } + + @Test + void formatWhenFormattingNullThenThrowsException() { + Exception exception = assertThrows(NullPointerException.class, () -> markdownFormatter.format(null)); + assertEquals("Field Text should not be null, when handed to formatter", exception.getMessage()); + } + + @Test + void formatWhenMarkupContainingStrikethroughThenContainsMatchingDel() { + // Only test strikethrough extension + assertTrue(markdownFormatter.format("a ~~b~~ b").contains("b")); + } + + @Test + void formatWhenMarkupContainingTaskListThenContainsFormattedTaskList() { + String actual = markdownFormatter.format("Some text\n" + + "* [ ] open task\n" + + "* [x] closed task\n\n" + + "some other text"); + // Only test list items + assertTrue(actual.contains("
  •  open task
  • ")); + assertTrue(actual.contains("
  •  closed task
  • ")); + } +} diff --git a/src/test/java/org/jabref/migrations/PreferencesMigrationsTest.java b/src/test/java/org/jabref/migrations/PreferencesMigrationsTest.java index 950dc132d47..140aa4d3cae 100644 --- a/src/test/java/org/jabref/migrations/PreferencesMigrationsTest.java +++ b/src/test/java/org/jabref/migrations/PreferencesMigrationsTest.java @@ -22,7 +22,7 @@ class PreferencesMigrationsTest { private final String[] oldStylePatterns = new String[]{"\\bibtexkey", "\\bibtexkey\\begin{title} - \\format[RemoveBrackets]{\\title}\\end{title}"}; private final String[] newStylePatterns = new String[]{"[bibtexkey]", - "[bibtexkey] - [title]"}; + "[bibtexkey] - [title]"}; @BeforeEach void setUp() { @@ -118,6 +118,76 @@ void testPreviewStyle() { verify(prefs).setPreviewStyle(newPreviewStyle); } + @Test + void upgradePreviewStyleAllowMarkupDefault() { + String oldPreviewStyle = "" + + "\\bibtextype\\begin{bibtexkey} (\\bibtexkey)" + + "\\end{bibtexkey}
    __NEWLINE__" + + "\\begin{author} \\format[Authors(LastFirst,Initials,Semicolon,Amp),HTMLChars]{\\author}
    \\end{author}__NEWLINE__" + + "\\begin{editor} \\format[Authors(LastFirst,Initials,Semicolon,Amp),HTMLChars]{\\editor} " + + "(\\format[IfPlural(Eds.,Ed.)]{\\editor})
    \\end{editor}__NEWLINE__" + + "\\begin{title} \\format[HTMLChars]{\\title} \\end{title}
    __NEWLINE__" + + "\\begin{chapter} \\format[HTMLChars]{\\chapter}
    \\end{chapter}__NEWLINE__" + + "\\begin{journal} \\format[HTMLChars]{\\journal}, \\end{journal}__NEWLINE__" + // Include the booktitle field for @inproceedings, @proceedings, etc. + + "\\begin{booktitle} \\format[HTMLChars]{\\booktitle}, \\end{booktitle}__NEWLINE__" + + "\\begin{school} \\format[HTMLChars]{\\school}, \\end{school}__NEWLINE__" + + "\\begin{institution} \\format[HTMLChars]{\\institution}, \\end{institution}__NEWLINE__" + + "\\begin{publisher} \\format[HTMLChars]{\\publisher}, \\end{publisher}__NEWLINE__" + + "\\begin{year}\\year\\end{year}\\begin{volume}, \\volume\\end{volume}" + + "\\begin{pages}, \\format[FormatPagesForHTML]{\\pages} \\end{pages}__NEWLINE__" + + "\\begin{abstract}

    Abstract: \\format[HTMLChars]{\\abstract} \\end{abstract}__NEWLINE__" + + "\\begin{comment}

    Comment: \\format[HTMLChars]{\\comment} \\end{comment}" + + "__NEWLINE__

    "; + + String newPreviewStyle = "" + + "\\bibtextype\\begin{bibtexkey} (\\bibtexkey)" + + "\\end{bibtexkey}
    __NEWLINE__" + + "\\begin{author} \\format[Authors(LastFirst,Initials,Semicolon,Amp),HTMLChars]{\\author}
    \\end{author}__NEWLINE__" + + "\\begin{editor} \\format[Authors(LastFirst,Initials,Semicolon,Amp),HTMLChars]{\\editor} " + + "(\\format[IfPlural(Eds.,Ed.)]{\\editor})
    \\end{editor}__NEWLINE__" + + "\\begin{title} \\format[HTMLChars]{\\title} \\end{title}
    __NEWLINE__" + + "\\begin{chapter} \\format[HTMLChars]{\\chapter}
    \\end{chapter}__NEWLINE__" + + "\\begin{journal} \\format[HTMLChars]{\\journal}, \\end{journal}__NEWLINE__" + // Include the booktitle field for @inproceedings, @proceedings, etc. + + "\\begin{booktitle} \\format[HTMLChars]{\\booktitle}, \\end{booktitle}__NEWLINE__" + + "\\begin{school} \\format[HTMLChars]{\\school}, \\end{school}__NEWLINE__" + + "\\begin{institution} \\format[HTMLChars]{\\institution}, \\end{institution}__NEWLINE__" + + "\\begin{publisher} \\format[HTMLChars]{\\publisher}, \\end{publisher}__NEWLINE__" + + "\\begin{year}\\year\\end{year}\\begin{volume}, \\volume\\end{volume}" + + "\\begin{pages}, \\format[FormatPagesForHTML]{\\pages} \\end{pages}__NEWLINE__" + + "\\begin{abstract}

    Abstract: \\format[HTMLChars]{\\abstract} \\end{abstract}__NEWLINE__" + + "\\begin{comment}

    Comment: \\format[Markdown,HTMLChars]{\\comment} \\end{comment}" + + "__NEWLINE__

    "; + + prefs.setPreviewStyle(oldPreviewStyle); + when(prefs.getPreviewStyle()).thenReturn(oldPreviewStyle); + + PreferencesMigrations.upgradePreviewStyleAllowMarkdown(prefs); + + verify(prefs).setPreviewStyle(newPreviewStyle); + } + + @Test + void upgradePreviewStyleAllowMarkupCustomized() { + String oldPreviewStyle = "" + + "My highly customized format only using comments:
    " + + "\\begin{comment} Something: \\format[HTMLChars]{\\comment} special \\end{comment}" + + "__NEWLINE__

    "; + + String newPreviewStyle = "" + + "My highly customized format only using comments:
    " + + "\\begin{comment} Something: \\format[Markdown,HTMLChars]{\\comment} special \\end{comment}" + + "__NEWLINE__

    "; + + prefs.setPreviewStyle(oldPreviewStyle); + when(prefs.getPreviewStyle()).thenReturn(oldPreviewStyle); + + PreferencesMigrations.upgradePreviewStyleAllowMarkdown(prefs); + + verify(prefs).setPreviewStyle(newPreviewStyle); + } + @Test void testUpgradeColumnPreferencesAlreadyMigrated() { List columnNames = Arrays.asList("entrytype", "author/editor", "title", "year", "journal/booktitle", "bibtexkey", "printed"); @@ -138,7 +208,7 @@ void testUpgradeColumnPreferencesFromWithoutTypes() { List columnWidths = Arrays.asList("75", "300", "470", "60", "130", "100", "30"); List updatedNames = Arrays.asList("groups", "files", "linked_id", "field:entrytype", "field:author/editor", "field:title", "field:year", "field:journal/booktitle", "field:bibtexkey", "special:printed"); List updatedWidths = Arrays.asList("28", "28", "28", "75", "300", "470", "60", "130", "100", "30"); - List newSortTypes = Arrays.asList("ASCENDING","ASCENDING","ASCENDING","ASCENDING","ASCENDING","ASCENDING","ASCENDING","ASCENDING","ASCENDING","ASCENDING"); + List newSortTypes = Arrays.asList("ASCENDING", "ASCENDING", "ASCENDING", "ASCENDING", "ASCENDING", "ASCENDING", "ASCENDING", "ASCENDING", "ASCENDING", "ASCENDING"); when(prefs.getStringList(JabRefPreferences.COLUMN_NAMES)).thenReturn(columnNames); when(prefs.getStringList(JabRefPreferences.COLUMN_WIDTHS)).thenReturn(columnWidths); From 5cef7626ed8de9676672a072366f20c5ca3aba48 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sat, 4 Apr 2020 00:31:51 +0200 Subject: [PATCH 052/166] Update AUTHORS --- .mailmap | 5 +++++ AUTHORS | 12 ++++++++++++ scripts/generate-authors.sh | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/.mailmap b/.mailmap index 2345c1529e1..ccfae69b00e 100644 --- a/.mailmap +++ b/.mailmap @@ -188,3 +188,8 @@ Victor Michelan P4trice <34972281+P4trice@users.noreply.github.com> Julien Bénard <50318255+Julien29121998@users.noreply.github.com> Alexsandro Lauber +Alexander Girgis <11259344+AlexanderGirgis@users.noreply.github.com> +Christoph Treude +Goutam Lavudiya +Shikun Xiong <53288073+ShikunXiong@users.noreply.github.com> +Fabiani Giovanni diff --git a/AUTHORS b/AUTHORS index 67b6567500e..dfde5b567dd 100644 --- a/AUTHORS +++ b/AUTHORS @@ -14,6 +14,7 @@ Aleksandrs Gusevs Alessio Pollero Alex Montgomery Alex Tarrix +Alexander Girgis Alexis Gallagher Alexsandro Lauber Ali Ayan @@ -35,6 +36,7 @@ Antonio Ribeiro Arno Blouin Arthur Fröhlich Atul Kaushik +August Janse Ayachi Nene Bartosz J. Kaczkowski Bartłomiej Dach @@ -64,6 +66,7 @@ Christian Kopf Christoph Braun Christoph Hochreiner Christoph Schwentker +Christoph Treude Christopher Oezbek Christopher S. Lester conorfos @@ -76,6 +79,7 @@ Daniel Rodrigues Daniel Svärd David Gleich David Méndez +David Stevens David Weitzman Dawid Motyka Dawid Owoc @@ -91,6 +95,7 @@ Dominik Waßenhoven Douglas Nassif Roma Junior Eduard Braun Eduardo Greco +eetian Egon Willighagen Eiswindyeti Ellen Reitmayr @@ -102,6 +107,7 @@ Escoul Ethan Harris Fabian Bauer Fabian Bieker +Fabiani Giovanni Fabrice Dessaint Fancy Zhang Fedor Bezrukov @@ -122,6 +128,7 @@ Frédéric Darboux Galileo Sartor Geoffrey Taerim Kim Gert Renckens +Goutam Lavudiya Gregor Herrmann guenesaydin Guillaume Gardey @@ -150,6 +157,7 @@ Johannes Manner John David John Relph John Zedlewski +Jonas Lähnemann Jonathan Powell Jong-Ho Shinn Jorge Tornero @@ -283,14 +291,17 @@ Saivert Sam Robertson Samin Muhammad Ridwanul Karim Samiya Caur +Sandro Speth Sascha Hunold Sascha Zeller Saulius Gražulis Saverio Mori +Schaggerlag Scott Pogatetz Scott Townsend Seb Wills Serban Iordache +Shikun Xiong Shitikanth shubhamatlani Simon Harrer @@ -315,6 +326,7 @@ systemoperator Thiago Toledo Thomas Arildsen Thomas F. Duellmann +Thomas Hu Thomas Ilsche Thorsten Dahlheimer Tim Kilian diff --git a/scripts/generate-authors.sh b/scripts/generate-authors.sh index 64a56329233..1b8b07a488c 100755 --- a/scripts/generate-authors.sh +++ b/scripts/generate-authors.sh @@ -58,6 +58,6 @@ cd "$(dirname "$(readlink -f "$BASH_SOURCE")")/.." # co-authors coauthors=$(git log -i --grep=co-authored-by | grep -i "co-authored-by" | sed "s/.*co-authored-by: \(.*\)/\1/I" | sed "s/ <.*//") - echo -e "$authors\n$(git log --format='%aN')\n$coauthors" | grep -v "@Siedlerchr" | grep -v "^Christoph$" | grep -v "oscargus" | grep -v "dependabot" | grep -v "github actions" | grep -v "github actions" | grep -v "igorsteinmacher" | grep -v "halirutan" | grep -v "matthiasgeiger" | grep -v "Gitter Badger" | LC_ALL=C.UTF-8 sort --unique --ignore-case + echo -e "$authors\n$(git log --format='%aN')\n$coauthors" | grep -v "JabRef" | grep -v "@Siedlerchr" | grep -v "^Christoph$" | grep -v "oscargus" | grep -v "dependabot" | grep -v "github actions" | grep -v "github actions" | grep -v "igorsteinmacher" | grep -v "halirutan" | grep -v "matthiasgeiger" | grep -v "Gitter Badger" | LC_ALL=C.UTF-8 sort --unique --ignore-case } > AUTHORS From a546c32c8acb9a7ae6237e971c4bb777c7c910c3 Mon Sep 17 00:00:00 2001 From: dimitra-karadima Date: Sat, 4 Apr 2020 14:46:48 +0300 Subject: [PATCH 053/166] Refactor tooltip for #6074 Add the following changes: -refactor the tooltip to prevent display issues -check if the entry type is StandardEntryType with instance of -use quotes to describe another entry type in the tooltip's description --- .../java/org/jabref/gui/EntryTypeView.java | 46 ++++++++++--------- src/main/resources/l10n/JabRef_en.properties | 32 ++++++------- 2 files changed, 40 insertions(+), 38 deletions(-) diff --git a/src/main/java/org/jabref/gui/EntryTypeView.java b/src/main/java/org/jabref/gui/EntryTypeView.java index 5bc6aea6c82..cd8297a0bdb 100644 --- a/src/main/java/org/jabref/gui/EntryTypeView.java +++ b/src/main/java/org/jabref/gui/EntryTypeView.java @@ -14,6 +14,7 @@ import javafx.scene.control.TitledPane; import javafx.scene.control.Tooltip; import javafx.scene.layout.FlowPane; +import javafx.stage.Screen; import org.jabref.Globals; import org.jabref.gui.util.BaseDialog; @@ -98,8 +99,11 @@ private void addEntriesToPane(FlowPane pane, Collection String description = getDescription(entryType); if (StringUtil.isNotBlank(description)) { - Tooltip tooltip = new Tooltip(); - tooltip.setText(description); + Screen currentScreen = Screen.getPrimary(); + double maxWidth = currentScreen.getBounds().getWidth(); + Tooltip tooltip = new Tooltip(description); + tooltip.setMaxWidth((maxWidth * 2) / 3); + tooltip.setWrapText(true); entryButton.setTooltip(tooltip); } } @@ -184,8 +188,7 @@ private void setEntryTypeForReturnAndClose(Optional entryType) { //since bibtex is a subset of biblatex and biblatex is better documented. public String getDescription(BibEntryType selectedType) { EntryType entryType = selectedType.getType(); - try { - StandardEntryType entry = (StandardEntryType) entryType; + if (entryType instanceof StandardEntryType entry) { switch (entry) { case Article -> { return Localization.lang("An article in a journal, magazine, newspaper, or other periodical which forms a self-contained unit with its own title."); @@ -200,7 +203,7 @@ public String getDescription(BibEntryType selectedType) { return Localization.lang("A single-volume collection with multiple, self-contained contributions by distinct authors which have their own title. The work as a whole has no overall author but it will usually have an editor."); } case Conference -> { - return Localization.lang("A legacy alias for inproceedings."); + return Localization.lang("A legacy alias for \"InProceedings\"."); } case InBook -> { return Localization.lang("A part of a book which forms a self-contained unit with its own title."); @@ -215,40 +218,40 @@ public String getDescription(BibEntryType selectedType) { return Localization.lang("Technical or other documentation, not necessarily in printed form."); } case MastersThesis -> { - return Localization.lang("Similar to thesis except that the type field is optional and defaults to the localised term Master's thesis."); + return Localization.lang("Similar to \"Thesis\" except that the type field is optional and defaults to the localised term Master's thesis."); } case Misc -> { return Localization.lang("A fallback type for entries which do not fit into any other category."); } case PhdThesis -> { - return Localization.lang("Similar to thesis except that the type field is optional and defaults to the localised term PhD thesis."); + return Localization.lang("Similar to \"Thesis\" except that the type field is optional and defaults to the localised term PhD thesis."); } case Proceedings -> { - return Localization.lang("A single-volume conference proceedings. This type is very similar to collection."); + return Localization.lang("A single-volume conference proceedings. This type is very similar to \"Collection\"."); } case TechReport -> { - return Localization.lang("Similar to report except that the type field is optional and defaults to the localised term technical report."); + return Localization.lang("Similar to \"Report\" except that the type field is optional and defaults to the localised term technical report."); } case Unpublished -> { return Localization.lang("A work with an author and a title which has not been formally published, such as a manuscript or the script of a talk."); } case BookInBook -> { - return Localization.lang("This type is similar to inbook but intended for works originally published as a stand-alone book."); + return Localization.lang("This type is similar to \"InBook\" but intended for works originally published as a stand-alone book."); } case InReference -> { - return Localization.lang("An article in a work of reference. This is a more specific variant of the generic incollection entry type."); + return Localization.lang("An article in a work of reference. This is a more specific variant of the generic \"InCollection\" entry type."); } case MvBook -> { - return Localization.lang("A multi-volume book."); + return Localization.lang("A multi-volume \"Book\"."); } case MvCollection -> { - return Localization.lang("A multi-volume collection."); + return Localization.lang("A multi-volume \"Collection\"."); } case MvProceedings -> { - return Localization.lang("A multi-volume proceedings entry."); + return Localization.lang("A multi-volume \"Proceedings\" entry."); } case MvReference -> { - return Localization.lang("A multi-volume reference entry. The standard styles will treat this entry type as an alias for mvcollection."); + return Localization.lang("A multi-volume \"Reference\" entry. The standard styles will treat this entry type as an alias for \"MvCollection\"."); } case Online -> { return Localization.lang("This entry type is intended for sources such as web sites which are intrinsically online resources."); @@ -263,22 +266,22 @@ public String getDescription(BibEntryType selectedType) { return Localization.lang("An entry set is a group of entries which are cited as a single reference and listed as a single item in the bibliography."); } case SuppBook -> { - return Localization.lang("Supplemental material in a book. This type is provided for elements such as prefaces, introductions, forewords, afterwords, etc. which often have a generic title only."); + return Localization.lang("Supplemental material in a \"Book\". This type is provided for elements such as prefaces, introductions, forewords, afterwords, etc. which often have a generic title only."); } case SuppCollection -> { - return Localization.lang("Supplemental material in a collection."); + return Localization.lang("Supplemental material in a \"Collection\"."); } case SuppPeriodical -> { - return Localization.lang("Supplemental material in a periodical. This type may be useful when referring to items such as regular columns, obituaries, letters to the editor, etc. which only have a generic title."); + return Localization.lang("Supplemental material in a \"Periodical\". This type may be useful when referring to items such as regular columns, obituaries, letters to the editor, etc. which only have a generic title."); } case Thesis -> { return Localization.lang("A thesis written for an educational institution to satisfy the requirements for a degree."); } case WWW -> { - return Localization.lang("An alias for online, provided for jurabib compatibility."); + return Localization.lang("An alias for \"Online\", provided for jurabib compatibility."); } case Software -> { - return Localization.lang("Computer software. The standard styles will treat this entry type as an alias for misc."); + return Localization.lang("Computer software. The standard styles will treat this entry type as an alias for \"Misc\"."); } case DATESET -> { return Localization.lang("A data set or a similar collection of (mostly) raw data."); @@ -287,10 +290,9 @@ public String getDescription(BibEntryType selectedType) { return ""; } } - } catch (Exception e) { + } else { return ""; } - } } diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index f28279d40fd..6def139723d 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -2174,31 +2174,31 @@ An\ article\ in\ a\ journal,\ magazine,\ newspaper,\ or\ other\ periodical\ whic A\ single-volume\ book\ with\ one\ or\ more\ authors\ where\ the\ authors\ share\ credit\ for\ the\ work\ as\ a\ whole.=A single-volume book with one or more authors where the authors share credit for the work as a whole. A\ book-like\ work\ without\ a\ formal\ publisher\ or\ sponsoring\ institution.=A book-like work without a formal publisher or sponsoring institution. A\ single-volume\ collection\ with\ multiple,\ self-contained\ contributions\ by\ distinct\ authors\ which\ have\ their\ own\ title.\ The\ work\ as\ a\ whole\ has\ no\ overall\ author\ but\ it\ will\ usually\ have\ an\ editor.=A single-volume collection with multiple, self-contained contributions by distinct authors which have their own title. The work as a whole has no overall author but it will usually have an editor. -A\ legacy\ alias\ for\ inproceedings.=A legacy alias for inproceedings. +A\ legacy\ alias\ for\ "InProceedings".=A legacy alias for "InProceedings". A\ part\ of\ a\ book\ which\ forms\ a\ self-contained\ unit\ with\ its\ own\ title.=A part of a book which forms a self-contained unit with its own title. A\ contribution\ to\ a\ collection\ which\ forms\ a\ self-contained\ unit\ with\ a\ distinct\ author\ and\ title.=A contribution to a collection which forms a self-contained unit with a distinct author and title. An\ article\ in\ a\ conference\ proceedings.=An article in a conference proceedings. Technical\ or\ other\ documentation,\ not\ necessarily\ in\ printed\ form.=Technical or other documentation, not necessarily in printed form. -Similar\ to\ thesis\ except\ that\ the\ type\ field\ is\ optional\ and\ defaults\ to\ the\ localised\ term\ Master's\ thesis.=Similar to thesis except that the type field is optional and defaults to the localised term Master's thesis. +Similar\ to\ "Thesis"\ except\ that\ the\ type\ field\ is\ optional\ and\ defaults\ to\ the\ localised\ term\ Master's\ thesis.=Similar to "Thesis" except that the type field is optional and defaults to the localised term Master's thesis. A\ fallback\ type\ for\ entries\ which\ do\ not\ fit\ into\ any\ other\ category.=A fallback type for entries which do not fit into any other category. -Similar\ to\ thesis\ except\ that\ the\ type\ field\ is\ optional\ and\ defaults\ to\ the\ localised\ term\ PhD\ thesis.=Similar to thesis except that the type field is optional and defaults to the localised term PhD thesis. -A\ single-volume\ conference\ proceedings.\ This\ type\ is\ very\ similar\ to\ collection.=A single-volume conference proceedings. This type is very similar to collection. -Similar\ to\ report\ except\ that\ the\ type\ field\ is\ optional\ and\ defaults\ to\ the\ localised\ term\ technical\ report.=Similar to report except that the type field is optional and defaults to the localised term technical report. +Similar\ to\ "Thesis"\ except\ that\ the\ type\ field\ is\ optional\ and\ defaults\ to\ the\ localised\ term\ PhD\ thesis.=Similar to "Thesis" except that the type field is optional and defaults to the localised term PhD thesis. +A\ single-volume\ conference\ proceedings.\ This\ type\ is\ very\ similar\ to\ "Collection".=A single-volume conference proceedings. This type is very similar to "Collection". +Similar\ to\ "Report"\ except\ that\ the\ type\ field\ is\ optional\ and\ defaults\ to\ the\ localised\ term\ technical\ report.=Similar to "Report" except that the type field is optional and defaults to the localised term technical report. A\ work\ with\ an\ author\ and\ a\ title\ which\ has\ not\ been\ formally\ published,\ such\ as\ a\ manuscript\ or\ the\ script\ of\ a\ talk.=A work with an author and a title which has not been formally published, such as a manuscript or the script of a talk. -This\ type\ is\ similar\ to\ inbook\ but\ intended\ for\ works\ originally\ published\ as\ a\ stand-alone\ book.=This type is similar to inbook but intended for works originally published as a stand-alone book. -An\ article\ in\ a\ work\ of\ reference.\ This\ is\ a\ more\ specific\ variant\ of\ the\ generic\ incollection\ entry\ type.=An article in a work of reference. This is a more specific variant of the generic incollection entry type. -A\ multi-volume\ book.=A multi-volume book. -A\ multi-volume\ collection.=A multi-volume collection. -A\ multi-volume\ proceedings\ entry.=A multi-volume proceedings entry. -A\ multi-volume\ reference\ entry.\ The\ standard\ styles\ will\ treat\ this\ entry\ type\ as\ an\ alias\ for\ mvcollection.=A multi-volume reference entry. The standard styles will treat this entry type as an alias for mvcollection. +This\ type\ is\ similar\ to\ "InBook"\ but\ intended\ for\ works\ originally\ published\ as\ a\ stand-alone\ book.=This type is similar to "InBook" but intended for works originally published as a stand-alone book. +An\ article\ in\ a\ work\ of\ reference.\ This\ is\ a\ more\ specific\ variant\ of\ the\ generic\ "InCollection"\ entry\ type.=An article in a work of reference. This is a more specific variant of the generic "InCollection" entry type. +A\ multi-volume\ "Book".=A multi-volume "Book". +A\ multi-volume\ "Collection".=A multi-volume "Collection". +A\ multi-volume\ "Proceedings"\ entry.=A multi-volume "Proceedings" entry. +A\ multi-volume\ "Reference"\ entry.\ The\ standard\ styles\ will\ treat\ this\ entry\ type\ as\ an\ alias\ for\ "MvCollection".=A multi-volume "Reference" entry. The standard styles will treat this entry type as an alias for "MvCollection". This\ entry\ type\ is\ intended\ for\ sources\ such\ as\ web\ sites\ which\ are\ intrinsically\ online\ resources.=This entry type is intended for sources such as web sites which are intrinsically online resources. A\ single-volume\ work\ of\ reference\ such\ as\ an\ encyclopedia\ or\ a\ dictionary.=A single-volume work of reference such as an encyclopedia or a dictionary. A\ technical\ report,\ research\ report,\ or\ white\ paper\ published\ by\ a\ university\ or\ some\ other\ institution.=A technical report, research report, or white paper published by a university or some other institution. An\ entry\ set\ is\ a\ group\ of\ entries\ which\ are\ cited\ as\ a\ single\ reference\ and\ listed\ as\ a\ single\ item\ in\ the\ bibliography.=An entry set is a group of entries which are cited as a single reference and listed as a single item in the bibliography. -Supplemental\ material\ in\ a\ book.\ This\ type\ is\ provided\ for\ elements\ such\ as\ prefaces,\ introductions,\ forewords,\ afterwords,\ etc.\ which\ often\ have\ a\ generic\ title\ only.=Supplemental material in a book. This type is provided for elements such as prefaces, introductions, forewords, afterwords, etc. which often have a generic title only. -Supplemental\ material\ in\ a\ collection.=Supplemental material in a collection. -Supplemental\ material\ in\ a\ periodical.\ This\ type\ may\ be\ useful\ when\ referring\ to\ items\ such\ as\ regular\ columns,\ obituaries,\ letters\ to\ the\ editor,\ etc.\ which\ only\ have\ a\ generic\ title.=Supplemental material in a periodical. This type may be useful when referring to items such as regular columns, obituaries, letters to the editor, etc. which only have a generic title. +Supplemental\ material\ in\ a\ "Book".\ This\ type\ is\ provided\ for\ elements\ such\ as\ prefaces,\ introductions,\ forewords,\ afterwords,\ etc.\ which\ often\ have\ a\ generic\ title\ only.=Supplemental material in a "Book". This type is provided for elements such as prefaces, introductions, forewords, afterwords, etc. which often have a generic title only. +Supplemental\ material\ in\ a\ "Collection".=Supplemental material in a "Collection". +Supplemental\ material\ in\ a\ "Periodical".\ This\ type\ may\ be\ useful\ when\ referring\ to\ items\ such\ as\ regular\ columns,\ obituaries,\ letters\ to\ the\ editor,\ etc.\ which\ only\ have\ a\ generic\ title.=Supplemental material in a "Periodical". This type may be useful when referring to items such as regular columns, obituaries, letters to the editor, etc. which only have a generic title. A\ thesis\ written\ for\ an\ educational\ institution\ to\ satisfy\ the\ requirements\ for\ a\ degree.=A thesis written for an educational institution to satisfy the requirements for a degree. -An\ alias\ for\ online,\ provided\ for\ jurabib\ compatibility.=An alias for online, provided for jurabib compatibility. -Computer\ software.\ The\ standard\ styles\ will\ treat\ this\ entry\ type\ as\ an\ alias\ for\ misc.=Computer software. The standard styles will treat this entry type as an alias for misc. +An\ alias\ for\ "Online",\ provided\ for\ jurabib\ compatibility.=An alias for "Online", provided for jurabib compatibility. +Computer\ software.\ The\ standard\ styles\ will\ treat\ this\ entry\ type\ as\ an\ alias\ for\ "Misc".=Computer software. The standard styles will treat this entry type as an alias for "Misc". A\ data\ set\ or\ a\ similar\ collection\ of\ (mostly)\ raw\ data.=A data set or a similar collection of (mostly) raw data. From efc69be2a35ac3c4d536ab4836924d7aad7458de Mon Sep 17 00:00:00 2001 From: Gennadiy Date: Sun, 5 Apr 2020 16:17:00 +0300 Subject: [PATCH 054/166] Add disable/enable calculation of items in group (#6233) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Init changes * Init changes * Восстановлено исходное состояние мастера * Просто коммит * Issue #6042 fixed * Issue #6042 fixed Corrected resources file after not passing the test * - Added new property to PreferencesService and JabRefPreferences - Used this property in GroupsTabView - DisplayGroupQuantity renamed into DisplayGroupCount in GroupsTabView & GroupsTabViewModel * - removed line from JabRef_en.properties * Updated Properties file - removed line from ...da.properties; - added line to ...en.properties; * Changed GroupTreeView according to comments from Tobiasdiez Main task - disable calling "group.getHits()" method to avoid calculation of items in group. * Remove empty line Co-authored-by: Tobias Diez --- CHANGELOG.md | 1 + .../org/jabref/gui/groups/GroupTreeView.java | 6 +- .../org/jabref/gui/preferences/GroupsTab.fxml | 1 + .../jabref/gui/preferences/GroupsTabView.java | 2 + .../gui/preferences/GroupsTabViewModel.java | 5 + .../jabref/preferences/JabRefPreferences.java | 7 + .../preferences/PreferencesService.java | 2 + src/main/resources/l10n/JabRef_da.properties | 2 + src/main/resources/l10n/JabRef_en.properties | 2 + src/test/resources/testbib/testjabref.bib | 1645 ++++++++++++++++- 10 files changed, 1669 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d713bed9d8f..309becc5f96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We made the filters more easily accessible in the integrity check dialog. [#5955](https://github.com/JabRef/jabref/pull/5955) - We reimplemented and improved the dialog "Customize entry types". [#4719](https://github.com/JabRef/jabref/issues/4719) - We added an [American Physical Society](https://journals.aps.org/) fetcher. [#818](https://github.com/JabRef/jabref/issues/818) +- We added possibility to enable/disable items quantity in groups. [#6042](https://github.com/JabRef/jabref/issues/6042) ### Fixed diff --git a/src/main/java/org/jabref/gui/groups/GroupTreeView.java b/src/main/java/org/jabref/gui/groups/GroupTreeView.java index 856edb67a19..0e96156f96d 100644 --- a/src/main/java/org/jabref/gui/groups/GroupTreeView.java +++ b/src/main/java/org/jabref/gui/groups/GroupTreeView.java @@ -120,7 +120,7 @@ public void initialize() { .withTooltip(GroupNodeViewModel::getDescription) .install(mainColumn); - // Number of hits + // Number of hits (only if user wants to see them) PseudoClass anySelected = PseudoClass.getPseudoClass("any-selected"); PseudoClass allSelected = PseudoClass.getPseudoClass("all-selected"); new ViewModelTreeTableCellFactory() @@ -134,7 +134,9 @@ public void initialize() { group.allSelectedEntriesMatchedProperty()); } Text text = new Text(); - text.textProperty().bind(group.getHits().asString()); + if (preferencesService.getDisplayGroupCount()) { + text.textProperty().bind(group.getHits().asString()); + } text.getStyleClass().setAll("text"); node.getChildren().add(text); node.setMaxWidth(Control.USE_PREF_SIZE); diff --git a/src/main/java/org/jabref/gui/preferences/GroupsTab.fxml b/src/main/java/org/jabref/gui/preferences/GroupsTab.fxml index ee38f7d5e34..418230824d9 100644 --- a/src/main/java/org/jabref/gui/preferences/GroupsTab.fxml +++ b/src/main/java/org/jabref/gui/preferences/GroupsTab.fxml @@ -25,6 +25,7 @@ +
    - - - - - - - - - - @@ -181,23 +171,6 @@ - - - - - - - - - - - - - - - @@ -260,7 +233,7 @@ - + @@ -307,7 +280,7 @@ - + @@ -325,7 +298,7 @@ - + diff --git a/dependent/advances-in-optics-and-photonics.csl b/dependent/advances-in-optics-and-photonics.csl new file mode 100644 index 00000000000..4f00cc23c47 --- /dev/null +++ b/dependent/advances-in-optics-and-photonics.csl @@ -0,0 +1,18 @@ + + diff --git a/dependent/applied-optics.csl b/dependent/applied-optics.csl new file mode 100644 index 00000000000..b18a94f508a --- /dev/null +++ b/dependent/applied-optics.csl @@ -0,0 +1,19 @@ + + diff --git a/dependent/biomedical-optics-express.csl b/dependent/biomedical-optics-express.csl index 64eef667810..675e6dab5a4 100644 --- a/dependent/biomedical-optics-express.csl +++ b/dependent/biomedical-optics-express.csl @@ -1,19 +1,18 @@ diff --git a/dependent/journal-of-the-optical-society-of-america-a.csl b/dependent/journal-of-the-optical-society-of-america-a.csl new file mode 100644 index 00000000000..87c4c3fd9c0 --- /dev/null +++ b/dependent/journal-of-the-optical-society-of-america-a.csl @@ -0,0 +1,19 @@ + + diff --git a/dependent/journal-of-the-optical-society-of-america-b.csl b/dependent/journal-of-the-optical-society-of-america-b.csl new file mode 100644 index 00000000000..b529e18e35d --- /dev/null +++ b/dependent/journal-of-the-optical-society-of-america-b.csl @@ -0,0 +1,19 @@ + + diff --git a/dependent/jurnal-elektrik.csl b/dependent/jurnal-elektrik.csl new file mode 100644 index 00000000000..3a6a702add3 --- /dev/null +++ b/dependent/jurnal-elektrik.csl @@ -0,0 +1,14 @@ + + diff --git a/dependent/jurnal-masina-nipake.csl b/dependent/jurnal-masina-nipake.csl new file mode 100644 index 00000000000..9bf30f0324f --- /dev/null +++ b/dependent/jurnal-masina-nipake.csl @@ -0,0 +1,14 @@ + + diff --git a/dependent/jurnal-teknologi-infrastruktur-berkelanjutan.csl b/dependent/jurnal-teknologi-infrastruktur-berkelanjutan.csl new file mode 100644 index 00000000000..724a6687d07 --- /dev/null +++ b/dependent/jurnal-teknologi-infrastruktur-berkelanjutan.csl @@ -0,0 +1,17 @@ + + diff --git a/dependent/optica.csl b/dependent/optica.csl new file mode 100644 index 00000000000..129265014f2 --- /dev/null +++ b/dependent/optica.csl @@ -0,0 +1,17 @@ + + diff --git a/dependent/optical-materials-express.csl b/dependent/optical-materials-express.csl index fc804d53106..32d76fa70ed 100644 --- a/dependent/optical-materials-express.csl +++ b/dependent/optical-materials-express.csl @@ -1,19 +1,18 @@ diff --git a/dependent/optics-and-photonics-news.csl b/dependent/optics-and-photonics-news.csl new file mode 100644 index 00000000000..02204cc66ce --- /dev/null +++ b/dependent/optics-and-photonics-news.csl @@ -0,0 +1,19 @@ + + diff --git a/dependent/osa-continuum.csl b/dependent/osa-continuum.csl new file mode 100644 index 00000000000..b237c76a085 --- /dev/null +++ b/dependent/osa-continuum.csl @@ -0,0 +1,18 @@ + + diff --git a/freshwater-science.csl b/freshwater-science.csl index a18a4ab9eed..f2e0b66f910 100644 --- a/freshwater-science.csl +++ b/freshwater-science.csl @@ -1,21 +1,30 @@ - diff --git a/harvard-university-for-the-creative-arts.csl b/harvard-university-for-the-creative-arts.csl index b64c9eb8e9f..d84f8d4e6d9 100644 --- a/harvard-university-for-the-creative-arts.csl +++ b/harvard-university-for-the-creative-arts.csl @@ -14,7 +14,7 @@ University for the Creative Arts Harvard style - 2019-10-14T08:17:05+00:00 + 2020-04-02T11:12:33+00:00 This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License @@ -31,10 +31,10 @@ - @@ -300,7 +300,7 @@ - + diff --git a/iso690-author-date-sk.csl b/iso690-author-date-sk.csl index 1f227759cc3..89b70de4078 100644 --- a/iso690-author-date-sk.csl +++ b/iso690-author-date-sk.csl @@ -13,7 +13,7 @@ Style based on STN ISO 690:2012 - 2014-04-23T23:24:15+00:00 + 2020-04-02T22:05:52+00:00 This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License @@ -139,7 +139,6 @@ - @@ -286,7 +285,6 @@ -
    @@ -300,8 +298,8 @@ - - @@ -323,7 +321,6 @@
    -
    @@ -362,7 +359,6 @@ - @@ -383,11 +379,11 @@ - - - - - + + + + + @@ -469,14 +465,10 @@ - - - - @@ -486,7 +478,6 @@ - @@ -503,7 +494,6 @@ - @@ -545,10 +535,6 @@ - @@ -683,7 +669,6 @@ - diff --git a/optics-letters.csl b/optics-letters.csl new file mode 100644 index 00000000000..c274b13427f --- /dev/null +++ b/optics-letters.csl @@ -0,0 +1,231 @@ + + diff --git a/politeknik-negeri-manado-jurnal-p3m.csl b/politeknik-negeri-manado-jurnal-p3m.csl new file mode 100644 index 00000000000..621a999c70c --- /dev/null +++ b/politeknik-negeri-manado-jurnal-p3m.csl @@ -0,0 +1,373 @@ + + diff --git a/proceedings-of-the-joint-international-grassland-and-international-rangeland-congress-2021.csl b/proceedings-of-the-joint-international-grassland-and-international-rangeland-congress-2021.csl new file mode 100644 index 00000000000..d6ed1ae66e8 --- /dev/null +++ b/proceedings-of-the-joint-international-grassland-and-international-rangeland-congress-2021.csl @@ -0,0 +1,137 @@ + + diff --git a/revista-de-biologia-marina-y-oceanografia.csl b/revista-de-biologia-marina-y-oceanografia.csl new file mode 100644 index 00000000000..a4f1c33f188 --- /dev/null +++ b/revista-de-biologia-marina-y-oceanografia.csl @@ -0,0 +1,244 @@ + + diff --git a/rhinology.csl b/rhinology.csl new file mode 100644 index 00000000000..a4f25b60942 --- /dev/null +++ b/rhinology.csl @@ -0,0 +1,339 @@ + + diff --git a/societe-francaise-detude-de-la-ceramique-antique-en-gaule.csl b/societe-francaise-detude-de-la-ceramique-antique-en-gaule.csl index f6077ee82ff..882490b5259 100644 --- a/societe-francaise-detude-de-la-ceramique-antique-en-gaule.csl +++ b/societe-francaise-detude-de-la-ceramique-antique-en-gaule.csl @@ -1,5 +1,5 @@ - diff --git a/trabajos-de-prehistoria.csl b/trabajos-de-prehistoria.csl new file mode 100644 index 00000000000..7cd53900036 --- /dev/null +++ b/trabajos-de-prehistoria.csl @@ -0,0 +1,236 @@ + + From 2c7a45906fa08a5d68b14989b810bc7f0f1be56c Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 5 Apr 2020 22:42:08 +0200 Subject: [PATCH 057/166] Reduce the number depencencies introduced by markdown renderer (#6247) --- build.gradle | 4 +- external-libraries.txt | 48 +++++++++++++------ .../layout/format/MarkdownFormatter.java | 1 + 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/build.gradle b/build.gradle index ebb001d5086..836b0ce2a1f 100644 --- a/build.gradle +++ b/build.gradle @@ -195,7 +195,9 @@ dependencies { exclude module: "log4j-core" } - implementation 'com.vladsch.flexmark:flexmark-all:0.60.2' + implementation 'com.vladsch.flexmark:flexmark:0.61.0' + implementation 'com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:0.61.0' + implementation 'com.vladsch.flexmark:flexmark-ext-gfm-tasklist:0.61.0' testImplementation 'io.github.classgraph:classgraph:4.8.66' testImplementation 'org.junit.jupiter:junit-jupiter:5.6.1' diff --git a/external-libraries.txt b/external-libraries.txt index 05e11258f7d..2001fa0d4c0 100644 --- a/external-libraries.txt +++ b/external-libraries.txt @@ -341,6 +341,10 @@ License: BSD-2-Clause ## Sorted list of runtime dependencies output by gradle +1. ` gradlew dependencies > build\reports\project\dependencies.txt` +2. Manually edit depedencies.txt to contain the tree of "runtimeDepedencies" only +3. sed 's/^.* //' < dependencies.txt | sort | uniq + ```text com.github.tomtung:latex2unicode_2.12:0.2.6 com.google.code.gson:gson:2.8.6 @@ -351,7 +355,7 @@ com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 com.ibm.icu:icu4j:62.1 com.jfoenix:jfoenix:9.0.9 -com.konghq:unirest-java:3.6.00 +com.konghq:unirest-java:3.7.00 com.microsoft.azure:applicationinsights-core:2.4.1 com.microsoft.azure:applicationinsights-logging-log4j2:2.4.1 com.oracle.ojdbc:ojdbc10:19.3.0.0 @@ -362,6 +366,21 @@ com.oracle.ojdbc:simplefan:19.3.0.0 com.oracle.ojdbc:ucp:19.3.0.0 com.sun.istack:istack-commons-runtime:3.0.8 com.sun.xml.fastinfoset:FastInfoset:1.2.16 +com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:0.61.0 +com.vladsch.flexmark:flexmark-ext-gfm-tasklist:0.61.0 +com.vladsch.flexmark:flexmark-util-ast:0.61.0 +com.vladsch.flexmark:flexmark-util-builder:0.61.0 +com.vladsch.flexmark:flexmark-util-collection:0.61.0 +com.vladsch.flexmark:flexmark-util-data:0.61.0 +com.vladsch.flexmark:flexmark-util-dependency:0.61.0 +com.vladsch.flexmark:flexmark-util-format:0.61.0 +com.vladsch.flexmark:flexmark-util-html:0.61.0 +com.vladsch.flexmark:flexmark-util-misc:0.61.0 +com.vladsch.flexmark:flexmark-util-options:0.61.0 +com.vladsch.flexmark:flexmark-util-sequence:0.61.0 +com.vladsch.flexmark:flexmark-util-visitor:0.61.0 +com.vladsch.flexmark:flexmark-util:0.61.0 +com.vladsch.flexmark:flexmark:0.61.0 commons-cli:commons-cli:1.4 commons-codec:commons-codec:1.11 commons-logging:commons-logging:1.2 @@ -393,10 +412,10 @@ org.apache.logging.log4j:log4j-core:3.0.0-SNAPSHOT org.apache.logging.log4j:log4j-jcl:3.0.0-SNAPSHOT org.apache.logging.log4j:log4j-plugins:3.0.0-SNAPSHOT org.apache.logging.log4j:log4j-slf4j18-impl:3.0.0-SNAPSHOT -org.apache.pdfbox:fontbox:2.0.18 -org.apache.pdfbox:pdfbox:2.0.18 -org.apache.pdfbox:xmpbox:2.0.18 -org.apache.tika:tika-core:1.23 +org.apache.pdfbox:fontbox:2.0.19 +org.apache.pdfbox:pdfbox:2.0.19 +org.apache.pdfbox:xmpbox:2.0.19 +org.apache.tika:tika-core:1.24 org.bouncycastle:bcprov-jdk15on:1.64 org.checkerframework:checker-qual:2.10.0 org.controlsfx:controlsfx:11.0.1 @@ -413,22 +432,23 @@ org.graalvm.regex:regex:19.2.1 org.graalvm.sdk:graal-sdk:19.2.1 org.graalvm.truffle:truffle-api:19.2.1 org.jbibtex:jbibtex:1.0.17 +org.jetbrains:annotations:15.0 org.jsoup:jsoup:1.13.1 org.jvnet.staxex:stax-ex:1.8.1 -org.mariadb.jdbc:mariadb-java-client:2.5.4 -org.openjfx:javafx-base:13.0.2 -org.openjfx:javafx-controls:13.0.2 -org.openjfx:javafx-fxml:13.0.2 -org.openjfx:javafx-graphics:13.0.2 -org.openjfx:javafx-media:13.0.2 -org.openjfx:javafx-swing:13.0.2 -org.openjfx:javafx-web:13.0.2 +org.mariadb.jdbc:mariadb-java-client:2.6.0 +org.openjfx:javafx-base:14 +org.openjfx:javafx-controls:14 +org.openjfx:javafx-fxml:14 +org.openjfx:javafx-graphics:14 +org.openjfx:javafx-media:14 +org.openjfx:javafx-swing:14 +org.openjfx:javafx-web:14 org.ow2.asm:asm-analysis:6.2.1 org.ow2.asm:asm-commons:6.2.1 org.ow2.asm:asm-tree:6.2.1 org.ow2.asm:asm-util:6.2.1 org.ow2.asm:asm:6.2.1 -org.postgresql:postgresql:42.2.10 +org.postgresql:postgresql:42.2.11 org.reactfx:reactfx:2.0-M5 org.scala-lang:scala-library:2.12.8 org.slf4j:slf4j-api:2.0.0-alpha1 diff --git a/src/main/java/org/jabref/logic/layout/format/MarkdownFormatter.java b/src/main/java/org/jabref/logic/layout/format/MarkdownFormatter.java index e8eadf2bded..f387dc40224 100644 --- a/src/main/java/org/jabref/logic/layout/format/MarkdownFormatter.java +++ b/src/main/java/org/jabref/logic/layout/format/MarkdownFormatter.java @@ -19,6 +19,7 @@ public class MarkdownFormatter implements LayoutFormatter { public MarkdownFormatter() { MutableDataSet options = new MutableDataSet(); + // in case a new extension is added here, the depedency has to be added to build.gradle, too. options.set(Parser.EXTENSIONS, List.of( StrikethroughExtension.create(), TaskListExtension.create() From c655c825034972c2ffbb82e98fd2631be873eb92 Mon Sep 17 00:00:00 2001 From: Christoph Date: Mon, 6 Apr 2020 08:22:29 +0200 Subject: [PATCH 058/166] Update LO Jars to 6.3.2 (#6249) * Update LO Jars to 6.3.2 Fix libre office jar configuration building * Update build.gradle indentation --- build.gradle | 9 +++++---- lib/libreoffice.jar | Bin 2122770 -> 2121136 bytes 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 836b0ce2a1f..512c5e3fd98 100644 --- a/build.gradle +++ b/build.gradle @@ -127,10 +127,11 @@ dependencies { // For Java 9+ compatibility, we include a bundled version of the libreoffice libraries // See https://bugs.documentfoundation.org/show_bug.cgi?id=117331#c8 for background information // Use the task bundleLibreOffice to update the bundled jar - //implementation "org.libreoffice:juh:6.2.3" - //implementation "org.libreoffice:jurt:6.2.3" - //implementation "org.libreoffice:ridl:6.2.3" - //implementation "org.libreoffice:unoil:6.2.3" + // DO NOT CHANGE THE libreoffice PREFIX + libreoffice 'org.libreoffice:juh:6.3.2' + libreoffice 'org.libreoffice:jurt:6.3.2' + libreoffice 'org.libreoffice:ridl:6.3.2' + libreoffice 'org.libreoffice:unoil:6.3.2' implementation 'io.github.java-diff-utils:java-diff-utils:4.5' implementation 'info.debatty:java-string-similarity:1.2.1' diff --git a/lib/libreoffice.jar b/lib/libreoffice.jar index e8b40bece7d7d7bba62952de58d0a3d836c57d39..36978d2fc5db8284ebb765cc2e3ed180e9e2af8d 100644 GIT binary patch delta 398748 zcmZU5QG9Yp^fw@LpqCP4yI z{pTX>b`camDIXmi2^8r6z2cuo(xQNYf20BOa3Pc8fZ-7SnS#$(bzuMn0-6C&BTj`v zOL7251CTP&8`~H5(3>wVbRMxJlB!y_^YsI}=X z`^~g);a{Iw_X|asBNb}5ryRF^eVP%KtAhTlrL3~3dG;NyxZf<4MRnLUNWqH+c0=A0 z7NC{*ViR|FCk9r=d}?(X20clA0t1d$(5}cv`St5`)snvgwy1)5-UWYosY-q~W(uEa zPHUdn9{P$t3mdu!=4z)VaKB7r#$Ozq!a?~DRWwuZ^B%z+24>qN%X4e$F1v_G0`0Sl zX+!yJto2^7qYydTK!O3MALk~q!gOLlFQAb!eIPl|l9Y6UvXvsc~azr~*r^XHkB@ssX$C;L*q1E$#=33Z{l%=znE3b&F?xebMOnrY@>=r&dCYZ^jL&P#*q1nPCl}^z+SlP`b&j4WL3^?T~ z<=4`X5r@|}dX4aLDI?gD?Rqh-*8!rZ+?H5VNROzH-m;C@bREq0XYF z345)6$$_ye5!jE5$TtE)1;Q|tlWhu&{7_-&d_7g0=kp}g2o~G&ww<7c*SGdH3D~$) zFX+#gU<(k8(o1r7l2|XLVg5YiCkA>3B6&xOKf%deaAmH-KGdaQnQ*~1XsEFw|1=I< zO1gkAS<&$#zII5p!QI^!mlQr{rzXvQk0r;+J02#}ji=0zED%&02u~}7zdXQ?r`kmt zz~9d(-k$5Z8tUv>`0}ZaQ zj}3iH%6l$>|E1oyO;t9$J^lg-ou^cbGW|Lmd`$LH6u9_Ol@Ac=I|l0kB;I&Je_u#o zeu-Uts~LP{X?E`n_v}ac`2e7QVvK8$`Ygt=`{>bb-!PqVnEJ>JwV?YzZmaF|Kb!dc zwDBX_4MX`7`2*OKVD_upp?G0{7C_$skf-KF9rloY2oEu!+YJ3S`OqG+2aCcq{fLYH zMknn_xdou;E6fiVnE;#`&<>PFWD+$^ zLVSL`U>&7N9rl-N3tEAhM98L%s8%Zar;atsmT(KumCBe_q*0Fa&B7p75qc>Vq_|{= zR+4Jd&03pSDaPlE*HtB0RL7q|2d*W_o*gx}rpljNZjr|h!P|-wa(VIci0AhQ;h>PeByVu%%U0361z2(2}j67 zU7dT_@yti+HJPikGOD$?F}jqZ%-~qar#8{gqHrP{xU=9&Su(L>aYmzu8qGWy3(eaj z1+-D_(sD(qYbacXCI+HS^1v@qN@>;=#2%A@n9tXg_?(0MWC7ztEFI3Z?TYuv?--7B zTsW~N6PixR_I1=&XWHV|yOjftFYF`<%!v~KT$!T0F{E~3aQE%<;$h}Jb-l^KJJTd_ zkJ{w)w)Y=(v%gYDGpiu0f0V`?3Zo0UArdYZWz<{^=DOSNVt;B|)wwJtL}T#%0ZX0a zT;U9^KH;NKLIvzfLaz(d%+T1NiW>E`B5&fwi9Pz!mB*Zs7m%s;4RRaR=Go#pJJ^0YoDD2x^)#MUklGYhGDc{5FVkNirsb8#^R3@x_0jOmC~=Nk+$m= z(r}(SgOHKZk3GhDN14v5QuCAytF(K%aGD$U<-!=LLIIvY!c#t-PK!2Nxg20ueiByn z+BmNDDUfMXC`lHYMQFFaIF21v7?oN~Wl+i21y9C)Fp+E|$(pkG1lN$Y-}UnO7%|mK zqR0d8hAcKlholEaGV#!u61=VN5@v``RI~fQ4C$h_{uH`H&GL98ozA<5*^aS-Ph^DH_xE5whwMln`WTq@q*fyR-oTL-* z73@8>rXkT&sYIx9+EU~O=ltp`=Bo6ZZ5nSDg9f;V8Ej#ogs6GZ=}B2s#lz&FVe;7C z(zSPAPEqTLX*jFV$}{6-Um&=^|76TIBO82#t7OvsW%B1235$AaGS65@a}l#H4#;{E zwzF`ybG7vH?3?nYZn&zVt>UTI8EI9gU}gRu!bijMeVxOtIWT z^&G&=D@RmEbxnGmbH3aK)K=qEd`(DGTXe-lFJ`Ciw5ejmVn3W6ep7mw4p;-Y4LUv%ck_X0xX)t=0<7AQzRN{TRfg2_465p zh`1^FVj-M*>~(*LFT6?Z$NJs$1i4sN6nZ-N@9I^}jYu}kZRJCV=kQ3!jgmPzmj-}n zOPNcu9eUJIn|86`+=|!bWoC*3dj#Ajx#-3~$<knjD=V);?oFXg=kCfPX z=#;%=q@0_pD+u(YmojN7U^bhRrz;4Zr*!-}czGO4hdaq4QJa^ffyAZSUpXNX9GVi& zX=Yc=kIGgw^bFL+5x!Ni3X~e0?#h5-rh{KoH~zaOtDTp@uJtG}l`gnBdl0tzMep^a zva|)5nx3a0!yp#(gM7si_Zb=!SUK=}ya)yJg`9fI+*UWp64WUt#pv&^y}X_Z;v8(1 zKg!yqtuzMLJh@{h%5slhi5eB(MrgS61S3_N^)~y0AQQ!vh?BAT*r$Byh}!@LSuV(u zvqB~OIL3o=!H~~f_8kuqW1CUS1Z@KgDqmU;ur%X=d4ujY<6G{`m075K7o6l8wh&c_ zDNpj~Z=aEgly$nUM(pDv=x~;ku>}OTni@iDV_@`GiBPy0VLzp6&ZQxX2OFLD4%S@! znkS}F&V{2&jz$|B)0_1S`ltY|{HYr`%`T%N?ua}Y^pS{|LT30@^sR|l1yRyDAtb|h z#C4ree3;a-Br%q!z~|aN1BUzzmbR%O)ZREh!#Cr#?#G4bau=iCe@D28A45IeYap=2 zeoq9acTqpiqX({5=1o}LK7ja5^u3DxUckgOuobyP>sG+4iPBvF z4gSJ9zd&9nZY4bNd58hHE(fYdkq{D|reG4Ypld0o;a&rdGC=tRrT890)z`{6spl&- zklc48Vf}s7cN)WH8cwRF;TYY3t)-_Mn;^q6&dpugn!JSZ`;#!~4p2xJ@A-zIR2NK^ zop7~>oEi81COqKt+2Yed1b;zj?74c$d)iu4D%yRGj^&M66$JpikY3dNfQiwJI|Qo8 z5BJO7Ru9jO%VQ&A0>Aglbgz7o`gmxR4a!CP79G6o^rG8gCqG&Z%z#?xz}6m|4x+0L zp#G5=G9IMWTG0xb$y@uuDL#^1AN$sL$han@vJjgff+X>x|TS)aqE^~PxW3}|ORueR&`WKBhE(i{62kXgy2)LfMRXd z?!@8g5@Kl3Lw(4uGeNo253|zWM!>!naa`LK7;NKfACLSORWu~eC93tie; zRtr9+)LVDX7y6~i$%VaUIkYR>QLepVA$V$=*TpgpT`gRn9m$2S$Yeq1*crBA?ESf+ zzFm^`z_889ZB~13r98i~NB@#-7amB;(trxgq!94hIx2Gy9_si4yRL|STX2VI`n zS(B2?v2%Z}2vfq>6bOM2I5(f+(rR@S2yw`-ES?OUFeobCu3_=XL(95B%i3}aFk~ma zVcGi3&bhTiIe%;!fY84K=14+h%PLd6myzRxCYzZMP(r_tq@x#h2Z2QDFyJ zsW-_sZ$IwScDl$5Au9~zch*p~XKyorYU2j!p!Z421B3%X)5? ze;5J6;Z|=A)kBWhHyT8$;d2hl%J@6g#rZ=c?|xfKm*_wd%}K5>Dau2;v+6sx%z*9B z9sd|YOGof7S(cz67EZJWdBa*27-sLNQ*@V$Am>jEonzA*7`Q^<0B3S+;&Gqu7SL;d$0fV5R zGgk3wy8aco*zNt&(fhpIfw`|{=RFM{d(=Fg>Dn(LxkiLxMKPYTG+UzFPfkO==UO3K zcOMAD=0Ww)EhvUde__GXx!=!6vTEUeMf@v+AzSo{h_FCa0ySuP;kg`C|A5cbbas62GU!-~;S8J- z&jgvD&G zqT-Yo3t3{epZ3)Uve!e@UU=}b4@@J(%Qj*bwS{ZeM;{2^ZyGQx>Pd7>YF z6OlJ@B$LxXJ!G^-8RLqm-A9j~1phu(ildU&!*Eh~ncGBR>9 zwmBN^Umw4K^J79muorpfR#24aqAqFA;M!ho4PI3U7#AQAmx@fMXw9v11>{;WS8C=B zM_g=&5xn52s$Kiz`JDmRoFbM6JReqEgw6ny81v+E%O0@M0DGSKSfGbspFPUijhUrX z>c&IL4Ynzkg{Gy}ls=`$vjQ6G{2j`eD zT`-aeay_Tb37#jvVc-^nXIF|z#$8+>q@YwtRb-t(CC4@F%JP@TV|p${bu!a83Xs(OUIV(VnnJIOnw^o0*`|NS*eqs^@# z9HD`LwouZ9I{qV~!6tQLVgbAzbk(rGb4(iC2{|n5ee0ww=h^A9OgLbxi{l$DvVJK_ zDw7r40zq?Rt(&ZGcAQ>q&fL(3N9HG|2~+dm2#E@Tl2R2&j?)M!syc)^ihtiCx}f1p zNDP-3Ke|uZwRqZ;CakV{U%y^GfB9{@Px+o7L@|JB20gQC5ki527(VGY4hH?;ELvA%j5Z2))e-IbFZEe>5a1zMH%|ZfY#fFl<|PeuY`*Yz z6M6QO?Gi8??aJU>Jr;sITfWqryhnz<>v5j^Vdl->6+%?sAwC`G*XIrVJvP3~%6m2l z?jf59S^O!Y?}LwM?E%<`BI-U2Alyz>P-wlufAv!Ach`H#4ZGzdGVQ+ZOSU#O#B@WHQvueDvE8^wTh2>*HW_tp z(Z-r<_{;|ETBEr;Z>K)x%qA|FY^=(yB1rdkRo7tVFHJaY$@)5QP;a|~O|{vB>Lx$k zf}E@X-qs4r`DX3@bKR9}_zgu|b#&qb@}!WI>L}M2R*@xdC{!#Yd<S&jpiEnc+(nAtXBE3wOQFm|vKi?%+=$BGH|39_Rze2~~7 z(UuC41?Kg+TY8o@K9!7`POoFlz&7n3PR61yXLMS-mY5NJX-fOmESy|&WpsT+C|$xA z&5?}C$3y~_psz_#Tk-5sZTxiGe6MD3c~EwacddRF5P<2zoE`al5pu&~Z8QONib4L{ zH*nrkj!>?kVZIk+X<#T}!#cQh%+=M=DWxttCr7=B!+nw&@2ve){8J;v+-P_k8FgKq zgPHo7Ng2rEJe+0li5gDC~13vbjh7>ILqSm?29 zw1KJw<_{2=yOBdtu++T8j0;w&v4`l>aHF``^II+WFxO6hM|=k97HM-3`C;Tv)&>ad zhD&Ngmd_Lr0d&ed@VBE+#8^^MeF zJ#z|`gek8IBKFca$no@(iV*!gb>eARtg%N(_|h%4{`@WX7E&26W~i&If%0$`qw5Ep zy`_gYP9G;+g{o^?x#{(rdX!TP6G;lQ3b$V@hsy`Z^~p;yYwK;5gG^?Ju}eyw%#1DJ z34kSQLX{L-?R3QT;ZAF`gWGm>wv~&_`D=bkV`!eLV@`S{MbE5QwlwzVF1``fu)#oL z$t<5@2CFwIm8IMA=}Xf=`N*xPiu53Bsyms?=|lu+?cN4S+`OCim;ABH>FQRN>_+k` zlaG08^IVlsv?IOa$Ygrls$sf0e}!D@PXNNwX=(Vzd8F2szA;(->w)H08ha9`&Z&!2 z3o^0cr)on*uji1TzCh|Rernr9nNXWSDoYk^-)Noj`Vx77SOW)YcPd4Jhk5jIV)aJ1 z)+^LF73Q5NI+MHj<(BT!?}>);3CplC%o(zPIJ$Pm?W1O6h))-0DR(jF#h++pc7Ti+ z7_DP{lEsq3gP}o@;(p~Q@PJN&R+e=t$B5V^LdwDU=oB>?8#^km$*S<_aZz_ZZfM782(8*T-U`xxF&TvmSj z{?gYEY-ROAq`UB%#lIU|(T2ODBDP?PJoRLFGtHk%Y@xdF;qM=FgcV%TeVHT< zE_mXzl-X=eMXDHhA(i6MeR?XKFbdVvJP0{MBB+`eUf_d4H=(fw9$;j)Y=Cah0!&3O zxO>uPs14McB~D7#;6dGXaz$;D>wQX8qNr&K4e36O>l+^OoqL{G13$=5O~%*|a1V7) z8e@xnOth0a(B&I%OGpd@iXI0yLn>~p7uS!Ow%mwL;B!Y3)U83$jOh9>`$FAIvA~}7 zT10o^5XgiQ48`UXvxnY{P>5R-#Uau4UvYE3hzVjemhDJuEdAbqiX-~nq zcD1yawFAnRtPk0p_*o$coIu!MzYzHeQeb9oEOA*jFL6 zs>z*eLg#Cg)sT{YxYsZewJ&<20$F+C)~UOE{>t^iI~n+yFY;hUD_}@b!gsbZ(HX>) zSRhFs#b|O0S2!e2YVt@k!uw;&k@k?2+RGMd%PYpc$4!-MaE1MT{(&HSnqgv@X_S+q zO+x;t!hyvZVnY~edyIM`R*X~dWIIMJ8G4U@Vb`x}P^h^tNcMtc;fb=~9gEm2{Lu@q z%LC;Tt1z_G!aQ1e8nCNR;DT_MeGjF-2YE5>0V47GvvqX!QB$Fb)m|Yd zQE(0>&9-ra45Dj!!W&DL#kN5yZ$JedmBofNtOmI8Nu|Qar#?Wfl|1r58I-84>eukZ z8jq9ibD$qVSrofgd26BUzfLxkPE|^m_(h8#UeEb*j$9S*0nl3&CYxeXZGsrClQuw# zdac#I(R3El36FE*di(MO0b~)SoM+5>T|E6DcoKikP?lmT zE@<(7ROM$!6=;Wqu;F(%h226&fSX@pEy0^bU@8#TYH z0SPHpce>{1n*hsQ=2ZR>(b^+Z2~V41#wz^7jRQBo6T;dW3b8EDr0JiY7`~rnb$8E# z`hE*vit`TmH&KhG9toxXOPkk#(-Nei|0#Cj5kAdfbx=gi0wY{2&M?Cl^J;sWIt|pkK`)8>gKez7v%F509=3!!iz*nRHQDTu%D> z@cIUt8Ojag9iw+zX;yZu-8V?v5$jjPajgawDSM!Bq8FolENaDDhMlY%v$h~)QW)5jv z&PO#VO&=*|9Tb}e@$0JkqV2q__={M?>`P84)0v5r2S$~9DDSG08PNqRehK8oS1&?x z?mQlNnq$Wg-p5=7=f%Rtxh7Q_*EGocq~h4;i#rF%?pp+0oHOq9)b}A=#as%Qt|oxsQyDK!2!gknXR-8Nfc=th-Ns&?w4@veX5SOt2xdbYX~>c^yqO*i~Hc<$8AJd_lquu28e-Xu{SG{C4DDT z-R4m6KY8xxl0ta&D$X4=TCc?yu#Ix$l}IQp zVVp`Zqmk1J!?;)}*C1EELM+*I{kWIK4w5@(u5WCX+>ghS2&P9)y?e4$@MIY2BpJUM zZb%%1c3cZaOUf-K{CBJ$(Y{V;z<_{i(hOY@|2hA`rSawCVgm-%byRRovHZFnR>(*N z)0zbp0wFUUBpV6hAuK_`V)PIadsP{#vJOB~={ru%ME=||tlX-90#7ySuVjsR?0Q@( z+zI=-p%Miz%w}+RjrwhSdu-jmA3h5JUeSBuZGsDS<-qN!S_}4U(XWGV>9=5u;8hGe z<1D{jRK%nQWdT@(2JF!~t<^s+e;%PtRB9^5BcJGv(3UJee(>?}w5004s|wD$NArWg(OHHNdm<>83Cb}=5mGUGqQ=HtVDwUtaDka)ce`WN(qJ}m9 z(tt#N=}wVg7#xOplQxvV;7dKk)8n%h-Z8uo^Fp-;Pc@!MwGsBlZhK?cf`{;R`=w{T zyk>VeSOSRNH2Ij0xmbrXe~PNV$jFujkAmSxQ#6lM_x&p5nx@?P$vpO_*Kw~r-noMQ zGW`n(;iws2Bh{s02j@ztdK9I5I$0;)R09KEAr&lisiN8ZY7D-?2!+yiJ=PpdybT;D zkat!}jL}~x;QYIu9R#(M^ixRIPNtG}(*%~HO%6c4j^SJ0rrV^|%jt>&CiwycP3TWi znyxwX_*zs~V@dNu8A!_?yF*<=)ruMrTMR|N596-vr-M*>nRuRFysNf+8z!5-9>-Ki zahWJ`c?hLmTd|V_wG@vUt~q7$$B`Ffh*BbcxV^V2sj6xnoxHN%@=a*vnWg5O(Z4z8 ztQjEq^Ii~^R6C8|`Wib`i`&Y7za2I@TiJj<@zIHG6sPCL3VUzzkXk+t{SCTk?A>|kbsvN?ywxam@S+=kF#QpW@zzA5nvG{L$_#u{RSrVyn;$PGAfis{7hc`Yb4JU+m7jAy)k!)^9ZTbMS%OOFy4R; zJv!veALkAf2T_{;&jb-r%_1B02mHSiOImz33Vs@qJ1|(1Ej8SK?L><5NdK9F`v3hz z`M9Y6y_NLM2$i%={a;T}Vn0hMJ~$AN7<3wP0vPH)uY>w$L7H6wE-AoQZCeFZ1MMr7 zcGX1cAPoFhFu8g$F|x|7L?vZP{t{6jj-v6}(Bu({dg7)_gVJdS%NKC>!qmfPM)ykC z6x!)RZ0BOe(@&?h+=kUqB7R6(Y=()q z^uF0Fvi%tan;!gpjxvF~<|)C!Tj2d@Q889ZE92UA!WbF&RQZ7X-_X8#feceuyH!P} z=gWr%PE-v0L&3 zX+Vk^B$g^*rfD>Pa#(G3;7vP#{Hb@q=%kJ?))z+9s?l)`N+N1$M>@aYo8GcovRY|x zwQ-OR!?IjzZi)ezp2udXED`se*+^A#_3^vq%^~ih%7(^^@&;oegx)YAggB(9kzl1c z{M97Nz4~Pr@h9c6)vacoj%er6+DWA8=*lol(4D>e{hvvr-G)q4*E&TY%u$^OsY4vl zl2G2@=8;VehpQm_^s6-y(G}gqPEhu;Eh`E$4wH4{hiCy25;E}SmTb0c6UtriT&ts5 zc2zYnJk~xGD>BJ$rkgr0?mEfYK2m*O_}%Qs#D?ps`13A$3+JI)v1~yioB>HFC>`OO zE3(Bu#~C&hoMl)8yRlU&=FQ>oa`-TS;i?8EX#hB3;l$SJTENGTnS8;>=s>Scn|}8G+qTw$D~p*OV**}p)=SGMd3=5 za_q{G{z>cW`AoJyErq0b|n z)4@yT!79}TuOCUIa7tIZbC2YeXvLH|kio}t>E?~@iO9?9sHZv47+G<4iOW%VE7>AS ze-QhEGSL#-BF$pB!}UVtdJEqu+7i{L?G^?A?3@e?VBcFX+h#@s{?NhMqDIJq=ahck zummA?)|Vm`KK>OAs1_?1I;^n3fOQE8Z~Q8wg|3rTqB(FKPay?)rGqHW1&pqj z?j#4!KUDtOVR_Sg-=Jd_453-zroWf1oS@XwLLy6u?i{#@N|pE1`18S2U``ccc47;t zzmtq@5H6yN$aR)@chsz4Q{Q=*3l`0g(^@c!pzVM6pSni6^ z`imk^_U*;o-5-QkkPcyS(gxiy`Fj|?qm_A(ap<9C7|e{7V(p znHR_B4YW^*W3yDCUXY|M0I`L!Jtth4pV-mwPF~31H;V=dad$Cr?WlU`5Z4xVd{|I` zfwiB+2AbLC%ESLSx!{6QXK??uX%ayI0g0plgJAv5rwjm9t-t>cBzp zw2C1nqkMBopeE!w>az!8IT0jt#rDX znd{ak152lcr?Bc-UOsNvY@b&=d2`u-0Y!sDa)_$HF(QS4mC+8a4kXT8onHy#-eNky zWhidT5iCpI47J!xb0j2PW<#nEJgf3Up`B74D9eB-RQUp@*k5v51h{w7epCF1k|;bC zWr*Gy6;=Dj>cq95Zskm|;=lGRda2sPB5mdsjbI#qR4Sg(vY+Pgh7 zn5%7}a}jf8cgqq!IU1uPX^xsVb=uoG<4?ylO2(;U5c~OSx&i-Ke*!Mx(gv}9)sJA@ zz6|g6kL`MJQl3b4O~X!_eO!Hpnk3m^2^s+OQi%S((ihxJTcAw}@TxL!lw{Kx&Vz6W z?k4c+Ad*NLV5&;nfy!B&dBATMWVwW@Eb?I|QVZyiWRzmj3Y`yMVwhbcUCRcUUn#-3 zAoVpr;S=kff5?K76)B4|@Pb!{Wmk{inx%+RXi-h>8ieq)f^`q3$@N@Nc$~_2oZSQz z;#I$8S&H^IR4bT4k~J;9<$@1%Q?7+kviFf)DsP*{>Ug5}dOCIV-ZNf5;~*FXYb|HE z1}&RVbx(%de8!53zK{0RhRWfv!$L`yDb*eVsIW={p>y@9p~~_Hs(2>a6~Ga{#Dr+F zlF>U$=+e#wL#__j4l@(478ZEbR}?f-FE<~i?VTg-Js%TSLUUw%8aBXph>hd0eFxC9 zjfPZ?It`XszH9|bL(@(MXa;#=!*yjoKkU!zV~&xUzd`;@eWv|^%i%$QfOMz{=T#hYcLR7a)U3^s$yCR2_VGl<>+StG2T%*+Z;|0PIOgV%-313J z37oVPfLKN)PK{-2jiEZxA#0IhzUp@UmR8Arh6~_bX$8jD@{s^4n%6~_!iQ9`29J>W zIa@5X3!aKm-Cehh;E{XIUMGh>Ma69y_JByANK5HYo4UoSJ+8VytRVp8ZOmKeNo3d= zG~nUf4$Ve+<0(gRi9c95B1MBOrK+WKq~#D*LM@MPLvr2QaYb*f_O0LnQ*~PFuS@br zR5l<~8pD|q3Jn3_zVQ{8p3&Buk0o4}1&Z!_>ziMImi1C)$Q9x7mSL2^&z> z_m!LhuU(;aoBf2Dxy)Mj?8GcWC^I;DYzNpB1wmu)!WZ2j+j>@aOLZvTPi5|03cEYY zlbuBep~+zOL08dmjP?rq)} z4NhMCir5{A)8lW+o~kRugLnDp`EYqA$rS2aIgpm}%_6Tb_{~AEE9dgofr?P0P@$l! zIo%|RgvRe5bjp=VzOr*DRO1v$C5l@VO_ItK^i;~Om_?#&XjWf{R>|ODN|g&Zs>`&T z+uV_w0)o|_A>8A>AoD%{!&L9)Htv}Dm+iLvEdc(X)C`qW%|Q+bQN31B(ZKSP_qMm! ziTW{P6#!Fc7gFe&U*=EAnDQgVhVetFS!*X&Ex-D*dMu4@y{`|Y#T5G8@F>yL(O8Bt zWBen)td`-u-X!nI^!=y9rt?*GG0`k**Kzi9=P}>)edo02_s8`via+^7hf-`Utm#S* zG(&-uNJA*79VI8=Bs3D^m5bCJ!J6~OusX-uOwDfD*u4iw+W6|Bgq^DeXUT4>|ED%D zacz-3D;N5d3F>Y%vP{_i=uMmCj}$hD=thDpD^!QZVN}N=5d-s^)tW~U5NUTOS&qbCDj(R`EM@ECbfW2$*TP&n8IMNP~Z6-lnF3E0By zsL9Y>YJle;7E37~=Y|^L>TA=Ja!oHIqAY2$`A~kd(AHi# z%M^ZOY(=?q?9H7V&`}#NRRQd@j7usA)^u8Jm)Jq&(A+Ke2u|Lcf~6oB4>lK1#R%#E zr#9r=XtE(dKRA*?6)E-H&swjUm^9OHRD$dQDnu{EakQ{7Z0bOL_)@+T5mke8s}ae* znc>GqNOL3<&h`?xq}v1s_5`@$D!BgXAjRy(vl4&XR+;=aEp&3N{dVL92#i)0GDcW;VJRMIXcO5i;Keizpid=HlH%BWC*@XR7^iP%w$5 zEEbMqew%%F9u4@~TM6ra-|)~Gy_Ku_{j zA-*eTsMY*7#v+oY5coFdGE7m~$MVehm|-^82;6xUo-T-NfkFvVy>d8vs0mEWxcda0 z?oHMB4w!9MJTv_tsx@yczQ7z#TeJK>OT%yg>LuNt2Ejkfw)H%Zlw*Vr>u)9)#HPqu z7wM-}u9Lo?i_J*&9IIJ6Xuq9MvznE4#>Cn*SK=v$7O}cA94l8@vS3HqnZ)w*I)2xN zgZ{FLClFZ)X@J_plW`8%`n?ad)$7p z;HmlTbh+c94^1bfs}xbm)Mx^74wYU8Qc!%YxF%^s?7aibd%t2sCoFShB~keU_zfM_ zu<}gfaKm%yH$5bVM?wXCOxy*U3AW3qBn z(6zU6Gf+YMGg700+D9@+BEuAhx9(-ZXVKTn!0d{A>@(7&c&&6woAhuwk$DY6TP=x< zZ91|4I^MbdAYR)+DKag?ol@JHyQF9=}KQyduck@a+tNOg{Pn?H6qQ5@V`qgzd)x zZRekwq>;!fmMGfoq}thrVUwk!o*%w!QLVeK8(22|d?+1TZ@zi~8{&5%$VdlJYKNbg zx=V6f?HSB*wFAso*UeCW9$i7$eOI*seq-BifB%~Vm^?oNd;aCw7k?AF@c-u7P)WJM zh)MbU7=IJGj6JRz+E>j_V+A}M6m3ZhZI!tt0-lV-JDa(DP7p&XTd-K+d7?iaK1s3} z6Zn%s>>t3*v@5;sC_2y?OsR_5&a#q+tg>C zC^&|4BKd40E$5HqZsF{Zv4Y5qa*zOxgDz3=fc=*FNjdD>HQNB?>)sLDM$5_bc36;C zFXI@tRMk8-c{=Za&Wx)Elg6_LAFs&Am}YsbEArU)OL&Tj4=~#u*MPB9+1y9U1>E+V zc))q3X3a0DbaId*if3JHE7iIHM0lTp$Sgk`dlnatJCxNeITP8U%DIu0Jg@fSh3Y?# zb|_Nj=4z+egOpBgnD6qEMl9~x*V)uty;^ibl~{w4=*HTeq4R3lvol9}O~%8P2F|Jp zm)?9l@X42O)GOcfe|np!j~E$dc>lJiJOTV`wn9tD-|GRAN;{F#NttU^@Zx$=BEu=w znde{u(pEYN?K-EB9-%$vOdwPZt5G`sU`C$SUejYhyHsgoDa+$+ z+5nt`S-V<9n{IAQGPSX^?YHlF#uI#+x04Rd#@w-w%1?(EJrw;xwyK1uwCIgOS6q5_ zq@79|q+lOEqYrTP$100`0jz&xm7_x(soUO3({j-Z^LWzAO%olO<_9rV5gR zQgnhi^gXvMKENEk5z-Eea$+g-s`)ewe;$!`+C}$%$qLJ*-+=DM#=4_0Ue|?N{-(N5 z_ll(M6<4<7!fpjd!diY+UVuaU z0wzlko=vxJL9>3Sq#kSW$hCA7DV`{Ft*z8&2^D)m4aDx_U4I~L`|st!|B`d!k5;e{ zIIQr;0tmL>pj9aPM6dKyzGyLBV#SVKPNA%NrpZKb(axxpVNbpg=+HY_> z03S4DA}=z0ey?A62ftA}MQ%Pax86d{A9jPk^ zOY;mB7fhORvooB8A52g?0>?&el#f6;8b&1-kO{o3elA$1g0>EJx}UVkY(sPjC{=-j z!gueI^O#EPkt2DFmILKQ~D;g!j~TZ!`Wn`cOWk zX>n?BFN(R#aBr<}v7=Rc|vQ zr@_bi6Y9KCL5!60nUkBHn(bEay{tAJ>JY@$ODD2zHN{iKbvW7#|F%{=Xfw9hfuH8W zmrSJWw5K4{;FL!vz{~$GwP9(_U?QhmAK{-t6=!l$>}_GT44Kp=&tU=UqzSPFBnl?H zuG}pg=+dIZOwbSSu^jeQZJ}!JXGo zUU*^AB8fB9M)VZ3yFfK(^VF3-%&w*&P&mh?P#jE-v~(g;%wk)b!xcB_ue~T2W&q=E zpMDT*A%N)NJY=PW?I@#2G8g6pAj--pWGFzNMfv0~GB=NQqsEpLh*mf-Z0maQWibxP zc}8U_deJ2{r<=)6V=oh);?ks&DOvhp9J{6%ZgVBFK ze@%&9SMf5VGzUk&IYP4dxk%lp>pt$&n|-Dy$;jfg7w_t2RDJ2@f@^OBmP{g?74kpj zFtr&UhU?)$=#GEUxJ8coF0Qa5MH35+VJ`93dbX@p%?^l`>$k1CGMNV%=SZQC)~Q@W~Sz5g@6u9Z7RqIl}vb13&YW|Hm0qum6L2Zaf9vO11|Ao z049?xS!A>yM)qWNps zS34DHFpYOqHcGS=fSAM+)ox$*j!+p5TGaJ>mR8lm5WNc^!evCA7Rg^8=-_h26iFgn zp*&4QAfx^m9+HAi8#ucR>+|R!J4Q)kY7Y=Hy{4z9O>VvC5{LEsRSu2O??(=BGV7}` zq$BWEBa)wM1&?FyjHyuWt_by^#<%4`er9+Z^6CyH7I(_cVWo- z>`C#PhI+c2*q^wmOr?_j;k@%{bXLI8SFf(#=-!`nmU5c}I#E;FeF*k(;Q z2-PKe-|c7L8P_lW2Y9gi zTSaI?XW`vSro~-^SD;66aHU?^AQN?U+Jyskb>c){H znv3=&e9^f9v1L~Sx`oHN1G8fwici06L|?&Ab-w4QKhO-ncMIXEl?BNCl!2a}I9YA4+emBwo}OylE6A5a)tNbM#8QK+8`=XlQ; zTF7J1?bWjS;~oQNIt2(ttjuyMf-j1I!sk2~ChpaUZ;$J-2e?$fX$_{vjDb_jZE+iW zyN4d63W6t6W=mY0JcMD)p10@cv8jlAz)jR@9a$uA540TOw2wGOwYA6-N{At_FzooD zUqqb<8Y;Xk0urA~pWYHlC@I1%Ixvk~PM;%&H$nZhx%1*Z#MZ8WkjN{iRCUJxO<%%% zmm`mDSwvk(-6A0hp?c4~@8hV2O7%(4i2q8Mm}|s}kCR~#K7qiMn}lSRLl|?RqjDW7 zVWONeToCenf9WEuk}+aO9Sc`8j#%l&AaRt321E^nBo+Lmf7MdCK}^8k1(*< zp_0hxj9Lywr%fhe+S2wvgwo6umRAsLo3pG$@IBs5U@3kvcw*)K_CiUI6E38>SDdA zLMt}R0x|hTU-0py2;{1IgNH>lRV@~KoFAkjBZ>m7lSa5o{Fc(}LuL4EmHKA1K7MmA z{|w{`NmG#ZRqC0Qa+m@kX6yXx(6431t;p+Ekz(%{9XIuC&e-@`BPf}bc1o%Fv<=%E zOQaXww8L~)R@JKUsm&3&66N`@Ql#4^^&zoffiCK~M`;xpDn;dXLdvc9{%gf#*2r1s*y4 z2KLGjYoqZ(TLk!wZ@wVsYToE_1w`y1W~-1p=Mp1IzMIcWFg8&ArYavVGx(NKh7Z3K zL$#!3BfAPWp8wUWu)6T?nMc69Pf5NLE3~f&L5(Ro7@K};$@Q1~Y9$Ws9zs8s!{Gy~ zMk~zK$LTj;1s}X|({~zE;WjF3#vt{8XNBsy>f|qab%m4 znEVwM(Tb8|Jx#VQy<&2CdCG@vHLWQ&A<6JJuBV%X?aJc*F+ZJdcdq5&wE!%j=K)72 z6Nw`ndpc*pF)w~2$TSC=y83>4SH5$I-dxVi9@IrqctU9|A^k_jyCm%<27OIp6X>NY zqBFn;ah_2=?WA?R&>tPrDS+WUey1&wg-7dcK(MNDsa103Szn4j_-L*({M6yl83BZQ zk@0ptZpfjV35v5@Hn~e_(xX;QR;D74j`a9>M{Zk@cp>Uz6^``m&n4I!arp`%e~|h` zGo5Ay-xcbaJt1eL!?XQCV1Ha{2vmn|NiNV7$f$Ae1$FJN~&yg{gu+R?UF`)eEt-#i>HPPU|*jjIK2l8GxnC6%6#S)xUNKcWzO zLbo%}lYs#RNy7jGzAAng2T0_2W3G4ToUJt9Vzq}EmK)J!hO<@vM7 zV{jU44yHAZlOWg@qZd*%G-i(K32AZj%N9Ua3q|B)L^nO4@`vGIL<@R4LNboR?|C$8 zP=_ZaVcUF8^H#{w**4FUOcST#@KS6Y=5N-JqWY`8rU261m8}Dw2ylq(g8o`WkVvl& zbtu+v{Z()U{c0NYMx#ZB_2y^2nu$6fNX0X!(w_Oiu~^^!V}Q!;IBT&sT`yH{#u`t; z{P`OpF(oo}6OVwpU(p_K@Hv9p+H~#8MpoWxMEmlw&%2-PegBq+^X@9_Q;2?ZNLtpF z+oF8P{0BRY9}Iwq49H%PPBKUqaPB}k!kHZg)h%`Iwi;(r63iSG&vJyTzKW?=lpn$O z4S}hI4khcS7Jb^>3?0nMAA)`;!wFKVHyv2O*b09n#%27kl8xhAsP)S!>qTOTt*s1> zn72QAO38SLw5t5bKl8(PiO}p*yCt21Eh|=XhokIMx5wEPc!2|C>B#~M^BIDH>pmmK zWsqfQ^zOVgu3)M5D0wX|-`K>nM3sgn-|G}@l6)+hc)o}1yYol$7)aumY6W-PNwTslkOF!4_-^e z&?8!8GmEprbBl`Brtna4Xhv@*ad$x*TxxXCbtOgKA(OURkJo97x#A*8`YHSCXm&h} z{n)KZ5c&%&yGpTNsQ1o@HD6&Z#(ADys?l;Qu4F{^RvGdNmV$h-o{*08p zDRY8;<O^1kEUOSb#mpHx0Z*{hr;rZ%RjC~doGEW^?Qm+UUpnmh!d`&X>k96< zyJ_f+k+N^9g5-+GZ_e6y=~P%9MR%{}vY$s^kpJC5{|CF}rRAw2{7<|3XW+es!2G`s zx&LaAFAdOv-=*DL{>zP?sy5}gsPXMfKlxxDPsu=t!{mX4=wRS>)YkoRIan_FUR%8)CWX;}=Muw)2m~dY&yl zCq5ZO#7wE4h7sfPI8j3u4@zdYDWiJP^Q#z|{#br)Tv^&-CdRlS*b+|T{b+J<(>51*l136?8+(*yw~cz9up=5hap$*9)!qZ) z_u1wK1SDJKoa^(@*HsTYSOUTdzJTC4U(z0oq7(EaSB`Q?xgnfRVQ9UWCBCFW$;yek zN?-_O(cR(pJ7o6yJ+kar()&4;{0^Og-Y0lZ`ZXHuwGNtw=4;e&ZL<>`QGzt=(QHVr z$OqY`Nhd5r$ZB3B(>Ef+A>16u*+r{(+2?4lVGvl`@nRw?0R!DQr=@o9hSqbrb6FSr zy;sE2UD1W}?&2?=50-9^%U__kLsMvrNRk)Qw-+?b*KZOpfRq;&>=!tuJ7tDjz(=p5 z*`%A*5ZzE}{V6N9HAmEn@LNr8#1r%Xti1#Q=@Qj{wO0?5F5LC)|5vB}6<_j&4k~cM zWkCv4;L3wR2vaIB)R=UaU&?Mx%sT;(RL+P6-pYwZ+zV5iOcoiNJ4x0CP@c)WhqziB zNC%-Vigo!)W8;80QXr+}1wiyP+!1`cv8exJYRy za^w*AnsI2R9k5?9$E97$TVu9suzy#alDPlrbXZSE-*|bdKx5z~Oo-O3whc7H-Arh{ z_uKm8hUe0~nwEAAx`HwWnDKQbnHJv#SY$HJT?Tu|Qjp=@5eO6VnoOxqjy&&JXe6F- zgG_lPoU}(swC0?|N8t6AZcAnIdO3(VexJ6+sT0|@_OY~;l3A}rnjefckv?r%xo@Bm zok0tV0)&U=ZL?ZJVppxJnt?-UH|D5?KHH1Nd(7cK1;*b4Fg5ddBQfA(#!i@7YjVqdgcjE?Nh; zjM)L9gaEX7tOx7!&7=IkC@+i%Y}t9exo$PN3Pr;y-sjlMN)fnJ>VYUM4kk|f6XoeG z79(gs8{fJre5+Vqbi1%8jvyOo=3y;x7xC?^q}DP7@0zpS8T(4wd1};Bq}UM{64VV zKLg~{QYLWAiL78Ygn=IMUMUEDCy57$+(S5k=^4{ZX0%u7?DM3VxoIns?+Sm>b>6V% zKR75=;Ke0~?xJyjWvF3RvsMVkvTdE$IXnhd1Z>%URM~{(i@*7Y{1t6EY-D~KEZvev z{~~T{FBne^$W(5=EBT8SCP|WCqj_c#f?AoEOni{>qnq9qLfg@%7WB&xnfetO^HpBX z2{HKto31m?yE|8kicCIs_8{ZZT2Pb_q{xPjEL5>gdZXs}Bo0xzW+}A)O`7-P750HD zCs)3NBNlP2K`xOJ=|kb2 zvjXj%B17)-2a6<(7I67IoJZ`5r;3Oa`4*(lW420?|1L?&0M4(oeKlv?bv#Sh_$;pv zvajE#uiyQ9?zcQ0I^Tf!fmEGnKcEGPetg5j7@(>L#~poPDg29CwwI5O0=?U3jDh;f z^T}rOVh4tLfY$V;jFET0cQ43~-AhP_vhV36hAbKK0zs_F7FS+Ly|{E;u{Q=5fT~zt z$(-r6K9~+sHh5k6E~GS&F8^T+7JVDj{z}2&CqDGN1QvH71~voS=fP;H9FbhQ>5NJq z-!3OL@#-5~k;}%u@j$lZYrq4qWJ|4QyBd4BsTE+@okK-j_H49YBPDG{#B45A9a!_C z>)^;GtP_BOh7jhnMqMwzeDmUDQfmKY3;g)e3BXglvfpg=?b*uf679uR;5S>4pzf+t zC_-Q3U^molNp%FSFF^XKZl+4D2~dP|TumOo{P~`T+mv(eZ|umq{bl6oCnZD$1#xeC z|MJg#ye4Pjotw)(Ty-Jn}y8q93 zq8<6#YOVqm4@IJab5m3eV#*QHq3;*D^QGdt^Zwa|Vrf0_Rty9N>zcmaZCR6}e(Sz` zBswcs1am1$@a#8;!n+i+7uQGDwV=~PVMuOkxxeNnVPEYaW0&*CRR@`MWoAd_M{RI96El|WeLeN{VlUP9`qlg8U)ZtPpurm@pH+i&d@E1Zw$|oK zA%RtH{v;bSWwY!dB3La1j0eCiGKQs=75j1)@z}$LCnaVZj$29OaIRO+)*q$bX$DPj zEv?ul8>`~iu}EI&lCIms_Q`EDb!(!Cw=1$CM*K`*_M+@l=~Hv;_asQpU-Zs6>PK|> z#pC@n-R0qq+Ao~lzdo|DGT2;Cu>bKJuyvdwqJ)~APzJ*pjwdOBn@{ z@Nsj|lgf9R)Dna0=+vVb)fvFdXPRq~pBr=-Izx%Ded^Zwz3rN6(Fhp6*Den}Gkm}s zG}jUV`JmDiN4V-boWG|!Y+6!BT*@8T!9iyVZU+~uafkIob2RFDf$>2*d}eSGKB{34 zGx#B7E%t8d4N_v%XnCoB8aCgQzI2BXr><74{cbZ{kWi13PsTPFz(TAEX{65@^jnak z%ff9e{h`nMTCbm4{VSWYK{kgYM==YEE`UA+Sn9pn$($^B>UA?55q^oe)M#9R%>$LK zk+Z-(2BOQWc3?AnueUy#lS6iqpZV64Jy5kEwdtEdgQ6n0F9Y|sAc`4cMLac0!I1Md z3Q&0>bJ*I%A^9_>nP^Q)%V{TFyk+NPz;F6IytGu$Z*Z5#`N>v%05n-6BJu2AAMO1D zcHqRO$HS&O;7g@jYcHVwY~06-&tPi$F2F4|T~eQgin_Lt!eDx>3}x?@%AZk>>T%xv zEAQUM#?pHfXoBtUGdN9{3#VhWbeZ}!(J*vvB{UXp)2uA)Awa)+z&Oa*nz}M|8S-7j zxyb3<)`t3v{xwcz+8Oye?WS$F2QLQ$*b3)tz@_Nvf^-9YL)s~I4sE*y?Ykyh!BuxE zK04}J)`_IJV~*>OqpY+~6oQ8r;)wJ&8cr`tqC0*UTI;0A*W6tYfjh2j8dH$4=zXAU zL{w{}H0;{}9WjQz2y^~hn*zyUj*Cutw#0=sE51M8@&=2*ubc9T6{dWrd3ksuAXwhf z3(JR>SX1jdbX7b>k$y&5$nIC`dc5y-YxVFOyqDc@CGR-Ql_|$a|ERTEWrqWnNI^qi zhNOV9=pH4e{IIgbOQ0!X-Vd}~G1`qy8U7)`XKSK(oPA!Caq|(VUdc0+pv6M{W{Gjb zK^gZo)jwOB3G5ym1Y{uqFN!G%AiEj&Ujo5?AhIWFc7C4aSp3P_W}X;sX)PRct-u$4 zfsnjI=V?E)qY;3t9OG+@U;Ti|&Pf#CNjcJ6CpE89O9zOh?(;QV4Zy67m=oN#=kfrc zK6XjizOLbsW*=;Mo*nXI@A{SoBU_tZGbp}N3aenA+Lq*g#*vcK_fjbsT z*DS3)z0|j&{kIfFHyA|xLE1_SqpN(*@dWR*f@*x-HGi=tF|3w^Qz}VcNWae>DAO_s z#jb~IvKZzUlj=EP72uHq!x4SraZTJlw(bsCVwG`o8`$RGh~+-eU2g?t|3XUKD4N~W z)DnKl(fR*i09HX}M+Xx`vQ#~TidU43sEyslzPX|@ zl6fe~k3>KX;i%1otHKd1Jd~_~Gpd9$Nv9DL!6c&uIY&OnN49y%rR>rIP-h~)DMY^7 zsSn^{pmh#?d5S>;|LUmipA^c7_Mr4#up6+&xxAz{W}ISI^s2F*_9VT&d_xX?NZ-dF zmswE(1E=6hU0JH&arJJB#wrkVDo-vG&t2kGF9k^cBK3(HIDP366Ih7+U8%U(hY6U( zLe?7nl9`L7G$}@51)Fg%bV9yI^4Z{4zNgn8V+1Y78}~H;8@Nx^;Xv3ea7D%5?mJ>= z{L|JlLk?_uV_L%huqe; zN7r|Q%m5!?q@YMMWSSRPu}Nw3We`oVKmcj$Q$VledH&k*D%-`5L=Zo{?ieRE8{)-M z7N~^nM%~HsF9os1>8HypghOTqhVzM@$l=SP^|gGT5i$r*8C@74g%qyDzzP@5kn9!6 zO(@2AogO{&Eh1uVLI~tLcrr&xJRq^{h-NrD7qJUO1flMsnFxA&5*eT!3q3bL>u!Di z-t95bF92N*N)~;{wxz(jkH20WR(Ee)A(5lt7o6gb8%m0=n5#XBUoe}@*~R3M4IAz` zbdPUkj~Ww}EOo=j?6?5_WChh}JOy!J%^ZV!`?-B+A{=IpNqZ|FccNMp_=VHNqaQi4 zRW|@>FivVyoL6c&Dh~XAdEvE00yb%x(DpRvD3}f~I(Mk5<;2&h#iAs5XhcxPKiu3r z8+C(5zI;lE0ssmcBc*2cZL{Hv^;`{$_}M!J}T~+3WO%-i2~D$n3n7-pW{WV-?X#^!b`X7md!~m+6RSV;qs%pstk?{Mpd+&!n=$rOX=l z8TYp05^;`eGh91ar}xf#{&L~cIg_)e&g_i_Ufi@8_lCDl)&t(d9}-At{+caZ{6RHw zqT8w+09$#aZ8OrQmu$#WlYxkVVQ9^_HShh2W}%50 zKk@K}Q7K+I(?*3xSYJ^zMoH?j17bK|HCIW2px8ToyCfk~>8=U+q&L2!B|Z_!d8aLnG@R~@PCP{Bf&Q^Q~!*- zN9ldT;DrCBuhKb^0aG<}T~+@%kQ7{96tajf!%C*Ct=r%qlGs6d$vQz0&9hJ(Ln?Ir z);?B{*60dJBHnip2Qd@}=6-wIn4MaBfPrs3@nlK44)fWN_}fM2vIW^x9N zj>=i&b*&iqRyq3HR(0Jk2<`a68nI2c&4L0!`G{C>YQ|VTz=~T2A9a4}?v9E&0^f?c zh%S>=YO{BB{_Egy0~}1}MngZ?&>To6!omEEuuu^#Byi`$gp4jy3ucW2%1g9~NZfEW zLXF#csF9S!BqcVl@eIz7H93YqsCec1p%qeg9kq#y7)i2}0y+fNY#XI`6LR!g`fhU*En!19m*>`?Jl!8F@6Sx3}mqA&w0|&9BEvm}egs5orFvf@30Kzi^ zs~ymE$QQM_YRo5XJ5q{CBFOeyRVHc!^xRZ^`f0AnHT$g~41A=RL~CT_7+V%+l>sO! zN;e^5U`~9!U3J2g-^0*JRQEY!-C@07!o=;XgJ+U0 zZ0pz!mV8K`$#W}@bJ$6BWwm^E4jN91N3tSKocxLw<8pMKZg_OQa4BhX92Xaz5HrFRCDadS7iM* z=&*f85j{3Ue{Dm%B|T9_PlD)T*RqCU#I%jIJG@N?>f3NXl$wF75Bx_SZhx|CA~oL7 z)%W75%w1z7;<&8V^B;`uyHuV8v#}m8uW&-Kq$44nOmRl^amEDbog5`~kT`WfjP!54 zC#QXcKGLI1n}ft3qa!btmm|!lBQ?0aj@&@gl0XXYD?^xDBZ624Slz?R zJ<5i24>(0KR7F{T?#nyHtrP-cMMMxTBmAQWpWp8~C))jBbD8GpF^eI-3J5vR@A%i< z+H6tiE%%!5DR8dn+rlcvv+a(7@2Fy}_##9o4Km@{x{|m9$`S(Ok@0|v1Kd9N?KjhG z@hjY|gzH~%bu5j(Z>@HB1*4%a(H z+(YOlqH*%FT$;lB*FiPJilc7dDUuF()Xw$~{vOe$x+6?>-wsy`1NmA3$-d{Xa5DFC z*GZkjNIJrQ>)YeEasOGJ74H7?ua9oJ0O$P|<_*4PO>zd;Y$T#xUi8D;av|55;0|W{ zFA_mO^tPb>1GX80WWUhi!YP{dB4wywi>ni~*^a$__nE%jnM_TN3c1O6rYj;)?;m|y zUW`@6o;-WkfX2@2 z|C0Hc$npMGf`Nfu{X5M6j;W(Pv#YxUvunCi2OQM@8@Zt;BmH~PW$HltLg56r0#32S z`od_uf*Vmj$*7Wwf;CYXDu|V3?>j) zwIw}1W4wwpIwl!+&b6^t&kyDLSx*zf5Abv0?BO$Jr)!kaVZ?G4e#h$Hj{xYi#(3x? z>(ieRw%rsCAyB&WlA&nJw^?RDZ+N*uYp-dB=qx-~2CHo%h=ZX;U0!)?qT^5mZB=ROq49 z)G9C$RCIngt!Gd=XZ@zw0KbcFbpnIeiGq|w`JfrJbJ|D{t3b{DNz~)bckl81oJS%A zzS#$gVy`wIo6KTy+7bgt9B07SVs#qml@E7YyzAe$4|kb*!r?r;e#!s*SrTbd zODz&EQvPuaJPzMw<)v5)ULQOKGoQH_UC}9CB@d%9UcvtlHWC;&K4{4$-hT~l4M_M9fPDV_@)Y2oevR?i) z*agWeo>`)P_7v+hu^>-~V3&Z#Vd$`3Y8ll46Hd%$8ltypekTiavF4W;=D8eCp#%U1 zd8LmfEn{~G8_hqmUm^Vc#3ac2GlS!9+hqRJ> zS^-)<(MoY0>%%FTN4~~!G8IGXA*XP=O#X*=GwCZ_LsCU;GrFC8q90$Z!3NY>BMi=T z4Zj-6B@%n_PH84N`>qdDdw!i$TdgcWwHL(jzwkciY?Mu8!SZ@9T&jP_8iYgi z3Z7(J&xu!l-FFM|Ik~kbAGaN;oVF0G_;)n3=CEvJ+Tz| zzlC>PV3RkzpW4#n*YoDP#rEVOWhj{_>u+OJHuxaY0_1V*A0giuj1f)TrC_9_E%wd& zO}5T8Z1vAIkbCmf$~iRbfkpsu)hH9h-+bU z_vrieJN{9}F~#5uZ~Dj>Dh zDl?NweY2$U>fdUV*zv^$IaG%dw#5Yo4vlK2hK5tb2XP{O2kZio*hytY%X7ChSmDe{ zVA;tTyWy0VyUuQ(n@-t7xf)yaqIuoAO_YLV$0;F>y0?--F=#|3XIedF0&~tKr@~#Q zfOux%OqQ4-Kb3c>)hZP>RqecR2{eJ<Heb(s*wLw zECEK1ruWO44VQyVr@_HqsqK~@%<+Z0!)B7#TYE%awdVoddj0~};wUn4z-tKsaHTwv zU};pIIG{~iV5^X6M_9-%~X6B$C$C2n4UM zqr$Fp|GakoiiLQ$^_m4!UiZ^QVEF=gurgLusA+0!L0Xyu(wtnGeX_~!%P%(vqYhKs?_d%1pjSs{WydN_7FsEJ5V`)%=Z7N}40_=y zsfMc9Pqv!okCOIaST-lbZEy+0me8emoS=g@yzD5dGd8uh{jSqaxjAYplitEPOrUXP zheGc=#2I$ppE@VSzt|fHG~(1Q;MntGZ>$6S=H{8Pi)0@>K{uOQ zK?uo(1p={e|VF5H=dFwwaA#A$e6Q%;}i&85Q_py%yYpXet9_Wn zYui(Hq-p#eJnQI&i?jV)#H25xkB`zYsf41O5$UvAtc~!93h*&VJLeODP5TIe`X0A& z?M|+pWcb$7m+23{^smQ&CnPy~p9Q%z5S%K=4t14^>ac{-5W~jK+)J(*T1QCM)n&On znuQMA0px&)YNl%ILyB?O{ICHW-|#B`;3b+b&qAK?W#02=MdIr$8yEb3Y~Nh`T&`tWs#8PY5;!I{R9JW~ zlt=w^U_5@Pc|2C6)yYU`d?7Gqj%I8{^`Wcg)UxJR5!=V@``p(ZOa26I=TshHk;^;5 zzNA1!khlm$%bh|iqguzWL}a#RVROt}QBH*d z^6oU+73Uw2N^ztRJb@kRjTP&N)-K;tvV5)G!!`h~{X8U>2ob1JIc zCTB$A8166dVM?pVGOzz_S=1Sqj_i}Q4LH>gtLhA((fbAvI1|X(<~oIZo6V13b$e-X z=_wSptBOfV`uBh4Rq}{#uVQNIGUFtXm&;#A5T&D+GG_SXM*|X+l@IsFEd$JGHh-42|E+> z-_3)%>F}EArRKKY<%Y%TERypK79?ZPEaYV8;0jMgA)^Eu`?K4P&8=?|#ty+^daAMy zyE5phXoe`z6-Yesf!xbi%N9yu{DI-|>X)a08#KXbek9eKCP20Pz+ZF+`ZcOOFDghl; z*VGg5l-ESqv{6cVZ5_*E|2JG;5H>ZNk}l?%dWE!kdd~9CrkS(oG+-{f#Y4H6$)0>H zVY!U_^Pdpi2AosKI(1!>xvQva$^kpX>AsE|_Ewgw#=gTV!#QXAHC-XKTRR%!So2Y1 ztlY`>d%rMc@v7($eU+WU@=yFiF^YB?y%k(g*af3%YIY&om8rJHo>~xx3qImIX2kh` z7Jnx0K8@aDUIHz|8IVx5)a-sr@~onPF6x-226#~lhZNn*I+`)*AYk2IWG{ilKhaTD zE!g5Sv~KgX+Sm4S`MZC9bP8cB`RYxJ5ANKe#ISDc5_*9)iA3|2v{~C;R(L*>s*LVe z?0F~m10Z&J-bs4(!$xb!qn={FYJU#8PRq*DLNN_Zx;*UqV6PBfbaZEi~&mnE?2rYr-t}%ounTZZS~t3 z42<5a>hulvKI0h#YLQz?$Ua9k&D@YK^Rsq^UD2|_;t zjVLQCG#L&4Z3YxRGEvYHhfG-8;9(r7iQ-(WoU)lQ_;_YfJB;;kpbS(OMhSe8;q+53UQati$I4{f z62bbyd0GpKI?3pESaNQ@uvvUve2AI?W#aJeD>vVOO;pHvtDSLy^{G(K%)51ixXI$R zYf)+)qUJrLey;7$i9Pay9g&N-Nh#;j4VLs{MrYq-}*~-@o$kgeOuamEmC{y~;pZ_lH5!q2Qnryo?KfdxB6F*olyIV}!{$ZPYZkSa- zx%9jHlW_OhZgoE$b3UZ9Gz?N#KkhNlWXpuaN&+f&T&fXDJXRsTY3SlcMBK1^C+CQl0)ye}A z5MkJ`_r!R3prLWfnY=NBu_5$1JH$8Ut;TyY zxAm^Y8fABA0!Px3)RVmvczt&Y`SHLq!w<&{S(#$2KHaO+JF64kRW>4MXC5eyD+t^% za{3ez2Gc=hcKWx^AnxnfaQ>F?<*pKtXHp$!c=0j?w?N+0bU8sU=X*N_qumJT@_4A_ zH`+Zz;*s~~maqDD9D}wRUl$YAPrbL6rE|ny@IqL#tFWO17}5cRYQ_+FgB@JqboEC6 z4HeRjUar%!QBJ^-=LX%{w4li8VFTf)a;XHsXN2Xj8TL{}ScH|YIP@g}53KaN9BH3< zb}K6Yyb-zg+Fx?VtuW17oa1~i zqC;=zZd5K-On&TnQ(a)D)?~+XCfTC0wV4&Q z;c10wX}@wcG9(irN2DhgZZ&t{Ee`s2NL^=sKyT{|FZDZfsqJZ`3!Vza6)C zt}p&5Sr;?V&ZEP8+gi| zwe_ARcw1pjixza2Kd2JiAS9^bwq@FezX~p=yX$8fQvJCm0+=VdBh0^;CIW;e{tBdh zf~S27r+pTvjw%4p>1!z8Eo7hY@^LMKAXt1Dg-7fU-6l93N;kYU}{5c#{OU&~1cKFjZdftzKz1QiWz$&}JlASy` zkK%Vm<5q3Y&eM`ZpR+h&MWtlhG~r3>sH=TZbv9VxK)?*ttLkLwbJ6PEUyI^6njFEP z;mq^XNgC4`5=-N2q^_;*w>EHpl3m&Rk$@0F(<^ht@r=6Lrh-)Xvykrr?C zUH8f!_W=bcS^SKLLSlsPAIdyCq9r%7=BQY^6A(PL7y@_FJQ3F0B(e`vu!mA`z|{O9 z&>ws4lHjL=yUJYetc5hByf=_1CTM^j&`Bk+>kj}Cn#6b)66{V*WGSlT%}^ua=Ux#9 zB*hDsMqEI*oIQ^pM6Dj}0D!97J0azz`J+w3V;w-R8IdtYBqJsY+QL*mOdT$#wF1yG zMM~+pfqK`m+G)TioO0B|1;2-Itf8iOwQO3)Cq9W!+sKKvXprFrVu_0Lv8P}zeJ~Jq2nh(hJxLh0^Bc*?%+sako_q3#vWF>Nn`dVS%5pAm#afBlxRrONcEETx!bvYhjr6^(ZAINOL8Z72kTBs3pd}ux+(+~K{xq*t zmnQ)lDN}NrhjLCxiyTm+Y(Lezg{s2YY82)d*Bx4*QehS|K;=r(mLAnMqF`ea7y-sY zI^X3fX4(p(nYIR=fQE4McD4p;7wk3anyFa=$UKQp&b)-cHE`0w5z3D2Qc!OS)V1{{ zJ=JBIP>B0BcU4#05gT5YTM-vtmm3jPU$HlbD7gqMrWf!>xv4}u`b!j-f11&m2B5Es?s)+n0i^h(5(QE`xOZXCnc%S0FC^A3Kw z+n43#WNCAg1o=XT`e(OKRy8Eu8MZ&fo!`sb<^}}Wngmx5`xN+E&_%OBQw%w)vaI@5FGrm03XX7x#g4 zy)5!i{_`*r@~zXXuWER3EB$E~kEoCy(ZhC90db-5wL0gzvHh%XPOMAD3346hj*V)Q zfv|mof8L41QPkLWzI0SVP(o>z!fzA!an1N#0LR0sKr^X zbHICFKO6Hp5%XF#?IrMTFoIpiPb_(Ggk7Jolo^EK7WWd`{avBH6c`|5e2d2sO}su< z{J@cPN=19>Kzk-wK4);2A2KgJBb5`tsQ*ymwm>j1N?k<8{?m#AaZe};?K0<8$3U3) z3lsD3_z-1+WLW6+6&l)ML7c;5IMq)e_cxalhcEI9Lq@6`#S*1tE22>gJwPb;rHO*B z5th4eXFIN7iH;`C3wVu`QkKv`r!w4%ddMeW!<%c+$t*6AEylq#8q}0VY)f)T_mR{vML^7MxDO z$#6jp^FU8tU8MU^cYbkgSk2ol!g6+L3ospiSlBIaiI}O&LU|=r-2H=4%CKVIHgR&t z^JG-4XgiRQKcjB(6!=W4n5uKM9C+@^bMd05-`c^MfXk2+<(nVsIP|d+)tqVT);=tL zB_Jflvi!U&036~rOr5b2Shzm#1*-iYuFiowv#8nDoen#;ZQHhO+qRQ8PRF)w+a24s zZ9BR7?iu5rbM8ObdyHLcuc|rgnf8j)N|*dO3_b4<^&eNTA7r7bdzceWAom~Hfvur4 zAsS~EYiP)md|lZS8|2`xMda%-(vw<5RVu&FR6Dig^AFP ztb`d@(Pxs8B)vg;4-C<9DtbBHU``Jh)?2TFPTci_sF(82KP@9#_B9`JyCjN9XH|D{aTJ_TXD}jLTwq$9&|8q&$H@np`>H)7U|x8rsJ-hO1$EWcLeSH zywYfZ(Q}K04XMdHu|}P%l8OT(Y;w*M+*Jv$0|8HA*IA%f5FQe^S-ArPq$<7s5!@>& z#KogTVMMjZqY}!)<6~Lgyl!|1Oe@#w9E^LH2YUo7-L_C3*WVm{=M14)WpVqI?_9it z(x&|pp34vROeYr|ND;Bl*C;z``M#G+Bd{BQ?V8Ou+!QnJ+kX`6G@}~YyudLZ7{Bi{ zq*M6#L^?!>#We-38@pp<*@D$|GYNz{vf!!vS24B;4{J0+wrin#OfY=S8UW?n#8KF) z-c*u4o@@r`Z)*upKB~Oaai^fVhtk#gVA;E12yP&73>y_DZ9_Oo`?b_=Z<)P9Uh;#0 z+rH7NMe2sHVGQM6$kMs*3rICC?J1T1=); z%L(r_TWLy;gZb`2@0{X|iC&*zp|{q7p6TmST3QAiQ@nGeomS3>djVL%QZtToj;*DV z%BJjT=sT6>CB2o1uMq54OvnR12HkGJRNF4P)-_FZ%e6tWH&(-8M``S}QPT(fdFs{p z9lO`Egf_KTtq{?VsO&A2(5m3H<0`{e{35j_=eV-dQFd$SWCzS>)ti$shx@w=5!eoW{do4UpoxHcXH5nRRw1|5#P5-%mOCw1?<0r8~#gL zt}Vp^OISheHz5qy&2kMPQ0Zrz10$F@WWdx?{f}&dC;frI`$7hdFkP9PK~lDBF#Urps45=N~;xDNXoNUn=vYY&S{8c znMG|uH=ZCf&Z+qnO}m#~6_P2vIa8#cY9-`2qdE?y_!8sUwnJ98^=oXU(_%WzF#7-{ zd_}od>YxT$s_zNIQ!02J$3~lgLVmHdu?P@Muz=MuF3)f@As^>rVG%LfXQs}X;>!i$Lvg{2ydk`?5ri&GoU*cP2cCrP}I ztSz;X82*~v1qxjbb!IM{5Dg~mvOqZ>i3)QJaLybCof8~}pgn5^2}h;tX>pF+V-#Ap z<%KZVh}GS?9hi8jC%Nl(wuV_?9tDOUmd7JU3F=AGfk$<*-EVfM&}%KeZe6$_K{hE( z*7950$|^^Ln_F!1n9o2S_np~NTG(>kVMe>%h^v*A61%* z-%z?Ujc`N# zps4@ASo^c?UkM&yj|e}w(wiC(=L3)qhU}YX)kIT@#TeA zUl-E*HT^^p#fTI|Dl7*GBOflRD)Kknpaw6Y2#~K+R1~=<=07s7bl`NdLqj9^QVrcrzzja zy=Z^)>v@-2H7Prvo+ZG2fq(xUU*}DL|2_GW4u3~rmNUM!{rcqg#F4Q5{d%hQYkvhI z7Y|7QdME$FCwET~BE^9O0#wc9S`#866>^ue7+`Xr7ry#SFf~C&(sMI*5(R~=C`;{D z0iNkaJ)~I0JD;$Ca2&pJMO9>_ngBbbdV&)$kf5?mPS()LI0`?4MUv2=qD5~G#j<>f zwQyuV7bB`y0i=KkUo^$^{B8!8|)+iz2K|- z_ZNDeKBxh+PkqK7(~co?P0eGe`PFsEUK=IH@&(%C)J?3P@Ty#W&K~ZWLJMYGefEZ< zTmIH>_sj|}AcXEV2`oAwgisY@3Y#Dr%s&)bNGvBN1aXNOU7hSxPMF$;x3Lt{3P9?p zd=kHd<+MQ%ylo|LsEgzXQ|YF+(@14~rO7JPDRPqEW}vB;;q@y@QUB&#w+XiuPI!r- z8)3^Z9n4ent&wN%u$=mE-m~%atFY2h1DOOJMMJN`BgD0!*LH{h2Gk#okBEEjn}g80ws1aFeRFe_T-!dL@z-cu?A& zthNH(-aXe>G>E-PtV<0!93~w(2mE?z#p5*TH{1rxNHU!VA9Go0h*C&hG7rU_;l9B zFUOTuFiZC!D3&H4RJALbnaJMiJiHQrTko+slXhY&AO1o9euilmXiH&~DxdUNF#kXU zQ;D3S*TlI07`laB)jbP7;TytGY{|KxdH4eVUuOiQoI~V2JMT{h-c`y?>wh_p|L^I5 z4oH$8mjo7ouaqENHP*SGdx3xyLbtuxv%S6J?f(1|_#c5KD+~(Lj!OXhX(2cz_Dp#}VK(Xc;`GzsJ08}$l6|DlF;-}+kFx)^Can87TpfH*;guMz zL8rMS%n3sR%q&FLvZ^ncE=nOJFEJ9idjW252&WXcO@<8-%Ig~=47lAP1U5&ILwz+< z_t4lwupJj8z2F3%D?gmspzbFFZv%&DQ5%cslanH|L_JS*2WzJ@ntNN=-!86@-a=;p zF;6B58>%$_>3^hD{pX^>CP}^DjrZ$Ukwl7u&Hq>(MoierhX!c>$HcVwo#SP8Bx9

    >V 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�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%0AU86cQHh`e@B*@c0nN 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

    a3>YEuqi4!z39m` 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

    8jCUp1vMr^ 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 delta 400526 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

    M}wg9s`DUgc%8Hkxj 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 z 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%0D4I@t<3sf%*))3^9QKpu!W%lkmCwS!|zZmnh~d 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 SgtOp)|4tSCsrpJfGxUG4t$x-3 From 8296c3c40e85915ba8e207fee06da2e73299c457 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Mon, 6 Apr 2020 16:44:15 +0200 Subject: [PATCH 059/166] Update PULL_REQUEST_TEMPLATE.md (#6251) --- .github/PULL_REQUEST_TEMPLATE.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index b5ac44d43fb..7bece4ad46d 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,19 +1,18 @@ - [ ] Change in CHANGELOG.md described (if applicable) - [ ] Tests created for changes (if applicable) - [ ] Manually tested changed features in running JabRef (always required) -- [ ] Screenshots added in PR description (for bigger UI changes) -- [ ] [Checked documentation](https://docs.jabref.org/): Is the information available and up to date? If not: Issue created at . +- [ ] Screenshots added in PR description (for UI changes) +- [ ] [Checked documentation](https://docs.jabref.org/): Is the information available and up to date? If not created an issue at or, even better, submitted a pull request to the documentation repository. From ff72b06b537d18c4b4e2a7f2a1c4f5845151512c Mon Sep 17 00:00:00 2001 From: github actions Date: Mon, 6 Apr 2020 19:37:22 +0000 Subject: [PATCH 060/166] Squashed 'src/main/resources/csl-styles/' changes from 900e4d515c..88726cb64d 88726cb64d Update Rhinology (#4672) git-subtree-dir: src/main/resources/csl-styles git-subtree-split: 88726cb64d5a7d1471b9bd96f818ea32785bcd91 --- rhinology.csl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rhinology.csl b/rhinology.csl index a4f25b60942..2b3176f5a67 100644 --- a/rhinology.csl +++ b/rhinology.csl @@ -186,7 +186,7 @@ - + From 4d8d69755994dba6f6464c2a222870f88051ea2e Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2020 08:53:43 +0200 Subject: [PATCH 061/166] Bump bcprov-jdk15on from 1.64 to 1.65 (#6256) Bumps [bcprov-jdk15on](https://github.com/bcgit/bc-java) from 1.64 to 1.65. - [Release notes](https://github.com/bcgit/bc-java/releases) - [Changelog](https://github.com/bcgit/bc-java/blob/master/docs/releasenotes.html) - [Commits](https://github.com/bcgit/bc-java/commits) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 512c5e3fd98..97521b206d2 100644 --- a/build.gradle +++ b/build.gradle @@ -120,7 +120,7 @@ dependencies { implementation group: 'org.apache.tika', name: 'tika-core', version: '1.24' // required for reading write-protected PDFs - see https://github.com/JabRef/jabref/pull/942#issuecomment-209252635 - implementation 'org.bouncycastle:bcprov-jdk15on:1.64' + implementation 'org.bouncycastle:bcprov-jdk15on:1.65' implementation 'commons-cli:commons-cli:1.4' From 7f1b57bd48392463a2bd17a3d6bfe89066d9fa78 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2020 08:53:54 +0200 Subject: [PATCH 062/166] Bump classgraph from 4.8.66 to 4.8.68 (#6255) Bumps [classgraph](https://github.com/classgraph/classgraph) from 4.8.66 to 4.8.68. - [Release notes](https://github.com/classgraph/classgraph/releases) - [Commits](https://github.com/classgraph/classgraph/compare/classgraph-4.8.66...classgraph-4.8.68) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 97521b206d2..d65e8de2437 100644 --- a/build.gradle +++ b/build.gradle @@ -200,7 +200,7 @@ dependencies { implementation 'com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:0.61.0' implementation 'com.vladsch.flexmark:flexmark-ext-gfm-tasklist:0.61.0' - testImplementation 'io.github.classgraph:classgraph:4.8.66' + testImplementation 'io.github.classgraph:classgraph:4.8.68' testImplementation 'org.junit.jupiter:junit-jupiter:5.6.1' testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.6.1' testImplementation 'org.junit.platform:junit-platform-launcher:1.6.1' From d829dfeca0c17767a423c298ef530d38f019576f Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2020 08:54:07 +0200 Subject: [PATCH 063/166] Bump unirest-java from 3.7.00 to 3.7.01 (#6253) Bumps [unirest-java](https://github.com/Kong/unirest-java) from 3.7.00 to 3.7.01. - [Release notes](https://github.com/Kong/unirest-java/releases) - [Changelog](https://github.com/Kong/unirest-java/blob/master/CHANGELOG.md) - [Commits](https://github.com/Kong/unirest-java/compare/v3.7.00...v3.7.01) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index d65e8de2437..ec6c6e93d17 100644 --- a/build.gradle +++ b/build.gradle @@ -171,7 +171,7 @@ dependencies { implementation 'org.controlsfx:controlsfx:11.0.1' implementation 'org.jsoup:jsoup:1.13.1' - implementation 'com.konghq:unirest-java:3.7.00' + implementation 'com.konghq:unirest-java:3.7.01' implementation 'org.slf4j:slf4j-api:2.0.0-alpha1' implementation group: 'org.apache.logging.log4j', name: 'log4j-jcl', version: '3.0.0-SNAPSHOT' From 46e27cdbcf79aeb8a255770ff4c6458ab5da0661 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2020 08:54:27 +0200 Subject: [PATCH 064/166] Bump postgresql from 42.2.11 to 42.2.12 (#6254) Bumps [postgresql](https://github.com/pgjdbc/pgjdbc) from 42.2.11 to 42.2.12. - [Release notes](https://github.com/pgjdbc/pgjdbc/releases) - [Changelog](https://github.com/pgjdbc/pgjdbc/blob/master/CHANGELOG.md) - [Commits](https://github.com/pgjdbc/pgjdbc/compare/REL42.2.11...REL42.2.12) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ec6c6e93d17..04c82de94b8 100644 --- a/build.gradle +++ b/build.gradle @@ -144,7 +144,7 @@ dependencies { implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '2.6.0' - implementation 'org.postgresql:postgresql:42.2.11' + implementation 'org.postgresql:postgresql:42.2.12' implementation ('com.oracle.ojdbc:ojdbc10:19.3.0.0') { // causing module issues From dff1c164ce94000d6e7cce3692b3f1fc1bcec2a0 Mon Sep 17 00:00:00 2001 From: dimitra-karadima Date: Tue, 7 Apr 2020 20:48:16 +0300 Subject: [PATCH 065/166] Add tooltips when changing the entry type Add the following changes: -Add tooltips in the left side of the entry editor when you click the entry type you have already selected or the Change entry type button. -Add tooltips in the main table when you right click and choose "Change entry type" --- .../jabref/gui/menus/ChangeEntryTypeMenu.java | 124 +++++++++++++++++- 1 file changed, 123 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/menus/ChangeEntryTypeMenu.java b/src/main/java/org/jabref/gui/menus/ChangeEntryTypeMenu.java index bf574cf411a..c64001495a9 100644 --- a/src/main/java/org/jabref/gui/menus/ChangeEntryTypeMenu.java +++ b/src/main/java/org/jabref/gui/menus/ChangeEntryTypeMenu.java @@ -7,9 +7,12 @@ import javafx.collections.ObservableList; import javafx.scene.control.ContextMenu; +import javafx.scene.control.CustomMenuItem; +import javafx.scene.control.Label; import javafx.scene.control.Menu; import javafx.scene.control.MenuItem; import javafx.scene.control.SeparatorMenuItem; +import javafx.scene.control.Tooltip; import org.jabref.Globals; import org.jabref.gui.undo.CountingUndoManager; @@ -23,6 +26,8 @@ import org.jabref.model.entry.types.BibtexEntryTypeDefinitions; import org.jabref.model.entry.types.EntryType; import org.jabref.model.entry.types.IEEETranEntryTypeDefinitions; +import org.jabref.model.entry.types.StandardEntryType; +import org.jabref.model.strings.StringUtil; public class ChangeEntryTypeMenu { @@ -31,13 +36,18 @@ public ChangeEntryTypeMenu() { } public static MenuItem createMenuItem(EntryType type, BibEntry entry, UndoManager undoManager) { - MenuItem menuItem = new MenuItem(type.getDisplayName()); + CustomMenuItem menuItem = new CustomMenuItem(new Label(type.getDisplayName())); menuItem.setOnAction(event -> { NamedCompound compound = new NamedCompound(Localization.lang("Change entry type")); entry.setType(type) .ifPresent(change -> compound.addEdit(new UndoableChangeType(change))); undoManager.addEdit(compound); }); + String description = getDescription(type); + if (StringUtil.isNotBlank(description)) { + Tooltip tooltip = new Tooltip(description); + Tooltip.install(menuItem.getContent(), tooltip); + } return menuItem; } @@ -92,4 +102,116 @@ private void populate(ObservableList items, Collection t private void populate(Menu menu, Collection types, BibEntry entry, UndoManager undoManager) { populate(menu.getItems(), types, entry, undoManager); } + + //The description is coming from biblatex manual chapter 2 + //Biblatex documentation is favored over the bibtex, + //since bibtex is a subset of biblatex and biblatex is better documented. + public static String getDescription(EntryType entryType) { + if (entryType instanceof StandardEntryType entry) { + switch (entry) { + case Article -> { + return Localization.lang("An article in a journal, magazine, newspaper, or other periodical which forms a self-contained unit with its own title."); + } + case Book -> { + return Localization.lang("A single-volume book with one or more authors where the authors share credit for the work as a whole."); + } + case Booklet -> { + return Localization.lang("A book-like work without a formal publisher or sponsoring institution."); + } + case Collection -> { + return Localization.lang("A single-volume collection with multiple, self-contained contributions by distinct authors which have their own title. The work as a whole has no overall author but it will usually have an editor."); + } + case Conference -> { + return Localization.lang("A legacy alias for \"InProceedings\"."); + } + case InBook -> { + return Localization.lang("A part of a book which forms a self-contained unit with its own title."); + } + case InCollection -> { + return Localization.lang("A contribution to a collection which forms a self-contained unit with a distinct author and title."); + } + case InProceedings -> { + return Localization.lang("An article in a conference proceedings."); + } + case Manual -> { + return Localization.lang("Technical or other documentation, not necessarily in printed form."); + } + case MastersThesis -> { + return Localization.lang("Similar to \"Thesis\" except that the type field is optional and defaults to the localised term Master's thesis."); + } + case Misc -> { + return Localization.lang("A fallback type for entries which do not fit into any other category."); + } + case PhdThesis -> { + return Localization.lang("Similar to \"Thesis\" except that the type field is optional and defaults to the localised term PhD thesis."); + } + case Proceedings -> { + return Localization.lang("A single-volume conference proceedings. This type is very similar to \"Collection\"."); + } + case TechReport -> { + return Localization.lang("Similar to \"Report\" except that the type field is optional and defaults to the localised term technical report."); + } + case Unpublished -> { + return Localization.lang("A work with an author and a title which has not been formally published, such as a manuscript or the script of a talk."); + } + case BookInBook -> { + return Localization.lang("This type is similar to \"InBook\" but intended for works originally published as a stand-alone book."); + } + case InReference -> { + return Localization.lang("An article in a work of reference. This is a more specific variant of the generic \"InCollection\" entry type."); + } + case MvBook -> { + return Localization.lang("A multi-volume \"Book\"."); + } + case MvCollection -> { + return Localization.lang("A multi-volume \"Collection\"."); + } + case MvProceedings -> { + return Localization.lang("A multi-volume \"Proceedings\" entry."); + } + case MvReference -> { + return Localization.lang("A multi-volume \"Reference\" entry. The standard styles will treat this entry type as an alias for \"MvCollection\"."); + } + case Online -> { + return Localization.lang("This entry type is intended for sources such as web sites which are intrinsically online resources."); + } + case Reference -> { + return Localization.lang("A single-volume work of reference such as an encyclopedia or a dictionary."); + } + case Report -> { + return Localization.lang("A technical report, research report, or white paper published by a university or some other institution."); + } + case Set -> { + return Localization.lang("An entry set is a group of entries which are cited as a single reference and listed as a single item in the bibliography."); + } + case SuppBook -> { + return Localization.lang("Supplemental material in a \"Book\". This type is provided for elements such as prefaces, introductions, forewords, afterwords, etc. which often have a generic title only."); + } + case SuppCollection -> { + return Localization.lang("Supplemental material in a \"Collection\"."); + } + case SuppPeriodical -> { + return Localization.lang("Supplemental material in a \"Periodical\". This type may be useful when referring to items such as regular columns, obituaries, letters to the editor, etc. which only have a generic title."); + } + case Thesis -> { + return Localization.lang("A thesis written for an educational institution to satisfy the requirements for a degree."); + } + case WWW -> { + return Localization.lang("An alias for \"Online\", provided for jurabib compatibility."); + } + case Software -> { + return Localization.lang("Computer software. The standard styles will treat this entry type as an alias for \"Misc\"."); + } + case DATESET -> { + return Localization.lang("A data set or a similar collection of (mostly) raw data."); + } + default -> { + return ""; + } + } + } else { + return ""; + } + } + } From 8968ccfd5d39d66a080ef0b6c6bbd4e8b0a7d543 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Wed, 8 Apr 2020 06:25:57 +0200 Subject: [PATCH 066/166] JDK14 switch - and checkstyle skipping (#6250) Suggestion by https://stackoverflow.com/a/61071633/873282 --- config/checkstyle/checkstyle.xml | 5 +++ .../layout/format/AuthorAndsReplacer.java | 36 ++++++++----------- .../jabref/logic/layout/format/Ordinal.java | 23 +++++------- 3 files changed, 28 insertions(+), 36 deletions(-) diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index e57c9dd8bc2..6905dd174a1 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -8,6 +8,11 @@ + + + + + diff --git a/src/main/java/org/jabref/logic/layout/format/AuthorAndsReplacer.java b/src/main/java/org/jabref/logic/layout/format/AuthorAndsReplacer.java index bf4be2b51f4..52531b47466 100644 --- a/src/main/java/org/jabref/logic/layout/format/AuthorAndsReplacer.java +++ b/src/main/java/org/jabref/logic/layout/format/AuthorAndsReplacer.java @@ -18,28 +18,22 @@ public String format(String fieldText) { return null; } String[] authors = fieldText.split(" and "); - String s; - - switch (authors.length) { - case 1: - //Does nothing; - s = authors[0]; - break; - case 2: - s = authors[0] + " & " + authors[1]; - break; - default: - int i; - int x = authors.length; - StringBuilder sb = new StringBuilder(); - - for (i = 0; i < (x - 2); i++) { - sb.append(authors[i]).append("; "); + //CHECKSTYLE:OFF + String s = switch (authors.length) { + case 1 -> authors[0]; // just no action + case 2 -> authors[0] + " & " + authors[1]; + default -> { + int i; + int x = authors.length; + StringBuilder sb = new StringBuilder(); + for (i = 0; i < (x - 2); i++) { + sb.append(authors[i]).append("; "); + } + sb.append(authors[i]).append(" & ").append(authors[i + 1]); + yield sb.toString(); } - sb.append(authors[i]).append(" & ").append(authors[i + 1]); - s = sb.toString(); - break; - } + }; + //CHECKSTYLE:ON return s; diff --git a/src/main/java/org/jabref/logic/layout/format/Ordinal.java b/src/main/java/org/jabref/logic/layout/format/Ordinal.java index 5587828634e..85290643e79 100644 --- a/src/main/java/org/jabref/logic/layout/format/Ordinal.java +++ b/src/main/java/org/jabref/logic/layout/format/Ordinal.java @@ -23,21 +23,14 @@ public String format(String fieldText) { while (m.find()) { String result = m.group(1); int value = Integer.parseInt(result); - String ordinalString; - switch (value) { - case 1: - ordinalString = "st"; - break; - case 2: - ordinalString = "nd"; - break; - case 3: - ordinalString = "rd"; - break; - default: - ordinalString = "th"; - break; - } + //CHECKSTYLE:OFF + String ordinalString = switch (value) { + case 1 -> "st"; + case 2 -> "nd"; + case 3 -> "rd"; + default -> "th"; + }; + //CHECKSTYLE:ON m.appendReplacement(sb, result + ordinalString); } m.appendTail(sb); From fe14e5490c7f9d7b687052f6492a88dd0f609f7a Mon Sep 17 00:00:00 2001 From: dimitra-karadima Date: Wed, 8 Apr 2020 12:38:23 +0300 Subject: [PATCH 067/166] Fix some issues Change DATESET standard entry type to Dataset Remove getDescription() from ChangeEntryTypeMenu.java --- .../java/org/jabref/gui/EntryTypeView.java | 10 +- .../jabref/gui/menus/ChangeEntryTypeMenu.java | 115 +----------------- .../types/BiblatexEntryTypeDefinitions.java | 2 +- .../model/entry/types/StandardEntryType.java | 2 +- 4 files changed, 9 insertions(+), 120 deletions(-) diff --git a/src/main/java/org/jabref/gui/EntryTypeView.java b/src/main/java/org/jabref/gui/EntryTypeView.java index cd8297a0bdb..266bd3b7e41 100644 --- a/src/main/java/org/jabref/gui/EntryTypeView.java +++ b/src/main/java/org/jabref/gui/EntryTypeView.java @@ -97,7 +97,8 @@ private void addEntriesToPane(FlowPane pane, Collection entryButton.setOnAction(event -> setEntryTypeForReturnAndClose(Optional.of(entryType))); pane.getChildren().add(entryButton); - String description = getDescription(entryType); + EntryType selectedType = entryType.getType(); + String description = getDescription(selectedType); if (StringUtil.isNotBlank(description)) { Screen currentScreen = Screen.getPrimary(); double maxWidth = currentScreen.getBounds().getWidth(); @@ -186,9 +187,8 @@ private void setEntryTypeForReturnAndClose(Optional entryType) { //The description is coming from biblatex manual chapter 2 //Biblatex documentation is favored over the bibtex, //since bibtex is a subset of biblatex and biblatex is better documented. - public String getDescription(BibEntryType selectedType) { - EntryType entryType = selectedType.getType(); - if (entryType instanceof StandardEntryType entry) { + public static String getDescription(EntryType selectedType) { + if (selectedType instanceof StandardEntryType entry) { switch (entry) { case Article -> { return Localization.lang("An article in a journal, magazine, newspaper, or other periodical which forms a self-contained unit with its own title."); @@ -283,7 +283,7 @@ public String getDescription(BibEntryType selectedType) { case Software -> { return Localization.lang("Computer software. The standard styles will treat this entry type as an alias for \"Misc\"."); } - case DATESET -> { + case Dataset -> { return Localization.lang("A data set or a similar collection of (mostly) raw data."); } default -> { diff --git a/src/main/java/org/jabref/gui/menus/ChangeEntryTypeMenu.java b/src/main/java/org/jabref/gui/menus/ChangeEntryTypeMenu.java index c64001495a9..e5625178f81 100644 --- a/src/main/java/org/jabref/gui/menus/ChangeEntryTypeMenu.java +++ b/src/main/java/org/jabref/gui/menus/ChangeEntryTypeMenu.java @@ -15,6 +15,7 @@ import javafx.scene.control.Tooltip; import org.jabref.Globals; +import org.jabref.gui.EntryTypeView; import org.jabref.gui.undo.CountingUndoManager; import org.jabref.gui.undo.NamedCompound; import org.jabref.gui.undo.UndoableChangeType; @@ -26,7 +27,6 @@ import org.jabref.model.entry.types.BibtexEntryTypeDefinitions; import org.jabref.model.entry.types.EntryType; import org.jabref.model.entry.types.IEEETranEntryTypeDefinitions; -import org.jabref.model.entry.types.StandardEntryType; import org.jabref.model.strings.StringUtil; public class ChangeEntryTypeMenu { @@ -43,7 +43,7 @@ public static MenuItem createMenuItem(EntryType type, BibEntry entry, UndoManage .ifPresent(change -> compound.addEdit(new UndoableChangeType(change))); undoManager.addEdit(compound); }); - String description = getDescription(type); + String description = EntryTypeView.getDescription(type); if (StringUtil.isNotBlank(description)) { Tooltip tooltip = new Tooltip(description); Tooltip.install(menuItem.getContent(), tooltip); @@ -103,115 +103,4 @@ private void populate(Menu menu, Collection types, BibEntry entry, populate(menu.getItems(), types, entry, undoManager); } - //The description is coming from biblatex manual chapter 2 - //Biblatex documentation is favored over the bibtex, - //since bibtex is a subset of biblatex and biblatex is better documented. - public static String getDescription(EntryType entryType) { - if (entryType instanceof StandardEntryType entry) { - switch (entry) { - case Article -> { - return Localization.lang("An article in a journal, magazine, newspaper, or other periodical which forms a self-contained unit with its own title."); - } - case Book -> { - return Localization.lang("A single-volume book with one or more authors where the authors share credit for the work as a whole."); - } - case Booklet -> { - return Localization.lang("A book-like work without a formal publisher or sponsoring institution."); - } - case Collection -> { - return Localization.lang("A single-volume collection with multiple, self-contained contributions by distinct authors which have their own title. The work as a whole has no overall author but it will usually have an editor."); - } - case Conference -> { - return Localization.lang("A legacy alias for \"InProceedings\"."); - } - case InBook -> { - return Localization.lang("A part of a book which forms a self-contained unit with its own title."); - } - case InCollection -> { - return Localization.lang("A contribution to a collection which forms a self-contained unit with a distinct author and title."); - } - case InProceedings -> { - return Localization.lang("An article in a conference proceedings."); - } - case Manual -> { - return Localization.lang("Technical or other documentation, not necessarily in printed form."); - } - case MastersThesis -> { - return Localization.lang("Similar to \"Thesis\" except that the type field is optional and defaults to the localised term Master's thesis."); - } - case Misc -> { - return Localization.lang("A fallback type for entries which do not fit into any other category."); - } - case PhdThesis -> { - return Localization.lang("Similar to \"Thesis\" except that the type field is optional and defaults to the localised term PhD thesis."); - } - case Proceedings -> { - return Localization.lang("A single-volume conference proceedings. This type is very similar to \"Collection\"."); - } - case TechReport -> { - return Localization.lang("Similar to \"Report\" except that the type field is optional and defaults to the localised term technical report."); - } - case Unpublished -> { - return Localization.lang("A work with an author and a title which has not been formally published, such as a manuscript or the script of a talk."); - } - case BookInBook -> { - return Localization.lang("This type is similar to \"InBook\" but intended for works originally published as a stand-alone book."); - } - case InReference -> { - return Localization.lang("An article in a work of reference. This is a more specific variant of the generic \"InCollection\" entry type."); - } - case MvBook -> { - return Localization.lang("A multi-volume \"Book\"."); - } - case MvCollection -> { - return Localization.lang("A multi-volume \"Collection\"."); - } - case MvProceedings -> { - return Localization.lang("A multi-volume \"Proceedings\" entry."); - } - case MvReference -> { - return Localization.lang("A multi-volume \"Reference\" entry. The standard styles will treat this entry type as an alias for \"MvCollection\"."); - } - case Online -> { - return Localization.lang("This entry type is intended for sources such as web sites which are intrinsically online resources."); - } - case Reference -> { - return Localization.lang("A single-volume work of reference such as an encyclopedia or a dictionary."); - } - case Report -> { - return Localization.lang("A technical report, research report, or white paper published by a university or some other institution."); - } - case Set -> { - return Localization.lang("An entry set is a group of entries which are cited as a single reference and listed as a single item in the bibliography."); - } - case SuppBook -> { - return Localization.lang("Supplemental material in a \"Book\". This type is provided for elements such as prefaces, introductions, forewords, afterwords, etc. which often have a generic title only."); - } - case SuppCollection -> { - return Localization.lang("Supplemental material in a \"Collection\"."); - } - case SuppPeriodical -> { - return Localization.lang("Supplemental material in a \"Periodical\". This type may be useful when referring to items such as regular columns, obituaries, letters to the editor, etc. which only have a generic title."); - } - case Thesis -> { - return Localization.lang("A thesis written for an educational institution to satisfy the requirements for a degree."); - } - case WWW -> { - return Localization.lang("An alias for \"Online\", provided for jurabib compatibility."); - } - case Software -> { - return Localization.lang("Computer software. The standard styles will treat this entry type as an alias for \"Misc\"."); - } - case DATESET -> { - return Localization.lang("A data set or a similar collection of (mostly) raw data."); - } - default -> { - return ""; - } - } - } else { - return ""; - } - } - } diff --git a/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java b/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java index 9344c2faff4..08e3ac006dc 100644 --- a/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java +++ b/src/main/java/org/jabref/model/entry/types/BiblatexEntryTypeDefinitions.java @@ -427,7 +427,7 @@ public class BiblatexEntryTypeDefinitions { .build(); private static final BibEntryType DATASET = new BibEntryTypeBuilder() - .withType(StandardEntryType.DATESET) + .withType(StandardEntryType.Dataset) .withImportantFields( StandardField.SUBTITLE, StandardField.TITLEADDON, StandardField.HOWPUBLISHED, StandardField.LOCATION, StandardField.DOI, StandardField.EPRINT, StandardField.EPRINTCLASS, StandardField.EPRINTTYPE, StandardField.URL, StandardField.URLDATE) diff --git a/src/main/java/org/jabref/model/entry/types/StandardEntryType.java b/src/main/java/org/jabref/model/entry/types/StandardEntryType.java index 9b2f87d1674..8a01a87cb32 100644 --- a/src/main/java/org/jabref/model/entry/types/StandardEntryType.java +++ b/src/main/java/org/jabref/model/entry/types/StandardEntryType.java @@ -36,7 +36,7 @@ public enum StandardEntryType implements EntryType { Thesis("Thesis"), WWW("WWW"), Software("Software"), - DATESET("DataSet"); + Dataset("Dataset"); From bdc5739b69148bcdb77259f3a303d518ea5b21f2 Mon Sep 17 00:00:00 2001 From: systemoperator <3658393+systemoperator@users.noreply.github.com> Date: Fri, 10 Apr 2020 16:44:43 +0200 Subject: [PATCH 068/166] Entry editor: Add more tooltips and wrap tooltips if necessary (#6239) * wrap tooltips if necessary * adding additional entry field tooltips (including SpecialFields) * small changes * ISRN added * small changes * descriptions adapted * English localization extended --- .../gui/fieldeditors/FieldNameLabel.java | 96 ++++++++++++++++++- src/main/resources/l10n/JabRef_en.properties | 41 +++++++- 2 files changed, 133 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/jabref/gui/fieldeditors/FieldNameLabel.java b/src/main/java/org/jabref/gui/fieldeditors/FieldNameLabel.java index 91b48f52721..ea4526faa1f 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/FieldNameLabel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/FieldNameLabel.java @@ -4,10 +4,12 @@ import javafx.geometry.Pos; import javafx.scene.control.Label; import javafx.scene.control.Tooltip; +import javafx.stage.Screen; import org.jabref.logic.l10n.Localization; import org.jabref.model.entry.field.Field; import org.jabref.model.entry.field.InternalField; +import org.jabref.model.entry.field.SpecialField; import org.jabref.model.entry.field.StandardField; import org.jabref.model.strings.StringUtil; @@ -22,8 +24,11 @@ public FieldNameLabel(Field field) { String description = getDescription(field); if (StringUtil.isNotBlank(description)) { - Tooltip tooltip = new Tooltip(); - tooltip.setText(description); + Screen currentScreen = Screen.getPrimary(); + double maxWidth = currentScreen.getBounds().getWidth(); + Tooltip tooltip = new Tooltip(description); + tooltip.setMaxWidth(maxWidth * 2 / 3); + tooltip.setWrapText(true); this.setTooltip(tooltip); } } @@ -32,18 +37,29 @@ public String getDescription(Field field) { if (field.isStandardField()) { StandardField standardField = (StandardField) field; switch (standardField) { + case ABSTRACT: + return Localization.lang("This field is intended for recording abstracts, to be printed by a special bibliography style."); case ADDENDUM: return Localization.lang("Miscellaneous bibliographic data usually printed at the end of the entry."); case AFTERWORD: return Localization.lang("Author(s) of an afterword to the work."); + case ANNOTATION: + case ANNOTE: + return Localization.lang("This field may be useful when implementing a style for annotated bibliographies."); case ANNOTATOR: return Localization.lang("Author(s) of annotations to the work."); case AUTHOR: return Localization.lang("Author(s) of the work."); + case BOOKSUBTITLE: + return Localization.lang("Subtitle related to the \"Booktitle\"."); case BOOKTITLE: return Localization.lang("Title of the main publication this work is part of."); + case BOOKTITLEADDON: + return Localization.lang("Annex to the \"Booktitle\", to be printed in a different font."); case CHAPTER: return Localization.lang("Chapter or section or any other unit of a work."); + case COMMENT: + return Localization.lang("Comment to this entry."); case COMMENTATOR: return Localization.lang("Author(s) of a commentary to the work.") + "\n" + Localization.lang("Note that this field is intended for commented editions which have a commentator in addition to the author. If the work is a stand-alone commentary, the commentator should be given in the author field."); @@ -55,6 +71,20 @@ public String getDescription(Field field) { return Localization.lang("Edition of a printed publication."); case EDITOR: return Localization.lang("Editor(s) of the work or the main publication, depending on the type of the entry."); + case EDITORA: + return Localization.lang("Secondary editor performing a different editorial role, such as compiling, redacting, etc."); + case EDITORB: + return Localization.lang("Another secondary editor performing a different role."); + case EDITORC: + return Localization.lang("Another secondary editor performing a different role."); + case EDITORTYPE: + return Localization.lang("Type of editorial role performed by the \"Editor\"."); + case EDITORATYPE: + return Localization.lang("Type of editorial role performed by the \"Editora\"."); + case EDITORBTYPE: + return Localization.lang("Type of editorial role performed by the \"Editorb\"."); + case EDITORCTYPE: + return Localization.lang("Type of editorial role performed by the \"Editorc\"."); case EID: return Localization.lang("Electronic identifier of a work.") + "\n" + Localization.lang("This field may replace the pages field for journals deviating from the classic pagination scheme of printed journals by only enumerating articles or papers and not pages."); @@ -79,6 +109,8 @@ public String getDescription(Field field) { case FILE: case PDF: return Localization.lang("Link(s) to a local PDF or other document of the work."); + case FOREWORD: + return Localization.lang("Author(s) of a foreword to the work."); case HOWPUBLISHED: return Localization.lang("Publication notice for unusual publications which do not fit into any of the common categories."); case INSTITUTION: @@ -88,6 +120,10 @@ public String getDescription(Field field) { return Localization.lang("Author(s) of an introduction to the work."); case ISBN: return Localization.lang("International Standard Book Number of a book."); + case ISRN: + return Localization.lang("International Standard Technical Report Number of a technical report."); + case ISSN: + return Localization.lang("International Standard Serial Number of a periodical."); case ISSUE: return Localization.lang("Issue of a journal.") + "\n" + Localization.lang("This field is intended for journals whose individual issues are identified by a designation such as \"Spring\" or \"Summer\" rather than the month or a number. Integer ranges and short designators are better written to the number field."); @@ -95,41 +131,67 @@ public String getDescription(Field field) { return Localization.lang("Subtitle of a specific issue of a journal or other periodical."); case ISSUETITLE: return Localization.lang("Title of a specific issue of a journal or other periodical."); + case JOURNALSUBTITLE: + return Localization.lang("Subtitle of a journal, a newspaper, or some other periodical."); case JOURNALTITLE: case JOURNAL: return Localization.lang("Name of a journal, a newspaper, or some other periodical."); case LABEL: return Localization.lang("Designation to be used by the citation style as a substitute for the regular label if any data required to generate the regular label is missing."); + case LANGUAGE: + return Localization.lang("Language(s) of the work. Languages may be specified literally or as localisation keys."); case LIBRARY: return Localization.lang("Information such as a library name and a call number."); case LOCATION: case ADDRESS: - return Localization.lang("The place(s) of publication, i. e., the location of the publisher or institution, depending on the entry type."); + return Localization.lang("Place(s) of publication, i. e., the location of the publisher or institution, depending on the entry type."); + case MAINSUBTITLE: + return Localization.lang("Subtitle related to the \"Maintitle\"."); case MAINTITLE: return Localization.lang("Main title of a multi-volume book, such as \"Collected Works\"."); + case MAINTITLEADDON: + return Localization.lang("Annex to the \"Maintitle\", to be printed in a different font."); case MONTH: return Localization.lang("Publication month."); + case NAMEADDON: + return Localization.lang("Addon to be printed immediately after the author name in the bibliography."); case NOTE: return Localization.lang("Miscellaneous bibliographic data which does not fit into any other field."); case NUMBER: return Localization.lang("Number of a journal or the volume/number of a book in a series."); case ORGANIZATION: return Localization.lang("Organization(s) that published a manual or an online resource, or sponsored a conference."); + case ORIGDATE: + return Localization.lang("If the work is a translation, a reprint, or something similar, the publication date of the original edition."); + case ORIGLANGUAGE: + return Localization.lang("If the work is a translation, the language(s) of the original work."); case PAGES: return Localization.lang("One or more page numbers or page ranges.") + "\n" + Localization.lang("If the work is published as part of another one, such as an article in a journal or a collection, this field holds the relevant page range in that other work. It may also be used to limit the reference to a specific part of a work (a chapter in a book, for example). For papers in electronic journals with anon-classical pagination setup the eid field may be more suitable."); case PAGETOTAL: return Localization.lang("Total number of pages of the work."); + case PAGINATION: + return Localization.lang("Pagination of the work. The key should be given in the singular form."); + case PART: + return Localization.lang("Number of a partial volume. This field applies to books only, not to journals. It may be used when a logical volume consists of two or more physical ones."); case PUBLISHER: return Localization.lang("Name(s) of the publisher(s)."); case PUBSTATE: return Localization.lang("Publication state of the work, e. g., \"in press\"."); case SERIES: return Localization.lang("Name of a publication series, such as \"Studies in...\", or the number of a journal series."); + case SHORTTITLE: + return Localization.lang("Title in an abridged form."); case SUBTITLE: return Localization.lang("Subtitle of the work."); case TITLE: return Localization.lang("Title of the work."); + case TITLEADDON: + return Localization.lang("Annex to the \"Title\", to be printed in a different font."); + case TRANSLATOR: + return Localization.lang("Translator(s) of the \"Title\" or \"Booktitle\", depending on the entry type. If the translator is identical to the \"Editor\", the standard styles will automatically concatenate these fields in the bibliography."); + case TYPE: + return Localization.lang("Type of a \"Manual\", \"Patent\", \"Report\", or \"Thesis\"."); case URL: return Localization.lang("URL of an online publication."); case URLDATE: @@ -144,17 +206,45 @@ public String getDescription(Field field) { return Localization.lang("Total number of volumes of a multi-volume work."); case YEAR: return Localization.lang("Year of publication."); + case CROSSREF: + return Localization.lang("This field holds an entry key for the cross-referencing feature. Child entries with a \"Crossref\" field inherit data from the parent entry specified in the \"Crossref\" field."); + case GENDER: + return Localization.lang("Gender of the author or gender of the editor, if there is no author."); case KEYWORDS: return Localization.lang("Separated list of keywords."); + case RELATED: + return Localization.lang("Citation keys of other entries which have a relationship to this entry."); + case XREF: + return Localization.lang("This field is an alternative cross-referencing mechanism. It differs from \"Crossref\" in that the child entry will not inherit any data from the parent entry specified in the \"Xref\" field."); } } else if (field instanceof InternalField) { InternalField internalField = (InternalField) field; switch (internalField) { + case OWNER: + return Localization.lang("Owner/creator of this entry."); + case TIMESTAMP: + return Localization.lang("Timestamp of this entry, when it has been created or last modified."); case KEY_FIELD: return Localization.lang("Key by which the work may be cited."); case GROUPS: return Localization.lang("Name(s) of the (manual) groups the entry belongs to."); } + } else if (field instanceof SpecialField) { + SpecialField specialField = (SpecialField) field; + switch (specialField) { + case PRINTED: + return Localization.lang("User-specific printed flag, in case the entry has been printed."); + case PRIORITY: + return Localization.lang("User-specific priority."); + case QUALITY: + return Localization.lang("User-specific quality flag, in case its quality is assured."); + case RANKING: + return Localization.lang("User-specific ranking."); + case READ_STATUS: + return Localization.lang("User-specific read status."); + case RELEVANCE: + return Localization.lang("User-specific relevance flag, in case the entry is relevant."); + } } return ""; } diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index 7c7dca115eb..24d8e4649e2 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -2140,7 +2140,7 @@ Revision\ number\ of\ a\ piece\ of\ software,\ a\ manual,\ etc.=Revision number Separated\ list\ of\ keywords.=Separated list of keywords. Subtitle\ of\ a\ specific\ issue\ of\ a\ journal\ or\ other\ periodical.=Subtitle of a specific issue of a journal or other periodical. Subtitle\ of\ the\ work.=Subtitle of the work. -The\ place(s)\ of\ publication,\ i.\ e.,\ the\ location\ of\ the\ publisher\ or\ institution,\ depending\ on\ the\ entry\ type.=The place(s) of publication, i. e., the location of the publisher or institution, depending on the entry type. +Place(s)\ of\ publication,\ i.\ e.,\ the\ location\ of\ the\ publisher\ or\ institution,\ depending\ on\ the\ entry\ type.=Place(s) of publication, i. e., the location of the publisher or institution, depending on the entry type. This\ could\ be\ a\ section\ of\ an\ archive,\ a\ path\ indicating\ a\ service,\ a\ classification\ of\ some\ sort.=This could be a section of an archive, a path indicating a service, a classification of some sort. This\ field\ is\ intended\ for\ journals\ whose\ individual\ issues\ are\ identified\ by\ a\ designation\ such\ as\ "Spring"\ or\ "Summer"\ rather\ than\ the\ month\ or\ a\ number.\ Integer\ ranges\ and\ short\ designators\ are\ better\ written\ to\ the\ number\ field.=This field is intended for journals whose individual issues are identified by a designation such as "Spring" or "Summer" rather than the month or a number. Integer ranges and short designators are better written to the number field. This\ field\ may\ replace\ the\ pages\ field\ for\ journals\ deviating\ from\ the\ classic\ pagination\ scheme\ of\ printed\ journals\ by\ only\ enumerating\ articles\ or\ papers\ and\ not\ pages.=This field may replace the pages field for journals deviating from the classic pagination scheme of printed journals by only enumerating articles or papers and not pages. @@ -2155,6 +2155,45 @@ Type\ of\ the\ eprint\ identifier,\ e.\ g.,\ the\ name\ of\ the\ archive,\ repos URL\ of\ an\ online\ publication.=URL of an online publication. Volume\ of\ a\ multi-volume\ book\ or\ a\ periodical.=Volume of a multi-volume book or a periodical. Year\ of\ publication.=Year of publication. +This\ field\ is\ intended\ for\ recording\ abstracts,\ to\ be\ printed\ by\ a\ special\ bibliography\ style.=This field is intended for recording abstracts, to be printed by a special bibliography style. +This\ field\ may\ be\ useful\ when\ implementing\ a\ style\ for\ annotated\ bibliographies.=This field may be useful when implementing a style for annotated bibliographies. +Subtitle\ related\ to\ the\ "Booktitle".=Subtitle related to the "Booktitle". +Annex\ to\ the\ "Booktitle",\ to\ be\ printed\ in\ a\ different\ font.=Annex to the "Booktitle", to be printed in a different font. +Comment\ to\ this\ entry.=Comment to this entry. +Secondary\ editor\ performing\ a\ different\ editorial\ role,\ such\ as\ compiling,\ redacting,\ etc.=Secondary editor performing a different editorial role, such as compiling, redacting, etc. +Another\ secondary\ editor\ performing\ a\ different\ role.=Another secondary editor performing a different role. +Type\ of\ editorial\ role\ performed\ by\ the\ "Editor".=Type of editorial role performed by the "Editor". +Type\ of\ editorial\ role\ performed\ by\ the\ "Editora".=Type of editorial role performed by the "Editora". +Type\ of\ editorial\ role\ performed\ by\ the\ "Editorb".=Type of editorial role performed by the "Editorb". +Type\ of\ editorial\ role\ performed\ by\ the\ "Editorc".=Type of editorial role performed by the "Editorc". +Author(s)\ of\ a\ foreword\ to\ the\ work.=Author(s) of a foreword to the work. +International\ Standard\ Technical\ Report\ Number\ of\ a\ technical\ report.=International Standard Technical Report Number of a technical report. +International\ Standard\ Serial\ Number\ of\ a\ periodical.=International Standard Serial Number of a periodical. +Subtitle\ of\ a\ journal,\ a\ newspaper,\ or\ some\ other\ periodical.=Subtitle of a journal, a newspaper, or some other periodical. +Language(s)\ of\ the\ work.\ Languages\ may\ be\ specified\ literally\ or\ as\ localisation\ keys.=Language(s) of the work. Languages may be specified literally or as localisation keys. +Subtitle\ related\ to\ the\ "Maintitle".=Subtitle related to the "Maintitle". +Annex\ to\ the\ "Maintitle",\ to\ be\ printed\ in\ a\ different\ font.=Annex to the "Maintitle", to be printed in a different font. +Addon\ to\ be\ printed\ immediately\ after\ the\ author\ name\ in\ the\ bibliography.=Addon to be printed immediately after the author name in the bibliography. +If\ the\ work\ is\ a\ translation,\ a\ reprint,\ or\ something\ similar,\ the\ publication\ date\ of\ the\ original\ edition.=If the work is a translation, a reprint, or something similar, the publication date of the original edition. +If\ the\ work\ is\ a\ translation,\ the\ language(s)\ of\ the\ original\ work.=If the work is a translation, the language(s) of the original work. +Pagination\ of\ the\ work.\ The\ key\ should\ be\ given\ in\ the\ singular\ form.=Pagination of the work. The key should be given in the singular form. +Number\ of\ a\ partial\ volume.\ This\ field\ applies\ to\ books\ only,\ not\ to\ journals.\ It\ may\ be\ used\ when\ a\ logical\ volume\ consists\ of\ two\ or\ more\ physical\ ones.=Number of a partial volume. This field applies to books only, not to journals. It may be used when a logical volume consists of two or more physical ones. +Title\ in\ an\ abridged\ form.=Title in an abridged form. +Annex\ to\ the\ "Title",\ to\ be\ printed\ in\ a\ different\ font.=Annex to the "Title", to be printed in a different font. +Translator(s)\ of\ the\ "Title"\ or\ "Booktitle",\ depending\ on\ the\ entry\ type.\ If\ the\ translator\ is\ identical\ to\ the\ "Editor",\ the\ standard\ styles\ will\ automatically\ concatenate\ these\ fields\ in\ the\ bibliography.=Translator(s) of the "Title" or "Booktitle", depending on the entry type. If the translator is identical to the "Editor", the standard styles will automatically concatenate these fields in the bibliography. +Type\ of\ a\ "Manual",\ "Patent",\ "Report",\ or\ "Thesis".=Type of a "Manual", "Patent", "Report", or "Thesis". +This\ field\ holds\ an\ entry\ key\ for\ the\ cross-referencing\ feature.\ Child\ entries\ with\ a\ "Crossref"\ field\ inherit\ data\ from\ the\ parent\ entry\ specified\ in\ the\ "Crossref"\ field.=This field holds an entry key for the cross-referencing feature. Child entries with a "Crossref" field inherit data from the parent entry specified in the "Crossref" field. +Gender\ of\ the\ author\ or\ gender\ of\ the\ editor,\ if\ there\ is\ no\ author.=Gender of the author or gender of the editor, if there is no author. +Citation\ keys\ of\ other\ entries\ which\ have\ a\ relationship\ to\ this\ entry.=Citation keys of other entries which have a relationship to this entry. +This\ field\ is\ an\ alternative\ cross-referencing\ mechanism.\ It\ differs\ from\ "Crossref"\ in\ that\ the\ child\ entry\ will\ not\ inherit\ any\ data\ from\ the\ parent\ entry\ specified\ in\ the\ "Xref"\ field.=This field is an alternative cross-referencing mechanism. It differs from "Crossref" in that the child entry will not inherit any data from the parent entry specified in the "Xref" field. +Owner/creator\ of\ this\ entry.=Owner/creator of this entry. +Timestamp\ of\ this\ entry,\ when\ it\ has\ been\ created\ or\ last\ modified.=Timestamp of this entry, when it has been created or last modified. +User-specific\ printed\ flag,\ in\ case\ the\ entry\ has\ been\ printed.=User-specific printed flag, in case the entry has been printed. +User-specific\ priority.=User-specific priority. +User-specific\ quality\ flag,\ in\ case\ its\ quality\ is\ assured.=User-specific quality flag, in case its quality is assured. +User-specific\ ranking.=User-specific ranking. +User-specific\ read\ status.=User-specific read status. +User-specific\ relevance\ flag,\ in\ case\ the\ entry\ is\ relevant.=User-specific relevance flag, in case the entry is relevant. Remove\ formatter\ for\ %0=Remove formatter for %0 Remove\ formatter\ '%0'=Remove formatter '%0' From 037102f4fe6fef66cf88522cf0b71b107554db0c Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Fri, 10 Apr 2020 17:29:29 +0200 Subject: [PATCH 069/166] Use https everywhere --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 21ab436819e..9470e7343bd 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ An explanation of donation possibilities and usage of donations is available at [![Join the chat at https://gitter.im/JabRef/jabref](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/JabRef/jabref?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![OpenHub](https://www.openhub.net/p/jabref/widgets/project_thin_badge.gif)](https://www.openhub.net/p/jabref) -> Not a programmer? [Learn how to help.](http://contribute.jabref.org) +> Not a programmer? [Learn how to help.](https://contribute.jabref.org) Want to be part of a free and open-source project that tens of thousands of scientists use every day? Check out the ways you can contribute, below: From 478569968b1364ca373e1ebcb42dec0736be10cb Mon Sep 17 00:00:00 2001 From: github actions Date: Fri, 10 Apr 2020 15:45:35 +0000 Subject: [PATCH 070/166] Squashed 'src/main/resources/csl-styles/' changes from 88726cb64d..db54e5655d MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit db54e5655d Update CONTRIBUTING.md 2f16a9bbe0 Update CONTRIBUTING.md 4cd05ba3d2 Create associacao-brasileira-de-normas-tecnicas-ufrgs-footnote-ibid.csl (#4369) 4d4655ec70 Update instituto-brasileiro-de-informacao-em-ciencia-e-tecnologia-abn… (#4684) 59482650cd Update instituto-brasileiro-de-informacao-em-ciencia-e-tecnologia-abn… (#4683) f8b744c2e4 Create aberdeen-university-school-of-education-harvard.csl (#4685) 807930a3a3 Update trabajos-de-prehistoria.csl (#4680) c25709f615 Update society-for-american-archaeology.csl (#4681) 86f888afc0 Update archeosciences.csl (#4682) 99c4fd322b Create sylwan.csl (#4678) d9ba2dedaf Update equine-veterinary-education.csl (#4677) 7d306592bc Update equine-veterinary-education.csl (#4675) 9a7791fd2d Update equine-veterinary-education.csl (#4674) 0a46235dd6 Create norois.csl (#4673) git-subtree-dir: src/main/resources/csl-styles git-subtree-split: db54e5655db93458e241e237f96e2e5883baa63d --- CONTRIBUTING.md | 16 +- archeosciences.csl | 136 +-- ...tecnicas-ufrgs-note-initials-with-ibid.csl | 949 ++++++++++++++++++ equine-veterinary-education.csl | 125 ++- ...-em-ciencia-e-tecnologia-abnt-initials.csl | 425 ++++---- ...nformacao-em-ciencia-e-tecnologia-abnt.csl | 429 ++++---- norois.csl | 525 ++++++++++ society-for-american-archaeology.csl | 38 +- sylwan.csl | 597 +++++++++++ trabajos-de-prehistoria.csl | 8 +- ...f-aberdeen-school-of-education-harvard.csl | 383 +++++++ 11 files changed, 3043 insertions(+), 588 deletions(-) create mode 100644 associacao-brasileira-de-normas-tecnicas-ufrgs-note-initials-with-ibid.csl create mode 100644 norois.csl create mode 100644 sylwan.csl create mode 100644 university-of-aberdeen-school-of-education-harvard.csl diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6b4d0986f8b..3b06aea71fb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,7 +10,7 @@ To submit a style, please follow the following steps (for locale files, follow t #### 1. Check that your style meets all our [style requirements](https://github.com/citation-style-language/styles/wiki/Style-Requirements) -#### 2. [Validate](https://github.com/citation-style-language/styles/wiki/Validation) your style against the CSL schema, and correct any validation errors +#### 2. [Validate](https://validator.citationstyles.org/) your style against the CSL schema, and correct any validation errors #### 3. Create a pull request @@ -33,7 +33,7 @@ To start, create a GitHub account and sign in. ##### 3b. Submitting changes to an existing style 1. Visit https://github.com/citation-style-language/styles and find the style you wish to change (dependent styles are stored in the [dependent](https://github.com/citation-style-language/styles/tree/master/dependent) subdirectory). - To search by file name press "t" (this activates GitHub’s [File Finder](https://github.com/blog/793-introducing-the-file-finder)) and start typing. + To search the repository by file name, click the "Find file" button or press t to activate GitHub’s [file finder](https://help.github.com/en/github/searching-for-information-on-github/finding-files-on-github) and start typing. 2. Click on the style name, which will bring you to a page like https://github.com/citation-style-language/styles/blob/master/apa.csl. 3. Click the edit icon (in the shape of a pencil). This opens a code editor in which you can make your changes (you can for example copy and paste your modified style into this window). @@ -52,30 +52,30 @@ We often request you to make some changes to your pull request. Don't create a new pull request right away if your original submission has issues. It's much easier for us if you update your original pull request instead. -After you create a pull request, our @csl-bot will first automatically run a number of tests to check whether your style validates and follows our style requirements. +After you create a pull request, our [@csl-bot](https://github.com/csl-bot) will first automatically run a number of tests to check whether your style validates and follows our style requirements. These tests usually finish within a few minutes. -If there are problems, @csl-bot will give a link to the test report, which contains the identified errors. +If there are problems, [@csl-bot](https://github.com/csl-bot) will leave a comment with the identified errors. If you have trouble understanding these errors, please post a comment in the pull request and ask for help. -We also have a handful of volunteers who review pull requests, usually within a day or two. +We also have a handful of volunteers who review pull requests, usually within a week or two. To update your pull request: 1. Visit the "Files changed" tab of your pull request. -2. Click the edit (pencil) icon at the top-right of your style. +2. Click the ellipsis button at the top-right of your style, and select "Edit file" in the ellipsis menu. 3. Make your changes, and click the "Commit changes" button. Any changes made this way will automatically appear in the pull request, and each commit will trigger a new test report. Once we are satisfied, we will **merge** your pull request. -This can take hours or days, depending on how busy we are, and on how much back and forth is needed to get your style in acceptable shape. +This can take days or weeks, depending on how busy we are, and on how much back and forth is needed to get your style in acceptable shape. #### 5. Make additional changes after merging Once a pull request has been merged, it can no longer be used to submit further changes. So, if you wish to make additional changes, just create a new pull request. -Please always start from the latest version of the style from our repository, because we often perform maintenance on the repository styles. +Please always start from the latest version of the style from our repository, because we may have performed maintenance on your style or accepted corrections from other contributors. ## Asking for help diff --git a/archeosciences.csl b/archeosciences.csl index 3e47dcbde9e..d5da8f3f69f 100644 --- a/archeosciences.csl +++ b/archeosciences.csl @@ -1,6 +1,6 @@ diff --git a/equine-veterinary-education.csl b/equine-veterinary-education.csl index 5ca3be5962b..d98416158a0 100644 --- a/equine-veterinary-education.csl +++ b/equine-veterinary-education.csl @@ -1,52 +1,50 @@ - diff --git a/instituto-brasileiro-de-informacao-em-ciencia-e-tecnologia-abnt-initials.csl b/instituto-brasileiro-de-informacao-em-ciencia-e-tecnologia-abnt-initials.csl index a11d1a84189..b01dad805cd 100644 --- a/instituto-brasileiro-de-informacao-em-ciencia-e-tecnologia-abnt-initials.csl +++ b/instituto-brasileiro-de-informacao-em-ciencia-e-tecnologia-abnt-initials.csl @@ -1,7 +1,7 @@ - diff --git a/society-for-american-archaeology.csl b/society-for-american-archaeology.csl index c4bf3bd173f..a92dd15abc6 100644 --- a/society-for-american-archaeology.csl +++ b/society-for-american-archaeology.csl @@ -1,10 +1,13 @@ - diff --git a/trabajos-de-prehistoria.csl b/trabajos-de-prehistoria.csl index 7cd53900036..08b707b343a 100644 --- a/trabajos-de-prehistoria.csl +++ b/trabajos-de-prehistoria.csl @@ -15,7 +15,7 @@ 0082-5638 1988-3218 - 2020-04-04T11:24:49+00:00 + 2020-04-09T10:37:35+00:00 This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License @@ -109,7 +109,7 @@ - + @@ -127,11 +127,11 @@ - + - + diff --git a/university-of-aberdeen-school-of-education-harvard.csl b/university-of-aberdeen-school-of-education-harvard.csl new file mode 100644 index 00000000000..2e719634880 --- /dev/null +++ b/university-of-aberdeen-school-of-education-harvard.csl @@ -0,0 +1,383 @@ + + From d4396ce4de0c796a6b40b1b63351a011c715594d Mon Sep 17 00:00:00 2001 From: Grzegorz Popiel Date: Fri, 10 Apr 2020 21:26:45 +0200 Subject: [PATCH 071/166] Fix sort by priority (#6222) (#6265) * Fix sort by priority (#6222) * Change in CHANGELOG. --- CHANGELOG.md | 1 + .../gui/maintable/MainTableColumnFactory.java | 5 ++++ .../comparator/PriorityFieldComparator.java | 27 +++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 src/main/java/org/jabref/gui/util/comparator/PriorityFieldComparator.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c49eaed2b1..7b63f3508ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve ### Fixed +- We fixed an issue where sort by priority was broken. [#6222](https://github.com/JabRef/jabref/issues/6222) - We fixed an issue where opening a library from the recent libraries menu was not possible. [#5939](https://github.com/JabRef/jabref/issues/5939) - We fixed an issue with inconsistent capitalization of file extensions when downloading files [#6115](https://github.com/JabRef/jabref/issues/6115) - We fixed the display of language and encoding in the preferences dialog. [#6130](https://github.com/JabRef/jabref/pull/6130) diff --git a/src/main/java/org/jabref/gui/maintable/MainTableColumnFactory.java b/src/main/java/org/jabref/gui/maintable/MainTableColumnFactory.java index bde67b260aa..a821e343d01 100644 --- a/src/main/java/org/jabref/gui/maintable/MainTableColumnFactory.java +++ b/src/main/java/org/jabref/gui/maintable/MainTableColumnFactory.java @@ -38,6 +38,7 @@ import org.jabref.gui.specialfields.SpecialFieldsPreferences; import org.jabref.gui.util.OptionalValueTableCellFactory; import org.jabref.gui.util.ValueTableCellFactory; +import org.jabref.gui.util.comparator.PriorityFieldComparator; import org.jabref.gui.util.comparator.RankingFieldComparator; import org.jabref.gui.util.comparator.ReadStatusFieldComparator; import org.jabref.logic.l10n.Localization; @@ -316,6 +317,10 @@ private TableColumn column.setComparator(new ReadStatusFieldComparator()); } + if (specialField == SpecialField.PRIORITY) { + column.setComparator(new PriorityFieldComparator()); + } + column.setSortable(true); return column; diff --git a/src/main/java/org/jabref/gui/util/comparator/PriorityFieldComparator.java b/src/main/java/org/jabref/gui/util/comparator/PriorityFieldComparator.java new file mode 100644 index 00000000000..d9ab62e1cc3 --- /dev/null +++ b/src/main/java/org/jabref/gui/util/comparator/PriorityFieldComparator.java @@ -0,0 +1,27 @@ +package org.jabref.gui.util.comparator; + +import java.util.Comparator; +import java.util.Optional; + +import org.jabref.gui.specialfields.SpecialFieldValueViewModel; + +public class PriorityFieldComparator implements Comparator> { + + @Override + public int compare(Optional val1, Optional val2) { + if (val1.isPresent()) { + if (val2.isPresent()) { + return val1.get().getValue().compareTo(val2.get().getValue()); + } else { + return -1; + } + } else { + if (val2.isPresent()) { + return 1; + } else { + return 0; + } + } + } + +} From 1c724f26742ba832c610e5795bc30e35fa0de2b7 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Sat, 11 Apr 2020 11:49:00 +0200 Subject: [PATCH 072/166] Improve calculation of matched entries upon change (#6268) Instead of recalculating the number of matched entries for every group (which means `#groups * #entries` operations) now a change triggers a more intelligent re-calculation which needs at maximum `#groups` operations. This gives a huge boost and makes editing entries smooth even for large databases with many groups. --- CHANGELOG.md | 5 +- .../jabref/gui/groups/GroupNodeViewModel.java | 52 ++++++++++++++----- .../java/org/jabref/model/entry/BibEntry.java | 4 +- .../jabref/model/groups/GroupTreeNode.java | 18 ++++--- .../model/groups/GroupTreeNodeTest.java | 48 ++++++++--------- 5 files changed, 77 insertions(+), 50 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b63f3508ca..6df019fe891 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,12 +27,13 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve ### Fixed +- We greatly improved the performance of the overall application and many operations. [#5071](https://github.com/JabRef/jabref/issues/5071) - We fixed an issue where sort by priority was broken. [#6222](https://github.com/JabRef/jabref/issues/6222) - We fixed an issue where opening a library from the recent libraries menu was not possible. [#5939](https://github.com/JabRef/jabref/issues/5939) -- We fixed an issue with inconsistent capitalization of file extensions when downloading files [#6115](https://github.com/JabRef/jabref/issues/6115) +- We fixed an issue with inconsistent capitalization of file extensions when downloading files. [#6115](https://github.com/JabRef/jabref/issues/6115) - We fixed the display of language and encoding in the preferences dialog. [#6130](https://github.com/JabRef/jabref/pull/6130) - We fixed an issue where search full-text documents downloaded files with same name, overwriting existing files. [#6174](https://github.com/JabRef/jabref/pull/6174) -- We fixe an issue where custom jstyles for Open/LibreOffice where not saved correctly [#6170](https://github.com/JabRef/jabref/issues/6170) +- We fixe an issue where custom jstyles for Open/LibreOffice where not saved correctly. [#6170](https://github.com/JabRef/jabref/issues/6170) ### Removed diff --git a/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java b/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java index a20278ae64f..4f40d4bb670 100644 --- a/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java +++ b/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java @@ -8,8 +8,8 @@ import javafx.beans.binding.Bindings; import javafx.beans.binding.BooleanBinding; +import javafx.beans.binding.IntegerBinding; import javafx.beans.property.SimpleBooleanProperty; -import javafx.beans.property.SimpleIntegerProperty; import javafx.collections.FXCollections; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; @@ -28,7 +28,6 @@ import org.jabref.gui.util.TaskExecutor; import org.jabref.logic.groups.DefaultGroupsFactory; import org.jabref.logic.layout.format.LatexToUnicodeFormatter; -import org.jabref.logic.util.DelayTaskThrottler; import org.jabref.model.FieldChange; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; @@ -50,7 +49,7 @@ public class GroupNodeViewModel { private final BibDatabaseContext databaseContext; private final StateManager stateManager; private final GroupTreeNode groupNode; - private final SimpleIntegerProperty hits; + private final ObservableList matchedEntries = FXCollections.observableArrayList(); private final SimpleBooleanProperty hasChildren; private final SimpleBooleanProperty expandedProperty = new SimpleBooleanProperty(); private final BooleanBinding anySelectedEntriesMatched; @@ -58,7 +57,6 @@ public class GroupNodeViewModel { private final TaskExecutor taskExecutor; private final CustomLocalDragboard localDragBoard; private final ObservableList entriesList; - private final DelayTaskThrottler throttler; public GroupNodeViewModel(BibDatabaseContext databaseContext, StateManager stateManager, TaskExecutor taskExecutor, GroupTreeNode groupNode, CustomLocalDragboard localDragBoard) { this.databaseContext = Objects.requireNonNull(databaseContext); @@ -82,8 +80,7 @@ public GroupNodeViewModel(BibDatabaseContext databaseContext, StateManager state } hasChildren = new SimpleBooleanProperty(); hasChildren.bind(Bindings.isNotEmpty(children)); - hits = new SimpleIntegerProperty(0); - calculateNumberOfMatches(); + updateMatchedEntries(); expandedProperty.set(groupNode.getGroup().isExpanded()); expandedProperty.addListener((observable, oldValue, newValue) -> groupNode.getGroup().setExpanded(newValue)); @@ -91,7 +88,6 @@ public GroupNodeViewModel(BibDatabaseContext databaseContext, StateManager state // The wrapper created by the FXCollections will set a weak listener on the wrapped list. This weak listener gets garbage collected. Hence, we need to maintain a reference to this list. entriesList = databaseContext.getDatabase().getEntries(); entriesList.addListener(this::onDatabaseChanged); - throttler = taskExecutor.createThrottler(1000); ObservableList selectedEntriesMatchStatus = EasyBind.map(stateManager.getSelectedEntries(), groupNode::matches); anySelectedEntriesMatched = BindingsHelper.any(selectedEntriesMatchStatus, matched -> matched); @@ -157,8 +153,8 @@ public String getDescription() { return groupNode.getGroup().getDescription().orElse(""); } - public SimpleIntegerProperty getHits() { - return hits; + public IntegerBinding getHits() { + return Bindings.size(matchedEntries); } @Override @@ -184,7 +180,7 @@ public String toString() { ", children=" + children + ", databaseContext=" + databaseContext + ", groupNode=" + groupNode + - ", hits=" + hits + + ", matchedEntries=" + matchedEntries + '}'; } @@ -222,16 +218,44 @@ public GroupTreeNode getGroupNode() { * Gets invoked if an entry in the current database changes. */ private void onDatabaseChanged(ListChangeListener.Change change) { - throttler.schedule(this::calculateNumberOfMatches); + while (change.next()) { + if (change.wasPermutated()) { + // Nothing to do, as permutation doesn't change matched entries + } else if (change.wasUpdated()) { + for (BibEntry changedEntry : change.getList().subList(change.getFrom(), change.getTo())) { + if (groupNode.matches(changedEntry)) { + if (!matchedEntries.contains(changedEntry)) { + matchedEntries.add(changedEntry); + } + } else { + matchedEntries.remove(changedEntry); + } + } + } else { + for (BibEntry removedEntry : change.getRemoved()) { + matchedEntries.remove(removedEntry); + } + for (BibEntry addedEntry : change.getAddedSubList()) { + if (groupNode.matches(addedEntry)) { + if (!matchedEntries.contains(addedEntry)) { + matchedEntries.add(addedEntry); + } + } + } + } + } } - private void calculateNumberOfMatches() { + private void updateMatchedEntries() { // We calculate the new hit value // We could be more intelligent and try to figure out the new number of hits based on the entry change // for example, a previously matched entry gets removed -> hits = hits - 1 BackgroundTask - .wrap(() -> groupNode.calculateNumberOfMatches(databaseContext.getDatabase())) - .onSuccess(hits::setValue) + .wrap(() -> groupNode.findMatches(databaseContext.getDatabase())) + .onSuccess(entries -> { + matchedEntries.clear(); + matchedEntries.addAll(entries); + }) .executeWith(taskExecutor); } diff --git a/src/main/java/org/jabref/model/entry/BibEntry.java b/src/main/java/org/jabref/model/entry/BibEntry.java index d4c69cdfcdd..db66d82b3c6 100644 --- a/src/main/java/org/jabref/model/entry/BibEntry.java +++ b/src/main/java/org/jabref/model/entry/BibEntry.java @@ -528,8 +528,8 @@ public Optional setField(Field field, String value, EntriesEventSou changed = true; - fields.put(field, value.intern()); invalidateFieldCache(field); + fields.put(field, value.intern()); FieldChange change = new FieldChange(this, field, oldValue, value); if (isNewField) { @@ -574,8 +574,8 @@ public Optional clearField(Field field, EntriesEventSource eventSou changed = true; - fields.remove(field); invalidateFieldCache(field); + fields.remove(field); FieldChange change = new FieldChange(this, field, oldValue.get(), null); eventBus.post(new FieldAddedOrRemovedEvent(change, eventSource)); diff --git a/src/main/java/org/jabref/model/groups/GroupTreeNode.java b/src/main/java/org/jabref/model/groups/GroupTreeNode.java index f0f0b9d4745..85795e36194 100644 --- a/src/main/java/org/jabref/model/groups/GroupTreeNode.java +++ b/src/main/java/org/jabref/model/groups/GroupTreeNode.java @@ -218,24 +218,26 @@ public GroupTreeNode copyNode() { } /** - * Determines the number of entries in the specified list which are matched by this group. + * Determines the entries in the specified list which are matched by this group. + * * @param entries list of entries to be searched - * @return number of hits + * @return matched entries */ - public long calculateNumberOfMatches(List entries) { + public List findMatches(List entries) { SearchMatcher matcher = getSearchMatcher(); return entries.stream() .filter(matcher::isMatch) - .count(); + .collect(Collectors.toList()); } /** - * Determines the number of entries in the specified database which are matched by this group. + * Determines the entries in the specified database which are matched by this group. + * * @param database database to be searched - * @return number of hits + * @return matched entries */ - public long calculateNumberOfMatches(BibDatabase database) { - return calculateNumberOfMatches(database.getEntries()); + public List findMatches(BibDatabase database) { + return findMatches(database.getEntries()); } /** diff --git a/src/test/java/org/jabref/model/groups/GroupTreeNodeTest.java b/src/test/java/org/jabref/model/groups/GroupTreeNodeTest.java index 36fb12c924c..05886e41c76 100644 --- a/src/test/java/org/jabref/model/groups/GroupTreeNodeTest.java +++ b/src/test/java/org/jabref/model/groups/GroupTreeNodeTest.java @@ -95,7 +95,7 @@ private static AbstractGroup getExplict(String name) { * A */ /* - public GroupTreeNode getNodeAsChild(TreeNodeMock root) { + GroupTreeNode getNodeAsChild(TreeNodeMock root) { root.addChild(new TreeNodeMock()); root.addChild(new TreeNodeMock()); TreeNodeMock node = new TreeNodeMock(); @@ -109,7 +109,7 @@ public static GroupTreeNode getRoot() { } @BeforeEach - public void setUp() throws Exception { + void setUp() throws Exception { entries.clear(); entry = new BibEntry(); entries.add(entry); @@ -118,7 +118,7 @@ public void setUp() throws Exception { } /* - public GroupTreeNode getNodeInComplexTree() { + GroupTreeNode getNodeInComplexTree() { return getNodeInComplexTree(new TreeNodeMock()); } */ @@ -128,14 +128,14 @@ private GroupTreeNode getNodeInSimpleTree() { } @Test - public void getSearchRuleForIndependentGroupReturnsGroupAsMatcher() { + void getSearchRuleForIndependentGroupReturnsGroupAsMatcher() { GroupTreeNode node = GroupTreeNode .fromGroup(new ExplicitGroup("node", GroupHierarchyType.INDEPENDENT, ',')); assertEquals(node.getGroup(), node.getSearchMatcher()); } @Test - public void getSearchRuleForRefiningGroupReturnsParentAndGroupAsMatcher() { + void getSearchRuleForRefiningGroupReturnsParentAndGroupAsMatcher() { GroupTreeNode parent = GroupTreeNode .fromGroup( new ExplicitGroup("parent", GroupHierarchyType.INDEPENDENT, ',')); @@ -149,7 +149,7 @@ public void getSearchRuleForRefiningGroupReturnsParentAndGroupAsMatcher() { } @Test - public void getSearchRuleForIncludingGroupReturnsGroupOrSubgroupAsMatcher() { + void getSearchRuleForIncludingGroupReturnsGroupOrSubgroupAsMatcher() { GroupTreeNode node = GroupTreeNode.fromGroup(new ExplicitGroup("node", GroupHierarchyType.INCLUDING, ',')); GroupTreeNode child = node.addSubgroup(new ExplicitGroup("child", GroupHierarchyType.INDEPENDENT, ',')); @@ -160,48 +160,48 @@ public void getSearchRuleForIncludingGroupReturnsGroupOrSubgroupAsMatcher() { } @Test - public void numberOfHitsReturnsZeroForEmptyList() throws Exception { - assertEquals(0, getNodeInSimpleTree().calculateNumberOfMatches(Collections.emptyList())); + void findMatchesReturnsEmptyForEmptyList() throws Exception { + assertEquals(Collections.emptyList(), getNodeInSimpleTree().findMatches(Collections.emptyList())); } @Test - public void numberOfHitsMatchesOneEntry() throws Exception { + void findMatchesOneEntry() throws Exception { GroupTreeNode parent = getNodeInSimpleTree(); GroupTreeNode node = parent.addSubgroup( new WordKeywordGroup("node", GroupHierarchyType.INDEPENDENT, StandardField.AUTHOR, "author2", true, ',', false)); - assertEquals(1, node.calculateNumberOfMatches(entries)); + assertEquals(1, node.findMatches(entries).size()); } @Test - public void numberOfHitsMatchesMultipleEntries() throws Exception { + void findMatchesMultipleEntries() throws Exception { GroupTreeNode parent = getNodeInSimpleTree(); GroupTreeNode node = parent.addSubgroup( new WordKeywordGroup("node", GroupHierarchyType.INDEPENDENT, StandardField.AUTHOR, "author1", true, ',', false)); - assertEquals(2, node.calculateNumberOfMatches(entries)); + assertEquals(2, node.findMatches(entries).size()); } @Test - public void numberOfHitsWorksForRefiningGroups() throws Exception { + void findMatchesWorksForRefiningGroups() throws Exception { GroupTreeNode grandParent = getNodeInSimpleTree(); GroupTreeNode parent = grandParent.addSubgroup( new WordKeywordGroup("node", GroupHierarchyType.INDEPENDENT, StandardField.AUTHOR, "author2", true, ',', false)); GroupTreeNode node = parent.addSubgroup( new WordKeywordGroup("node", GroupHierarchyType.REFINING, StandardField.AUTHOR, "author1", true, ',', false)); - assertEquals(1, node.calculateNumberOfMatches(entries)); + assertEquals(1, node.findMatches(entries).size()); } @Test - public void numberOfHitsWorksForHierarchyOfIndependentGroups() throws Exception { + void findMatchesWorksForHierarchyOfIndependentGroups() throws Exception { GroupTreeNode grandParent = getNodeInSimpleTree(); GroupTreeNode parent = grandParent.addSubgroup( new WordKeywordGroup("node", GroupHierarchyType.INDEPENDENT, StandardField.AUTHOR, "author2", true, ',', false)); GroupTreeNode node = parent.addSubgroup( new WordKeywordGroup("node", GroupHierarchyType.INDEPENDENT, StandardField.AUTHOR, "author1", true, ',', false)); - assertEquals(2, node.calculateNumberOfMatches(entries)); + assertEquals(2, node.findMatches(entries).size()); } @Test - public void setGroupChangesUnderlyingGroup() throws Exception { + void setGroupChangesUnderlyingGroup() throws Exception { GroupTreeNode node = getNodeInSimpleTree(); AbstractGroup newGroup = new ExplicitGroup("NewGroup", GroupHierarchyType.INDEPENDENT, ','); @@ -211,7 +211,7 @@ public void setGroupChangesUnderlyingGroup() throws Exception { } @Test - public void setGroupAddsPreviousAssignmentsExplicitToExplicit() throws Exception { + void setGroupAddsPreviousAssignmentsExplicitToExplicit() throws Exception { ExplicitGroup oldGroup = new ExplicitGroup("OldGroup", GroupHierarchyType.INDEPENDENT, ','); oldGroup.add(entry); GroupTreeNode node = GroupTreeNode.fromGroup(oldGroup); @@ -223,7 +223,7 @@ public void setGroupAddsPreviousAssignmentsExplicitToExplicit() throws Exception } @Test - public void setGroupWithFalseDoesNotAddsPreviousAssignments() throws Exception { + void setGroupWithFalseDoesNotAddsPreviousAssignments() throws Exception { ExplicitGroup oldGroup = new ExplicitGroup("OldGroup", GroupHierarchyType.INDEPENDENT, ','); oldGroup.add(entry); GroupTreeNode node = GroupTreeNode.fromGroup(oldGroup); @@ -235,7 +235,7 @@ public void setGroupWithFalseDoesNotAddsPreviousAssignments() throws Exception { } @Test - public void setGroupAddsOnlyPreviousAssignments() throws Exception { + void setGroupAddsOnlyPreviousAssignments() throws Exception { ExplicitGroup oldGroup = new ExplicitGroup("OldGroup", GroupHierarchyType.INDEPENDENT, ','); assertFalse(oldGroup.isMatch(entry)); GroupTreeNode node = GroupTreeNode.fromGroup(oldGroup); @@ -247,7 +247,7 @@ public void setGroupAddsOnlyPreviousAssignments() throws Exception { } @Test - public void setGroupExplicitToSearchDoesNotKeepPreviousAssignments() throws Exception { + void setGroupExplicitToSearchDoesNotKeepPreviousAssignments() throws Exception { ExplicitGroup oldGroup = new ExplicitGroup("OldGroup", GroupHierarchyType.INDEPENDENT, ','); oldGroup.add(entry); GroupTreeNode node = GroupTreeNode.fromGroup(oldGroup); @@ -259,7 +259,7 @@ public void setGroupExplicitToSearchDoesNotKeepPreviousAssignments() throws Exce } @Test - public void setGroupExplicitToExplicitIsRenameAndSoRemovesPreviousAssignment() throws Exception { + void setGroupExplicitToExplicitIsRenameAndSoRemovesPreviousAssignment() throws Exception { ExplicitGroup oldGroup = new ExplicitGroup("OldGroup", GroupHierarchyType.INDEPENDENT, ','); oldGroup.add(entry); GroupTreeNode node = GroupTreeNode.fromGroup(oldGroup); @@ -271,7 +271,7 @@ public void setGroupExplicitToExplicitIsRenameAndSoRemovesPreviousAssignment() t } @Test - public void getChildByPathFindsCorrectChildInSecondLevel() throws Exception { + void getChildByPathFindsCorrectChildInSecondLevel() throws Exception { GroupTreeNode root = getRoot(); GroupTreeNode child = getNodeInSimpleTree(root); @@ -279,7 +279,7 @@ public void getChildByPathFindsCorrectChildInSecondLevel() throws Exception { } @Test - public void getPathSimpleTree() throws Exception { + void getPathSimpleTree() throws Exception { GroupTreeNode node = getNodeInSimpleTree(); assertEquals("ExplicitParent > ExplicitNode", node.getPath()); From 771af5dc2a45a2cfeeb48d1f2286424292238595 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Sun, 12 Apr 2020 13:37:35 +0200 Subject: [PATCH 073/166] Improve performance (#6270) * Improve performance - Cache latex free field values for display in the main table - Only access preferences once for how to display names (instead of for every entry again) - Update search async only after 400ms without typing * Fix tests --- .idea/runConfigurations/JabRef_Main.xml | 3 + src/main/java/org/jabref/gui/BasePanel.java | 4 +- .../gui/maintable/BibEntryTableViewModel.java | 2 +- .../org/jabref/gui/maintable/FieldColumn.java | 55 +----- .../gui/maintable/MainTableNameFormatter.java | 31 ++-- .../jabref/gui/search/GlobalSearchBar.java | 9 +- .../gui/util/ValueTableCellFactory.java | 6 +- .../java/org/jabref/model/entry/BibEntry.java | 51 +++--- .../BibtexKeyGeneratorTest.java | 148 +++++++-------- .../org/jabref/model/entry/BibEntryTest.java | 170 +++++++++--------- 10 files changed, 220 insertions(+), 259 deletions(-) diff --git a/.idea/runConfigurations/JabRef_Main.xml b/.idea/runConfigurations/JabRef_Main.xml index 70f04ee246c..4a1ef684c65 100644 --- a/.idea/runConfigurations/JabRef_Main.xml +++ b/.idea/runConfigurations/JabRef_Main.xml @@ -4,6 +4,9 @@

    */ public Optional getFieldOrAlias(Field field) { - return genericGetFieldOrAlias(field, this::getField); + return genericGetFieldOrAlias(field, BibEntry::getField); } /** @@ -870,9 +878,9 @@ public Optional getLatexFreeField(Field field) { } else { Optional fieldValue = getField(field); if (fieldValue.isPresent()) { - String latexFreeField = LatexToUnicodeAdapter.format(fieldValue.get()).intern(); - latexFreeFields.put(field, latexFreeField); - return Optional.of(latexFreeField); + String latexFreeValue = LatexToUnicodeAdapter.format(fieldValue.get()).intern(); + latexFreeFields.put(field, latexFreeValue); + return Optional.of(latexFreeValue); } else { return Optional.empty(); } @@ -943,9 +951,4 @@ public ObservableMap getFieldsObservable() { public Observable[] getObservables() { return new Observable[] {fields, type}; } - - private interface GetFieldInterface { - Optional getValueForField(Field field); - } - } diff --git a/src/test/java/org/jabref/logic/bibtexkeypattern/BibtexKeyGeneratorTest.java b/src/test/java/org/jabref/logic/bibtexkeypattern/BibtexKeyGeneratorTest.java index e3adfba04bf..222aae68292 100644 --- a/src/test/java/org/jabref/logic/bibtexkeypattern/BibtexKeyGeneratorTest.java +++ b/src/test/java/org/jabref/logic/bibtexkeypattern/BibtexKeyGeneratorTest.java @@ -19,7 +19,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.mock; -public class BibtexKeyGeneratorTest { +class BibtexKeyGeneratorTest { private static final String AUTHOR_STRING_FIRSTNAME_FULL_LASTNAME_FULL_COUNT_1 = "Isaac Newton"; private static final String AUTHOR_STRING_FIRSTNAME_FULL_LASTNAME_FULL_COUNT_2 = "Isaac Newton and James Maxwell"; @@ -47,12 +47,12 @@ public class BibtexKeyGeneratorTest { private final FileUpdateMonitor fileMonitor = new DummyFileUpdateMonitor(); @BeforeEach - public void setUp() { + void setUp() { importFormatPreferences = mock(ImportFormatPreferences.class, Answers.RETURNS_DEEP_STUBS); } @Test - public void testAndInAuthorName() throws ParseException { + void testAndInAuthorName() throws ParseException { Optional entry0 = BibtexParser.singleFromString("@ARTICLE{kohn, author={Simon Holland}}", importFormatPreferences, fileMonitor); assertEquals("Holland", @@ -61,7 +61,7 @@ public void testAndInAuthorName() throws ParseException { } @Test - public void testCrossrefAndInAuthorNames() throws Exception { + void testCrossrefAndInAuthorNames() throws Exception { BibDatabase database = new BibDatabase(); BibEntry entry1 = new BibEntry(); entry1.setField(StandardField.CROSSREF, "entry2"); @@ -77,7 +77,7 @@ public void testCrossrefAndInAuthorNames() throws Exception { } @Test - public void testAndAuthorNames() throws ParseException { + void testAndAuthorNames() throws ParseException { String bibtexString = "@ARTICLE{whatevery, author={Mari D. Herland and Mona-Iren Hauge and Ingeborg M. Helgeland}}"; Optional entry = BibtexParser.singleFromString(bibtexString, importFormatPreferences, fileMonitor); assertEquals("HerlandHaugeHelgeland", @@ -86,7 +86,7 @@ public void testAndAuthorNames() throws ParseException { } @Test - public void testCrossrefAndAuthorNames() throws Exception { + void testCrossrefAndAuthorNames() throws Exception { BibDatabase database = new BibDatabase(); BibEntry entry1 = new BibEntry(); entry1.setField(StandardField.CROSSREF, "entry2"); @@ -102,7 +102,7 @@ public void testCrossrefAndAuthorNames() throws Exception { } @Test - public void testSpecialLatexCharacterInAuthorName() throws ParseException { + void testSpecialLatexCharacterInAuthorName() throws ParseException { Optional entry = BibtexParser.singleFromString( "@ARTICLE{kohn, author={Simon Popovi\\v{c}ov\\'{a}}}", importFormatPreferences, fileMonitor); assertEquals("Popovicova", @@ -115,7 +115,7 @@ public void testSpecialLatexCharacterInAuthorName() throws ParseException { * Ć ć É é Í í Ĺ ĺ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź */ @Test - public void testMakeLabelAndCheckLegalKeys() throws ParseException { + void testMakeLabelAndCheckLegalKeys() throws ParseException { Optional entry0 = BibtexParser.singleFromString( "@ARTICLE{kohn, author={Andreas Köning}, year={2000}}", importFormatPreferences, fileMonitor); @@ -194,7 +194,7 @@ public void testMakeLabelAndCheckLegalKeys() throws ParseException { * Test the Labelmaker and with accent grave Chars to test: "ÀÈÌÒÙ"; */ @Test - public void testMakeLabelAndCheckLegalKeysAccentGrave() throws ParseException { + void testMakeLabelAndCheckLegalKeysAccentGrave() throws ParseException { Optional entry0 = BibtexParser.singleFromString( "@ARTICLE{kohn, author={Andreas Àöning}, year={2000}}", importFormatPreferences, fileMonitor); assertEquals("Aoe", @@ -251,7 +251,7 @@ public void testMakeLabelAndCheckLegalKeysAccentGrave() throws ParseException { * @see BibtexKeyGenerator#checkLegalKey(String) */ @Test - public void testCheckLegalKey() { + void testCheckLegalKey() { // not tested/ not in hashmap UNICODE_CHARS: // Ł ł Ő ő Ű ű Ŀ ŀ Ħ ħ Ð ð Þ þ Œ œ Æ æ Ø ø Å å Ə ə Đ đ Ů ů Ǣ ǣ ǖ ǘ ǚ ǜ //" Ǣ ǣ ǖ ǘ ǚ ǜ " + @@ -309,7 +309,7 @@ public void testCheckLegalKey() { } @Test - public void testFirstAuthor() { + void testFirstAuthor() { assertEquals("Newton", BibtexKeyGenerator.firstAuthor(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_5)); assertEquals("Newton", BibtexKeyGenerator.firstAuthor(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_1)); @@ -320,12 +320,12 @@ public void testFirstAuthor() { } @Test - public void testFirstAuthorNull() { + void testFirstAuthorNull() { assertThrows(NullPointerException.class, () -> BibtexKeyGenerator.firstAuthor(null)); } @Test - public void testUniversity() throws ParseException { + void testUniversity() throws ParseException { Optional entry = BibtexParser.singleFromString( "@ARTICLE{kohn, author={{Link{\\\"{o}}ping University}}}", importFormatPreferences, fileMonitor); assertEquals("UniLinkoeping", @@ -334,7 +334,7 @@ public void testUniversity() throws ParseException { } @Test - public void testcrossrefUniversity() throws Exception { + void testcrossrefUniversity() throws Exception { BibDatabase database = new BibDatabase(); BibEntry entry1 = new BibEntry(); entry1.setField(StandardField.CROSSREF, "entry2"); @@ -350,7 +350,7 @@ public void testcrossrefUniversity() throws Exception { } @Test - public void testDepartment() throws ParseException { + void testDepartment() throws ParseException { Optional entry = BibtexParser.singleFromString( "@ARTICLE{kohn, author={{Link{\\\"{o}}ping University, Department of Electrical Engineering}}}", importFormatPreferences, fileMonitor); @@ -360,7 +360,7 @@ public void testDepartment() throws ParseException { } @Test - public void testcrossrefDepartment() throws Exception { + void testcrossrefDepartment() throws Exception { BibDatabase database = new BibDatabase(); BibEntry entry1 = new BibEntry(); entry1.setField(StandardField.CROSSREF, "entry2"); @@ -376,7 +376,7 @@ public void testcrossrefDepartment() throws Exception { } @Test - public void testSchool() throws ParseException { + void testSchool() throws ParseException { Optional entry = BibtexParser.singleFromString( "@ARTICLE{kohn, author={{Link{\\\"{o}}ping University, School of Computer Engineering}}}", importFormatPreferences, fileMonitor); @@ -386,7 +386,7 @@ public void testSchool() throws ParseException { } @Test - public void testcrossrefSchool() throws Exception { + void testcrossrefSchool() throws Exception { BibDatabase database = new BibDatabase(); BibEntry entry1 = new BibEntry(); entry1.setField(StandardField.CROSSREF, "entry2"); @@ -402,7 +402,7 @@ public void testcrossrefSchool() throws Exception { } @Test - public void testInstituteOfTechnology() throws ParseException { + void testInstituteOfTechnology() throws ParseException { Optional entry = BibtexParser.singleFromString( "@ARTICLE{kohn, author={{Massachusetts Institute of Technology}}}", importFormatPreferences, fileMonitor); assertEquals("MIT", @@ -411,7 +411,7 @@ public void testInstituteOfTechnology() throws ParseException { } @Test - public void testcrossrefInstituteOfTechnology() throws Exception { + void testcrossrefInstituteOfTechnology() throws Exception { BibDatabase database = new BibDatabase(); BibEntry entry1 = new BibEntry(); entry1.setField(StandardField.CROSSREF, "entry2"); @@ -427,7 +427,7 @@ public void testcrossrefInstituteOfTechnology() throws Exception { } @Test - public void testAuthIniN() { + void testAuthIniN() { assertEquals("NMEB", BibtexKeyGenerator.authIniN(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_5, 4)); assertEquals("NMEB", BibtexKeyGenerator.authIniN(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_4, 4)); assertEquals("NeME", BibtexKeyGenerator.authIniN(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_3, 4)); @@ -444,12 +444,12 @@ public void testAuthIniN() { } @Test - public void testAuthIniNNull() { + void testAuthIniNNull() { assertThrows(NullPointerException.class, () -> BibtexKeyGenerator.authIniN(null, 3)); } @Test - public void testAuthIniNEmptyReturnsEmpty() { + void testAuthIniNEmptyReturnsEmpty() { assertEquals("", BibtexKeyGenerator.authIniN("", 1)); } @@ -457,7 +457,7 @@ public void testAuthIniNEmptyReturnsEmpty() { * Tests [auth.auth.ea] */ @Test - public void authAuthEa() { + void authAuthEa() { assertEquals("Newton", BibtexKeyGenerator.authAuthEa(AUTHOR_STRING_FIRSTNAME_FULL_LASTNAME_FULL_COUNT_1)); assertEquals("Newton.Maxwell", BibtexKeyGenerator.authAuthEa(AUTHOR_STRING_FIRSTNAME_FULL_LASTNAME_FULL_COUNT_2)); @@ -466,7 +466,7 @@ public void authAuthEa() { } @Test - public void testAuthEaEmptyReturnsEmpty() { + void testAuthEaEmptyReturnsEmpty() { assertEquals("", BibtexKeyGenerator.authAuthEa("")); } @@ -474,7 +474,7 @@ public void testAuthEaEmptyReturnsEmpty() { * Tests the [auth.etal] and [authEtAl] patterns */ @Test - public void testAuthEtAl() { + void testAuthEtAl() { // tests taken from the comments // [auth.etal] @@ -498,7 +498,7 @@ public void testAuthEtAl() { * Test the [authshort] pattern */ @Test - public void testAuthShort() { + void testAuthShort() { // tests taken from the comments assertEquals("NME+", BibtexKeyGenerator.authshort(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_4)); assertEquals("NME", BibtexKeyGenerator.authshort(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_3)); @@ -507,7 +507,7 @@ public void testAuthShort() { } @Test - public void testAuthShortEmptyReturnsEmpty() { + void testAuthShortEmptyReturnsEmpty() { assertEquals("", BibtexKeyGenerator.authshort("")); } @@ -515,7 +515,7 @@ public void testAuthShortEmptyReturnsEmpty() { * Test the [authN_M] pattern */ @Test - public void authNM() { + void authNM() { assertEquals("N", BibtexKeyGenerator.authNofMth(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_1, 1, 1)); assertEquals("Max", BibtexKeyGenerator.authNofMth(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_2, 3, 2)); @@ -535,7 +535,7 @@ public void authNM() { } @Test - public void authNMThrowsNPE() { + void authNMThrowsNPE() { assertThrows(NullPointerException.class, () -> BibtexKeyGenerator.authNofMth(null, 2, 4)); } @@ -543,7 +543,7 @@ public void authNMThrowsNPE() { * Tests [authForeIni] */ @Test - public void firstAuthorForenameInitials() { + void firstAuthorForenameInitials() { assertEquals("I", BibtexKeyGenerator .firstAuthorForenameInitials(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_1)); assertEquals("I", BibtexKeyGenerator @@ -558,7 +558,7 @@ public void firstAuthorForenameInitials() { * Tests [authFirstFull] */ @Test - public void firstAuthorVonAndLast() { + void firstAuthorVonAndLast() { assertEquals("vanderAalst", BibtexKeyGenerator .firstAuthorVonAndLast(AUTHOR_STRING_FIRSTNAME_FULL_LASTNAME_FULL_WITH_VAN_COUNT_1)); assertEquals("vanderAalst", BibtexKeyGenerator @@ -566,7 +566,7 @@ public void firstAuthorVonAndLast() { } @Test - public void firstAuthorVonAndLastNoVonInName() { + void firstAuthorVonAndLastNoVonInName() { assertEquals("Newton", BibtexKeyGenerator.firstAuthorVonAndLast(AUTHOR_STRING_FIRSTNAME_FULL_LASTNAME_FULL_COUNT_1)); assertEquals("Newton", @@ -577,7 +577,7 @@ public void firstAuthorVonAndLastNoVonInName() { * Tests [authors] */ @Test - public void testAllAuthors() { + void testAllAuthors() { assertEquals("Newton", BibtexKeyGenerator.allAuthors(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_1)); assertEquals("NewtonMaxwell", BibtexKeyGenerator.allAuthors(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_2)); @@ -589,7 +589,7 @@ public void testAllAuthors() { * Tests [authorsAlpha] */ @Test - public void authorsAlpha() { + void authorsAlpha() { assertEquals("New", BibtexKeyGenerator.authorsAlpha(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_1)); assertEquals("NM", BibtexKeyGenerator.authorsAlpha(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_2)); assertEquals("NME", BibtexKeyGenerator.authorsAlpha(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_3)); @@ -606,7 +606,7 @@ public void authorsAlpha() { * Tests [authorLast] */ @Test - public void lastAuthor() { + void lastAuthor() { assertEquals("Newton", BibtexKeyGenerator.lastAuthor(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_1)); assertEquals("Maxwell", BibtexKeyGenerator.lastAuthor(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_2)); assertEquals("Einstein", @@ -624,7 +624,7 @@ public void lastAuthor() { * Tests [authorLastForeIni] */ @Test - public void lastAuthorForenameInitials() { + void lastAuthorForenameInitials() { assertEquals("I", BibtexKeyGenerator.lastAuthorForenameInitials(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_1)); assertEquals("J", @@ -646,7 +646,7 @@ public void lastAuthorForenameInitials() { * Tests [authorIni] */ @Test - public void oneAuthorPlusIni() { + void oneAuthorPlusIni() { assertEquals("Newto", BibtexKeyGenerator.oneAuthorPlusIni(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_1)); assertEquals("NewtoM", @@ -668,7 +668,7 @@ public void oneAuthorPlusIni() { * Tests the [authorsN] pattern. -> [authors1] */ @Test - public void testNAuthors1() { + void testNAuthors1() { assertEquals("Newton", BibtexKeyGenerator.nAuthors(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_1, 1)); assertEquals("NewtonEtAl", BibtexKeyGenerator.nAuthors(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_2, 1)); @@ -679,7 +679,7 @@ public void testNAuthors1() { } @Test - public void testNAuthors1EmptyReturnEmpty() { + void testNAuthors1EmptyReturnEmpty() { assertEquals("", BibtexKeyGenerator.nAuthors("", 1)); } @@ -687,7 +687,7 @@ public void testNAuthors1EmptyReturnEmpty() { * Tests the [authorsN] pattern. -> [authors3] */ @Test - public void testNAuthors3() { + void testNAuthors3() { assertEquals("Newton", BibtexKeyGenerator.nAuthors(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_1, 3)); assertEquals("NewtonMaxwell", BibtexKeyGenerator.nAuthors(AUTHOR_STRING_FIRSTNAME_INITIAL_LASTNAME_FULL_COUNT_2, 3)); @@ -698,7 +698,7 @@ public void testNAuthors3() { } @Test - public void testFirstPage() { + void testFirstPage() { assertEquals("7", BibtexKeyGenerator.firstPage("7--27")); assertEquals("27", BibtexKeyGenerator.firstPage("--27")); assertEquals("", BibtexKeyGenerator.firstPage("")); @@ -708,12 +708,12 @@ public void testFirstPage() { assertEquals("43", BibtexKeyGenerator.firstPage("43+")); } - public void testFirstPageNull() { + void testFirstPageNull() { assertThrows(NullPointerException.class, () -> BibtexKeyGenerator.firstPage(null)); } @Test - public void testPagePrefix() { + void testPagePrefix() { assertEquals("L", BibtexKeyGenerator.pagePrefix("L7--27")); assertEquals("L--", BibtexKeyGenerator.pagePrefix("L--27")); assertEquals("L", BibtexKeyGenerator.pagePrefix("L")); @@ -731,12 +731,12 @@ public void testPagePrefix() { } @Test - public void testPagePrefixNull() { + void testPagePrefixNull() { assertThrows(NullPointerException.class, () -> BibtexKeyGenerator.pagePrefix(null)); } @Test - public void testLastPage() { + void testLastPage() { assertEquals("27", BibtexKeyGenerator.lastPage("7--27")); assertEquals("27", BibtexKeyGenerator.lastPage("--27")); @@ -748,7 +748,7 @@ public void testLastPage() { } @Test - public void testLastPageNull() { + void testLastPageNull() { assertThrows(NullPointerException.class, () -> BibtexKeyGenerator.lastPage(null)); } @@ -756,7 +756,7 @@ public void testLastPageNull() { * Tests [veryShortTitle] */ @Test - public void veryShortTitle() { + void veryShortTitle() { // veryShortTitle is getTitleWords with "1" as count int count = 1; assertEquals("application", @@ -789,7 +789,7 @@ public void veryShortTitle() { * Tests [shortTitle] */ @Test - public void shortTitle() { + void shortTitle() { // shortTitle is getTitleWords with "3" as count and removed small words int count = 3; assertEquals("application migration effort", @@ -820,7 +820,7 @@ public void shortTitle() { * Tests [camel] */ @Test - public void camel() { + void camel() { // camel capitalises and concatenates all the words of the title assertEquals("ApplicationMigrationEffortInTheCloudTheCaseOfCloudPlatforms", BibtexKeyGenerator.getCamelizedTitle(TITLE_STRING_ALL_LOWER_FOUR_SMALL_WORDS_ONE_EN_DASH)); @@ -845,7 +845,7 @@ public void camel() { * Tests [title] */ @Test - public void title() { + void title() { // title capitalises the significant words of the title // for the title case the concatenation happens at formatting, which is tested in MakeLabelWithDatabaseTest.java assertEquals("Application Migration Effort in the Cloud the Case of Cloud Platforms", @@ -874,7 +874,7 @@ public void title() { } @Test - public void keywordNKeywordsSeparatedBySpace() { + void keywordNKeywordsSeparatedBySpace() { BibEntry entry = new BibEntry(); entry.setField(StandardField.KEYWORDS, "w1, w2a w2b, w3"); @@ -891,7 +891,7 @@ public void keywordNKeywordsSeparatedBySpace() { } @Test - public void crossrefkeywordNKeywordsSeparatedBySpace() { + void crossrefkeywordNKeywordsSeparatedBySpace() { BibDatabase database = new BibDatabase(); BibEntry entry1 = new BibEntry(); BibEntry entry2 = new BibEntry(); @@ -907,7 +907,7 @@ public void crossrefkeywordNKeywordsSeparatedBySpace() { } @Test - public void keywordsNKeywordsSeparatedBySpace() { + void keywordsNKeywordsSeparatedBySpace() { BibEntry entry = new BibEntry(); entry.setField(StandardField.KEYWORDS, "w1, w2a w2b, w3"); @@ -925,7 +925,7 @@ public void keywordsNKeywordsSeparatedBySpace() { } @Test - public void crossrefkeywordsNKeywordsSeparatedBySpace() { + void crossrefkeywordsNKeywordsSeparatedBySpace() { BibDatabase database = new BibDatabase(); BibEntry entry1 = new BibEntry(); BibEntry entry2 = new BibEntry(); @@ -941,27 +941,27 @@ public void crossrefkeywordsNKeywordsSeparatedBySpace() { } @Test - public void testCheckLegalKeyEnforceLegal() { + void testCheckLegalKeyEnforceLegal() { assertEquals("AAAA", BibtexKeyGenerator.cleanKey("AA AA", true)); assertEquals("SPECIALCHARS", BibtexKeyGenerator.cleanKey("SPECIAL CHARS#{\\\"}~,^", true)); assertEquals("", BibtexKeyGenerator.cleanKey("\n\t\r", true)); } @Test - public void testCheckLegalKeyDoNotEnforceLegal() { + void testCheckLegalKeyDoNotEnforceLegal() { assertEquals("AAAA", BibtexKeyGenerator.cleanKey("AA AA", false)); assertEquals("SPECIALCHARS#~^", BibtexKeyGenerator.cleanKey("SPECIAL CHARS#{\\\"}~,^", false)); assertEquals("", BibtexKeyGenerator.cleanKey("\n\t\r", false)); } @Test - public void testCheckLegalNullInNullOut() { + void testCheckLegalNullInNullOut() { assertThrows(NullPointerException.class, () -> BibtexKeyGenerator.cleanKey(null, true)); assertThrows(NullPointerException.class, () -> BibtexKeyGenerator.cleanKey(null, false)); } @Test - public void testApplyModifiers() { + void testApplyModifiers() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "Green Scheduling of Whatever"); assertEquals("GSo", BibtexKeyGenerator.generateKey(entry, "shorttitleINI")); @@ -970,7 +970,7 @@ public void testApplyModifiers() { } @Test - public void testcrossrefShorttitle() { + void testcrossrefShorttitle() { BibDatabase database = new BibDatabase(); BibEntry entry1 = new BibEntry(); BibEntry entry2 = new BibEntry(); @@ -985,7 +985,7 @@ public void testcrossrefShorttitle() { } @Test - public void testcrossrefShorttitleInitials() { + void testcrossrefShorttitleInitials() { BibDatabase database = new BibDatabase(); BibEntry entry1 = new BibEntry(); BibEntry entry2 = new BibEntry(); @@ -999,70 +999,70 @@ public void testcrossrefShorttitleInitials() { } @Test - public void generateKeyStripsColonFromTitle() throws Exception { + void generateKeyStripsColonFromTitle() throws Exception { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "Green Scheduling of: Whatever"); assertEquals("GreenSchedulingOfWhatever", BibtexKeyGenerator.generateKey(entry, "title")); } @Test - public void generateKeyStripsApostropheFromTitle() throws Exception { + void generateKeyStripsApostropheFromTitle() throws Exception { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "Green Scheduling of `Whatever`"); assertEquals("GreenSchedulingofWhatever", BibtexKeyGenerator.generateKey(entry, "title")); } @Test - public void generateKeyWithOneModifier() throws Exception { + void generateKeyWithOneModifier() throws Exception { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "The Interesting Title"); assertEquals("theinterestingtitle", BibtexKeyGenerator.generateKey(entry, "title:lower")); } @Test - public void generateKeyWithTwoModifiers() throws Exception { + void generateKeyWithTwoModifiers() throws Exception { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "The Interesting Title"); assertEquals("theinterestingtitle", BibtexKeyGenerator.generateKey(entry, "title:lower:(_)")); } @Test - public void generateKeyWithTitleCapitalizeModifier() throws Exception { + void generateKeyWithTitleCapitalizeModifier() throws Exception { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "the InTeresting title longer than THREE words"); assertEquals("TheInterestingTitleLongerThanThreeWords", BibtexKeyGenerator.generateKey(entry, "title:capitalize")); } @Test - public void generateKeyWithShortTitleCapitalizeModifier() throws Exception { + void generateKeyWithShortTitleCapitalizeModifier() throws Exception { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "the InTeresting title longer than THREE words"); assertEquals("InterestingTitleLonger", BibtexKeyGenerator.generateKey(entry, "shorttitle:capitalize")); } @Test - public void generateKeyWithTitleTitleCaseModifier() throws Exception { + void generateKeyWithTitleTitleCaseModifier() throws Exception { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "A title WITH some of The key words"); assertEquals("ATitlewithSomeoftheKeyWords", BibtexKeyGenerator.generateKey(entry, "title:titlecase")); } @Test - public void generateKeyWithShortTitleTitleCaseModifier() throws Exception { + void generateKeyWithShortTitleTitleCaseModifier() throws Exception { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "the InTeresting title longer than THREE words"); assertEquals("InterestingTitleLonger", BibtexKeyGenerator.generateKey(entry, "shorttitle:titlecase")); } @Test - public void generateKeyWithTitleSentenceCaseModifier() throws Exception { + void generateKeyWithTitleSentenceCaseModifier() throws Exception { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "A title WITH some of The key words"); assertEquals("Atitlewithsomeofthekeywords", BibtexKeyGenerator.generateKey(entry, "title:sentencecase")); } @Test - public void generateKeyWithAuthUpperYearShortTitleCapitalizeModifier() throws Exception { + void generateKeyWithAuthUpperYearShortTitleCapitalizeModifier() throws Exception { BibEntry entry = new BibEntry(); entry.setField(StandardField.AUTHOR, AUTHOR_STRING_FIRSTNAME_FULL_LASTNAME_FULL_COUNT_1); entry.setField(StandardField.YEAR, "2019"); @@ -1071,7 +1071,7 @@ public void generateKeyWithAuthUpperYearShortTitleCapitalizeModifier() throws Ex } @Test - public void generateKeyWithYearAuthUpperTitleSentenceCaseModifier() throws Exception { + void generateKeyWithYearAuthUpperTitleSentenceCaseModifier() throws Exception { BibEntry entry = new BibEntry(); entry.setField(StandardField.AUTHOR, AUTHOR_STRING_FIRSTNAME_FULL_LASTNAME_FULL_COUNT_3); entry.setField(StandardField.YEAR, "2019"); @@ -1080,7 +1080,7 @@ public void generateKeyWithYearAuthUpperTitleSentenceCaseModifier() throws Excep } @Test - public void generateKeyWithMinusInCitationStyleOutsideAField() throws Exception { + void generateKeyWithMinusInCitationStyleOutsideAField() throws Exception { BibEntry entry = new BibEntry(); entry.setField(StandardField.AUTHOR, AUTHOR_STRING_FIRSTNAME_FULL_LASTNAME_FULL_COUNT_1); entry.setField(StandardField.YEAR, "2019"); @@ -1089,7 +1089,7 @@ public void generateKeyWithMinusInCitationStyleOutsideAField() throws Exception } @Test - public void generateKeyWithWithFirstNCharacters() throws Exception { + void generateKeyWithWithFirstNCharacters() throws Exception { BibEntry entry = new BibEntry(); entry.setField(StandardField.AUTHOR, "Newton, Isaac"); entry.setField(StandardField.YEAR, "2019"); diff --git a/src/test/java/org/jabref/model/entry/BibEntryTest.java b/src/test/java/org/jabref/model/entry/BibEntryTest.java index e7038e12fd7..45dbeb69470 100644 --- a/src/test/java/org/jabref/model/entry/BibEntryTest.java +++ b/src/test/java/org/jabref/model/entry/BibEntryTest.java @@ -36,210 +36,210 @@ class BibEntryTest { private BibEntry entry; @BeforeEach - public void setUp() { + void setUp() { entry = new BibEntry(); } @AfterEach - public void tearDown() { + void tearDown() { entry = null; } @Test - public void testDefaultConstructor() { + void testDefaultConstructor() { assertEquals(StandardEntryType.Misc, entry.getType()); assertNotNull(entry.getId()); assertFalse(entry.getField(StandardField.AUTHOR).isPresent()); } @Test - public void settingTypeToNullThrowsException() { + void settingTypeToNullThrowsException() { assertThrows(NullPointerException.class, () -> entry.setType(null)); } @Test - public void setNullFieldThrowsNPE() { + void setNullFieldThrowsNPE() { assertThrows(NullPointerException.class, () -> entry.setField(null)); } @Test - public void getFieldIsCaseInsensitive() throws Exception { + void getFieldIsCaseInsensitive() throws Exception { entry.setField(new UnknownField("TeSt"), "value"); assertEquals(Optional.of("value"), entry.getField(new UnknownField("tEsT"))); } @Test - public void getFieldWorksWithBibFieldAsWell() throws Exception { + void getFieldWorksWithBibFieldAsWell() throws Exception { entry.setField(StandardField.AUTHOR, "value"); assertEquals(Optional.of("value"), entry.getField(new BibField(StandardField.AUTHOR, FieldPriority.IMPORTANT).getField())); } @Test - public void newBibEntryIsUnchanged() { + void newBibEntryIsUnchanged() { assertFalse(entry.hasChanged()); } @Test - public void setFieldLeadsToAChangedEntry() throws Exception { + void setFieldLeadsToAChangedEntry() throws Exception { entry.setField(StandardField.AUTHOR, "value"); assertTrue(entry.hasChanged()); } @Test - public void setFieldWorksWithBibFieldAsWell() throws Exception { + void setFieldWorksWithBibFieldAsWell() throws Exception { entry.setField(new BibField(StandardField.AUTHOR, FieldPriority.IMPORTANT).getField(), "value"); assertEquals(Optional.of("value"), entry.getField(StandardField.AUTHOR)); } @Test - public void clonedBibEntryHasUniqueID() throws Exception { + void clonedBibEntryHasUniqueID() throws Exception { BibEntry entryClone = (BibEntry) entry.clone(); assertNotEquals(entry.getId(), entryClone.getId()); } @Test - public void setAndGetAreConsistentForMonth() throws Exception { + void setAndGetAreConsistentForMonth() throws Exception { entry.setField(StandardField.MONTH, "may"); assertEquals(Optional.of("may"), entry.getField(StandardField.MONTH)); } @Test - public void setAndGetAreConsistentForCapitalizedMonth() throws Exception { + void setAndGetAreConsistentForCapitalizedMonth() throws Exception { entry.setField(StandardField.MONTH, "May"); assertEquals(Optional.of("May"), entry.getField(StandardField.MONTH)); } @Test - public void setAndGetAreConsistentForMonthString() throws Exception { + void setAndGetAreConsistentForMonthString() throws Exception { entry.setField(StandardField.MONTH, "#may#"); assertEquals(Optional.of("#may#"), entry.getField(StandardField.MONTH)); } @Test - public void monthCorrectlyReturnedForMonth() throws Exception { + void monthCorrectlyReturnedForMonth() throws Exception { entry.setField(StandardField.MONTH, "may"); assertEquals(Optional.of(Month.MAY), entry.getMonth()); } @Test - public void monthCorrectlyReturnedForCapitalizedMonth() throws Exception { + void monthCorrectlyReturnedForCapitalizedMonth() throws Exception { entry.setField(StandardField.MONTH, "May"); assertEquals(Optional.of(Month.MAY), entry.getMonth()); } @Test - public void monthCorrectlyReturnedForMonthString() throws Exception { + void monthCorrectlyReturnedForMonthString() throws Exception { entry.setField(StandardField.MONTH, "#may#"); assertEquals(Optional.of(Month.MAY), entry.getMonth()); } @Test - public void monthCorrectlyReturnedForMonthMay() throws Exception { + void monthCorrectlyReturnedForMonthMay() throws Exception { entry.setMonth(Month.MAY); assertEquals(Optional.of(Month.MAY), entry.getMonth()); } @Test - public void monthFieldCorrectlyReturnedForMonthMay() throws Exception { + void monthFieldCorrectlyReturnedForMonthMay() throws Exception { entry.setMonth(Month.MAY); assertEquals(Optional.of("#may#"), entry.getField(StandardField.MONTH)); } @Test - public void getFieldOrAliasDateWithYearNumericalMonthString() { + void getFieldOrAliasDateWithYearNumericalMonthString() { entry.setField(StandardField.YEAR, "2003"); entry.setField(StandardField.MONTH, "3"); assertEquals(Optional.of("2003-03"), entry.getFieldOrAlias(StandardField.DATE)); } @Test - public void getFieldOrAliasDateWithYearAbbreviatedMonth() { + void getFieldOrAliasDateWithYearAbbreviatedMonth() { entry.setField(StandardField.YEAR, "2003"); entry.setField(StandardField.MONTH, "#mar#"); assertEquals(Optional.of("2003-03"), entry.getFieldOrAlias(StandardField.DATE)); } @Test - public void getFieldOrAliasDateWithYearAbbreviatedMonthString() { + void getFieldOrAliasDateWithYearAbbreviatedMonthString() { entry.setField(StandardField.YEAR, "2003"); entry.setField(StandardField.MONTH, "mar"); assertEquals(Optional.of("2003-03"), entry.getFieldOrAlias(StandardField.DATE)); } @Test - public void getFieldOrAliasDateWithOnlyYear() { + void getFieldOrAliasDateWithOnlyYear() { entry.setField(StandardField.YEAR, "2003"); assertEquals(Optional.of("2003"), entry.getFieldOrAlias(StandardField.DATE)); } @Test - public void getFieldOrAliasYearWithDateYYYY() { + void getFieldOrAliasYearWithDateYYYY() { entry.setField(StandardField.DATE, "2003"); assertEquals(Optional.of("2003"), entry.getFieldOrAlias(StandardField.YEAR)); } @Test - public void getFieldOrAliasYearWithDateYYYYMM() { + void getFieldOrAliasYearWithDateYYYYMM() { entry.setField(StandardField.DATE, "2003-03"); assertEquals(Optional.of("2003"), entry.getFieldOrAlias(StandardField.YEAR)); } @Test - public void getFieldOrAliasYearWithDateYYYYMMDD() { + void getFieldOrAliasYearWithDateYYYYMMDD() { entry.setField(StandardField.DATE, "2003-03-30"); assertEquals(Optional.of("2003"), entry.getFieldOrAlias(StandardField.YEAR)); } @Test - public void getFieldOrAliasMonthWithDateYYYYReturnsNull() { + void getFieldOrAliasMonthWithDateYYYYReturnsNull() { entry.setField(StandardField.DATE, "2003"); assertEquals(Optional.empty(), entry.getFieldOrAlias(StandardField.MONTH)); } @Test - public void getFieldOrAliasMonthWithDateYYYYMM() { + void getFieldOrAliasMonthWithDateYYYYMM() { entry.setField(StandardField.DATE, "2003-03"); assertEquals(Optional.of("#mar#"), entry.getFieldOrAlias(StandardField.MONTH)); } @Test - public void getFieldOrAliasMonthWithDateYYYYMMDD() { + void getFieldOrAliasMonthWithDateYYYYMMDD() { entry.setField(StandardField.DATE, "2003-03-30"); assertEquals(Optional.of("#mar#"), entry.getFieldOrAlias(StandardField.MONTH)); } @Test - public void getFieldOrAliasLatexFreeAlreadyFreeValueIsUnchanged() { + void getFieldOrAliasLatexFreeAlreadyFreeValueIsUnchanged() { entry.setField(StandardField.TITLE, "A Title Without any LaTeX commands"); assertEquals(Optional.of("A Title Without any LaTeX commands"), entry.getFieldOrAliasLatexFree(StandardField.TITLE)); } @Test - public void getFieldOrAliasLatexFreeAlreadyFreeAliasValueIsUnchanged() { + void getFieldOrAliasLatexFreeAlreadyFreeAliasValueIsUnchanged() { entry.setField(StandardField.JOURNAL, "A Title Without any LaTeX commands"); assertEquals(Optional.of("A Title Without any LaTeX commands"), entry.getFieldOrAliasLatexFree(StandardField.JOURNALTITLE)); } @Test - public void getFieldOrAliasLatexFreeBracesAreRemoved() { + void getFieldOrAliasLatexFreeBracesAreRemoved() { entry.setField(StandardField.TITLE, "{A Title with some {B}ra{C}es}"); assertEquals(Optional.of("A Title with some BraCes"), entry.getFieldOrAliasLatexFree(StandardField.TITLE)); } @Test - public void getFieldOrAliasLatexFreeBracesAreRemovedFromAlias() { + void getFieldOrAliasLatexFreeBracesAreRemovedFromAlias() { entry.setField(StandardField.JOURNAL, "{A Title with some {B}ra{C}es}"); assertEquals(Optional.of("A Title with some BraCes"), entry.getFieldOrAliasLatexFree(StandardField.JOURNALTITLE)); } @Test - public void getFieldOrAliasLatexFreeComplexConversionInAlias() { + void getFieldOrAliasLatexFreeComplexConversionInAlias() { entry.setField(StandardField.JOURNAL, "A 32~{mA} {$\\Sigma\\Delta$}-modulator"); assertEquals(Optional.of("A 32 mA ΣΔ-modulator"), entry.getFieldOrAliasLatexFree(StandardField.JOURNALTITLE)); } @Test - public void testGetAndAddToLinkedFileList() { + void testGetAndAddToLinkedFileList() { List files = entry.getFiles(); files.add(new LinkedFile("", "", "")); entry.setFiles(files); @@ -247,14 +247,14 @@ public void testGetAndAddToLinkedFileList() { } @Test - public void testGetEmptyKeywords() { + void testGetEmptyKeywords() { KeywordList actual = entry.getKeywords(','); assertEquals(new KeywordList(), actual); } @Test - public void testGetSingleKeywords() { + void testGetSingleKeywords() { entry.addKeyword("kw", ','); KeywordList actual = entry.getKeywords(','); @@ -262,34 +262,34 @@ public void testGetSingleKeywords() { } @Test - public void settingCiteKeyLeadsToCorrectCiteKey() { + void settingCiteKeyLeadsToCorrectCiteKey() { assertFalse(entry.hasCiteKey()); entry.setCiteKey("Einstein1931"); assertEquals(Optional.of("Einstein1931"), entry.getCiteKeyOptional()); } @Test - public void settingCiteKeyLeadsToHasCiteKy() { + void settingCiteKeyLeadsToHasCiteKy() { assertFalse(entry.hasCiteKey()); entry.setCiteKey("Einstein1931"); assertTrue(entry.hasCiteKey()); } @Test - public void clearFieldWorksForAuthor() { + void clearFieldWorksForAuthor() { entry.setField(StandardField.AUTHOR, "Albert Einstein"); entry.clearField(StandardField.AUTHOR); assertEquals(Optional.empty(), entry.getField(StandardField.AUTHOR)); } @Test - public void setFieldWorksForAuthor() { + void setFieldWorksForAuthor() { entry.setField(StandardField.AUTHOR, "Albert Einstein"); assertEquals(Optional.of("Albert Einstein"), entry.getField(StandardField.AUTHOR)); } @Test - public void allFieldsPresentDefault() { + void allFieldsPresentDefault() { BibEntry e = new BibEntry(StandardEntryType.Article); e.setField(StandardField.AUTHOR, "abc"); e.setField(StandardField.TITLE, "abc"); @@ -305,7 +305,7 @@ public void allFieldsPresentDefault() { } @Test - public void allFieldsPresentOr() { + void allFieldsPresentOr() { BibEntry e = new BibEntry(StandardEntryType.Article); e.setField(StandardField.AUTHOR, "abc"); e.setField(StandardField.TITLE, "abc"); @@ -320,13 +320,13 @@ public void allFieldsPresentOr() { } @Test - public void isNullCiteKeyThrowsNPE() { + void isNullCiteKeyThrowsNPE() { BibEntry e = new BibEntry(StandardEntryType.Article); assertThrows(NullPointerException.class, () -> e.setCiteKey(null)); } @Test - public void isEmptyCiteKey() { + void isEmptyCiteKey() { BibEntry e = new BibEntry(StandardEntryType.Article); assertFalse(e.hasCiteKey()); @@ -341,23 +341,23 @@ public void isEmptyCiteKey() { } @Test - public void identicObjectsareEqual() throws Exception { + void identicObjectsareEqual() throws Exception { BibEntry otherEntry = entry; assertTrue(entry.equals(otherEntry)); } @Test - public void compareToNullObjectIsFalse() throws Exception { + void compareToNullObjectIsFalse() throws Exception { assertFalse(entry.equals(null)); } @Test - public void compareToDifferentClassIsFalse() throws Exception { + void compareToDifferentClassIsFalse() throws Exception { assertFalse(entry.equals(new Object())); } @Test - public void compareIsTrueWhenIdAndFieldsAreEqual() throws Exception { + void compareIsTrueWhenIdAndFieldsAreEqual() throws Exception { entry.setId("1"); entry.setField(new UnknownField("key"), "value"); BibEntry otherEntry = new BibEntry(); @@ -368,45 +368,45 @@ public void compareIsTrueWhenIdAndFieldsAreEqual() throws Exception { } @Test - public void addNullKeywordThrowsNPE() { + void addNullKeywordThrowsNPE() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); assertThrows(NullPointerException.class, () -> entry.addKeyword((Keyword) null, ',')); } @Test - public void putNullKeywordListThrowsNPE() { + void putNullKeywordListThrowsNPE() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); assertThrows(NullPointerException.class, () -> entry.putKeywords((KeywordList) null, ',')); } @Test - public void putNullKeywordSeparatorThrowsNPE() { + void putNullKeywordSeparatorThrowsNPE() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); assertThrows(NullPointerException.class, () -> entry.putKeywords(Arrays.asList("A", "B"), null)); } @Test - public void testGetSeparatedKeywordsAreCorrect() { + void testGetSeparatedKeywordsAreCorrect() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); assertEquals(new KeywordList("Foo", "Bar"), entry.getKeywords(',')); } @Test - public void testAddKeywordIsCorrect() { + void testAddKeywordIsCorrect() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); entry.addKeyword("FooBar", ','); assertEquals(new KeywordList("Foo", "Bar", "FooBar"), entry.getKeywords(',')); } @Test - public void testAddKeywordHasChanged() { + void testAddKeywordHasChanged() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); entry.addKeyword("FooBar", ','); assertTrue(entry.hasChanged()); } @Test - public void testAddKeywordTwiceYiedsOnlyOne() { + void testAddKeywordTwiceYiedsOnlyOne() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); entry.addKeyword("FooBar", ','); entry.addKeyword("FooBar", ','); @@ -414,28 +414,28 @@ public void testAddKeywordTwiceYiedsOnlyOne() { } @Test - public void addKeywordIsCaseSensitive() { + void addKeywordIsCaseSensitive() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); entry.addKeyword("FOO", ','); assertEquals(new KeywordList("Foo", "Bar", "FOO"), entry.getKeywords(',')); } @Test - public void testAddKeywordWithDifferentCapitalizationChanges() { + void testAddKeywordWithDifferentCapitalizationChanges() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); entry.addKeyword("FOO", ','); assertTrue(entry.hasChanged()); } @Test - public void testAddKeywordEmptyKeywordIsNotAdded() { + void testAddKeywordEmptyKeywordIsNotAdded() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); entry.addKeyword("", ','); assertEquals(new KeywordList("Foo", "Bar"), entry.getKeywords(',')); } @Test - public void testAddKeywordEmptyKeywordNotChanged() { + void testAddKeywordEmptyKeywordNotChanged() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); entry.setChanged(false); entry.addKeyword("", ','); @@ -443,83 +443,83 @@ public void testAddKeywordEmptyKeywordNotChanged() { } @Test - public void texNewBibEntryHasNoKeywords() { + void texNewBibEntryHasNoKeywords() { assertTrue(entry.getKeywords(',').isEmpty()); } @Test - public void texNewBibEntryHasNoKeywordsEvenAfterAddingEmptyKeyword() { + void texNewBibEntryHasNoKeywordsEvenAfterAddingEmptyKeyword() { entry.addKeyword("", ','); assertTrue(entry.getKeywords(',').isEmpty()); } @Test - public void texNewBibEntryAfterAddingEmptyKeywordNotChanged() { + void texNewBibEntryAfterAddingEmptyKeywordNotChanged() { entry.addKeyword("", ','); assertFalse(entry.hasChanged()); } @Test - public void testAddKeywordsWorksAsExpected() { + void testAddKeywordsWorksAsExpected() { entry.addKeywords(Arrays.asList("Foo", "Bar"), ','); assertEquals(new KeywordList("Foo", "Bar"), entry.getKeywords(',')); } @Test - public void testPutKeywordsOverwritesOldKeywords() { + void testPutKeywordsOverwritesOldKeywords() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); entry.putKeywords(Arrays.asList("Yin", "Yang"), ','); assertEquals(new KeywordList("Yin", "Yang"), entry.getKeywords(',')); } @Test - public void testPutKeywordsHasChanged() { + void testPutKeywordsHasChanged() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); entry.putKeywords(Arrays.asList("Yin", "Yang"), ','); assertTrue(entry.hasChanged()); } @Test - public void testPutKeywordsPutEmpyListErasesPreviousKeywords() { + void testPutKeywordsPutEmpyListErasesPreviousKeywords() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); entry.putKeywords(Collections.emptyList(), ','); assertTrue(entry.getKeywords(',').isEmpty()); } @Test - public void testPutKeywordsPutEmpyListHasChanged() { + void testPutKeywordsPutEmpyListHasChanged() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); entry.putKeywords(Collections.emptyList(), ','); assertTrue(entry.hasChanged()); } @Test - public void testPutKeywordsPutEmpyListToEmptyBibentry() { + void testPutKeywordsPutEmpyListToEmptyBibentry() { entry.putKeywords(Collections.emptyList(), ','); assertTrue(entry.getKeywords(',').isEmpty()); } @Test - public void testPutKeywordsPutEmpyListToEmptyBibentryNotChanged() { + void testPutKeywordsPutEmpyListToEmptyBibentryNotChanged() { entry.putKeywords(Collections.emptyList(), ','); assertFalse(entry.hasChanged()); } @Test - public void putKeywordsToEmptyReturnsNoChange() { + void putKeywordsToEmptyReturnsNoChange() { Optional change = entry.putKeywords(Collections.emptyList(), ','); assertEquals(Optional.empty(), change); } @Test - public void clearKeywordsReturnsChange() { + void clearKeywordsReturnsChange() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); Optional change = entry.putKeywords(Collections.emptyList(), ','); assertEquals(Optional.of(new FieldChange(entry, StandardField.KEYWORDS, "Foo, Bar", null)), change); } @Test - public void changeKeywordsReturnsChange() { + void changeKeywordsReturnsChange() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); Optional change = entry.putKeywords(Arrays.asList("Test", "FooTest"), ','); assertEquals(Optional.of(new FieldChange(entry, StandardField.KEYWORDS, "Foo, Bar", "Test, FooTest")), @@ -527,26 +527,26 @@ public void changeKeywordsReturnsChange() { } @Test - public void putKeywordsToSameReturnsNoChange() { + void putKeywordsToSameReturnsNoChange() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); Optional change = entry.putKeywords(Arrays.asList("Foo", "Bar"), ','); assertEquals(Optional.empty(), change); } @Test - public void getKeywordsReturnsParsedKeywordListFromKeywordsField() { + void getKeywordsReturnsParsedKeywordListFromKeywordsField() { entry.setField(StandardField.KEYWORDS, "w1, w2a w2b, w3"); assertEquals(new KeywordList("w1", "w2a w2b", "w3"), entry.getKeywords(',')); } @Test - public void removeKeywordsOnEntryWithoutKeywordsDoesNothing() { + void removeKeywordsOnEntryWithoutKeywordsDoesNothing() { Optional change = entry.removeKeywords(SpecialField.RANKING.getKeyWords(), ','); assertEquals(Optional.empty(), change); } @Test - public void removeKeywordsWithEmptyListDoesNothing() { + void removeKeywordsWithEmptyListDoesNothing() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); entry.putKeywords(Arrays.asList("kw1", "kw2"), ','); Optional change = entry.removeKeywords(new KeywordList(), ','); @@ -554,7 +554,7 @@ public void removeKeywordsWithEmptyListDoesNothing() { } @Test - public void removeKeywordsWithNonExistingKeywordsDoesNothing() { + void removeKeywordsWithNonExistingKeywordsDoesNothing() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); entry.putKeywords(Arrays.asList("kw1", "kw2"), ','); Optional change = entry.removeKeywords(KeywordList.parse("kw3, kw4", ','), ','); @@ -563,7 +563,7 @@ public void removeKeywordsWithNonExistingKeywordsDoesNothing() { } @Test - public void removeKeywordsWithExistingKeywordsRemovesThem() { + void removeKeywordsWithExistingKeywordsRemovesThem() { entry.setField(StandardField.KEYWORDS, "Foo, Bar"); entry.putKeywords(Arrays.asList("kw1", "kw2", "kw3"), ','); Optional change = entry.removeKeywords(KeywordList.parse("kw1, kw2", ','), ','); @@ -572,7 +572,7 @@ public void removeKeywordsWithExistingKeywordsRemovesThem() { } @Test - public void keywordListCorrectlyConstructedForThreeKeywords() { + void keywordListCorrectlyConstructedForThreeKeywords() { entry.addKeyword("kw", ','); entry.addKeyword("kw2", ','); entry.addKeyword("kw3", ','); @@ -581,7 +581,7 @@ public void keywordListCorrectlyConstructedForThreeKeywords() { } @Test - public void testGetEmptyResolvedKeywords() { + void testGetEmptyResolvedKeywords() { BibDatabase database = new BibDatabase(); entry.setField(StandardField.CROSSREF, "entry2"); database.insertEntry(entry); @@ -596,7 +596,7 @@ public void testGetEmptyResolvedKeywords() { } @Test - public void testGetSingleResolvedKeywords() { + void testGetSingleResolvedKeywords() { BibDatabase database = new BibDatabase(); entry.setField(StandardField.CROSSREF, "entry2"); @@ -613,7 +613,7 @@ public void testGetSingleResolvedKeywords() { } @Test - public void testGetResolvedKeywords() { + void testGetResolvedKeywords() { BibDatabase database = new BibDatabase(); entry.setField(StandardField.CROSSREF, "entry2"); @@ -632,13 +632,13 @@ public void testGetResolvedKeywords() { } @Test - public void settingTitleFieldsLeadsToChangeFlagged() { + void settingTitleFieldsLeadsToChangeFlagged() { entry.setField(StandardField.AUTHOR, "value"); assertTrue(entry.hasChanged()); } @Test - public void builderReturnsABibEntryNotChangedFlagged() { + void builderReturnsABibEntryNotChangedFlagged() { entry = new BibEntry().withField(StandardField.AUTHOR, "value"); assertFalse(entry.hasChanged()); } From 6ddd3215f57260abaa655a9d6e9f89174ee49cef Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2020 15:26:47 +0200 Subject: [PATCH 074/166] Bump org.beryx.jlink from 2.17.4 to 2.17.5 (#6281) Bumps org.beryx.jlink from 2.17.4 to 2.17.5. Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 04c82de94b8..372203614f0 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ plugins { id 'com.github.ben-manes.versions' version '0.28.0' id 'org.javamodularity.moduleplugin' version '1.5.0' id 'org.openjfx.javafxplugin' version '0.0.8' - id 'org.beryx.jlink' version '2.17.4' + id 'org.beryx.jlink' version '2.17.5' // nicer test outputs during running and completion id 'com.adarshr.test-logger' version '2.0.0' From 8dfac238cf138e0aa17d77803dbaf695259eaf6d Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2020 15:27:42 +0200 Subject: [PATCH 075/166] Bump classgraph from 4.8.68 to 4.8.69 (#6277) Bumps [classgraph](https://github.com/classgraph/classgraph) from 4.8.68 to 4.8.69. - [Release notes](https://github.com/classgraph/classgraph/releases) - [Commits](https://github.com/classgraph/classgraph/compare/classgraph-4.8.68...classgraph-4.8.69) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 372203614f0..16a2141c654 100644 --- a/build.gradle +++ b/build.gradle @@ -200,7 +200,7 @@ dependencies { implementation 'com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:0.61.0' implementation 'com.vladsch.flexmark:flexmark-ext-gfm-tasklist:0.61.0' - testImplementation 'io.github.classgraph:classgraph:4.8.68' + testImplementation 'io.github.classgraph:classgraph:4.8.69' testImplementation 'org.junit.jupiter:junit-jupiter:5.6.1' testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.6.1' testImplementation 'org.junit.platform:junit-platform-launcher:1.6.1' From c7ff7f54c03d2276140299005b967ed32443e30b Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2020 15:30:13 +0200 Subject: [PATCH 076/166] Bump flexmark from 0.61.0 to 0.61.6 (#6280) Bumps [flexmark](https://github.com/vsch/flexmark-java) from 0.61.0 to 0.61.6. - [Release notes](https://github.com/vsch/flexmark-java/releases) - [Commits](https://github.com/vsch/flexmark-java/compare/0.61.0...0.61.6) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 16a2141c654..bd4401537d1 100644 --- a/build.gradle +++ b/build.gradle @@ -196,7 +196,7 @@ dependencies { exclude module: "log4j-core" } - implementation 'com.vladsch.flexmark:flexmark:0.61.0' + implementation 'com.vladsch.flexmark:flexmark:0.61.6' implementation 'com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:0.61.0' implementation 'com.vladsch.flexmark:flexmark-ext-gfm-tasklist:0.61.0' From b063a9cf09822440ca1976153892c06e7342f132 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2020 15:31:11 +0200 Subject: [PATCH 077/166] Bump junit-jupiter from 5.6.1 to 5.6.2 (#6274) Bumps [junit-jupiter](https://github.com/junit-team/junit5) from 5.6.1 to 5.6.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.6.1...r5.6.2) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index bd4401537d1..86597cf52d3 100644 --- a/build.gradle +++ b/build.gradle @@ -201,7 +201,7 @@ dependencies { implementation 'com.vladsch.flexmark:flexmark-ext-gfm-tasklist:0.61.0' testImplementation 'io.github.classgraph:classgraph:4.8.69' - testImplementation 'org.junit.jupiter:junit-jupiter:5.6.1' + testImplementation 'org.junit.jupiter:junit-jupiter:5.6.2' testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.6.1' testImplementation 'org.junit.platform:junit-platform-launcher:1.6.1' From 4b6658b15c0a288724bd072430de5d6df88fc2fb Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2020 15:31:26 +0200 Subject: [PATCH 078/166] Bump flexmark-ext-gfm-tasklist from 0.61.0 to 0.61.6 (#6278) Bumps [flexmark-ext-gfm-tasklist](https://github.com/vsch/flexmark-java) from 0.61.0 to 0.61.6. - [Release notes](https://github.com/vsch/flexmark-java/releases) - [Commits](https://github.com/vsch/flexmark-java/compare/0.61.0...0.61.6) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 86597cf52d3..b660b5983b9 100644 --- a/build.gradle +++ b/build.gradle @@ -198,7 +198,7 @@ dependencies { implementation 'com.vladsch.flexmark:flexmark:0.61.6' implementation 'com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:0.61.0' - implementation 'com.vladsch.flexmark:flexmark-ext-gfm-tasklist:0.61.0' + implementation 'com.vladsch.flexmark:flexmark-ext-gfm-tasklist:0.61.6' testImplementation 'io.github.classgraph:classgraph:4.8.69' testImplementation 'org.junit.jupiter:junit-jupiter:5.6.2' From 7d6446a4a6183036ddba76d0ed2e8511f46ed2d2 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2020 15:31:37 +0200 Subject: [PATCH 079/166] Bump junit-platform-launcher from 1.6.1 to 1.6.2 (#6279) Bumps [junit-platform-launcher](https://github.com/junit-team/junit5) from 1.6.1 to 1.6.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/commits) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b660b5983b9..9185f0bd110 100644 --- a/build.gradle +++ b/build.gradle @@ -203,7 +203,7 @@ dependencies { testImplementation 'io.github.classgraph:classgraph:4.8.69' testImplementation 'org.junit.jupiter:junit-jupiter:5.6.2' testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.6.1' - testImplementation 'org.junit.platform:junit-platform-launcher:1.6.1' + testImplementation 'org.junit.platform:junit-platform-launcher:1.6.2' testImplementation 'net.bytebuddy:byte-buddy-parent:1.10.9' testRuntime group: 'org.apache.logging.log4j', name: 'log4j-core', version: '3.0.0-SNAPSHOT' From 13d0c36a53983f0ccaa81b327fd00e71e16d8f38 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2020 15:32:04 +0200 Subject: [PATCH 080/166] Bump unirest-java from 3.7.01 to 3.7.02 (#6275) Bumps [unirest-java](https://github.com/Kong/unirest-java) from 3.7.01 to 3.7.02. - [Release notes](https://github.com/Kong/unirest-java/releases) - [Changelog](https://github.com/Kong/unirest-java/blob/master/CHANGELOG.md) - [Commits](https://github.com/Kong/unirest-java/compare/v3.7.01...v3.7.02) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9185f0bd110..7b8db230e94 100644 --- a/build.gradle +++ b/build.gradle @@ -171,7 +171,7 @@ dependencies { implementation 'org.controlsfx:controlsfx:11.0.1' implementation 'org.jsoup:jsoup:1.13.1' - implementation 'com.konghq:unirest-java:3.7.01' + implementation 'com.konghq:unirest-java:3.7.02' implementation 'org.slf4j:slf4j-api:2.0.0-alpha1' implementation group: 'org.apache.logging.log4j', name: 'log4j-jcl', version: '3.0.0-SNAPSHOT' From 678cb1c0058413a7cfb2e337af74c7a5b56cee81 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2020 15:37:15 +0200 Subject: [PATCH 081/166] Bump flexmark-ext-gfm-strikethrough from 0.61.0 to 0.61.6 (#6273) Bumps [flexmark-ext-gfm-strikethrough](https://github.com/vsch/flexmark-java) from 0.61.0 to 0.61.6. - [Release notes](https://github.com/vsch/flexmark-java/releases) - [Commits](https://github.com/vsch/flexmark-java/compare/0.61.0...0.61.6) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 7b8db230e94..61addf09e9f 100644 --- a/build.gradle +++ b/build.gradle @@ -197,7 +197,7 @@ dependencies { } implementation 'com.vladsch.flexmark:flexmark:0.61.6' - implementation 'com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:0.61.0' + implementation 'com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:0.61.6' implementation 'com.vladsch.flexmark:flexmark-ext-gfm-tasklist:0.61.6' testImplementation 'io.github.classgraph:classgraph:4.8.69' From eeea06f9ac5cd198f2827af6c08a9bfb233e9a2f Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Mon, 13 Apr 2020 15:37:46 +0200 Subject: [PATCH 082/166] Fix dependency label --- .dependabot/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.dependabot/config.yml b/.dependabot/config.yml index e55d15986b0..5b4f9789a3d 100644 --- a/.dependabot/config.yml +++ b/.dependabot/config.yml @@ -6,7 +6,7 @@ update_configs: directory: "/" update_schedule: "weekly" default_labels: - - "dependencies" + - "t: dependencies" automerged_updates: - match: dependency_type: "all" From 8a43a4611947b85e33b7fbfebfcc9690e0cfecfe Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> Date: Mon, 13 Apr 2020 15:39:14 +0200 Subject: [PATCH 083/166] Number of items found in ImportEntriesDialog (#6248) * Added number of items found * Added the number of selected items * Simplified and fixed display of total and checked items * CHANGELOG.md * Conversion to real bindings Co-authored-by: Luis Romero --- CHANGELOG.md | 1 + .../gui/importer/ImportEntriesDialog.fxml | 37 ++++++++++++++----- .../gui/importer/ImportEntriesDialog.java | 11 ++++-- src/main/resources/l10n/JabRef_en.properties | 2 + 4 files changed, 38 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6df019fe891..8d48012cb32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We updated EditionChecker to permit edition to start with a number. [#6144](https://github.com/JabRef/jabref/issues/6144) - We added tooltips for most fields in the entry editor containing a short description. [#5847](https://github.com/JabRef/jabref/issues/5847) - We added support for basic markdown in custom formatted previews [#6194](https://github.com/JabRef/jabref/issues/6194) +- We now show the number of items found and selected to import in the online search dialog. [#6248](https://github.com/JabRef/jabref/pull/6248) ### Changed diff --git a/src/main/java/org/jabref/gui/importer/ImportEntriesDialog.fxml b/src/main/java/org/jabref/gui/importer/ImportEntriesDialog.fxml index 005abb8ca28..0a161e436ec 100644 --- a/src/main/java/org/jabref/gui/importer/ImportEntriesDialog.fxml +++ b/src/main/java/org/jabref/gui/importer/ImportEntriesDialog.fxml @@ -4,23 +4,42 @@ + + + + + - + + - +