diff --git a/.github/workflows/spi_release.yml b/.github/workflows/spi_release.yml
deleted file mode 100644
index 6d46a6d6de7..00000000000
--- a/.github/workflows/spi_release.yml
+++ /dev/null
@@ -1,94 +0,0 @@
-name: Dataverse SPI
-
-on:
- push:
- branches:
- - "develop"
- paths:
- - "modules/dataverse-spi/**"
- pull_request:
- branches:
- - "develop"
- paths:
- - "modules/dataverse-spi/**"
-
-jobs:
- # Note: Pushing packages to Maven Central requires access to secrets, which pull requests from remote forks
- # don't have. Skip in these cases.
- check-secrets:
- name: Check for Secrets Availability
- runs-on: ubuntu-latest
- outputs:
- available: ${{ steps.secret-check.outputs.available }}
- steps:
- - id: secret-check
- # perform secret check & put boolean result as an output
- shell: bash
- run: |
- if [ "${{ secrets.DATAVERSEBOT_SONATYPE_USERNAME }}" != '' ]; then
- echo "available=true" >> $GITHUB_OUTPUT;
- else
- echo "available=false" >> $GITHUB_OUTPUT;
- fi
-
- snapshot:
- name: Release Snapshot
- needs: check-secrets
- runs-on: ubuntu-latest
- if: github.event_name == 'pull_request' && needs.check-secrets.outputs.available == 'true'
- steps:
- - uses: actions/checkout@v6
- - uses: actions/setup-java@v5
- with:
- java-version: '17'
- distribution: 'adopt'
- server-id: central
- server-username: MAVEN_USERNAME
- server-password: MAVEN_PASSWORD
- - uses: actions/cache@v4
- with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
-
- - name: Deploy Snapshot
- run: mvn -f modules/dataverse-spi -Dproject.version.suffix="-PR${{ github.event.number }}-SNAPSHOT" deploy
- env:
- MAVEN_USERNAME: ${{ secrets.DATAVERSEBOT_SONATYPE_USERNAME }}
- MAVEN_PASSWORD: ${{ secrets.DATAVERSEBOT_SONATYPE_TOKEN }}
-
- release:
- name: Release
- needs: check-secrets
- runs-on: ubuntu-latest
- if: github.event_name == 'push' && needs.check-secrets.outputs.available == 'true'
- steps:
- - uses: actions/checkout@v6
- - uses: actions/setup-java@v5
- with:
- java-version: '17'
- distribution: 'adopt'
- - uses: actions/cache@v4
- with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
-
- # Running setup-java again overwrites the settings.xml - IT'S MANDATORY TO DO THIS SECOND SETUP!!!
- - name: Set up Maven Central Repository
- uses: actions/setup-java@v5
- with:
- java-version: '17'
- distribution: 'adopt'
- server-id: central
- server-username: MAVEN_USERNAME
- server-password: MAVEN_PASSWORD
- gpg-private-key: ${{ secrets.DATAVERSEBOT_GPG_KEY }}
- gpg-passphrase: MAVEN_GPG_PASSPHRASE
-
- - name: Sign + Publish Release
- run: mvn -f modules/dataverse-spi -P release deploy
- env:
- MAVEN_USERNAME: ${{ secrets.DATAVERSEBOT_SONATYPE_USERNAME }}
- MAVEN_PASSWORD: ${{ secrets.DATAVERSEBOT_SONATYPE_TOKEN }}
- MAVEN_GPG_PASSPHRASE: ${{ secrets.DATAVERSEBOT_GPG_PASSWORD }}
diff --git a/modules/dataverse-parent/pom.xml b/modules/dataverse-parent/pom.xml
index fad20be352c..55d48e41d17 100644
--- a/modules/dataverse-parent/pom.xml
+++ b/modules/dataverse-parent/pom.xml
@@ -14,7 +14,6 @@
../../pom.xml../../scripts/zipdownload../container-base
- ../dataverse-spi
- ossrh
-
- https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/
-
-
-
-
-
-
- none
- false
-
-
-
-
- jakarta.json
- jakarta.json-api
- provided
-
-
-
- jakarta.ws.rs
- jakarta.ws.rs-api
- provided
-
-
-
-
-
-
-
- maven-compiler-plugin
-
- ${target.java.version}
-
-
-
-
-
- org.sonatype.plugins
- nexus-staging-maven-plugin
- true
-
-
- ossrh
-
- https://s01.oss.sonatype.org
- true
-
-
-
- org.apache.maven.plugins
- maven-release-plugin
-
- false
- release
- true
- deploy
-
-
-
- org.codehaus.mojo
- flatten-maven-plugin
-
- true
- oss
-
- remove
- remove
-
-
-
-
-
- flatten
- process-resources
-
- flatten
-
-
-
-
- flatten.clean
- clean
-
- clean
-
-
-
-
-
- org.apache.maven.plugins
- maven-deploy-plugin
-
- ${skipDeploy}
-
-
-
-
-
-
-
- release
-
-
-
- org.apache.maven.plugins
- maven-gpg-plugin
-
-
- sign-artifacts
- verify
-
- sign
-
-
-
-
-
- org.kordamp.maven
- pomchecker-maven-plugin
-
-
- process-resources
-
- check-maven-central
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
-
-
- attach-javadocs
-
- jar
-
-
-
-
- ${target.java.version}
- false
- ${javadoc.lint}
-
-
-
- org.apache.maven.plugins
- maven-source-plugin
-
-
- attach-sources
-
- jar
-
-
-
-
-
-
-
-
- ct
-
- true
-
-
-
-
diff --git a/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/ExportDataContext.java b/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/ExportDataContext.java
deleted file mode 100644
index 9478d39c4c2..00000000000
--- a/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/ExportDataContext.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package io.gdcc.spi.export;
-
-/**
- *
- * @author landreev
- * Provides an optional mechanism for defining various data retrieval options
- * for the export subsystem in a way that should allow us adding support for
- * more options going forward with minimal or no changes to the already
- * implemented export plugins.
- */
-public class ExportDataContext {
- private boolean datasetMetadataOnly = false;
- private boolean publicFilesOnly = false;
- private Integer offset = null;
- private Integer length = null;
-
- private ExportDataContext() {
-
- }
-
- public static ExportDataContext context() {
- ExportDataContext context = new ExportDataContext();
- return context;
- }
-
- public ExportDataContext withDatasetMetadataOnly() {
- this.datasetMetadataOnly = true;
- return this;
- }
-
- public ExportDataContext withPublicFilesOnly() {
- this.publicFilesOnly = true;
- return this;
- }
-
- public ExportDataContext withOffset(Integer offset) {
- this.offset = offset;
- return this;
- }
-
- public ExportDataContext withLength(Integer length) {
- this.length = length;
- return this;
- }
-
- public boolean isDatasetMetadataOnly() {
- return datasetMetadataOnly;
- }
-
- public boolean isPublicFilesOnly() {
- return publicFilesOnly;
- }
-
- public Integer getOffset() {
- return offset;
- }
-
- public Integer getLength() {
- return length;
- }
-}
diff --git a/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/ExportDataProvider.java b/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/ExportDataProvider.java
deleted file mode 100644
index 4197d978e79..00000000000
--- a/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/ExportDataProvider.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package io.gdcc.spi.export;
-
-import java.io.InputStream;
-import java.util.Optional;
-
-import jakarta.json.JsonArray;
-import jakarta.json.JsonObject;
-
-/**
- * Provides all the metadata Dataverse has about a given dataset that can then
- * be used by an @see Exporter to create a new metadata export format.
- *
- */
-public interface ExportDataProvider {
-
- /**
- * @return - dataset metadata in the standard Dataverse JSON format used in the
- * API and available as the JSON metadata export via the user interface.
- * @apiNote - there is no JSON schema defining this output, but the format is
- * well documented in the Dataverse online guides. This, and the
- * OAI_ORE export are the only two that provide 'complete'
- * dataset-level metadata along with basic file metadata for each file
- * in the dataset.
- * @param context - supplies optional parameters. Needs to support
- * context.isDatasetMetadataOnly(). In a situation where we
- * need to generate a format like DC that has no use for the
- * file-level metadata, it makes sense to skip retrieving and
- * formatting it, since there can be a very large number of
- * files in a dataset.
- */
- JsonObject getDatasetJson(ExportDataContext... context);
-
- /**
- *
- * @return - dataset metadata in the JSON-LD based OAI_ORE format used in
- * Dataverse's archival bag export mechanism and as available in the
- * user interface and by API.
- * @apiNote - THis, and the JSON format are the only two that provide complete
- * dataset-level metadata along with basic file metadata for each file
- * in the dataset.
- * @param context - supplies optional parameters.
- */
- JsonObject getDatasetORE(ExportDataContext... context);
-
- /**
- * Dataverse is capable of extracting DDI-centric metadata from tabular
- * datafiles. This detailed metadata, which is only available for successfully
- * "ingested" tabular files, is not included in the output of any other methods
- * in this interface.
- *
- * @return - a JSONArray with one entry per ingested tabular dataset file.
- * @apiNote - there is no JSON schema available for this output and the format
- * is not well documented. Implementers may wish to expore the @see
- * edu.harvard.iq.dataverse.export.DDIExporter and the @see
- * edu.harvard.iq.dataverse.util.json.JSONPrinter classes where this
- * output is used/generated (respectively).
- * @param context - supplies optional parameters.
- */
- JsonArray getDatasetFileDetails(ExportDataContext... context);
-
- /**
- * Similar to the above, but
- * a) retrieves the information for the ingested/tabular data files _only_
- * b) provides an option for retrieving this stuff in batches
- * c) provides an option for skipping restricted/embargoed etc. files.
- * Intended for datasets with massive numbers of tabular files and datavariables.
- * @param context - supplies optional parameters.
- * current (2.1.0) known use cases:
- * context.isPublicFilesOnly();
- * context.getOffset();
- * context.getLength();
- * @return json array containing the datafile/filemetadata->datatable->datavariable metadata
- * @throws ExportException
- */
- JsonArray getTabularDataDetails(ExportDataContext ... context) throws ExportException;
-
- /**
- *
- * @return - the subset of metadata conforming to the schema.org standard as
- * available in the user interface and as included as header metadata in
- * dataset pages (for use by search engines)
- * @apiNote - as this metadata export is not complete, it should only be used as
- * a starting point for an Exporter if it simplifies your exporter
- * relative to using the JSON or OAI_ORE exports.
- * @param context - supplies optional parameters.
- */
- JsonObject getDatasetSchemaDotOrg(ExportDataContext... context);
-
- /**
- *
- * @return - the subset of metadata conforming to the DataCite standard as
- * available in the Dataverse user interface and as sent to DataCite when DataCite DOIs are used.
- * @apiNote - as this metadata export is not complete, it should only be used as
- * a starting point for an Exporter if it simplifies your exporter
- * relative to using the JSON or OAI_ORE exports.
- * @param context - supplies optional parameters.
- */
- String getDataCiteXml(ExportDataContext... context);
-
- /**
- * If an Exporter has specified a prerequisite format name via the
- * getPrerequisiteFormatName() method, it can call this method to retrieve
- * metadata in that format.
- *
- * @return - metadata in the specified prerequisite format (if available from
- * another internal or added Exporter) as an Optional
- * @apiNote - This functionality is intended as way to easily generate alternate
- * formats of the ~same metadata, e.g. to support download as XML,
- * HTML, PDF for a specific metadata standard (e.g. DDI). It can be
- * particularly useful, reative to starting from the output of one of
- * the getDataset* methods above, if there are existing libraries that
- * can convert between these formats. Note that, since Exporters can be
- * replaced, relying on this method could cause your Exporter to
- * malfunction, e.g. if you depend on format "ddi" and a third party
- * Exporter is configured to replace the internal ddi Exporter in
- * Dataverse.
- * @param context - supplies optional parameters.
- */
- default Optional getPrerequisiteInputStream(ExportDataContext... context) {
- return Optional.empty();
- }
-
- }
diff --git a/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/ExportException.java b/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/ExportException.java
deleted file mode 100644
index c816a605860..00000000000
--- a/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/ExportException.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package io.gdcc.spi.export;
-
-import java.io.IOException;
-
-public class ExportException extends IOException {
- public ExportException(String message) {
- super(message);
- }
-
- public ExportException(String message, Throwable cause) {
- super(message, cause);
- }
-}
diff --git a/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/Exporter.java b/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/Exporter.java
deleted file mode 100644
index 7132e74641b..00000000000
--- a/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/Exporter.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package io.gdcc.spi.export;
-
-import java.io.OutputStream;
-import java.util.Locale;
-import java.util.Optional;
-
-
-/**
- * Dataverse allows new metadata export formats to be dynamically added a running instance. This is done by
- * deploying new classes that implement this Exporter interface.
- */
-
-public interface Exporter {
-
-
- /**
- * When this method is called, the Exporter should write the metadata to the given OutputStream.
- *
- * @apiNote When implementing exportDataset, when done writing content, please make sure
- * to flush() the outputStream, but NOT close() it! This way an exporter can be
- * used to insert the produced metadata into the body of an HTTP response, etc.
- * (for example, to insert it into the body of an OAI response, where more XML
- * needs to be written, for the outer OAI-PMH record). -- L.A. 4.5
- *
- * @param dataProvider - the @see ExportDataProvider interface includes several methods that can be used to retrieve the dataset metadata in different formats. An Exporter should use one or more of these to obtain the values needed to generate metadata in the format it supports.
- * @param outputStream - the OutputStream to write the metadata to
- * @throws ExportException - if there is an error writing the metadata
- */
- void exportDataset(ExportDataProvider dataProvider, OutputStream outputStream) throws ExportException;
-
- /**
- * This method should return the name of the metadata format this Exporter
- * provides.
- *
- * @apiNote Format names are unique identifiers for the formats supported in
- * Dataverse. Reusing the same format name as another Exporter will
- * result only one implementation being available. Exporters packaged
- * as an external Jar file have precedence over the default
- * implementations in Dataverse. Hence re-using one of the existing
- * format names will result in the Exporter replacing the internal one
- * with the same name. The precedence between two external Exporters
- * using the same format name is not defined.
- * Current format names used internally by Dataverse are:
- * Datacite
- * dcterms
- * ddi
- * oai_dc
- * html
- * dataverse_json
- * oai_ddi
- * OAI_ORE
- * oai_datacite
- * schema.org
- *
- * @return - the unique name of the metadata format this Exporter
- */
- String getFormatName();
-
- /**
- * This method should return the display name of the metadata format this
- * Exporter provides. Display names are used in the UI, specifically in the menu
- * of avaiable Metadata Exports on the dataset page/metadata tab to identify the
- * format.
- */
- String getDisplayName(Locale locale);
-
- /**
- * Exporters can specify that they require, as input, the output of another
- * exporter. This is done by providing the name of that format in response to a
- * call to this method.
- *
- * @implNote The one current example where this is done is with the html(display
- * name "DDI html codebook") exporter which starts from the XML-based
- * ddi format produced by that exporter.
- * @apiNote - The Exporter can expect that the metadata produced by its
- * prerequisite exporter (as defined with this method) will be
- * available via the ExportDataProvider.getPrerequisiteInputStream()
- * method. The default implementation of this method returns an empty
- * value which means the getPrerequisiteInputStream() method of the
- * ExportDataProvider sent in the exportDataset method will return an
- * empty Optional.
- *
- */
- default Optional getPrerequisiteFormatName() {
- return Optional.empty();
- }
-
- /**
- * Harvestable Exporters will be available as options in Dataverse's Harvesting mechanism.
- * @return true to make this exporter available as a harvesting option.
- */
- Boolean isHarvestable();
-
- /**
- * If an Exporter is available to users, its format will be generated for every
- * published dataset and made available via the dataset page/metadata
- * tab/Metadata Exports menu item and via the API.
- * @return true to make this exporter available to users.
- */
- Boolean isAvailableToUsers();
-
- /**
- * To support effective downloads of metadata in this Exporter's format, the Exporter should specify an appropriate mime type.
- * @apiNote - It is recommended to used the @see javax.ws.rs.core.MediaType enum to specify the mime type.
- * @return The mime type, e.g. "application/json", "text/plain", etc.
- */
- String getMediaType();
-
-}
diff --git a/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/XMLExporter.java b/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/XMLExporter.java
deleted file mode 100644
index 3c3fa35c69d..00000000000
--- a/modules/dataverse-spi/src/main/java/io/gdcc/spi/export/XMLExporter.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package io.gdcc.spi.export;
-
-import jakarta.ws.rs.core.MediaType;
-
-/**
- * XML Exporter is an extension of the base Exporter interface that adds the
- * additional methods needed for generating XML metadata export formats.
- */
-public interface XMLExporter extends Exporter {
-
- /**
- * @implNote for the ddi exporter, this method returns "ddi:codebook:2_5"
- * @return - the name space of the XML schema
- */
- String getXMLNameSpace();
-
- /**
- * @apiNote According to the XML specification, the value must be a URI
- * @implNote for the ddi exporter, this method returns
- * "https://ddialliance.org/Specification/DDI-Codebook/2.5/XMLSchema/codebook.xsd"
- * @return - the location of the XML schema as a String (must be a valid URI)
- */
- String getXMLSchemaLocation();
-
- /**
- * @implNote for the ddi exporter, this method returns "2.5"
- * @return - the version of the XML schema
- */
- String getXMLSchemaVersion();
-
- /**
- * @return - should always be MediaType.APPLICATION_XML
- */
- public default String getMediaType() {
- return MediaType.APPLICATION_XML;
- };
-}