diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportGenericServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportGenericServiceBean.java index 3f0e65c35af..090d92be13a 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportGenericServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportGenericServiceBean.java @@ -296,23 +296,26 @@ private void processXMLElement(XMLStreamReader xmlr, String currentPath, String MetadataBlockDTO citationBlock = datasetDTO.getDatasetVersion().getMetadataBlocks().get(mappingDefinedFieldType.getMetadataBlock().getName()); citationBlock.addField(value); } - } else { - - // Process the payload of this XML element: - //xxString dataverseFieldName = mappingDefined.getDatasetfieldName(); - if (dataverseFieldName != null && !dataverseFieldName.equals("")) { - FieldDTO value = FieldDTO.createPrimitiveFieldDTO(dataverseFieldName, parseText(xmlr)); - DatasetFieldType dataverseFieldType = datasetfieldService.findByNameOpt(dataverseFieldName); - if (dataverseFieldType != null) { - value = makeDTO(dataverseFieldType, value, dataverseFieldName); -// value = FieldDTO.createPrimitiveFieldDTO(dataverseFieldName, parseText(xmlr)); -// FieldDTO dataverseField = FieldDTO.createCompoundFieldDTO(dataverseFieldName, value); - MetadataBlockDTO citationBlock = datasetDTO.getDatasetVersion().getMetadataBlocks().get(mappingDefinedFieldType.getMetadataBlock().getName()); - citationBlock.addField(value); -// TO DO replace database output with Json createDatasetFieldValue(dataverseFieldType, cachedCompoundValue, elementTextPayload, datasetVersion); + } else // Process the payload of this XML element: + //xxString dataverseFieldName = mappingDefined.getDatasetfieldName(); + if (dataverseFieldName != null && !dataverseFieldName.equals("")) { + DatasetFieldType dataverseFieldType = datasetfieldService.findByNameOpt(dataverseFieldName); + FieldDTO value; + if (dataverseFieldType != null) { + + if (dataverseFieldType.isControlledVocabulary()) { + value = FieldDTO.createVocabFieldDTO(dataverseFieldName, parseText(xmlr)); } else { - throw new EJBException("Bad foreign metadata field mapping: no such DatasetField " + dataverseFieldName + "!"); + value = FieldDTO.createPrimitiveFieldDTO(dataverseFieldName, parseText(xmlr)); } + value = makeDTO(dataverseFieldType, value, dataverseFieldName); + // value = FieldDTO.createPrimitiveFieldDTO(dataverseFieldName, parseText(xmlr)); + // FieldDTO dataverseField = FieldDTO.createCompoundFieldDTO(dataverseFieldName, value); + MetadataBlockDTO citationBlock = datasetDTO.getDatasetVersion().getMetadataBlocks().get(mappingDefinedFieldType.getMetadataBlock().getName()); + citationBlock.addField(value); + // TO DO replace database output with Json createDatasetFieldValue(dataverseFieldType, cachedCompoundValue, elementTextPayload, datasetVersion); + } else { + throw new EJBException("Bad foreign metadata field mapping: no such DatasetField " + dataverseFieldName + "!"); } } } else { @@ -328,10 +331,11 @@ private void processXMLElement(XMLStreamReader xmlr, String currentPath, String private FieldDTO makeDTO(DatasetFieldType dataverseFieldType, FieldDTO value, String dataverseFieldName) { if (dataverseFieldType.isAllowMultiples()){ - if(dataverseFieldType.isCompound()){ + if(dataverseFieldType.isCompound()) { value = FieldDTO.createMultipleCompoundFieldDTO(dataverseFieldName, value); - } - else { + } else if (dataverseFieldType.isControlledVocabulary()) { + value = FieldDTO.createMultipleVocabFieldDTO(dataverseFieldName, Arrays.asList(value.getSinglePrimitive())); + } else { value = FieldDTO.createMultiplePrimitiveFieldDTO(dataverseFieldName, Arrays.asList(value.getSinglePrimitive())); } if (dataverseFieldType.isChild()) { @@ -346,6 +350,10 @@ private FieldDTO makeDTO(DatasetFieldType dataverseFieldType, FieldDTO value, St value = FieldDTO.createCompoundFieldDTO(dataverseFieldName, value); } } + + // TODO: + // it looks like the code below has already been executed, in one of the + // if () blocks above... is this ok to be doing it again?? -- L.A. 4.5 if (dataverseFieldType.isChild()) { DatasetFieldType parentDatasetFieldType = dataverseFieldType.getParentDatasetFieldType(); if (parentDatasetFieldType.isAllowMultiples()) { diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportServiceBean.java index bc96b5fb28f..4c5865d560e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportServiceBean.java @@ -234,6 +234,7 @@ public Dataset doImportHarvestedDataset(DataverseRequest dataverseRequest, Harve throw new ImportException("XMLStreamException" + e); } } else if ("dc".equalsIgnoreCase(metadataFormat) || "oai_dc".equals(metadataFormat)) { + logger.fine("importing DC "+metadataFile.getAbsolutePath()); try { String xmlToParse = new String(Files.readAllBytes(metadataFile.toPath())); dsDTO = importGenericService.processOAIDCxml(xmlToParse);