Skip to content

Commit

Permalink
Added code to the "generic import service" to handle controlled vocab…
Browse files Browse the repository at this point in the history
…ulary fields in DC import.

(dc:language is a controlled vocab field).
  • Loading branch information
landreev committed Aug 16, 2016
1 parent 63ceb80 commit 0d97c45
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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()) {
Expand All @@ -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()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 0d97c45

Please sign in to comment.