This project is a Java wrapper around the Dataverse API.
It was initially contributed by ResearchSpace in October 2016.
This project requires Java 8 minimum to compile and run.
It is built and tested on Java 11 and Java 17.
It also uses Spring-web (to provide low-level HTTP request/response parsing.)
The Sword client library is included in this project as a jar file, as it is not available in a public maven repository.
This project is built using Gradle. You can build straight away without needing to install anything:
./gradlew clean build -x integrationTest
which will compile, run unit tests (but not integration tests) and build a jar file.
Integration tests require a connection to a Dataverse instance.
In order to connect to a Dataverse for running tests, the following configuration is set up in test.properties
.
dataverseServerURL=https://demo.dataverse.org
dataverseAlias=otter606
As a minimum, you'll need to specify an API key on the command line to run the tests:
./gradlew clean integrationTest -DdataverseApiKey=xxx-xxxx-xxxx
You can also override the Dataverse server URL and Id with your own settings by setting them on the command line:
./gradlew clean integrationTest -DdataverseServerURL=https://my.dataverse.org -DdataverseApiKey=xxx-xxx-xxx -DdataverseAlias=MY-DEMO-DATAVERSE
This project can be added as a Gradle or Maven dependency in your project using JitPack.
If using Maven, add this to your pom.xml file (thanks AleixMT).
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.github.IQSS</groupId>
<artifactId>dataverse-client-java</artifactId>
<version>master-SNAPSHOT</version>
</dependency>
</dependencies>`
Or, you can run:
./gradlew clean install
to install into a local repository and generate a pom.xml file for calculating dependencies.
The best way to explore the bindings currently is by examining integration tests, especially those extending from AbstractIntegrationTest
.
Very briefly....
DataverseAPI api = new DataverseAPIImpl();
//must set in serverURL and apiKey first.
DataverseConfig config = new DataverseConfig(serverURL, apiKey, dataverseAlias);
api.configure(config);
// now you can call
api.getDataverseOperations().getDataverseById(dataverseAlias);
Searching uses a builder pattern to build a search query:
SearchOperations searchOps = dataverseAPI.getSearchOperations();
SearchConfig cfg = searchOps.builder().q(FILE_SEARCH_TERM)
.sortBy(SortBy.date)
.sortOrder(SortOrder.asc)
.showFacets(true)
.showRelevance(true)
.start(1)
.perPage(3)
.build();
DataverseResponse<SearchResults<Item>> results = searchOps.search(cfg);
There is no explicit synchronisation performed in this library. The Dataverse configuration is stored in the
internal state of implementation classes, so new instances of DataverseAPIImpl
should be used for each request if running in a multi-threaded environment connecting to different Dataverses.
Tests and integration tests run on:
This project makes use of Project Lombok which greatly speeds up the development of POJO classes to wrap JSON data structures.
There are instructions on how to add it to your IDE.
Please make sure tests pass before committing, and to add new tests for new additions.
API | Endpoint | URL | Implemented ? | Notes |
---|---|---|---|---|
Native | Dataverses | POST api/dataverses/$id |
Y | - |
- | - | GET api/dataverses/$id |
Y | - |
- | - | GET api/dataverses/$id/contents |
Y | - |
- | - | DELETE api/dataverses/$id |
Y | - |
- | - | POST api/dataverses/$id/datasets |
Y | - |
- | - | POST api/dataverses/$identifier/actions/:publish |
Y | - |
Native | Datasets | POST api/dataverses/$id |
Y | - |
- | - | GET api/datasets/$id |
Y | - |
- | - | DELETE api/datasets/$id |
Y | - |
- | - | GET api/datasets/$id/versions |
Y | - |
- | - | GET PUT api/datasets/$id/versions/:draft? |
Y | - |
- | - | POST PUT api/datasets/$id/actions/:publish?type=$type |
Y | - |
Native | MetadataBlocks | GET api/metadatablocks |
Y | - |
- | - | GET api/metadatablocks/$identifier |
Y | - |
Search | - | GET api/search |
In progress | All query params supported, optional data not returned yet. |
Sword | Upload file | 'Add files to a dataset with a zip file' | Y | - |