Search in sources :

Example 1 with DatasetDTO

use of edu.harvard.iq.dataverse.api.dto.DatasetDTO in project dataverse by IQSS.

the class ImportServiceBean method doImport.

public JsonObjectBuilder doImport(DataverseRequest dataverseRequest, Dataverse owner, String xmlToParse, String fileName, ImportType importType, PrintWriter cleanupLog) throws ImportException, IOException {
    String status = "";
    Long createdId = null;
    DatasetDTO dsDTO = null;
    try {
        dsDTO = importDDIService.doImport(importType, xmlToParse);
    } catch (XMLStreamException e) {
        throw new ImportException("XMLStreamException" + e);
    }
    // convert DTO to Json,
    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    String json = gson.toJson(dsDTO);
    JsonReader jsonReader = Json.createReader(new StringReader(json));
    JsonObject obj = jsonReader.readObject();
    // and call parse Json to read it into a dataset
    try {
        JsonParser parser = new JsonParser(datasetfieldService, metadataBlockService, settingsService);
        parser.setLenient(!importType.equals(ImportType.NEW));
        Dataset ds = parser.parseDataset(obj);
        // we support, it will be rejected.
        if (importType.equals(ImportType.NEW)) {
            if (ds.getGlobalId() != null && !ds.getProtocol().equals(settingsService.getValueForKey(SettingsServiceBean.Key.Protocol, ""))) {
                throw new ImportException("Could not register id " + ds.getGlobalId() + ", protocol not supported");
            }
        }
        ds.setOwner(owner);
        ds.getLatestVersion().setDatasetFields(ds.getLatestVersion().initDatasetFields());
        // Check data against required contraints
        List<ConstraintViolation<DatasetField>> violations = ds.getVersions().get(0).validateRequired();
        if (!violations.isEmpty()) {
            if (importType.equals(ImportType.MIGRATION) || importType.equals(ImportType.HARVEST)) {
                // For migration and harvest, add NA for missing required values
                for (ConstraintViolation<DatasetField> v : violations) {
                    DatasetField f = v.getRootBean();
                    f.setSingleValue(DatasetField.NA_VALUE);
                }
            } else {
                // when importing a new dataset, the import will fail
                // if required values are missing.
                String errMsg = "Error importing data:";
                for (ConstraintViolation<DatasetField> v : violations) {
                    errMsg += " " + v.getMessage();
                }
                throw new ImportException(errMsg);
            }
        }
        // Check data against validation constraints
        // If we are migrating and "scrub migration data" is true we attempt to fix invalid data
        // if the fix fails stop processing of this file by throwing exception
        Set<ConstraintViolation> invalidViolations = ds.getVersions().get(0).validate();
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();
        if (!invalidViolations.isEmpty()) {
            for (ConstraintViolation<DatasetFieldValue> v : invalidViolations) {
                DatasetFieldValue f = v.getRootBean();
                boolean fixed = false;
                boolean converted = false;
                if ((importType.equals(ImportType.MIGRATION) || importType.equals(ImportType.HARVEST)) && settingsService.isTrueForKey(SettingsServiceBean.Key.ScrubMigrationData, false)) {
                    fixed = processMigrationValidationError(f, cleanupLog, fileName);
                    converted = true;
                    if (fixed) {
                        Set<ConstraintViolation<DatasetFieldValue>> scrubbedViolations = validator.validate(f);
                        if (!scrubbedViolations.isEmpty()) {
                            fixed = false;
                        }
                    }
                }
                if (!fixed) {
                    if (importType.equals(ImportType.HARVEST)) {
                        String msg = "Data modified - File: " + fileName + "; Field: " + f.getDatasetField().getDatasetFieldType().getDisplayName() + "; " + "Invalid value:  '" + f.getValue() + "'" + " Converted Value:'" + DatasetField.NA_VALUE + "'";
                        cleanupLog.println(msg);
                        f.setValue(DatasetField.NA_VALUE);
                    } else {
                        String msg = " Validation error for ";
                        if (converted) {
                            msg += "converted ";
                        }
                        msg += "value: " + f.getValue() + ", " + f.getValidationMessage();
                        throw new ImportException(msg);
                    }
                }
            }
        }
        Dataset existingDs = datasetService.findByGlobalId(ds.getGlobalId());
        if (existingDs != null) {
            if (importType.equals(ImportType.HARVEST)) {
                // We will replace the current version with the imported version.
                if (existingDs.getVersions().size() != 1) {
                    throw new ImportException("Error importing Harvested Dataset, existing dataset has " + existingDs.getVersions().size() + " versions");
                }
                engineSvc.submit(new DestroyDatasetCommand(existingDs, dataverseRequest));
                Dataset managedDs = engineSvc.submit(new CreateDatasetCommand(ds, dataverseRequest, false, importType));
                status = " updated dataset, id=" + managedDs.getId() + ".";
            } else {
                // check that the version number isn't already in the dataset
                for (DatasetVersion dsv : existingDs.getVersions()) {
                    if (dsv.getVersionNumber().equals(ds.getLatestVersion().getVersionNumber())) {
                        throw new ImportException("VersionNumber " + ds.getLatestVersion().getVersionNumber() + " already exists in dataset " + existingDs.getGlobalId());
                    }
                }
                DatasetVersion dsv = engineSvc.submit(new CreateDatasetVersionCommand(dataverseRequest, existingDs, ds.getVersions().get(0)));
                status = " created datasetVersion, for dataset " + dsv.getDataset().getGlobalId();
                createdId = dsv.getId();
            }
        } else {
            Dataset managedDs = engineSvc.submit(new CreateDatasetCommand(ds, dataverseRequest, false, importType));
            status = " created dataset, id=" + managedDs.getId() + ".";
            createdId = managedDs.getId();
        }
    } catch (JsonParseException ex) {
        logger.log(Level.INFO, "Error parsing datasetVersion: {0}", ex.getMessage());
        throw new ImportException("Error parsing datasetVersion: " + ex.getMessage(), ex);
    } catch (CommandException ex) {
        logger.log(Level.INFO, "Error excuting Create dataset command: {0}", ex.getMessage());
        throw new ImportException("Error excuting dataverse command: " + ex.getMessage(), ex);
    }
    return Json.createObjectBuilder().add("message", status);
}
Also used : DatasetField(edu.harvard.iq.dataverse.DatasetField) CreateDatasetCommand(edu.harvard.iq.dataverse.engine.command.impl.CreateDatasetCommand) Gson(com.google.gson.Gson) JsonObject(javax.json.JsonObject) DatasetVersion(edu.harvard.iq.dataverse.DatasetVersion) JsonParseException(edu.harvard.iq.dataverse.util.json.JsonParseException) DatasetDTO(edu.harvard.iq.dataverse.api.dto.DatasetDTO) DatasetFieldValue(edu.harvard.iq.dataverse.DatasetFieldValue) StringReader(java.io.StringReader) JsonReader(javax.json.JsonReader) JsonParser(edu.harvard.iq.dataverse.util.json.JsonParser) CreateDatasetVersionCommand(edu.harvard.iq.dataverse.engine.command.impl.CreateDatasetVersionCommand) ValidatorFactory(javax.validation.ValidatorFactory) GsonBuilder(com.google.gson.GsonBuilder) Dataset(edu.harvard.iq.dataverse.Dataset) CommandException(edu.harvard.iq.dataverse.engine.command.exception.CommandException) XMLStreamException(javax.xml.stream.XMLStreamException) ConstraintViolation(javax.validation.ConstraintViolation) Validator(javax.validation.Validator) DestroyDatasetCommand(edu.harvard.iq.dataverse.engine.command.impl.DestroyDatasetCommand)

Example 2 with DatasetDTO

use of edu.harvard.iq.dataverse.api.dto.DatasetDTO in project dataverse by IQSS.

the class DdiExportUtil method datasetDtoAsJson2ddi.

public static String datasetDtoAsJson2ddi(String datasetDtoAsJson) {
    logger.fine(JsonUtil.prettyPrint(datasetDtoAsJson));
    Gson gson = new Gson();
    DatasetDTO datasetDto = gson.fromJson(datasetDtoAsJson, DatasetDTO.class);
    try {
        return dto2ddi(datasetDto);
    } catch (XMLStreamException ex) {
        Logger.getLogger(DdiExportUtil.class.getName()).log(Level.SEVERE, null, ex);
        return null;
    }
}
Also used : DatasetDTO(edu.harvard.iq.dataverse.api.dto.DatasetDTO) XMLStreamException(javax.xml.stream.XMLStreamException) Gson(com.google.gson.Gson)

Example 3 with DatasetDTO

use of edu.harvard.iq.dataverse.api.dto.DatasetDTO in project dataverse by IQSS.

the class DdiExportUtil method datasetJson2ddi.

// "full" ddi, with the the "<fileDscr>"  and "<dataDscr>/<var>" sections:
public static void datasetJson2ddi(JsonObject datasetDtoAsJson, DatasetVersion version, OutputStream outputStream) throws XMLStreamException {
    logger.fine(JsonUtil.prettyPrint(datasetDtoAsJson.toString()));
    Gson gson = new Gson();
    DatasetDTO datasetDto = gson.fromJson(datasetDtoAsJson.toString(), DatasetDTO.class);
    XMLStreamWriter xmlw = XMLOutputFactory.newInstance().createXMLStreamWriter(outputStream);
    xmlw.writeStartElement("codeBook");
    xmlw.writeDefaultNamespace("ddi:codebook:2_5");
    xmlw.writeAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
    xmlw.writeAttribute("xsi:schemaLocation", "ddi:codebook:2_5 http://www.ddialliance.org/Specification/DDI-Codebook/2.5/XMLSchema/codebook.xsd");
    writeAttribute(xmlw, "version", "2.5");
    createStdyDscr(xmlw, datasetDto);
    createFileDscr(xmlw, version);
    createDataDscr(xmlw, version);
    createOtherMatsFromFileMetadatas(xmlw, version.getFileMetadatas());
    // codeBook
    xmlw.writeEndElement();
    xmlw.flush();
}
Also used : DatasetDTO(edu.harvard.iq.dataverse.api.dto.DatasetDTO) XMLStreamWriter(javax.xml.stream.XMLStreamWriter) Gson(com.google.gson.Gson)

Example 4 with DatasetDTO

use of edu.harvard.iq.dataverse.api.dto.DatasetDTO in project dataverse by IQSS.

the class DublinCoreExportUtil method datasetJson2dublincore.

public static void datasetJson2dublincore(JsonObject datasetDtoAsJson, OutputStream outputStream, String dcFlavor) throws XMLStreamException {
    logger.fine(JsonUtil.prettyPrint(datasetDtoAsJson.toString()));
    Gson gson = new Gson();
    DatasetDTO datasetDto = gson.fromJson(datasetDtoAsJson.toString(), DatasetDTO.class);
    // try {
    dto2dublincore(datasetDto, outputStream, dcFlavor);
// } catch (XMLStreamException ex) {
// Logger.getLogger(DdiExportUtil.class.getName()).log(Level.SEVERE, null, ex);
// }
}
Also used : DatasetDTO(edu.harvard.iq.dataverse.api.dto.DatasetDTO) Gson(com.google.gson.Gson)

Example 5 with DatasetDTO

use of edu.harvard.iq.dataverse.api.dto.DatasetDTO in project dataverse by IQSS.

the class DdiExportUtil method datasetJson2ddi.

// "short" ddi, without the "<fileDscr>"  and "<dataDscr>/<var>" sections:
public static void datasetJson2ddi(JsonObject datasetDtoAsJson, OutputStream outputStream) throws XMLStreamException {
    logger.fine(JsonUtil.prettyPrint(datasetDtoAsJson.toString()));
    Gson gson = new Gson();
    DatasetDTO datasetDto = gson.fromJson(datasetDtoAsJson.toString(), DatasetDTO.class);
    dtoddi(datasetDto, outputStream);
}
Also used : DatasetDTO(edu.harvard.iq.dataverse.api.dto.DatasetDTO) Gson(com.google.gson.Gson)

Aggregations

Gson (com.google.gson.Gson)6 DatasetDTO (edu.harvard.iq.dataverse.api.dto.DatasetDTO)6 XMLStreamException (javax.xml.stream.XMLStreamException)3 GsonBuilder (com.google.gson.GsonBuilder)2 Dataset (edu.harvard.iq.dataverse.Dataset)2 DatasetField (edu.harvard.iq.dataverse.DatasetField)2 DatasetFieldValue (edu.harvard.iq.dataverse.DatasetFieldValue)2 CommandException (edu.harvard.iq.dataverse.engine.command.exception.CommandException)2 CreateDatasetCommand (edu.harvard.iq.dataverse.engine.command.impl.CreateDatasetCommand)2 DestroyDatasetCommand (edu.harvard.iq.dataverse.engine.command.impl.DestroyDatasetCommand)2 JsonParseException (edu.harvard.iq.dataverse.util.json.JsonParseException)2 JsonParser (edu.harvard.iq.dataverse.util.json.JsonParser)2 StringReader (java.io.StringReader)2 JsonObject (javax.json.JsonObject)2 JsonReader (javax.json.JsonReader)2 ConstraintViolation (javax.validation.ConstraintViolation)2 Validator (javax.validation.Validator)2 ValidatorFactory (javax.validation.ValidatorFactory)2 DataFile (edu.harvard.iq.dataverse.DataFile)1 DatasetVersion (edu.harvard.iq.dataverse.DatasetVersion)1