Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
GSoC 2019 - jQAssistant Jira Plugin

Project Summary

In GSoC 2019 I worked on a jQAssistant plugin for Jira.

Here you can find the repository:

jQAssistant is a Java based tool to analyse software. It can be extended with a variety of plugins. The Visual Software Analytics team implemented plugins for different programming languages and software artifacts which can be found here.

How to Run

If you want to run the plugin please have a look at the This is the from my last commit: README@2e31e21.

Please note that the plugin could have changed. If you want information about the current state visit this.


If you want to contribute have a look at the open issues in the repository. I have created the following issues:

Please note that they could be fixed by now.

Also have a look at the

List of Commits

Here is the range of my commits:

First commit c9846c - last commit 2e31e2.

Here is a list of all commits including hashes and commit messages. They were created with the git command:

git log --pretty=format:'%h %B'
2e31e21 [feature/fix] Add a second benchmark result to the `` and re-enable custom error handling:

* We need to catch exceptions as we will otherwise loose the exception and its message. See the following issues for more information:

6032b79 [feature/edit] Cleanup `pom.xml` and add example cypher queries to the '':

* The cleanup was provided via a pull request by `@DirkMahler`:

0e988df [refactor] Move the mocked JJRC wrapper to the test package:

* Load the mocked class by name as there is no dependency injection for jQAssistant.
* Move the `` html model to `src/main/html`.

d0dab4f [refactor] Split the 'GraphBuilder' into multiple single builders:

* This makes it easier to understand the 'GraphBuilder' itself.
* The content and the order of the builders is really clear now.

c594cd9 [fix] Rename the two remaining model labels with '-' and improve the performance by preventing unnecessary REST calls for loading a user.

c8985ed [edit] Add the up-to-date '' model to the project:

* Move it to an own directory to keep things cleaner: './drawio/*'.

327ffbd [edit/fix] Apply multiple smaller changes regarding the model and error handling:

* Remove the 'Jira-' prefix from the model classes as we have the 'Jira' label to identify them.
* Rename server relations from 'SPECIFIES' to 'DEFINES'.
* Remove the outer error handling as it should be handled properly by jQAssistant. If any issue occurs it needs to be fixed in jQAssistant.

0df23f1 [edit] Add a reference for the rate limits and information about the supported Jira versions to the ''.

3af3189 [edit] Remove the '' from the git repository as it sounds like it can be used to execute the plugin:

* The '' is meant for developing only.
* Therefore, make the script part of the ''.

944a1b5 [fix/feature] Handle non resolvable issue links and improve

408dcb4 [fix/feature] Load issues in multiple batches to prevent timeout problems:

* Add the neo4J model as HTML file to the repository. It can be imported in '' if it needs to be changed in the future.
* Remove the obsolete 'cobertura' command from the '.travis.yml'.

6ff9f3a [feature] Add the subtask relation to the model:

* A subtask is an issue itself.
* The subtask resolution strategy is the same as for issue links.

66d1bcc [edit] Improve the documentation.

3aa2e87 [feature] Extend the test model to increase code coverage to 97%:

* The mock classes (that actually belong in the test package) were removed from the code coverage scan.
* Furthermore, the IDs which contain several boilerplate methods - generated by Lombok - were removed from the code coverage scan.
* The 'DefaultJiraRestClientWrapper' gets excluded as well as it only contains simple JJRC calls which are hard to test.

9cf64e3 [feature] Add tests to check that a wrong configuration or a broken connection to Jira will get catched and logged.

9601337 [feature] Add a first test for the scanner:

* Add an abstraction layer for JJRC to be able to mock it in tests.
* The mocking process is a bit hacky, for more information see the documentation in ''.

bdbe738 [feature] Add the model as JPG to the

be5c754 [edit] Change the root descriptor as it actually represents the server:

* Furthemore, add some useful server meta information as the server time.

6f24477 [feature] Add issue links to the model:

* Jira creates two issue links: One for each direction. Both of them get imported to Neo4J.
* The issue links get cached and resolved after all issues have been imported.

5280ea3 [feature] Add version relation to 'Issue' for affected and fixed versions.

6b1b2ea [feature] Add code coverage via 'JaCoCo' and CI via 'Travis CI'.

5ca0855 [feature] Add comments to the model.

f101f97 [feature] Add the new entity status to the model.

fc8cd6a [feature] Add priorities for issues to the model:

* The priority is defined per Jira instance and can be retrieved with the 'MetadataClient'. Therefore, we load them in the beginning - even before the projects.
* Right now the priorities are associated with the configuration file. In the future there should be an entity which represents the Jira instance.
* Descriptors which have no label itself have been moved to a 'model.basic' package.

78cc4b3 [feature] Add the issue type to the model:

* In the local demo we can see that the pre-defined issue types like "Task" have the same ID across multiple projects.
* The issue types get defined on a project level. Furthermore, every issue has exactly one type associated.

1db2e85 [feature] Add the Jira component to the model:

* The component has a relation to the project, to the user and to issues.
* Put the description field in its own descriptor as it is used by several Jira entities.
* The component ID is UNIQUE across several projects. Components with the same name will not get identified.

a2b6945 [feature] Add "JiraVersion" to the model which has a relation to a project:

* The ID from Jira seems to be unique across multiple projects of a Jira instance.
* Here is a self link of a version: "http://localhost:8080/rest/api/2/version/10000". The ID is part of the link so the ID must be UNIQUE - at least for versions.

67788ea [feature] Add the Jira user to the model and implement relations to projects and issues:

* If JJRC does return a 'BasicUser' instead of a 'User' we have to load the missing information with a second call against the API.
* It is not possible to load users standalone via JJRC. It is possible via the REST API though:
* Currently, only users with associations get imported.

0db00c8 [feature] Add the issue entity to the plugin:

* JJRC uses joda-time which needs to be converted to Java time. Therefore, a solution from stackoverflow has been used.

6368e8e [feature/fix] Implement the first working Jira plugin:

* Update the pom.xml to work with "jQAssistant 1.6". Most of the dependencies are excluded from the shaded JAR to prevent clashes with jQAssistant and other plugins.
* Fix one of the strings in the to parse credentials correctly. Add a test as well to make sure that other fields are correct and that nothing breaks in the future.
* Add basic Jira model descriptors including the JiraProject.
* Reuse the cache from the GitHub-Issues plugin. This solution will not work for big Jira instances and has to be fixed later.

5a9afcf [feature] Completion of "Milestone 1.1: Research":

* Document rate limits as part of the ''.
* Add files from the 'jqa-githubissues-plugin' which can be reused.
* Test the 'Jira Java REST client' (JRJC) succesfully. JRJC uses 'Jersey' version 1.x, the same is used in 'jqa-githubissues-plugin'.
* Use 'jQAssistant' 1.6.0 for the plugin development.

c9846c6 [feature] Add information to the on how to run "Jira" locally.

73c220c Initial commit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment