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

739 html codebook #6081

Merged
merged 14 commits into from
Aug 14, 2019
1 change: 1 addition & 0 deletions doc/sphinx-guides/source/user/dataset-management.rst
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ Once a dataset has been published its metadata is exported in a variety of forma

- Dublin Core
- DDI (Data Documentation Initiative)
- DDI HTML Codebook
- DataCite 4
- JSON (native Dataverse format)
- OAI_ORE
Expand Down
1 change: 1 addition & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -640,6 +640,7 @@
<include>**/*.sql</include>
<include>**/*.xml</include>
<include>**/firstNames/*.*</include>
<include>**/*.xsl</include>
</includes>
</resource>
</resources>
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/edu/harvard/iq/dataverse/api/Datasets.java
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ public Response getDataset(@PathParam("id") String id, @Context UriInfo uriInfo,

@GET
@Path("/export")
@Produces({"application/xml", "application/json"})
@Produces({"application/xml", "application/json", "application/html" })
public Response exportDataset(@QueryParam("persistentId") String persistentId, @QueryParam("exporter") String exporter, @Context UriInfo uriInfo, @Context HttpHeaders headers, @Context HttpServletResponse response) {

try {
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/edu/harvard/iq/dataverse/api/EditDDI.java
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,9 @@ private boolean AreDefaultValues(VariableMetadata varMet) {
thedefault = false;
} else {
DataVariable dv = em.find(DataVariable.class, varMet.getDataVariable().getId());
if (dv.getLabel() != null && !dv.getLabel().equals(varMet.getLabel())) {
if (dv.getLabel() == null && varMet.getLabel() != null && !varMet.getLabel().trim().equals("")) {
thedefault = false;
} else if (dv.getLabel() != null && !dv.getLabel().equals(varMet.getLabel())) {
thedefault = false;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package edu.harvard.iq.dataverse.export;

import com.google.auto.service.AutoService;
import edu.harvard.iq.dataverse.Dataset;
import edu.harvard.iq.dataverse.DatasetVersion;
import edu.harvard.iq.dataverse.export.ddi.DdiExportUtil;
import edu.harvard.iq.dataverse.export.spi.Exporter;
import edu.harvard.iq.dataverse.util.BundleUtil;

import javax.json.JsonObject;
import javax.ws.rs.core.MediaType;
import javax.xml.stream.XMLStreamException;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Path;
import java.nio.file.Paths;

@AutoService(Exporter.class)
public class HtmlCodeBookExporter implements Exporter {

@Override
public String getProviderName() {
return "html";
}

@Override
public String getDisplayName() {
return BundleUtil.getStringFromBundle("dataset.exportBtn.itemLabel.html") != null ? BundleUtil.getStringFromBundle("dataset.exportBtn.itemLabel.html") : "DDI html codebook";
}

@Override
public void exportDataset(DatasetVersion version, JsonObject json, OutputStream outputStream) throws ExportException {
try {
InputStream ddiInputStream;
try {
ddiInputStream = ExportService.getInstance(null).getExport(version.getDataset(), "ddi");
} catch(ExportException | IOException e) {
throw new ExportException ("Cannot open export_ddi cached file");
}
DdiExportUtil.datasetHtmlDDI(ddiInputStream, outputStream);
} catch (XMLStreamException xse) {
throw new ExportException ("Caught XMLStreamException performing DDI export");
}
}

@Override
public Boolean isXMLFormat() {
return false;
}

@Override
public Boolean isHarvestable() {
// No, we don't want this format to be harvested!
// For datasets with tabular data the <data> portions of the DDIs
// become huge and expensive to parse; even as they don't contain any
// metadata useful to remote harvesters. -- L.A. 4.5
return false;
}

@Override
public Boolean isAvailableToUsers() {
return true;
}

@Override
public String getXMLNameSpace() throws ExportException {
return null;
}

@Override
public String getXMLSchemaLocation() throws ExportException {
return null;
}

@Override
public String getXMLSchemaVersion() throws ExportException {
return null;
}

@Override
public void setParam(String name, Object value) {
// this exporter does not uses or supports any parameters as of now.
}

@Override
public String getMediaType() {
return MediaType.TEXT_HTML;
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
import java.util.logging.Level;
Expand All @@ -46,6 +47,27 @@
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.w3c.dom.Document;
import org.w3c.dom.DOMException;

// For write operation
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;

public class DdiExportUtil {

private static final Logger logger = Logger.getLogger(DdiExportUtil.class.getCanonicalName());
Expand Down Expand Up @@ -1610,4 +1632,44 @@ private static boolean checkParentElement(XMLStreamWriter xmlw, String elementNa
return true;
}

public static void datasetHtmlDDI(InputStream datafile, OutputStream outputStream) throws XMLStreamException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

try {
Document document;
InputStream styleSheetInput = DdiExportUtil.class.getClassLoader().getResourceAsStream("edu/harvard/iq/dataverse/codebook2-0.xsl");

DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(datafile);

// Use a Transformer for output
TransformerFactory tFactory = TransformerFactory.newInstance();
StreamSource stylesource = new StreamSource(styleSheetInput);
Transformer transformer = tFactory.newTransformer(stylesource);

DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(outputStream);
transformer.transform(source, result);
} catch (TransformerConfigurationException tce) {
// Error generated by the parser
logger.severe("Transformer Factory error" + " " + tce.getMessage());
} catch (TransformerException te) {
// Error generated by the parser
logger.severe("Transformation error" + " " + te.getMessage());

} catch (SAXException sxe) {
// Error generated by this application
// (or a parser-initialization error)
logger.severe("SAX error " + sxe.getMessage());

} catch (ParserConfigurationException pce) {
// Parser with specified options can't be built
logger.severe("Parser configuration error " + pce.getMessage());
} catch (IOException ioe) {
// I/O error
logger.info("I/O error " + ioe.getMessage());
}

}

}
1 change: 1 addition & 0 deletions src/main/java/propertyFiles/Bundle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1209,6 +1209,7 @@ dataset.exportBtn.itemLabel.datacite=DataCite
dataset.exportBtn.itemLabel.json=JSON
dataset.exportBtn.itemLabel.oai_ore=OAI_ORE
dataset.exportBtn.itemLabel.dataciteOpenAIRE=OpenAIRE
dataset.exportBtn.itemLabel.html=DDI HTML Codebook
metrics.title=Metrics
metrics.title.tip=View more metrics information
metrics.comingsoon=Coming soon...
Expand Down
Loading