From 3cc02d032a2a4607b2bcb4c59f4bab5ab37125b6 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 29 Nov 2017 12:53:04 -0500 Subject: [PATCH] have dataset page get cached JSON-LD, if available #3700 --- .../java/edu/harvard/iq/dataverse/DatasetPage.java | 11 ++++++++++- .../java/edu/harvard/iq/dataverse/DatasetVersion.java | 8 ++------ .../iq/dataverse/export/SchemaDotOrgExporter.java | 4 +++- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index aea585e084f..d83ca7a645c 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -86,6 +86,7 @@ import edu.harvard.iq.dataverse.engine.command.impl.RestrictFileCommand; import edu.harvard.iq.dataverse.engine.command.impl.ReturnDatasetToAuthorCommand; import edu.harvard.iq.dataverse.engine.command.impl.SubmitDatasetForReviewCommand; +import edu.harvard.iq.dataverse.export.SchemaDotOrgExporter; import java.util.Collections; import javax.faces.event.AjaxBehaviorEvent; @@ -4068,7 +4069,15 @@ public boolean isThisLatestReleasedVersion() { public String getJsonLd() { if (isThisLatestReleasedVersion()) { - return workingVersion.getJsonLd(); + ExportService instance = ExportService.getInstance(settingsService); + String jsonLd = instance.getExportAsString(dataset, SchemaDotOrgExporter.NAME); + if (jsonLd != null) { + logger.fine("Returning cached schema.org JSON-LD."); + return jsonLd; + } else { + logger.fine("No cached schema.org JSON-LD available. Going to the database."); + return workingVersion.getJsonLd(); + } } return ""; } diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java index da9b765b465..a01422ac2da 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java @@ -1211,12 +1211,8 @@ public String getPublicationDateAsString() { return r; } - // TODO: Make this more performant by writing the output to the database or a file? - // Agree - now that this has grown into a somewhat complex chunk of formatted - // metadata - and not just a couple of values inserted into the page html - - // it feels like it would make more sense to treat it as another supported - // export format, that can be produced once and cached. - // The problem with that is that the export subsystem assumes there is only + // TODO: Consider moving this comment into the Exporter code. + // The export subsystem assumes there is only // one metadata export in a given format per dataset (it uses the current // released (published) version. This JSON fragment is generated for a // specific released version - and we can have multiple released versions. diff --git a/src/main/java/edu/harvard/iq/dataverse/export/SchemaDotOrgExporter.java b/src/main/java/edu/harvard/iq/dataverse/export/SchemaDotOrgExporter.java index c9f5395750c..e039407fcf2 100644 --- a/src/main/java/edu/harvard/iq/dataverse/export/SchemaDotOrgExporter.java +++ b/src/main/java/edu/harvard/iq/dataverse/export/SchemaDotOrgExporter.java @@ -17,6 +17,8 @@ public class SchemaDotOrgExporter implements Exporter { private static final Logger logger = Logger.getLogger(SchemaDotOrgExporter.class.getCanonicalName()); + public static final String NAME = "schema.org"; + @Override public void exportDataset(DatasetVersion version, JsonObject json, OutputStream outputStream) throws ExportException { String jsonLdAsString = version.getJsonLd(); @@ -37,7 +39,7 @@ public void exportDataset(DatasetVersion version, JsonObject json, OutputStream @Override public String getProviderName() { - return "schema.org"; + return NAME; } @Override