Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support to explore citation relation #643

Closed
wants to merge 118 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
118 commits
Select commit Hold shift + click to select a range
fedf4c5
disabled github actions
marcelluethi Sep 3, 2020
c241115
add clarification to README
marcelluethi Sep 21, 2020
d0551c3
add patterns for emacs temp files
marcelluethi Sep 21, 2020
8e265fa
delete all github workflow files
marcelluethi Sep 21, 2020
3da40dd
Created prototype of an Citation Relations Tab displaying an articles…
timbachmann Oct 28, 2020
6e88547
Added functionality to disable citation relations tab in settings and…
timbachmann Oct 28, 2020
411b50f
Added basic implementation of opencitations api to CitationRelationsTab
timbachmann Oct 29, 2020
d739bcd
Restructured prototype to search in background and implemented basic …
timbachmann Oct 30, 2020
50608a7
Added custom ListView for CitationRelationsTab and fixed fetching for…
timbachmann Oct 30, 2020
68fb270
Changed ListView cell of CitationRelationsTab to be responsive and ad…
timbachmann Oct 31, 2020
c6de773
Changed Layout of CitationRelationsTab to display refresh button and …
timbachmann Oct 31, 2020
1115b92
Code cleanup and Documentation for all new methods and classes
timbachmann Oct 31, 2020
f72a30e
added internet connection loss handling
timbachmann Nov 1, 2020
400207f
added InformationDialog when current entry has no DOI to search
timbachmann Nov 1, 2020
77021f5
added label to progress indicator to show detailed progress infos
timbachmann Nov 1, 2020
017e5d9
resolve merge conflicts
RaphaelKreft Nov 4, 2020
4000d9b
Implemented WebSearch into CitationRelationsTab
timbachmann Nov 6, 2020
718fbb5
resolve merge conficts
RaphaelKreft Nov 7, 2020
53a12ce
Fixed wrong import of Globals
timbachmann Nov 10, 2020
a154b1e
Added StandardFields CITED and CITEDBY and support for importing slel…
timbachmann Nov 10, 2020
d5e1134
Switched Tab Lists
timbachmann Nov 12, 2020
971b47c
local Globals bugfix
RaphaelKreft Nov 15, 2020
995f071
Merge branch 'prototype' of github-unibas:RaphaelKreft/jabref into pr…
RaphaelKreft Nov 15, 2020
6a9d3c9
Change current dialogpromts to notifications from the bottom
RaphaelKreft Nov 16, 2020
f5d1065
switch vboxes
RaphaelKreft Nov 16, 2020
016503b
Added new Activation Preference, ActivationPane and distinction in bi…
RaphaelKreft Nov 16, 2020
082a4bf
style ActivationPane
RaphaelKreft Nov 16, 2020
ab349c0
added listViews for local search
timbachmann Nov 16, 2020
02e1caa
support to cancel background task
timbachmann Nov 16, 2020
def7bcf
Added Localization
RaphaelKreft Nov 17, 2020
c812b61
resolve merge conflicts
RaphaelKreft Nov 17, 2020
8d88375
added Local Search ability and Second ListView
RaphaelKreft Nov 17, 2020
07a57ea
small improvement in serialization, removed nested vBox
RaphaelKreft Nov 19, 2020
8355406
Added clear and select when using hyperlink
RaphaelKreft Nov 19, 2020
7d22bde
Added Logging, fixed serialization in getFilteredKeys
RaphaelKreft Nov 19, 2020
6729ae3
Add autoadding to contrastfield when filter difference
RaphaelKreft Nov 19, 2020
b6f2802
Improved Comments
RaphaelKreft Nov 19, 2020
4bf9baa
Added logging to CitationRelationFetcher
timbachmann Nov 20, 2020
ac5c7a2
Combined Local and Online List into one
timbachmann Nov 20, 2020
3367b02
improved duplicate filtering in CitationRelationsTab and logging in C…
timbachmann Nov 20, 2020
632b8ec
improved list filtering
timbachmann Nov 20, 2020
2cb16e0
created test class for CitationRelationFetcher but can't be run for s…
Nov 21, 2020
4f860c3
change CItationkey to DOI-Filtering
RaphaelKreft Nov 21, 2020
e4820ae
Merge branch 'prototype' of github-unibas:RaphaelKreft/jabref into pr…
RaphaelKreft Nov 21, 2020
28dc18e
Fixed Double show Entry when already in keys, local entries are at th…
RaphaelKreft Nov 21, 2020
bbfc57c
Fixed selection of Entry when press hyperlink
RaphaelKreft Nov 22, 2020
a4142db
Deleted CitationRelationsTabTest
RaphaelKreft Nov 22, 2020
481d081
Add first simple test cases for CitationRelationsTab
RaphaelKreft Nov 22, 2020
94b4b64
fixed listview width
timbachmann Nov 22, 2020
eabef17
implemented tests for citationRelationFetcher
Nov 22, 2020
e363e5f
Merge remote-tracking branch 'origin/prototype' into prototype
Nov 22, 2020
4ade3f0
Added Progress Indicator
timbachmann Nov 24, 2020
4e35a57
removed citing and citedby fields from OtherFieldsTab
timbachmann Nov 25, 2020
05ec2db
Merge branch 'master' of https://github.com/JabRef/jabref
RaphaelKreft Nov 25, 2020
2761b04
fixed some style issues
Nov 25, 2020
b2bfb8e
Update master to current jabref status
Nov 25, 2020
935de6c
Merge branch 'master' of https://github.com/RaphaelKreft/jabref
Nov 25, 2020
2dcb827
Comment Tab Testcases
RaphaelKreft Nov 26, 2020
fa1bfec
Merge branch 'master' of https://github.com/JabRef/jabref into master
timbachmann Nov 27, 2020
653e505
Updated Localization
matiascg Nov 28, 2020
a7eb548
updated to current jabref status
timbachmann Nov 30, 2020
921a0fb
Added english translation
matiascg Dec 1, 2020
2a8034e
Merge branch 'master' of https://github.com/JabRef/jabref into master
timbachmann Dec 2, 2020
7ca4b5e
Merge branch 'master' of https://github.com/JabRef/jabref into prototype
timbachmann Dec 2, 2020
4f4c5f1
Merge pull request #1 from timbachmann/prototype
timbachmann Dec 2, 2020
9272cd2
Merge branch 'master' of https://github.com/JabRef/jabref
RaphaelKreft Dec 3, 2020
5d7da2a
Merge branch 'english' of github-unibas:RaphaelKreft/jabref
Dec 3, 2020
8a7b6c4
move adr to right place
Dec 3, 2020
dcac171
Merge branch 'master' of https://github.com/JabRef/jabref
Dec 4, 2020
2d0a46d
Revert "Update description of intelliJ checkstyle configuration (#6766)"
timbachmann Dec 4, 2020
71c23e8
Revert "disabled github actions"
timbachmann Dec 4, 2020
5846aac
Revert "add clarification to README"
timbachmann Dec 4, 2020
82364a5
Revert "add patterns for emacs temp files"
timbachmann Dec 4, 2020
3fee435
Fix files changed
timbachmann Dec 4, 2020
ae89e2d
Merge branch 'prototype' into master
timbachmann Dec 4, 2020
5db7eb4
Changed Ordering of elements and indented subelement of show Citation…
Dec 4, 2020
55e0cbb
Changed TestDoi to a real one. Changed commentlanguage to english
Dec 4, 2020
f6e0893
Added suggested changes
timbachmann Dec 4, 2020
df517ec
Added BibEntryView to unify list view in ImportEntriesDialog and Cita…
timbachmann Dec 4, 2020
be076a6
Added CitationFetcher Interface and adapted OpenCitationFetcher to de…
timbachmann Dec 4, 2020
7a27a84
Replaced DOIFetcher by using OpenCitations API again to fetch bibliog…
timbachmann Dec 4, 2020
201e020
Removed progress binding from progressIndicator and changed method fo…
timbachmann Dec 4, 2020
20347fa
fixed checkstyle errors
Dec 5, 2020
43855ab
fixed markdown-lint errors in pflichtenheft and technische Dokumentation
Dec 5, 2020
7ea6006
Added abstract helper class CitationBasedParserFetcher to prepare for…
timbachmann Dec 5, 2020
c791351
Merge remote-tracking branch 'origin/master' into master
timbachmann Dec 5, 2020
9a1d926
Added tooltips in german and english for all used buttons in Citation…
timbachmann Dec 5, 2020
20b2b47
Merge branch 'master' of https://github.com/JabRef/jabref into master
timbachmann Dec 6, 2020
5ea51d2
Added fix for issue #6187 to CHANGELOG.md
timbachmann Dec 6, 2020
9a2e425
Fix dead link in technischeDokumentation.md
timbachmann Dec 6, 2020
ab979d3
Used scripts/generate-authors.sh to add AUTHORS of this PR and remove…
timbachmann Dec 6, 2020
451463e
Merge remote-tracking branch 'origin/master' into master
timbachmann Dec 6, 2020
df6852a
Added logging statements to OpenCitationFetcher
timbachmann Dec 6, 2020
e76ffc5
Changed creation of BibEntry to use .withField()
timbachmann Dec 6, 2020
a0c63ee
Removed dead link from 0018-use-opencitationsApi-for-citationrelation…
timbachmann Dec 6, 2020
974eb2a
Code cleanup and documentation
timbachmann Dec 6, 2020
9d52345
added missing LocalizationKeys
timbachmann Dec 6, 2020
e70423c
Added listview styling and highlighting and fixed selecting only item…
timbachmann Dec 7, 2020
d4ad8d1
Move CITED and CITEDBY to jabref specific fields
timbachmann Dec 8, 2020
776b9f5
Changed Fetcher implementation to be similar to other fetchers using …
timbachmann Dec 8, 2020
7e21c1d
Moved Documentation to docs/advanced-reading/citationrelations and de…
timbachmann Dec 8, 2020
e8a145e
Renamed localization keys
timbachmann Dec 8, 2020
542b48d
Add documentation to BibEntryView
timbachmann Dec 8, 2020
b2d74eb
Changed tests to use withField() when creating BibEntry
timbachmann Dec 8, 2020
35ea748
Change serialize() to use BibEntry stream
timbachmann Dec 8, 2020
cd3ee18
Change getEntryByDOI() to use BibEntry stream and return Optional<Bib…
timbachmann Dec 8, 2020
a7a59b0
Fix changes in connect-plug-etc-opt-edge-native-messaging-jabref and …
timbachmann Dec 8, 2020
ffe97d9
rename functional parameter to entry
Dec 8, 2020
c3ee2f9
rename all BibEntry vars to entry
Dec 8, 2020
d86df36
Removed MULTIPLE_ENTRY_LINK from fields
timbachmann Dec 8, 2020
63d7240
Moved SearchType to CitationFetcher Interface, changed Logger level t…
timbachmann Dec 8, 2020
b17d704
Search now returns empty list when searching without DOI
timbachmann Dec 8, 2020
41641f7
Fix OpenCitationFetcherTests
timbachmann Dec 8, 2020
a0e6a2a
Split long API requests into smaller ones to prevent timeout
timbachmann Dec 8, 2020
08229f1
Merge remote-tracking branch 'origin/main' into pr-7160
koppor Jul 28, 2021
0821f46
Compile fix
koppor Jul 28, 2021
24bd884
Modernize code, rename CITEDBY to CITED_BY
koppor Jul 28, 2021
5637a4f
Rename CITEDBY to CITED_BY, began to rework code
koppor Jul 28, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve
- We added support for the new Microsoft Edge browser in all platforms. [#7056](https://github.com/JabRef/jabref/pull/7056)
- We reintroduced emacs/bash-like keybindings. [#6017](https://github.com/JabRef/jabref/issues/6017)
- We added a feature to provide automated cross library search using a cross library query language. This provides support for the search step of systematic literature reviews (SLRs). [koppor#369](https://github.com/koppor/jabref/issues/369)
- We added the possibility to find (and add) papers that cite or are cited by a given paper. [#6187](https://github.com/JabRef/jabref/issues/6187)

### Changed

Expand Down
21 changes: 21 additions & 0 deletions docs/adr/0018-use-opencitationsApi-for-citationrelations.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Use OpenCitations API for Citation-Relations Tab in the Entry Editor

## Context and Problem Statement

The JabRef-Software has an entry editor with multiple tabs. One of them is the "Citation Relations" tab, that offers the possibility to explore citation relations. In order to do so, JabRef queries an API, to get the related articles.

## Considered Options

* [OpenCitations](https://opencitations.net/index/api/v1)
* [Citationgecko](http://citationgecko.com/)
* [Yewno](https://www.yewno.com/discover)
* [Openknowledgemaps](https://openknowledgemaps.org/)
* [Wikicite](http://wikicite.org/)
* [Scholarcy](https://www.scholarcy.com/)
* [Dimensions.ai](https://www.dimensions.ai/dimensions-apis/)
* [Springernature](https://www.springernature.com/gp/researchers/bookmetrix)
* [Github: adsabs](https://github.com/adsabs/adsabs-dev-api)

## Decision Outcome

Chosen option: OpenCitations, because its easy to use and one receive results in JSON, that is easy to deal with. Furthermore most of the other options are graphical online tools that are not meant to be used as an API.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
# Specification Book

| Version | Authors | Status | Date | Commentary |
| ------- | ----- | ------ | ----- | --------- |
| 0.1 | Raphael Kreft| Abgeschlossen | 03.11.2020 | [Projectwebsite](https://unibas-marcelluethi.github.io/software-engineering/project/project-summary.html) , [JabRef Website](https://www.jabref.org/)|
||Olivier Mattmann||||
||Matias Carballo||||
||Tim Bachmann||||

This specification book captures the requirements of the extension/modification of JabRef, that takes place as a part of the course "Software Engineering" at the University of Basel. This project implements [**issue #6187 Add posibility to explore citation relations**](https://github.com/JabRef/jabref/issues/6187). It should implement a way to explore articles that cite or are cited by articles in the database.

## 1. Vision and Goals

* /V10/ JabRef users can explore and administrate relations between articles
* /Z10/ JabRef users have the possibility to explore their own references and find articles that reference or are refered to by own articles
* /Z20/ It is not a goal to change [Search related articles using Mr. DLib](https://docs.jabref.org/advanced/entryeditor#related-articles-tab)

## 2. Stakeholder

* JabRef Maintainer @koppor
* JabRef Maintainer reviewing the pull request
* Tutoren: Joe Zgraggen, Günes Aydin
* Dozent: Marcel Lüthi
* Project-Developers: Raphael Kreft, Olivier Mattmann, Matias Carballo, Tim Bachmann

## 3. Conditions

* /R10/ Scope of application: JabRef Software
* /R20/ Target group: JabRef users
* /R30/ Runs unattended as part of JabRef
* /R40/ Used Software on the target machines: JabRef, Java, OS: Windows/Linux/macOS
* /R50/ Software on the development systems: JabRef, Java, OS: depending on the developer Windows/Linux oder macOS
* /R60/ Organisational marginal conditions: Given by [Projektrichtlinien](https://unibas-marcelluethi.github.io/software-engineering/project/project-summary.html)
* /R70/ Documentation of changes and operational intructions in the way set by the course
* /R80/ Development-interface 1: The extension is part of JabRef and must adapt to its [Ecosystem](https://devdocs.jabref.org/getting-into-the-code/code-howtos)
* /R90/ Development-interface 2: The API that is used to get the citations: [Opencitaions API](https://opencitations.net/index/api/v1)

## 4. Context and Overview

* /K10/ [Opencitaions API](https://opencitations.net/index/api/v1), to search for published works that cite or are cited by a certain reference
* /K20/ JabRef, where the extension is embedded

## 5. Functional Requirements

* /F10/ The extension must allow the user to find articles cited by the selected article
* /F20/ The user should be able to use the entire functionality from the GUI
* /F30/ The extension must allow users to find articles that cite the selected article
* /F40/ The user should be informed, if no articles are found
* /F50/ The user should be able to select found articles and to add them to the database via a button
* /F60/ The user should be informed if there is no internet connection
* /F70/ The extension must ensure that no articles are added to the database if they're already present. Articles will be grey and the buttons will be deactivated (/F50/)
* /F80/ The extension must be reachable via a tab in the entry editor
* /F90/ The user should be informed if it is not possible to add an article to the database (/F70/)
* /F100/ The tab should be composed of a left and a right section
* /F110/ The left section must implement the functionality described in /F30/ and must contain a list with the search results given by /F30/
* /F120/ The right section must implement the functionality described in /F10/ and must contain a list with the search results given by /F10/
* /F130/ Articles listed as search results should be displayed grouped below each other using JabRef Standards of WebSearch (/F110/ und /F120/)
* /F140/ The search in /F110/ and /F120/ should be repeated by pressing the corresponding Refresh-Buttons
* /F170/ The extension must ensure that the selected article contains the needed informations for executing the search (DOI-Nummer des Eintrags)
* /F180/ If not enough information is available, the extension must inform the user via a message in the lower part of the screen
* /F190/ The extension should save the search results if the user leaves the tab and show them again when the user returns (/F150/)
* /F200/ The extension should search for citations using the Open Citations API (/R90/)
* /F210/ The extensions should display search results correctly (/F130/), that have at least a title and author linked to their DOI-Number
* /F230/ The left and right sections of the tab should be separated using a movable separator that is located in the middle by default (/F100/)
* /F250/ The extension should inform the user about the progress of the search query in this way: (#current articles from total #total articles)
* /F260/ The extension should display search results that only have a DOI-Number by that number (Secondary case of /F210/)
* /F270/ The extension should, as soon as a search query is running, have a button to cancel below the progress indicator (/F250/)
* /F280/ If an article is already part of the database, the user should be able to navigate to it by clicking the corresponding article
* /F290/ It should be possible to activate and deactivate the entire functionality of the tab in the settings
* /F300/ If the functionality is activated, the search should start automatically as soon as the user is on the tab

## 6. Non-functional requirements

### 6.1 Quality requirements


| System quality | very good | good | normal | non relevant |
| ----------------| -------- | --- | ------ | -------------|
| Functionality | x | | | |
| Reliability | | x | | |
| Usability | x | | | |
| Efficiency | | | x | |
| Mantainability | | | x | |
| Portability | | | | x |

* /QB10/ All operations should be executable from the UI
* /QB20/ All textelements of the extension should be available in english and german
* /QE10/ The time it take for a search query to complete is dependent on the number of results: The user is informed about the progress
* /QT10/ There should be test cases for the logic of the API use
* /QT20/ There should be test cases for adding to the database

### 6.2 Other

* /N10/ If the tab is left (/F80/) to another tab in the same article the results should be saved
* /N20/ If the tab is left (/F80/) to another article or the database is closed the results should not be saved

## 7. Acceptance criteria

* /A10/ The implemented extension offers the functionality of displaying a list of search results
* /A20/ The implemented extension should be operable from the GUI
* /A30/ Errors must not lead to program crashes and are displayed to the user
* /A40/ The quality requirement /QE10/ is fulfilled
* /A50/ The quality requirement /QB20/ is fulfilled
* /A60/ The quality requirement /QT10/ is fulfilled
* /A70/ The quality requirement /QT20/ is fulfilled

## 8. Appendix

## Appendix A. Use-cases

### Use Case 1

* Name: Finding the extension
* Actors: *JabRef user, JabRef*
* Preconditions:
* JabRef is running
* JabRef user has openned a database containing articles
* Default procedure
* JabRef-user selects an articles
* The article menu opens in the lower part of JabRef
* The user selects the tab of the extension
* Postcondition success: *The view of the extension in the article menu below the tab*
* Postcondition failure: -

### Use Case 2

* Name: Search cited articles
* Actors: *JabRef user, JabRef, API*
* Preconditions:
* JabRef is running
* JabRef user has openned a database containing articles
* User has selected an article
* User is on the extension tab
* There are no problems connecting to the API
* Default procedure
* User presses the search button in the left section of the tab
* JabRef checks if enough information is available for the search
* JabRef sends a query to the API and waits for a response
* Postcondition success: *The search results are displayed as a list in the result section*
* Postcondition failure: *An error message is shown to the user if not enough information for a search*

### Use Case 3

* Name: Search citing articles
* Actors: *JabRef user, JabRef, API*
* Preconditions:
* JabRef is running
* JabRef user has openned a database containing articles
* User has selected an article
* User is on the extension tab
* There are no problems connecting to the API
* Default procedure:
* User presses the search button in the right section of the tab
* JabRef checks if enough information is available for the search
* JabRef sends a query to the API and waits for a response
* Postcondition success: *The search results are displayed as a list in the result section*
* Postcondition failure: *An error message is shown to the user if not enough information for a search*

### Use Case 4

* Name: Adding cited article
* Actors: *JabRef user, JabRef*
* Preconditions:
* List of cited articles must be present
* Default procedure:
* User selects at least one article from the list
* Add button is pressed
* Check if article is already in database
* Postcondition success: *Article is added to database*
* Postcondition failure: *Article is not added to database*

### Use Case 5

* Name: Adding cited by article
* Actors: *JabRef user, JabRef*
* Preconditions:
* List of cited by articles must be present
* Default procedure
* User selects at least one article from the list
* Add button is pressed
* Check if article is already in database
* Postcondition success: *Article is added to database*
* Postcondition failure: *Article is not added to database*

### Use Case 6

* Name: Start search offline
* Actors: *JabRef user, JabRef*
* Preconditions:
* At least one article in database
* There is no internet connection
* Default procedure:
* Select article in database
* Open the extension tab in the article menu
* Postcondition success: *The user is informed about missing internet connection, search can be restarted*

### Use Case 7

* Name: Navigation to cited article
* Actors: *JabRef user, JabRef*
* Preconditions:
* Cited article has to be in database
* Article in the list has a different color (already in database)
* Default procedure:
* User is in the extension tab
* User clicks on the article
* Postcondition success: *User is moved to the entry editor, list is updated*

### Use Case 8

* Name: Navigation to citing article
* Actors: *JabRef user, JabRef*
* Preconditions:
* Citin article has to be in database
* Article in the list has a different color (already in database)
* Default procedure:
* User is in the extension tab
* User clicks on the article
* Postcondition success: *User is moved to the entry editor, list is updated*
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# Technical Documentation

| Version | Projectname | Authors | Status | Date | Commentary |
| ------- | ----------- | ------- | ------ | ----- | --------- |
| 0.1 | Citation Relations | Raphael Kreft| In development | 06.11.2020 | [Projektwebseite](https://unibas-marcelluethi.github.io/software-engineering/project/project-summary.html) , [JabRef Website](https://www.jabref.org/)|
|||Olivier Mattmann||||
|||Matias Carballo||||
|||Tim Bachmann||||

## 1 Introduction

## 1.1 Purpose

This document proposes a technical solution to the specification described in the Specification book.

**Target Group**:

* Developers, specifically the authors of this document
* JabRef Maintainer, specially @koppor

## 1.2 Relations to other documents

* [Specification Book](requirements-citation-relations.md)

The Specification book describes the project, and specifies the requirements. It is the starting point for all following steps. The Glossary contains definitions of all important terms for the project. The architecture decisions document [MADR] (<https://github.com/adr/madr>) contains all important decisions about architecture and implementation of the project.

## 2. System Overview

The project "Citation Relations" is an extension to JabRef that is developed as part of the "Software Engineering" course at the University of Basel. The extension should make it possible for users to search for cited/citing articles, navigate the search results and import them into the Database

## 3. Design goals

* The design of the extension should be inserted into that of JabRef seamlessly
* The design of the UI should be intuitive to users
* The design of the extension should be easy to update
* The design should deliver acceptable performance
* The design should be easy to test

## 4. System behaviour

The extension can be used from a separate tab in the entry editor. The fuction of this extension can be activated and deactivated from this tab. If the extension is activated, citations will be searched for using the API when the user opens the tab. The articles our article cites will be shown in the left part of the tab. The articles that cite our article will be shown on the right side. The search results can be imported into our database via click.


## 5. Design

The following section describes the Mid-Level-Design of the extension using UML diagrams.

## 5.1 Static

Class Diagram of Citation Relations:

![Image of Class Diagram of CitationRelations](images/ClassDiagram.png)

### 5.2 Dynamic

Sequence Diagram of Citation Relations:

![Image of Sequence Diagram of CitationRelations](images/sequencediagram.png)

Activity Diagram of Citation Relations:

![Image of Activity Diagram of CitationRelations](images/Activity.png)

State Diagram of CitationRelationTab:

![Image of State Diagram of CitationRelationTab](images/StateTab.png)

State Diagram of CitationRelationFetcher:

![Image of State Diagram of CitationRelationFetcher](images/FetcherState.png)

### 5.3 Logic

The logical constraints are specified in this section

* **DOI Nummer benötigt für die Suche**

context BibEntry inv: self.getField(StandardField.DOI) != NULL

* **Article is not part of the list if already in Database**

context CitationRelationFetcher::performSearch():List<BibEntry>
pre: Database.entries.contains(fetchedEntry)
post: !(List<BibEntry>.contains(fetchedEntry))

* **Article is part of the list if not in Database**

context CitationRelationFetcher::performSearch():List<BibEntry>
pre: !(Database.entries.contains(fetchedEntry))
post: List<BibEntry>.add(fetchedEntry)

* **Privacy Dialog must be accepted for search to take place**

context CitationRelationTab::searchForRelations() inv: self.privacyDialogAccepted = true

* **Searc with valid DOI-Number**

context CitationRelationFetcher::performSearch(BibEntry)
pre: BibEntry.getField(StandardField.DOI) != NULL
post: List<BibEntry>.notEmpty()

* **Search with invalid DOI-Number**

context CitationRelationFetcher::performSearch(BibEntry):List<BibEntry>
pre: BibEntry.getField(StandardField.DOI) != NULL and BibEntry.getField(StandardField.DOI).wrongFormat()
post: List<BibEntry>.isEmpty()

* **Fetcher Name**

context CitationRelationFetcher::getName()
post: self.name = "CitationRelationFetcher"

* **CitationRelationFetcher needs SearchType**

context CitationRelationFetcher inv: self.SearchType != NULL
Loading