From 77a6767d756d78cfbe70447a8a46a3f1a73c302c Mon Sep 17 00:00:00 2001 From: Piyapong Charoenwattana Date: Wed, 29 Mar 2017 14:49:42 -0600 Subject: [PATCH] Fixed #45 - Map Funding Agency to Grant Agency Fixed #45 - DDI Exporter Grant Agency mapping Fixed #50 - Software Name mapping --- .../api/imports/ImportDDIServiceBean.java | 1673 +++++++++-------- .../dataverse/export/ddi/DdiExportUtil.java | 1113 +++++------ .../iq/dataverse/util/xml/XmlPrinterTest.java | 13 +- 3 files changed, 1475 insertions(+), 1324 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java index b96acd8fc7e..7729cc9f2f6 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java @@ -1,48 +1,59 @@ package edu.harvard.iq.dataverse.api.imports; -import edu.harvard.iq.dataverse.DatasetFieldConstant; -import edu.harvard.iq.dataverse.DatasetFieldServiceBean; -import edu.harvard.iq.dataverse.DatasetFieldType; -import edu.harvard.iq.dataverse.DatasetVersion; -import edu.harvard.iq.dataverse.DatasetVersion.VersionState; -import edu.harvard.iq.dataverse.api.dto.*; -import edu.harvard.iq.dataverse.api.dto.FieldDTO; -import edu.harvard.iq.dataverse.api.dto.MetadataBlockDTO; -import edu.harvard.iq.dataverse.api.imports.ImportUtil.ImportType; import static edu.harvard.iq.dataverse.export.ddi.DdiExportUtil.NOTE_TYPE_CONTENTTYPE; -import edu.harvard.iq.dataverse.util.StringUtil; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.StringReader; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; + import javax.ejb.EJB; import javax.ejb.EJBException; import javax.ejb.Stateless; -import javax.persistence.NoResultException; +import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLInputFactory; + import org.apache.commons.lang.StringUtils; +import edu.harvard.iq.dataverse.DatasetFieldConstant; +import edu.harvard.iq.dataverse.DatasetFieldServiceBean; +import edu.harvard.iq.dataverse.DatasetFieldType; +import edu.harvard.iq.dataverse.DatasetVersion; +import edu.harvard.iq.dataverse.DatasetVersion.VersionState; +import edu.harvard.iq.dataverse.api.dto.DataFileDTO; +import edu.harvard.iq.dataverse.api.dto.DataTableDTO; +import edu.harvard.iq.dataverse.api.dto.DatasetDTO; +import edu.harvard.iq.dataverse.api.dto.DatasetVersionDTO; +import edu.harvard.iq.dataverse.api.dto.FieldDTO; +import edu.harvard.iq.dataverse.api.dto.FileMetadataDTO; +import edu.harvard.iq.dataverse.api.dto.MetadataBlockDTO; +import edu.harvard.iq.dataverse.api.imports.ImportUtil.ImportType; +import edu.harvard.iq.dataverse.util.StringUtil; + /** * * @author ellenk */ -// TODO: -// does this need to be a service bean/stateless? - could be transformed into -// a util with static methods. +// TODO: +// does this need to be a service bean/stateless? - could be transformed into +// a util with static methods. // (it would need to be passed the fields service beans as arguments) // -- L.A. 4.5 @Stateless public class ImportDDIServiceBean { public static final String SOURCE_DVN_3_0 = "DVN_3_0"; - + public static final String NAMING_PROTOCOL_HANDLE = "hdl"; public static final String NAMING_PROTOCOL_DOI = "doi"; public static final String AGENCY_HANDLE = "handle"; @@ -54,7 +65,6 @@ public class ImportDDIServiceBean { public static final String CAT_STAT_TYPE_FREQUENCY = "freq"; public static final String VAR_FORMAT_TYPE_NUMERIC = "numeric"; public static final String VAR_FORMAT_SCHEMA_ISO = "ISO"; - public static final String EVENT_START = "start"; public static final String EVENT_END = "end"; @@ -77,14 +87,14 @@ public class ImportDDIServiceBean { public static final String NOTE_SUBJECT_CITATION = "Citation"; public static final String NOTE_TYPE_VERSION_NOTE = "DVN:VERSION_NOTE"; - public static final String NOTE_SUBJECT_VERSION_NOTE= "Version Note"; + public static final String NOTE_SUBJECT_VERSION_NOTE = "Version Note"; public static final String NOTE_TYPE_ARCHIVE_NOTE = "DVN:ARCHIVE_NOTE"; - public static final String NOTE_SUBJECT_ARCHIVE_NOTE= "Archive Note"; + public static final String NOTE_SUBJECT_ARCHIVE_NOTE = "Archive Note"; public static final String NOTE_TYPE_ARCHIVE_DATE = "DVN:ARCHIVE_DATE"; - public static final String NOTE_SUBJECT_ARCHIVE_DATE= "Archive Date"; - + public static final String NOTE_SUBJECT_ARCHIVE_DATE = "Archive Date"; + public static final String NOTE_TYPE_EXTENDED_METADATA = "DVN:EXTENDED_METADATA"; public static final String NOTE_TYPE_LOCKSS_CRAWL = "LOCKSS:CRAWLING"; @@ -92,92 +102,103 @@ public class ImportDDIServiceBean { public static final String NOTE_TYPE_REPLICATION_FOR = "DVN:REPLICATION_FOR"; private XMLInputFactory xmlInputFactory = null; - - @EJB CustomFieldServiceBean customFieldService; - - @EJB DatasetFieldServiceBean datasetFieldService; - - - // TODO: + + @EJB + CustomFieldServiceBean customFieldService; + + @EJB + DatasetFieldServiceBean datasetFieldService; + + // TODO: // stop passing the xml source as a string; (it could be huge!) -- L.A. 4.5 - public DatasetDTO doImport(ImportType importType, String xmlToParse) throws XMLStreamException, ImportException { + public DatasetDTO doImport(final ImportType importType, final String xmlToParse) + throws XMLStreamException, ImportException { xmlInputFactory = javax.xml.stream.XMLInputFactory.newInstance(); - xmlInputFactory.setProperty("javax.xml.stream.isCoalescing", java.lang.Boolean.TRUE); DatasetDTO datasetDTO = this.initializeDataset(); + xmlInputFactory.setProperty("javax.xml.stream.isCoalescing", java.lang.Boolean.TRUE); + final DatasetDTO datasetDTO = this.initializeDataset(); // Read docDescr and studyDesc into DTO objects. - // TODO: the fileMap is likely not needed. - Map fileMap = mapDDI(importType, xmlToParse, datasetDTO); + // TODO: the fileMap is likely not needed. + final Map fileMap = mapDDI(importType, xmlToParse, datasetDTO); if (!isMigrationImport(importType)) { // For migration, this filemetadata is copied in a separate SQL step } return datasetDTO; } - - public void importFileMetadata(DatasetVersion dv, String xmlToParse) { - - } - - private boolean isHarvestImport(ImportType importType) { + + public void importFileMetadata(final DatasetVersion dv, final String xmlToParse) { + + } + + private boolean isHarvestImport(final ImportType importType) { return importType.equals(ImportType.HARVEST) || importType.equals(ImportType.HARVEST_WITH_FILES); } - - private boolean isHarvestWithFilesImport(ImportType importType) { + + private boolean isHarvestWithFilesImport(final ImportType importType) { return importType.equals(ImportType.HARVEST_WITH_FILES); } - - private boolean isNewImport(ImportType importType) { + + private boolean isNewImport(final ImportType importType) { return importType.equals(ImportType.NEW); } - - private boolean isMigrationImport(ImportType importType) { + + private boolean isMigrationImport(final ImportType importType) { return importType.equals(ImportType.MIGRATION); } - public Map mapDDI(ImportType importType, String xmlToParse, DatasetDTO datasetDTO) throws XMLStreamException, ImportException { + public Map mapDDI(final ImportType importType, final String xmlToParse, final DatasetDTO datasetDTO) + throws XMLStreamException, ImportException { - Map filesMap = new HashMap(); - StringReader reader = new StringReader(xmlToParse); + final Map filesMap = new HashMap(); + final StringReader reader = new StringReader(xmlToParse); XMLStreamReader xmlr = null; - XMLInputFactory xmlFactory = javax.xml.stream.XMLInputFactory.newInstance(); + final XMLInputFactory xmlFactory = javax.xml.stream.XMLInputFactory.newInstance(); xmlr = xmlFactory.createXMLStreamReader(reader); processDDI(importType, xmlr, datasetDTO, filesMap); return filesMap; } - - - public Map mapDDI(ImportType importType, File ddiFile, DatasetDTO datasetDTO ) throws ImportException { + + public Map mapDDI(final ImportType importType, final File ddiFile, final DatasetDTO datasetDTO) + throws ImportException { FileInputStream in = null; XMLStreamReader xmlr = null; - Map filesMap = new HashMap(); + final Map filesMap = new HashMap(); try { in = new FileInputStream(ddiFile); - xmlr = xmlInputFactory.createXMLStreamReader(in); - processDDI(importType, xmlr, datasetDTO , filesMap ); - } catch (FileNotFoundException ex) { + xmlr = xmlInputFactory.createXMLStreamReader(in); + processDDI(importType, xmlr, datasetDTO, filesMap); + } catch (final FileNotFoundException ex) { Logger.getLogger("global").log(Level.SEVERE, null, ex); throw new EJBException("ERROR occurred in mapDDI: File Not Found!"); - } catch (XMLStreamException ex) { + } catch (final XMLStreamException ex) { Logger.getLogger("global").log(Level.SEVERE, null, ex); throw new EJBException("ERROR occurred in mapDDI.", ex); } finally { try { - if (xmlr != null) { xmlr.close(); } - } catch (XMLStreamException ex) {} + if (xmlr != null) { + xmlr.close(); + } + } catch (final XMLStreamException ex) { + } try { - if (in != null) { in.close();} - } catch (IOException ex) {} + if (in != null) { + in.close(); + } + } catch (final IOException ex) { + } } return filesMap; } - - private void processDDI(ImportType importType, XMLStreamReader xmlr, DatasetDTO datasetDTO, Map filesMap) throws XMLStreamException, ImportException { - + + private void processDDI(final ImportType importType, final XMLStreamReader xmlr, final DatasetDTO datasetDTO, + final Map filesMap) throws XMLStreamException, ImportException { + // make sure we have a codeBook - //while ( xmlr.next() == XMLStreamConstants.COMMENT ); // skip pre root comments + // while ( xmlr.next() == XMLStreamConstants.COMMENT ); // skip pre root comments xmlr.nextTag(); xmlr.require(XMLStreamConstants.START_ELEMENT, null, "codeBook"); @@ -186,171 +207,186 @@ private void processDDI(ImportType importType, XMLStreamReader xmlr, DatasetDTO // (we've seen instances where this ID was the only ID found in // in a harvested DDI). - String codeBookLevelId = xmlr.getAttributeValue(null, "ID"); - - // (but first we will parse and process the entire DDI - and only - // then add this codeBook-level id to the list of identifiers; i.e., + final String codeBookLevelId = xmlr.getAttributeValue(null, "ID"); + + // (but first we will parse and process the entire DDI - and only + // then add this codeBook-level id to the list of identifiers; i.e., // we don't want it to be the first on the list, if one or more - // ids are available in the studyDscr section - those should take + // ids are available in the studyDscr section - those should take // precedence!) - // In fact, we should only use these IDs when no ID is available down - // in the study description section! - - processCodeBook(importType, xmlr, datasetDTO, filesMap); - MetadataBlockDTO citationBlock = datasetDTO.getDatasetVersion().getMetadataBlocks().get("citation"); - - if (codeBookLevelId != null && !codeBookLevelId.equals("")) { - if (citationBlock.getField("otherId")==null) { - // this means no ids were found during the parsing of the - // study description section. we'll use the one we found in + // In fact, we should only use these IDs when no ID is available down + // in the study description section! + + processCodeBook(importType, xmlr, datasetDTO, filesMap); + final MetadataBlockDTO citationBlock = datasetDTO.getDatasetVersion().getMetadataBlocks().get("citation"); + + if (codeBookLevelId != null && !codeBookLevelId.equals("")) { + if (citationBlock.getField("otherId") == null) { + // this means no ids were found during the parsing of the + // study description section. we'll use the one we found in // the codeBook entry: - FieldDTO otherIdValue = FieldDTO.createPrimitiveFieldDTO("otherIdValue", codeBookLevelId); - FieldDTO otherId = FieldDTO.createCompoundFieldDTO("otherId", otherIdValue); + final FieldDTO otherIdValue = FieldDTO.createPrimitiveFieldDTO("otherIdValue", codeBookLevelId); + final FieldDTO otherId = FieldDTO.createCompoundFieldDTO("otherId", otherIdValue); citationBlock.getFields().add(otherId); - + } } - if (isHarvestImport(importType)) { + if (isHarvestImport(importType)) { datasetDTO.getDatasetVersion().setVersionState(VersionState.RELEASED); - - } - + + } } - public DatasetDTO initializeDataset() { - DatasetDTO datasetDTO = new DatasetDTO(); - DatasetVersionDTO datasetVersionDTO = new DatasetVersionDTO(); + + public DatasetDTO initializeDataset() { + final DatasetDTO datasetDTO = new DatasetDTO(); + final DatasetVersionDTO datasetVersionDTO = new DatasetVersionDTO(); datasetDTO.setDatasetVersion(datasetVersionDTO); - HashMap metadataBlocks = new HashMap<>(); + final HashMap metadataBlocks = new HashMap<>(); datasetVersionDTO.setMetadataBlocks(metadataBlocks); - + datasetVersionDTO.getMetadataBlocks().put("citation", new MetadataBlockDTO()); datasetVersionDTO.getMetadataBlocks().get("citation").setFields(new ArrayList()); datasetVersionDTO.getMetadataBlocks().put("socialscience", new MetadataBlockDTO()); datasetVersionDTO.getMetadataBlocks().get("socialscience").setFields(new ArrayList()); datasetVersionDTO.getMetadataBlocks().put("geospatial", new MetadataBlockDTO()); datasetVersionDTO.getMetadataBlocks().get("geospatial").setFields(new ArrayList()); - + return datasetDTO; - + } - + // Read the XMLStream, and populate datasetDTO and filesMap - private void processCodeBook(ImportType importType, XMLStreamReader xmlr, DatasetDTO datasetDTO, Map filesMap) throws XMLStreamException, ImportException { - for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { + private void processCodeBook(final ImportType importType, final XMLStreamReader xmlr, final DatasetDTO datasetDTO, + final Map filesMap) throws XMLStreamException, ImportException { + for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("docDscr")) { processDocDscr(xmlr, datasetDTO); - } - else if (xmlr.getLocalName().equals("stdyDscr")) { + } else if (xmlr.getLocalName().equals("stdyDscr")) { processStdyDscr(importType, xmlr, datasetDTO); - } - else if (xmlr.getLocalName().equals("fileDscr") && !isMigrationImport(importType)) { + } else if (xmlr.getLocalName().equals("fileDscr") /* && !isMigrationImport(importType) */) { // EMK TODO: add this back in for ImportType.NEW - //processFileDscr(xmlr, datasetDTO, filesMap); - - } - else if (xmlr.getLocalName().equals("otherMat") && (isNewImport(importType) || isHarvestWithFilesImport(importType)) ) { + // XXX: add it for migration import, experimental! + processFileDscr(xmlr, datasetDTO, filesMap); + + } else if (xmlr.getLocalName().equals("otherMat") + && (isNewImport(importType) || isHarvestWithFilesImport(importType))) { processOtherMat(xmlr, datasetDTO, filesMap); } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("codeBook")) return; + if (xmlr.getLocalName().equals("codeBook")) + return; } } } - - private void processDocDscr(XMLStreamReader xmlr, DatasetDTO datasetDTO) throws XMLStreamException { + + private void processDocDscr(final XMLStreamReader xmlr, final DatasetDTO datasetDTO) throws XMLStreamException { for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { - - if (xmlr.getLocalName().equals("IDNo") && StringUtil.isEmpty(datasetDTO.getIdentifier()) ) { + + if (xmlr.getLocalName().equals("IDNo") && StringUtil.isEmpty(datasetDTO.getIdentifier())) { // this will set a StudyId if it has not yet been set; it will get overridden by a metadata // id in the StudyDscr section, if one exists - if ( AGENCY_HANDLE.equals( xmlr.getAttributeValue(null, "agency") ) ) { - parseStudyIdHandle( parseText(xmlr), datasetDTO ); - } - // EMK TODO: we need to save this somewhere when we add harvesting infrastructure - } /*else if ( xmlr.getLocalName().equals("holdings") && StringUtil.isEmpty(datasetDTO..getHarvestHoldings()) ) { - metadata.setHarvestHoldings( xmlr.getAttributeValue(null, "URI") ); - }*/ + if (AGENCY_HANDLE.equals(xmlr.getAttributeValue(null, "agency"))) { + parseStudyIdHandle(parseText(xmlr), datasetDTO); + } + // EMK TODO: we need to save this somewhere when we add harvesting infrastructure + } /* + * else if ( xmlr.getLocalName().equals("holdings") && + * StringUtil.isEmpty(datasetDTO..getHarvestHoldings()) ) { metadata.setHarvestHoldings( + * xmlr.getAttributeValue(null, "URI") ); } + */ } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("docDscr")) return; + if (xmlr.getLocalName().equals("docDscr")) + return; } } - } - private String parseText(XMLStreamReader xmlr) throws XMLStreamException { - return parseText(xmlr,true); - } + } + + private String parseText(final XMLStreamReader xmlr) throws XMLStreamException { + return parseText(xmlr, true); + } - private String parseText(XMLStreamReader xmlr, boolean scrubText) throws XMLStreamException { + private String parseText(final XMLStreamReader xmlr, final boolean scrubText) throws XMLStreamException { String tempString = getElementText(xmlr); if (scrubText) { - tempString = tempString.trim().replace('\n',' '); + tempString = tempString.trim().replace('\n', ' '); } return tempString; - } - private String parseDate (XMLStreamReader xmlr, String endTag) throws XMLStreamException { + } + + private String parseDate(final XMLStreamReader xmlr, final String endTag) throws XMLStreamException { String date = xmlr.getAttributeValue(null, "date"); if (date == null) { date = parseText(xmlr); } return date; - } - /* We had to add this method because the ref getElementText has a bug where it - * would append a null before the text, if there was an escaped apostrophe; it appears - * that the code finds an null ENTITY_REFERENCE in this case which seems like a bug; - * the workaround for the moment is to comment or handling ENTITY_REFERENCE in this case + } + + /* + * We had to add this method because the ref getElementText has a bug where it would append a null before the text, + * if there was an escaped apostrophe; it appears that the code finds an null ENTITY_REFERENCE in this case which + * seems like a bug; the workaround for the moment is to comment or handling ENTITY_REFERENCE in this case */ - private String getElementText(XMLStreamReader xmlr) throws XMLStreamException { - if(xmlr.getEventType() != XMLStreamConstants.START_ELEMENT) { + private String getElementText(final XMLStreamReader xmlr) throws XMLStreamException { + if (xmlr.getEventType() != XMLStreamConstants.START_ELEMENT) { throw new XMLStreamException("parser must be on START_ELEMENT to read next text", xmlr.getLocation()); } int eventType = xmlr.next(); - StringBuffer content = new StringBuffer(); - while(eventType != XMLStreamConstants.END_ELEMENT ) { - if(eventType == XMLStreamConstants.CHARACTERS - || eventType == XMLStreamConstants.CDATA - || eventType == XMLStreamConstants.SPACE - /* || eventType == XMLStreamConstants.ENTITY_REFERENCE*/) { + final StringBuffer content = new StringBuffer(); + while (eventType != XMLStreamConstants.END_ELEMENT) { + if (eventType == XMLStreamConstants.CHARACTERS || eventType == XMLStreamConstants.CDATA + || eventType == XMLStreamConstants.SPACE + /* || eventType == XMLStreamConstants.ENTITY_REFERENCE */) { content.append(xmlr.getText()); - } else if(eventType == XMLStreamConstants.PROCESSING_INSTRUCTION - || eventType == XMLStreamConstants.COMMENT + } else if (eventType == XMLStreamConstants.PROCESSING_INSTRUCTION || eventType == XMLStreamConstants.COMMENT || eventType == XMLStreamConstants.ENTITY_REFERENCE) { // skipping - } else if(eventType == XMLStreamConstants.END_DOCUMENT) { + } else if (eventType == XMLStreamConstants.END_DOCUMENT) { throw new XMLStreamException("unexpected end of document when reading element text content"); - } else if(eventType == XMLStreamConstants.START_ELEMENT) { + } else if (eventType == XMLStreamConstants.START_ELEMENT) { throw new XMLStreamException("element text content may not contain START_ELEMENT", xmlr.getLocation()); } else { - throw new XMLStreamException("Unexpected event type "+eventType, xmlr.getLocation()); + throw new XMLStreamException("Unexpected event type " + eventType, xmlr.getLocation()); } eventType = xmlr.next(); } return content.toString(); } - - private void processStdyDscr(ImportType importType, XMLStreamReader xmlr, DatasetDTO datasetDTO) throws XMLStreamException, ImportException { - + + private void processStdyDscr(final ImportType importType, final XMLStreamReader xmlr, final DatasetDTO datasetDTO) + throws XMLStreamException, ImportException { + for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { - if (xmlr.getLocalName().equals("citation")) processCitation(importType, xmlr, datasetDTO); - else if (xmlr.getLocalName().equals("stdyInfo")) processStdyInfo(xmlr, datasetDTO.getDatasetVersion()); - else if (xmlr.getLocalName().equals("method")) processMethod(xmlr, datasetDTO.getDatasetVersion()); - - else if (xmlr.getLocalName().equals("dataAccs")) processDataAccs(xmlr, datasetDTO.getDatasetVersion()); - - else if (xmlr.getLocalName().equals("othrStdyMat")) processOthrStdyMat(xmlr, datasetDTO.getDatasetVersion()); - else if (xmlr.getLocalName().equals("notes")) processNotes(xmlr, datasetDTO.getDatasetVersion()); - + if (xmlr.getLocalName().equals("citation")) + processCitation(importType, xmlr, datasetDTO); + else if (xmlr.getLocalName().equals("stdyInfo")) + processStdyInfo(xmlr, datasetDTO.getDatasetVersion()); + else if (xmlr.getLocalName().equals("method")) + processMethod(xmlr, datasetDTO.getDatasetVersion()); + + else if (xmlr.getLocalName().equals("dataAccs")) + processDataAccs(xmlr, datasetDTO.getDatasetVersion()); + + else if (xmlr.getLocalName().equals("othrStdyMat")) + processOthrStdyMat(xmlr, datasetDTO.getDatasetVersion()); + else if (xmlr.getLocalName().equals("notes")) + processNotes(xmlr, datasetDTO.getDatasetVersion()); + } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("stdyDscr")) return; + if (xmlr.getLocalName().equals("stdyDscr")) + return; } } } - private void processOthrStdyMat(XMLStreamReader xmlr, DatasetVersionDTO dvDTO) throws XMLStreamException { - List> publications = new ArrayList<>(); - boolean replicationForFound = false; + + private void processOthrStdyMat(final XMLStreamReader xmlr, final DatasetVersionDTO dvDTO) + throws XMLStreamException { + final List> publications = new ArrayList<>(); + final boolean replicationForFound = false; for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("relMat")) { @@ -358,67 +394,71 @@ private void processOthrStdyMat(XMLStreamReader xmlr, DatasetVersionDTO dvDTO) t if (!replicationForFound && REPLICATION_FOR_TYPE.equals(xmlr.getAttributeValue(null, "type"))) { if (!SOURCE_DVN_3_0.equals(xmlr.getAttributeValue(null, "source"))) { // this is a ddi from pre 3.0, so we should add a publication - /* StudyRelPublication rp = new StudyRelPublication(); - metadata.getStudyRelPublications().add(rp); - rp.setMetadata(metadata); - rp.setText( parseText( xmlr, "relMat" ) ); - rp.setReplicationData(true); - replicationForFound = true;*/ - HashSet set = new HashSet<>(); + /* + * StudyRelPublication rp = new StudyRelPublication(); + * metadata.getStudyRelPublications().add(rp); rp.setMetadata(metadata); rp.setText( + * parseText( xmlr, "relMat" ) ); rp.setReplicationData(true); replicationForFound = true; + */ + final HashSet set = new HashSet<>(); addToSet(set, DatasetFieldConstant.publicationCitation, parseText(xmlr, "relMat")); if (!set.isEmpty()) { publications.add(set); } - if (publications.size()>0) - getCitation(dvDTO).addField(FieldDTO.createMultipleCompoundFieldDTO(DatasetFieldConstant.publication, publications)); + if (publications.size() > 0) + getCitation(dvDTO).addField(FieldDTO + .createMultipleCompoundFieldDTO(DatasetFieldConstant.publication, publications)); } } else { - List relMaterial = new ArrayList(); + final List relMaterial = new ArrayList<>(); relMaterial.add(parseText(xmlr, "relMat")); - getCitation(dvDTO).addField(FieldDTO.createMultiplePrimitiveFieldDTO(DatasetFieldConstant.relatedMaterial, relMaterial)); + getCitation(dvDTO).addField(FieldDTO + .createMultiplePrimitiveFieldDTO(DatasetFieldConstant.relatedMaterial, relMaterial)); } - } - else if (xmlr.getLocalName().equals("relStdy")) { - List relStudy = new ArrayList(); + } else if (xmlr.getLocalName().equals("relStdy")) { + final List relStudy = new ArrayList<>(); relStudy.add(parseText(xmlr, "relStdy")); - getCitation(dvDTO).addField(FieldDTO.createMultiplePrimitiveFieldDTO(DatasetFieldConstant.relatedDatasets, relStudy)); - } else if (xmlr.getLocalName().equals("relPubl")) { - HashSet set = new HashSet<>(); + getCitation(dvDTO).addField( + FieldDTO.createMultiplePrimitiveFieldDTO(DatasetFieldConstant.relatedDatasets, relStudy)); + } else if (xmlr.getLocalName().equals("relPubl")) { + final HashSet set = new HashSet<>(); // call new parse text logic - Object rpFromDDI = parseTextNew(xmlr, "relPubl"); + final Object rpFromDDI = parseTextNew(xmlr, "relPubl"); if (rpFromDDI instanceof Map) { - Map rpMap = (Map) rpFromDDI; + final Map rpMap = (Map) rpFromDDI; addToSet(set, DatasetFieldConstant.publicationCitation, (String) rpMap.get("text")); addToSet(set, DatasetFieldConstant.publicationIDNumber, (String) rpMap.get("idNumber")); addToSet(set, DatasetFieldConstant.publicationURL, (String) rpMap.get("url")); - if (rpMap.get("idType")!=null) { - set.add(FieldDTO.createVocabFieldDTO(DatasetFieldConstant.publicationIDType, ((String) rpMap.get("idType")).toLowerCase())); + if (rpMap.get("idType") != null) { + set.add(FieldDTO.createVocabFieldDTO(DatasetFieldConstant.publicationIDType, + ((String) rpMap.get("idType")).toLowerCase())); } - // rp.setText((String) rpMap.get("text")); - // rp.setIdType((String) rpMap.get("idType")); - // rp.setIdNumber((String) rpMap.get("idNumber")); - // rp.setUrl((String) rpMap.get("url")); - // TODO: ask about where/whether we want to save this - // if (!replicationForFound && rpMap.get("replicationData") != null) { - // rp.setReplicationData(true); - /// replicationForFound = true; - // } + // rp.setText((String) rpMap.get("text")); + // rp.setIdType((String) rpMap.get("idType")); + // rp.setIdNumber((String) rpMap.get("idNumber")); + // rp.setUrl((String) rpMap.get("url")); + // TODO: ask about where/whether we want to save this + // if (!replicationForFound && rpMap.get("replicationData") != null) { + // rp.setReplicationData(true); + /// replicationForFound = true; + // } } else { addToSet(set, DatasetFieldConstant.publicationCitation, (String) rpFromDDI); - // rp.setText( (String) rpFromDDI ); + // rp.setText( (String) rpFromDDI ); } publications.add(set); - if (publications.size()>0) { - getCitation(dvDTO).addField(FieldDTO.createMultipleCompoundFieldDTO(DatasetFieldConstant.publication, publications)); + if (publications.size() > 0) { + getCitation(dvDTO).addField( + FieldDTO.createMultipleCompoundFieldDTO(DatasetFieldConstant.publication, publications)); } } else if (xmlr.getLocalName().equals("otherRefs")) { - List otherRefs = new ArrayList(); + final List otherRefs = new ArrayList<>(); otherRefs.add(parseText(xmlr, "otherRefs")); - getCitation(dvDTO).addField(FieldDTO.createMultiplePrimitiveFieldDTO(DatasetFieldConstant.otherReferences, otherRefs)); + getCitation(dvDTO).addField( + FieldDTO.createMultiplePrimitiveFieldDTO(DatasetFieldConstant.otherReferences, otherRefs)); } } else if (event == XMLStreamConstants.END_ELEMENT) { @@ -429,199 +469,206 @@ else if (xmlr.getLocalName().equals("relStdy")) { } } } - private void processCitation(ImportType importType, XMLStreamReader xmlr, DatasetDTO datasetDTO) throws XMLStreamException, ImportException { - DatasetVersionDTO dvDTO = datasetDTO.getDatasetVersion(); - MetadataBlockDTO citation=datasetDTO.getDatasetVersion().getMetadataBlocks().get("citation"); + + private void processCitation(final ImportType importType, final XMLStreamReader xmlr, final DatasetDTO datasetDTO) + throws XMLStreamException, ImportException { + final DatasetVersionDTO dvDTO = datasetDTO.getDatasetVersion(); + final MetadataBlockDTO citation = datasetDTO.getDatasetVersion().getMetadataBlocks().get("citation"); for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { - if (xmlr.getLocalName().equals("titlStmt")) processTitlStmt(xmlr, datasetDTO); - else if (xmlr.getLocalName().equals("rspStmt")) processRspStmt(xmlr,citation); - else if (xmlr.getLocalName().equals("prodStmt")) processProdStmt(xmlr,citation); - else if (xmlr.getLocalName().equals("distStmt")) processDistStmt(xmlr,citation); - else if (xmlr.getLocalName().equals("serStmt")) processSerStmt(xmlr,citation); - else if (xmlr.getLocalName().equals("verStmt")) processVerStmt(importType, xmlr,dvDTO); + if (xmlr.getLocalName().equals("titlStmt")) + processTitlStmt(xmlr, datasetDTO); + else if (xmlr.getLocalName().equals("rspStmt")) + processRspStmt(xmlr, citation); + else if (xmlr.getLocalName().equals("prodStmt")) + processProdStmt(xmlr, citation); + else if (xmlr.getLocalName().equals("distStmt")) + processDistStmt(xmlr, citation); + else if (xmlr.getLocalName().equals("serStmt")) + processSerStmt(xmlr, citation); + else if (xmlr.getLocalName().equals("verStmt")) + processVerStmt(importType, xmlr, dvDTO); else if (xmlr.getLocalName().equals("notes")) { - String _note = parseNoteByType( xmlr, NOTE_TYPE_UNF ); + final String _note = parseNoteByType(xmlr, NOTE_TYPE_UNF); if (_note != null) { - datasetDTO.getDatasetVersion().setUNF( parseUNF( _note ) ); + datasetDTO.getDatasetVersion().setUNF(parseUNF(_note)); } else { - - processNotes(xmlr,dvDTO); + + processNotes(xmlr, dvDTO); } } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("citation")) return; + if (xmlr.getLocalName().equals("citation")) + return; } } } - - - /** - * - * - * @param xmlr - * @param citation - * @throws XMLStreamException - */ - private void processStdyInfo(XMLStreamReader xmlr, DatasetVersionDTO dvDTO) throws XMLStreamException { - List> descriptions = new ArrayList<>(); - - for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { + + /** + * + * + * @param xmlr + * @param citation + * @throws XMLStreamException + */ + private void processStdyInfo(final XMLStreamReader xmlr, final DatasetVersionDTO dvDTO) throws XMLStreamException { + final List> descriptions = new ArrayList<>(); + + for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("subject")) { - processSubject(xmlr, getCitation(dvDTO)); + processSubject(xmlr, getCitation(dvDTO)); } else if (xmlr.getLocalName().equals("abstract")) { - HashSet set = new HashSet<>(); - addToSet(set,"dsDescriptionDate", xmlr.getAttributeValue(null, "date")); - addToSet(set,"dsDescriptionValue", parseText(xmlr, "abstract")); + final HashSet set = new HashSet<>(); + addToSet(set, "dsDescriptionDate", xmlr.getAttributeValue(null, "date")); + addToSet(set, "dsDescriptionValue", parseText(xmlr, "abstract")); if (!set.isEmpty()) { descriptions.add(set); } - - } else if (xmlr.getLocalName().equals("sumDscr")) processSumDscr(xmlr, dvDTO); - - else if (xmlr.getLocalName().equals("notes")) processNotes(xmlr,dvDTO); + + } else if (xmlr.getLocalName().equals("sumDscr")) + processSumDscr(xmlr, dvDTO); + + else if (xmlr.getLocalName().equals("notes")) + processNotes(xmlr, dvDTO); } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("stdyInfo") ) { - if (descriptions.size()>0) { - getCitation(dvDTO).getFields().add(FieldDTO.createMultipleCompoundFieldDTO("dsDescription", descriptions)); + if (xmlr.getLocalName().equals("stdyInfo")) { + if (descriptions.size() > 0) { + getCitation(dvDTO).getFields() + .add(FieldDTO.createMultipleCompoundFieldDTO("dsDescription", descriptions)); } return; } } } - } - private void processSubject(XMLStreamReader xmlr, MetadataBlockDTO citation) throws XMLStreamException { - List> keywords = new ArrayList<>(); - List> topicClasses = new ArrayList<>(); - for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { + } + + private void processSubject(final XMLStreamReader xmlr, final MetadataBlockDTO citation) throws XMLStreamException { + final List> keywords = new ArrayList<>(); + final List> topicClasses = new ArrayList<>(); + for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { - + if (xmlr.getLocalName().equals("keyword")) { - HashSet set = new HashSet<>(); - addToSet(set,"keywordVocabulary", xmlr.getAttributeValue(null, "vocab")); - addToSet(set, "keywordVocabularyURI", xmlr.getAttributeValue(null, "vocabURI") ); - addToSet(set,"keywordValue", parseText(xmlr)); + final HashSet set = new HashSet<>(); + addToSet(set, "keywordVocabulary", xmlr.getAttributeValue(null, "vocab")); + addToSet(set, "keywordVocabularyURI", xmlr.getAttributeValue(null, "vocabURI")); + addToSet(set, "keywordValue", parseText(xmlr)); if (!set.isEmpty()) { keywords.add(set); } } else if (xmlr.getLocalName().equals("topcClas")) { - HashSet set = new HashSet<>(); - addToSet(set,"topicClassVocab", xmlr.getAttributeValue(null, "vocab")); - addToSet(set,"topicClassVocabURI", xmlr.getAttributeValue(null, "vocabURI") ); - addToSet(set,"topicClassValue",parseText(xmlr)); + final HashSet set = new HashSet<>(); + addToSet(set, "topicClassVocab", xmlr.getAttributeValue(null, "vocab")); + addToSet(set, "topicClassVocabURI", xmlr.getAttributeValue(null, "vocabURI")); + addToSet(set, "topicClassValue", parseText(xmlr)); if (!set.isEmpty()) { topicClasses.add(set); } - + } } else if (event == XMLStreamConstants.END_ELEMENT) { if (xmlr.getLocalName().equals("subject")) { - if (keywords.size()>0) { + if (keywords.size() > 0) { citation.getFields().add(FieldDTO.createMultipleCompoundFieldDTO("keyword", keywords)); } - if (topicClasses.size()>0) { - citation.getFields().add(FieldDTO.createMultipleCompoundFieldDTO("topicClassification", topicClasses)); + if (topicClasses.size() > 0) { + citation.getFields() + .add(FieldDTO.createMultipleCompoundFieldDTO("topicClassification", topicClasses)); } return; } } else { - // citation.getFields().add(FieldDTO.createPrimitiveFieldDTO( "subject",xmlr.getElementText())); - + // citation.getFields().add(FieldDTO.createPrimitiveFieldDTO( "subject",xmlr.getElementText())); + } } } - + /** - * Process the notes portion of the DDI doc -- if there is one - * Return a formatted string - * + * Process the notes portion of the DDI doc -- if there is one Return a formatted string + * * @param xmlr - * @return + * @return */ - private String formatNotesfromXML(XMLStreamReader xmlr) throws XMLStreamException{ - - if (xmlr==null){ + private String formatNotesfromXML(final XMLStreamReader xmlr) throws XMLStreamException { + + if (xmlr == null) { throw new NullPointerException("XMLStreamReader xmlr cannot be null"); } - //System.out.println("formatNotesfromXML"); + // System.out.println("formatNotesfromXML"); // Initialize array of strings - List noteValues = new ArrayList(); + final List noteValues = new ArrayList<>(); String attrVal; // Check for "subject" attrVal = xmlr.getAttributeValue(null, "subject"); - if (attrVal != null){ + if (attrVal != null) { noteValues.add("Subject: " + attrVal); } - + // Check for "type" attrVal = xmlr.getAttributeValue(null, "type"); - if (attrVal != null){ + if (attrVal != null) { noteValues.add("Type: " + attrVal); } - + // Add notes, if they exist attrVal = parseText(xmlr, "notes"); - if ((attrVal != null) && (!attrVal.isEmpty())){ + if ((attrVal != null) && (!attrVal.isEmpty())) { noteValues.add("Notes: " + attrVal); - } - + } + // Nothing to add - if (noteValues.isEmpty()){ - //System.out.println("nuthin'"); + if (noteValues.isEmpty()) { + // System.out.println("nuthin'"); return null; } - - //System.out.println(StringUtils.join(noteValues, " ") + ";"); + + // System.out.println(StringUtils.join(noteValues, " ") + ";"); return StringUtils.join(noteValues, " ") + ";"; /* - Examples of xml: - - Note Text - Note Text 2 - Note Text 3 - */ - + * Examples of xml: Note Text Note Text + * 2 Note Text 3 + */ + /* - // Original, changed b/c of string 'null' appearing in final output - String note = " Subject: "+xmlr.getAttributeValue(null, "subject")+" " - + " Type: "+xmlr.getAttributeValue(null, "type")+" " - + " Notes: "+parseText(xmlr, "notes")+";"; - addNote(note, dvDTO); - */ + * // Original, changed b/c of string 'null' appearing in final output String note = + * " Subject: "+xmlr.getAttributeValue(null, "subject")+" " + " Type: "+xmlr.getAttributeValue(null, "type")+" " + * + " Notes: "+parseText(xmlr, "notes")+";"; addNote(note, dvDTO); + */ } - - - private void processNotes (XMLStreamReader xmlr, DatasetVersionDTO dvDTO) throws XMLStreamException { - - String formattedNotes = this.formatNotesfromXML(xmlr); - - if (formattedNotes != null){ + + private void processNotes(final XMLStreamReader xmlr, final DatasetVersionDTO dvDTO) throws XMLStreamException { + + final String formattedNotes = this.formatNotesfromXML(xmlr); + + if (formattedNotes != null) { this.addNote(formattedNotes, dvDTO); } } - - private void addNote(String noteText, DatasetVersionDTO dvDTO ) { - MetadataBlockDTO citation = getCitation(dvDTO); + + private void addNote(final String noteText, final DatasetVersionDTO dvDTO) { + final MetadataBlockDTO citation = getCitation(dvDTO); FieldDTO field = citation.getField("notesText"); - if (field==null) { + if (field == null) { field = FieldDTO.createPrimitiveFieldDTO("notesText", ""); citation.getFields().add(field); } String noteValue = field.getSinglePrimitive(); - noteValue+= noteText; + noteValue += noteText; field.setSinglePrimitive(noteValue); } - - private void processSumDscr(XMLStreamReader xmlr, DatasetVersionDTO dvDTO) throws XMLStreamException { - List geoUnit = new ArrayList<>(); - List unitOfAnalysis = new ArrayList<>(); - List universe = new ArrayList<>(); - List kindOfData = new ArrayList<>(); - List> geoBoundBox = new ArrayList<>(); - List> geoCoverages = new ArrayList<>(); + + private void processSumDscr(final XMLStreamReader xmlr, final DatasetVersionDTO dvDTO) throws XMLStreamException { + final List geoUnit = new ArrayList<>(); + final List unitOfAnalysis = new ArrayList<>(); + final List universe = new ArrayList<>(); + final List kindOfData = new ArrayList<>(); + final List> geoBoundBox = new ArrayList<>(); + final List> geoCoverages = new ArrayList<>(); FieldDTO timePeriodStart = null; FieldDTO timePeriodEnd = null; FieldDTO dateOfCollectionStart = null; @@ -630,27 +677,33 @@ private void processSumDscr(XMLStreamReader xmlr, DatasetVersionDTO dvDTO) throw for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("timePrd")) { - - String eventAttr = xmlr.getAttributeValue(null, "event"); - if (eventAttr == null || EVENT_SINGLE.equalsIgnoreCase(eventAttr) || EVENT_START.equalsIgnoreCase(eventAttr)) { - timePeriodStart = FieldDTO.createPrimitiveFieldDTO("timePeriodCoveredStart", parseDate(xmlr, "timePrd")); + + final String eventAttr = xmlr.getAttributeValue(null, "event"); + if (eventAttr == null || EVENT_SINGLE.equalsIgnoreCase(eventAttr) + || EVENT_START.equalsIgnoreCase(eventAttr)) { + timePeriodStart = + FieldDTO.createPrimitiveFieldDTO("timePeriodCoveredStart", parseDate(xmlr, "timePrd")); } else if (EVENT_END.equals(eventAttr)) { - timePeriodEnd = FieldDTO.createPrimitiveFieldDTO("timePeriodCoveredEnd", parseDate(xmlr, "timePrd")); - } + timePeriodEnd = + FieldDTO.createPrimitiveFieldDTO("timePeriodCoveredEnd", parseDate(xmlr, "timePrd")); + } } else if (xmlr.getLocalName().equals("collDate")) { - String eventAttr = xmlr.getAttributeValue(null, "event"); - if (eventAttr == null || EVENT_SINGLE.equalsIgnoreCase(eventAttr) || EVENT_START.equalsIgnoreCase(eventAttr)) { - dateOfCollectionStart = FieldDTO.createPrimitiveFieldDTO("dateOfCollectionStart", parseDate(xmlr, "collDate")); + final String eventAttr = xmlr.getAttributeValue(null, "event"); + if (eventAttr == null || EVENT_SINGLE.equalsIgnoreCase(eventAttr) + || EVENT_START.equalsIgnoreCase(eventAttr)) { + dateOfCollectionStart = + FieldDTO.createPrimitiveFieldDTO("dateOfCollectionStart", parseDate(xmlr, "collDate")); } else if (EVENT_END.equals(eventAttr)) { - dateOfCollectionEnd = FieldDTO.createPrimitiveFieldDTO("dateOfCollectionEnd", parseDate(xmlr, "collDate")); + dateOfCollectionEnd = + FieldDTO.createPrimitiveFieldDTO("dateOfCollectionEnd", parseDate(xmlr, "collDate")); } - + } else if (xmlr.getLocalName().equals("nation")) { - HashSet set = new HashSet<>(); + final HashSet set = new HashSet<>(); set.add(FieldDTO.createVocabFieldDTO("country", parseText(xmlr))); geoCoverages.add(set); } else if (xmlr.getLocalName().equals("geogCover")) { - HashSet set = new HashSet<>(); + final HashSet set = new HashSet<>(); set.add(FieldDTO.createPrimitiveFieldDTO("otherGeographicCoverage", parseText(xmlr))); geoCoverages.add(set); } else if (xmlr.getLocalName().equals("geogUnit")) { @@ -666,112 +719,123 @@ private void processSumDscr(XMLStreamReader xmlr, DatasetVersionDTO dvDTO) throw } } else if (event == XMLStreamConstants.END_ELEMENT) { if (xmlr.getLocalName().equals("sumDscr")) { - if (timePeriodStart!=null || timePeriodEnd!=null) { - getCitation(dvDTO).addField(FieldDTO.createMultipleCompoundFieldDTO("timePeriodCovered", timePeriodStart, timePeriodEnd)); + if (timePeriodStart != null || timePeriodEnd != null) { + getCitation(dvDTO).addField(FieldDTO.createMultipleCompoundFieldDTO("timePeriodCovered", + timePeriodStart, timePeriodEnd)); } - if (dateOfCollectionStart!=null || dateOfCollectionEnd!=null) { - getCitation(dvDTO).addField(FieldDTO.createMultipleCompoundFieldDTO("dateOfCollection", dateOfCollectionStart, dateOfCollectionEnd)); + if (dateOfCollectionStart != null || dateOfCollectionEnd != null) { + getCitation(dvDTO).addField(FieldDTO.createMultipleCompoundFieldDTO("dateOfCollection", + dateOfCollectionStart, dateOfCollectionEnd)); } - + if (geoUnit.size() > 0) { - getGeospatial(dvDTO).addField(FieldDTO.createMultiplePrimitiveFieldDTO("geographicUnit", geoUnit)); + getGeospatial(dvDTO) + .addField(FieldDTO.createMultiplePrimitiveFieldDTO("geographicUnit", geoUnit)); } if (unitOfAnalysis.size() > 0) { - getSocialScience(dvDTO).addField(FieldDTO.createMultiplePrimitiveFieldDTO("unitOfAnalysis", unitOfAnalysis)); + getSocialScience(dvDTO) + .addField(FieldDTO.createMultiplePrimitiveFieldDTO("unitOfAnalysis", unitOfAnalysis)); } if (universe.size() > 0) { - getSocialScience(dvDTO).addField(FieldDTO.createMultiplePrimitiveFieldDTO("universe", universe)); + getSocialScience(dvDTO) + .addField(FieldDTO.createMultiplePrimitiveFieldDTO("universe", universe)); } if (kindOfData.size() > 0) { getCitation(dvDTO).addField(FieldDTO.createMultiplePrimitiveFieldDTO("kindOfData", kindOfData)); } - if (geoCoverages.size()>0) { - getGeospatial(dvDTO).addField(FieldDTO.createMultipleCompoundFieldDTO("geographicCoverage", geoCoverages)); + if (geoCoverages.size() > 0) { + getGeospatial(dvDTO) + .addField(FieldDTO.createMultipleCompoundFieldDTO("geographicCoverage", geoCoverages)); } - if (geoBoundBox.size()>0) { - getGeospatial(dvDTO).addField(FieldDTO.createMultipleCompoundFieldDTO("geographicBoundingBox", geoBoundBox)); + if (geoBoundBox.size() > 0) { + getGeospatial(dvDTO) + .addField(FieldDTO.createMultipleCompoundFieldDTO("geographicBoundingBox", geoBoundBox)); } - return ; + return; } } } } - - - - private HashSet processGeoBndBox(XMLStreamReader xmlr) throws XMLStreamException { - HashSet set = new HashSet<>(); + + private HashSet processGeoBndBox(final XMLStreamReader xmlr) throws XMLStreamException { + final HashSet set = new HashSet<>(); for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("westBL")) { - addToSet(set,"westLongitude", parseText(xmlr)); + addToSet(set, "westLongitude", parseText(xmlr)); } else if (xmlr.getLocalName().equals("eastBL")) { - addToSet(set,"eastLongitude", parseText(xmlr)); - } else if (xmlr.getLocalName().equals("southBL")) { - addToSet(set,"southLongitude", parseText(xmlr)); - } else if (xmlr.getLocalName().equals("northBL")) { - addToSet(set,"northLongitude", parseText(xmlr)); - } + addToSet(set, "eastLongitude", parseText(xmlr)); + } else if (xmlr.getLocalName().equals("southBL")) { + addToSet(set, "southLongitude", parseText(xmlr)); + } else if (xmlr.getLocalName().equals("northBL")) { + addToSet(set, "northLongitude", parseText(xmlr)); + } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("geoBndBox")) break; + if (xmlr.getLocalName().equals("geoBndBox")) + break; } } return set; } - private void processMethod(XMLStreamReader xmlr, DatasetVersionDTO dvDTO ) throws XMLStreamException, ImportException { + + private void processMethod(final XMLStreamReader xmlr, final DatasetVersionDTO dvDTO) + throws XMLStreamException, ImportException { for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("dataColl")) { processDataColl(xmlr, dvDTO); } else if (xmlr.getLocalName().equals("notes")) { - - String noteType = xmlr.getAttributeValue(null, "type"); - if (NOTE_TYPE_EXTENDED_METADATA.equalsIgnoreCase(noteType) ) { - processCustomField(xmlr, dvDTO); + + final String noteType = xmlr.getAttributeValue(null, "type"); + if (NOTE_TYPE_EXTENDED_METADATA.equalsIgnoreCase(noteType)) { + processCustomField(xmlr, dvDTO); } else { - addNote("Subject: Study Level Error Note, Notes: "+ parseText( xmlr,"notes" ) +";", dvDTO); - + addNote("Subject: Study Level Error Note, Notes: " + parseText(xmlr, "notes") + ";", dvDTO); + } } else if (xmlr.getLocalName().equals("anlyInfo")) { processAnlyInfo(xmlr, getSocialScience(dvDTO)); } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("method")) return; + if (xmlr.getLocalName().equals("method")) + return; } } } - - private void processCustomField(XMLStreamReader xmlr, DatasetVersionDTO dvDTO) throws XMLStreamException, ImportException { - String subject = xmlr.getAttributeValue(null, "subject"); + + private void processCustomField(final XMLStreamReader xmlr, final DatasetVersionDTO dvDTO) + throws XMLStreamException, ImportException { + final String subject = xmlr.getAttributeValue(null, "subject"); if (!subject.isEmpty()) { // Syntax of subject attribute: // TEMPLATE:Contains Custom Fields;FIELD:Customfield1 // first parse by semicolon - String template = subject.substring(subject.indexOf(":") + 1, subject.indexOf(";")); - String sourceField = subject.substring(subject.lastIndexOf(":") + 1); - String fieldValue = parseText(xmlr); - - CustomFieldMap map = customFieldService.findByTemplateField(template.trim(), sourceField.trim()); - - if (map == null) { - throw new ImportException("Did not find mapping for template: "+template+", sourceField: "+sourceField); + final String template = subject.substring(subject.indexOf(":") + 1, subject.indexOf(";")); + final String sourceField = subject.substring(subject.lastIndexOf(":") + 1); + final String fieldValue = parseText(xmlr); + + final CustomFieldMap map = customFieldService.findByTemplateField(template.trim(), sourceField.trim()); + + if (map == null) { + throw new ImportException( + "Did not find mapping for template: " + template + ", sourceField: " + sourceField); } if (map.getTargetDatasetField().endsWith("#IGNORE")) { // if the target field is #IGNORE, that means we don't want to // copy this field from 3.6 to 4.0 return; } - + // 1. Get datasetFieldType for the targetField // 2. find the metadatablock for this field type // 3. If this metadatablock doesn't exist in DTO, create it // 4. add field to mdatadatablock - DatasetFieldType dsfType = datasetFieldService.findByName(map.getTargetDatasetField()); + final DatasetFieldType dsfType = datasetFieldService.findByName(map.getTargetDatasetField()); if (dsfType == null) { throw new ImportException("Did not find datasetField for target: " + map.getTargetDatasetField()); } - String metadataBlockName = dsfType.getMetadataBlock().getName(); + final String metadataBlockName = dsfType.getMetadataBlock().getName(); MetadataBlockDTO customBlock = dvDTO.getMetadataBlocks().get(metadataBlockName); if (customBlock == null) { customBlock = new MetadataBlockDTO(); @@ -782,7 +846,7 @@ private void processCustomField(XMLStreamReader xmlr, DatasetVersionDTO dvDTO) t handleChildField(customBlock, dsfType, fieldValue); } else { if (dsfType.isAllowMultiples()) { - List valList = new ArrayList<>(); + final List valList = new ArrayList<>(); valList.add(fieldValue); if (dsfType.isAllowControlledVocabulary()) { customBlock.addField(FieldDTO.createMultipleVocabFieldDTO(dsfType.getName(), valList)); @@ -803,9 +867,10 @@ private void processCustomField(XMLStreamReader xmlr, DatasetVersionDTO dvDTO) t } } } - - private void handleChildField(MetadataBlockDTO customBlock, DatasetFieldType dsfType, String fieldValue) throws ImportException { - DatasetFieldType parent = dsfType.getParentDatasetFieldType(); + + private void handleChildField(final MetadataBlockDTO customBlock, final DatasetFieldType dsfType, + final String fieldValue) throws ImportException { + final DatasetFieldType parent = dsfType.getParentDatasetFieldType(); // Create child Field FieldDTO child = null; @@ -824,122 +889,148 @@ private void handleChildField(MetadataBlockDTO customBlock, DatasetFieldType dsf compound = FieldDTO.createCompoundFieldDTO(parent.getName(), child); } customBlock.addField(compound); - + } - - private void processSources(XMLStreamReader xmlr, MetadataBlockDTO citation) throws XMLStreamException { + + private void processSources(final XMLStreamReader xmlr, final MetadataBlockDTO citation) throws XMLStreamException { for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { // citation dataSources String parsedText; if (xmlr.getLocalName().equals("dataSrc")) { - parsedText = parseText( xmlr, "dataSrc" ); + parsedText = parseText(xmlr, "dataSrc"); if (!parsedText.isEmpty()) { - citation.addField(FieldDTO.createMultiplePrimitiveFieldDTO("dataSources", Arrays.asList(parsedText))); + citation.addField( + FieldDTO.createMultiplePrimitiveFieldDTO("dataSources", Arrays.asList(parsedText))); } // citation originOfSources } else if (xmlr.getLocalName().equals("srcOrig")) { - parsedText = parseText( xmlr, "srcOrig" ); + parsedText = parseText(xmlr, "srcOrig"); if (!parsedText.isEmpty()) { - citation.getFields().add(FieldDTO.createPrimitiveFieldDTO("originOfSources", parsedText)); + citation.getFields().add(FieldDTO.createPrimitiveFieldDTO("originOfSources", parsedText)); } - // citation characteristicOfSources + // citation characteristicOfSources } else if (xmlr.getLocalName().equals("srcChar")) { - parsedText = parseText( xmlr, "srcChar" ); + parsedText = parseText(xmlr, "srcChar"); if (!parsedText.isEmpty()) { - citation.getFields().add(FieldDTO.createPrimitiveFieldDTO("characteristicOfSources", parsedText)); + citation.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("characteristicOfSources", parsedText)); } - // citation accessToSources + // citation accessToSources } else if (xmlr.getLocalName().equals("srcDocu")) { - parsedText = parseText( xmlr, "srcDocu" ); - if (!parsedText.isEmpty()) { + parsedText = parseText(xmlr, "srcDocu"); + if (!parsedText.isEmpty()) { citation.getFields().add(FieldDTO.createPrimitiveFieldDTO("accessToSources", parsedText)); } } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("sources")) return; + if (xmlr.getLocalName().equals("sources")) + return; } } } - private void processAnlyInfo(XMLStreamReader xmlr, MetadataBlockDTO socialScience) throws XMLStreamException { + + private void processAnlyInfo(final XMLStreamReader xmlr, final MetadataBlockDTO socialScience) + throws XMLStreamException { for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { // socialscience responseRate if (xmlr.getLocalName().equals("respRate")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("responseRate", parseText( xmlr, "respRate" ))); - // socialscience samplingErrorEstimates + socialScience.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("responseRate", parseText(xmlr, "respRate"))); + // socialscience samplingErrorEstimates } else if (xmlr.getLocalName().equals("EstSmpErr")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("samplingErrorEstimates", parseText( xmlr, "EstSmpErr" ))); - // socialscience otherDataAppraisal + socialScience.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("samplingErrorEstimates", parseText(xmlr, "EstSmpErr"))); + // socialscience otherDataAppraisal } else if (xmlr.getLocalName().equals("dataAppr")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("otherDataAppraisal", parseText( xmlr, "dataAppr" ))); + socialScience.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("otherDataAppraisal", parseText(xmlr, "dataAppr"))); } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("anlyInfo")) return; + if (xmlr.getLocalName().equals("anlyInfo")) + return; } } } - private void processDataColl(XMLStreamReader xmlr, DatasetVersionDTO dvDTO) throws XMLStreamException { - MetadataBlockDTO socialScience =getSocialScience(dvDTO); + private void processDataColl(final XMLStreamReader xmlr, final DatasetVersionDTO dvDTO) throws XMLStreamException { + final MetadataBlockDTO socialScience = getSocialScience(dvDTO); for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { - //timeMethod + // timeMethod if (xmlr.getLocalName().equals("timeMeth")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("timeMethod", parseText( xmlr, "timeMeth" ))); - } else if (xmlr.getLocalName().equals("dataCollector")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("dataCollector", parseText( xmlr, "dataCollector" ))); - // frequencyOfDataCollection + socialScience.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("timeMethod", parseText(xmlr, "timeMeth"))); + } else if (xmlr.getLocalName().equals("dataCollector")) { + socialScience.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("dataCollector", parseText(xmlr, "dataCollector"))); + // frequencyOfDataCollection } else if (xmlr.getLocalName().equals("frequenc")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("frequencyOfDataCollection", parseText( xmlr, "frequenc" ))); - //samplingProcedure + socialScience.getFields().add( + FieldDTO.createPrimitiveFieldDTO("frequencyOfDataCollection", parseText(xmlr, "frequenc"))); + // samplingProcedure } else if (xmlr.getLocalName().equals("sampProc")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("samplingProcedure", parseText( xmlr, "sampProc" ))); - //targetSampleSize + socialScience.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("samplingProcedure", parseText(xmlr, "sampProc"))); + // targetSampleSize } else if (xmlr.getLocalName().equals("targetSampleSize")) { - processTargetSampleSize(xmlr, socialScience); - //devationsFromSamplingDesign + processTargetSampleSize(xmlr, socialScience); + // devationsFromSamplingDesign } else if (xmlr.getLocalName().equals("deviat")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("deviationsFromSampleDesign", parseText( xmlr, "deviat" ))); - // collectionMode + socialScience.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("deviationsFromSampleDesign", parseText(xmlr, "deviat"))); + // collectionMode } else if (xmlr.getLocalName().equals("collMode")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("collectionMode", parseText( xmlr, "collMode" ))); - //researchInstrument + socialScience.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("collectionMode", parseText(xmlr, "collMode"))); + // researchInstrument } else if (xmlr.getLocalName().equals("resInstru")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("researchInstrument", parseText( xmlr, "resInstru" ))); + socialScience.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("researchInstrument", parseText(xmlr, "resInstru"))); } else if (xmlr.getLocalName().equals("sources")) { - processSources(xmlr,getCitation(dvDTO)); + processSources(xmlr, getCitation(dvDTO)); } else if (xmlr.getLocalName().equals("collSitu")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("dataCollectionSituation", parseText( xmlr, "collSitu" ))); + socialScience.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("dataCollectionSituation", parseText(xmlr, "collSitu"))); } else if (xmlr.getLocalName().equals("actMin")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("actionsToMinimizeLoss", parseText( xmlr, "actMin" ))); + socialScience.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("actionsToMinimizeLoss", parseText(xmlr, "actMin"))); } else if (xmlr.getLocalName().equals("ConOps")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("controlOperations", parseText( xmlr, "ConOps" ))); + socialScience.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("controlOperations", parseText(xmlr, "ConOps"))); } else if (xmlr.getLocalName().equals("weight")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("weighting", parseText( xmlr, "weight" ))); + socialScience.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("weighting", parseText(xmlr, "weight"))); } else if (xmlr.getLocalName().equals("cleanOps")) { - socialScience.getFields().add(FieldDTO.createPrimitiveFieldDTO("cleaningOperations", parseText( xmlr, "cleanOps" ))); - } + socialScience.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("cleaningOperations", parseText(xmlr, "cleanOps"))); + } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("dataColl")) return; + if (xmlr.getLocalName().equals("dataColl")) + return; } } } - private void processTargetSampleSize(XMLStreamReader xmlr, MetadataBlockDTO socialScience) throws XMLStreamException { - FieldDTO sampleSize=null; - FieldDTO sampleSizeFormula=null; + private void processTargetSampleSize(final XMLStreamReader xmlr, final MetadataBlockDTO socialScience) + throws XMLStreamException { + FieldDTO sampleSize = null; + FieldDTO sampleSizeFormula = null; for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("sampleSize")) { - sampleSize = FieldDTO.createPrimitiveFieldDTO("targetSampleActualSize", parseText( xmlr, "sampleSize" )); + sampleSize = + FieldDTO.createPrimitiveFieldDTO("targetSampleActualSize", parseText(xmlr, "sampleSize")); } else if (xmlr.getLocalName().equals("sampleSizeFormula")) { - sampleSizeFormula = FieldDTO.createPrimitiveFieldDTO("targetSampleSizeFormula", parseText( xmlr, "sampleSizeFormula" )); + sampleSizeFormula = FieldDTO.createPrimitiveFieldDTO("targetSampleSizeFormula", + parseText(xmlr, "sampleSizeFormula")); } } else if (event == XMLStreamConstants.END_ELEMENT) { if (xmlr.getLocalName().equals("targetSampleSize")) { - if (sampleSize!=null || sampleSizeFormula!=null) { - socialScience.getFields().add(FieldDTO.createCompoundFieldDTO("targetSampleSize", sampleSize,sampleSizeFormula)); + if (sampleSize != null || sampleSizeFormula != null) { + socialScience.getFields() + .add(FieldDTO.createCompoundFieldDTO("targetSampleSize", sampleSize, sampleSizeFormula)); } return; } @@ -947,74 +1038,75 @@ private void processTargetSampleSize(XMLStreamReader xmlr, MetadataBlockDTO soci } } + /* - EMK TODO: In DVN 3.6, users were allowed to enter their own version date, and in addition the app assigned a version date when - the version is released. So DDI's that we have to migrate, we can see this: - - 1 - - - 1 - - Question: what to do with these two different dates? Need to review with Eleni - Note: we should use the verStmt with source="DVN" as the 'official' version statement - DDI's that we are migrating should have one and only one DVN version statement - */ - private void processVerStmt(ImportType importType, XMLStreamReader xmlr, DatasetVersionDTO dvDTO) throws XMLStreamException { - if (isMigrationImport(importType) || isHarvestImport(importType)) { - if (!"DVN".equals(xmlr.getAttributeValue(null, "source"))) { - for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { - if (event == XMLStreamConstants.START_ELEMENT) { - if (xmlr.getLocalName().equals("version")) { - addNote("Version Date: "+ xmlr.getAttributeValue(null, "date"),dvDTO); - addNote("Version Text: "+ parseText(xmlr),dvDTO); - } else if (xmlr.getLocalName().equals("notes")) { processNotes(xmlr, dvDTO); } - } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("verStmt")) return; + * EMK TODO: In DVN 3.6, users were allowed to enter their own version date, and in addition the app assigned a + * version date when the version is released. So DDI's that we have to migrate, we can see this: 1 1 Question: what to do with these two different dates? Need to review with + * Eleni Note: we should use the verStmt with source="DVN" as the 'official' version statement DDI's that we are + * migrating should have one and only one DVN version statement + */ + private void processVerStmt(final ImportType importType, final XMLStreamReader xmlr, final DatasetVersionDTO dvDTO) + throws XMLStreamException { + if (isMigrationImport(importType) || isHarvestImport(importType)) { + if (!"DVN".equals(xmlr.getAttributeValue(null, "source"))) { + for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { + if (event == XMLStreamConstants.START_ELEMENT) { + if (xmlr.getLocalName().equals("version")) { + addNote("Version Date: " + xmlr.getAttributeValue(null, "date"), dvDTO); + addNote("Version Text: " + parseText(xmlr), dvDTO); + } else if (xmlr.getLocalName().equals("notes")) { + processNotes(xmlr, dvDTO); + } + } else if (event == XMLStreamConstants.END_ELEMENT) { + if (xmlr.getLocalName().equals("verStmt")) + return; + } } - } - } else { - // this is the DVN version info; get version number for StudyVersion object - for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { - if (event == XMLStreamConstants.START_ELEMENT) { - if (xmlr.getLocalName().equals("version")) { - dvDTO.setReleaseDate(xmlr.getAttributeValue(null, "date")); - String versionState =xmlr.getAttributeValue(null,"type"); - if (versionState!=null ) { - if( versionState.equals("ARCHIVED")) { - versionState="RELEASED"; - } else if (versionState.equals("IN_REVIEW")) { - versionState = DatasetVersion.VersionState.DRAFT.toString(); - dvDTO.setInReview(true); + } else { + // this is the DVN version info; get version number for StudyVersion object + for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { + if (event == XMLStreamConstants.START_ELEMENT) { + if (xmlr.getLocalName().equals("version")) { + dvDTO.setReleaseDate(xmlr.getAttributeValue(null, "date")); + String versionState = xmlr.getAttributeValue(null, "type"); + if (versionState != null) { + if (versionState.equals("ARCHIVED")) { + versionState = "RELEASED"; + } else if (versionState.equals("IN_REVIEW")) { + versionState = DatasetVersion.VersionState.DRAFT.toString(); + dvDTO.setInReview(true); + } + dvDTO.setVersionState(Enum.valueOf(VersionState.class, versionState)); } - dvDTO.setVersionState(Enum.valueOf(VersionState.class, versionState)); - } - parseVersionNumber(dvDTO,parseText(xmlr)); - } - } else if(event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("verStmt")) return; + parseVersionNumber(dvDTO, parseText(xmlr)); + } + } else if (event == XMLStreamConstants.END_ELEMENT) { + if (xmlr.getLocalName().equals("verStmt")) + return; + } } } - } - + } if (isNewImport(importType)) { // If this is a new, Draft version, versionNumber and minor versionNumber are null. dvDTO.setVersionState(VersionState.DRAFT); - } + } } - - private void processDataAccs(XMLStreamReader xmlr, DatasetVersionDTO dvDTO) throws XMLStreamException { + + private void processDataAccs(final XMLStreamReader xmlr, final DatasetVersionDTO dvDTO) throws XMLStreamException { for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { - if (event == XMLStreamConstants.START_ELEMENT) { + if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("setAvail")) { processSetAvail(xmlr, dvDTO); } else if (xmlr.getLocalName().equals("useStmt")) { processUseStmt(xmlr, dvDTO); } else if (xmlr.getLocalName().equals("notes")) { - String noteType = xmlr.getAttributeValue(null, "type"); - if (NOTE_TYPE_TERMS_OF_USE.equalsIgnoreCase(noteType) ) { - if ( LEVEL_DV.equalsIgnoreCase(xmlr.getAttributeValue(null, "level"))) { + final String noteType = xmlr.getAttributeValue(null, "type"); + if (NOTE_TYPE_TERMS_OF_USE.equalsIgnoreCase(noteType)) { + if (LEVEL_DVN.equalsIgnoreCase(xmlr.getAttributeValue(null, "level"))) { dvDTO.setTermsOfUse(parseText(xmlr, "notes")); } } else { @@ -1028,63 +1120,66 @@ private void processDataAccs(XMLStreamReader xmlr, DatasetVersionDTO dvDTO) thro } } } - - private void processSetAvail(XMLStreamReader xmlr, DatasetVersionDTO dvDTO) throws XMLStreamException { + + private void processSetAvail(final XMLStreamReader xmlr, final DatasetVersionDTO dvDTO) throws XMLStreamException { for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("accsPlac")) { - dvDTO.setDataAccessPlace( parseText( xmlr, "accsPlac" ) ); + dvDTO.setDataAccessPlace(parseText(xmlr, "accsPlac")); } else if (xmlr.getLocalName().equals("origArch")) { - dvDTO.setOriginalArchive( parseText( xmlr, "origArch" ) ); + dvDTO.setOriginalArchive(parseText(xmlr, "origArch")); } else if (xmlr.getLocalName().equals("avlStatus")) { - dvDTO.setAvailabilityStatus( parseText( xmlr, "avlStatus" ) ); - } else if (xmlr.getLocalName().equals("collSize")) { - dvDTO.setSizeOfCollection(parseText( xmlr, "collSize" ) ); + dvDTO.setAvailabilityStatus(parseText(xmlr, "avlStatus")); + } else if (xmlr.getLocalName().equals("collSize")) { + dvDTO.setSizeOfCollection(parseText(xmlr, "collSize")); } else if (xmlr.getLocalName().equals("complete")) { - dvDTO.setStudyCompletion( parseText( xmlr, "complete" ) ); + dvDTO.setStudyCompletion(parseText(xmlr, "complete")); } else if (xmlr.getLocalName().equals("notes")) { - processNotes( xmlr, dvDTO ); + processNotes(xmlr, dvDTO); } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("setAvail")) return; + if (xmlr.getLocalName().equals("setAvail")) + return; } } } - private void processUseStmt(XMLStreamReader xmlr, DatasetVersionDTO dvDTO) throws XMLStreamException { + private void processUseStmt(final XMLStreamReader xmlr, final DatasetVersionDTO dvDTO) throws XMLStreamException { for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("confDec")) { - dvDTO.setConfidentialityDeclaration( parseText( xmlr, "confDec" ) ); + dvDTO.setConfidentialityDeclaration(parseText(xmlr, "confDec")); } else if (xmlr.getLocalName().equals("specPerm")) { - dvDTO.setSpecialPermissions( parseText( xmlr, "specPerm" ) ); + dvDTO.setSpecialPermissions(parseText(xmlr, "specPerm")); } else if (xmlr.getLocalName().equals("restrctn")) { - dvDTO.setRestrictions( parseText( xmlr, "restrctn" ) ); + dvDTO.setRestrictions(parseText(xmlr, "restrctn")); } else if (xmlr.getLocalName().equals("contact")) { - dvDTO.setContactForAccess( parseText( xmlr, "contact" ) ); + dvDTO.setContactForAccess(parseText(xmlr, "contact")); } else if (xmlr.getLocalName().equals("citReq")) { - dvDTO.setCitationRequirements( parseText( xmlr, "citReq" ) ); + dvDTO.setCitationRequirements(parseText(xmlr, "citReq")); } else if (xmlr.getLocalName().equals("deposReq")) { - dvDTO.setDepositorRequirements( parseText( xmlr, "deposReq" ) ); + dvDTO.setDepositorRequirements(parseText(xmlr, "deposReq")); } else if (xmlr.getLocalName().equals("conditions")) { - dvDTO.setConditions( parseText( xmlr, "conditions" ) ); + dvDTO.setConditions(parseText(xmlr, "conditions")); } else if (xmlr.getLocalName().equals("disclaimer")) { - dvDTO.setDisclaimer( parseText( xmlr, "disclaimer" ) ); + dvDTO.setDisclaimer(parseText(xmlr, "disclaimer")); } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("useStmt")) return; + if (xmlr.getLocalName().equals("useStmt")) + return; } } } - /** - * Separate the versionNumber into two parts - before the first '.' - * is the versionNumber, and after is the minorVersionNumber. - * If no minorVersionNumber exists, set to "0". - * @param dvDTO - * @param versionNumber - */ - private void parseVersionNumber(DatasetVersionDTO dvDTO, String versionNumber) { - int firstIndex = versionNumber.indexOf('.'); + + /** + * Separate the versionNumber into two parts - before the first '.' is the versionNumber, and after is the + * minorVersionNumber. If no minorVersionNumber exists, set to "0". + * + * @param dvDTO + * @param versionNumber + */ + private void parseVersionNumber(final DatasetVersionDTO dvDTO, final String versionNumber) { + final int firstIndex = versionNumber.indexOf('.'); if (firstIndex == -1) { dvDTO.setVersionNumber(Long.parseLong(versionNumber)); dvDTO.setMinorVersionNumber("0"); @@ -1092,61 +1187,63 @@ private void parseVersionNumber(DatasetVersionDTO dvDTO, String versionNumber) { dvDTO.setVersionNumber(Long.parseLong(versionNumber.substring(0, firstIndex - 1))); dvDTO.setMinorVersionNumber(versionNumber.substring(firstIndex + 1)); } - } - - private void processSerStmt(XMLStreamReader xmlr, MetadataBlockDTO citation) throws XMLStreamException { - FieldDTO seriesName=null; - FieldDTO seriesInformation=null; - for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { + + private void processSerStmt(final XMLStreamReader xmlr, final MetadataBlockDTO citation) throws XMLStreamException { + FieldDTO seriesName = null; + FieldDTO seriesInformation = null; + for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("serName")) { - seriesName = FieldDTO.createPrimitiveFieldDTO("seriesName", parseText(xmlr)); - + seriesName = FieldDTO.createPrimitiveFieldDTO("seriesName", parseText(xmlr)); + } else if (xmlr.getLocalName().equals("serInfo")) { - seriesInformation=FieldDTO.createPrimitiveFieldDTO("seriesInformation", parseText(xmlr) ); + seriesInformation = FieldDTO.createPrimitiveFieldDTO("seriesInformation", parseText(xmlr)); } } else if (event == XMLStreamConstants.END_ELEMENT) { if (xmlr.getLocalName().equals("serStmt")) { - citation.getFields().add(FieldDTO.createCompoundFieldDTO("series",seriesName,seriesInformation )); + citation.getFields().add(FieldDTO.createCompoundFieldDTO("series", seriesName, seriesInformation)); return; } } } } - private void processDistStmt(XMLStreamReader xmlr, MetadataBlockDTO citation) throws XMLStreamException { - List> distributors = new ArrayList<>(); - List> datasetContacts = new ArrayList<>(); + private void processDistStmt(final XMLStreamReader xmlr, final MetadataBlockDTO citation) + throws XMLStreamException { + final List> distributors = new ArrayList<>(); + final List> datasetContacts = new ArrayList<>(); for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("distrbtr")) { - HashSet set = new HashSet<>(); + final HashSet set = new HashSet<>(); addToSet(set, "distributorAbbreviation", xmlr.getAttributeValue(null, "abbr")); addToSet(set, "distributorAffiliation", xmlr.getAttributeValue(null, "affiliation")); - Map distDetails = parseCompoundText(xmlr, "distrbtr"); + final Map distDetails = parseCompoundText(xmlr, "distrbtr"); addToSet(set, "distributorName", distDetails.get("name")); addToSet(set, "distributorURL", distDetails.get("url")); addToSet(set, "distributorLogoURL", distDetails.get("logo")); distributors.add(set); } else if (xmlr.getLocalName().equals("contact")) { - HashSet set = new HashSet<>(); + final HashSet set = new HashSet<>(); addToSet(set, "datasetContactEmail", xmlr.getAttributeValue(null, "email")); addToSet(set, "datasetContactAffiliation", xmlr.getAttributeValue(null, "affiliation")); addToSet(set, "datasetContactName", parseText(xmlr)); datasetContacts.add(set); } else if (xmlr.getLocalName().equals("depositr")) { - Map depDetails = parseCompoundText(xmlr, "depositr"); + final Map depDetails = parseCompoundText(xmlr, "depositr"); citation.getFields().add(FieldDTO.createPrimitiveFieldDTO("depositor", depDetails.get("name"))); } else if (xmlr.getLocalName().equals("depDate")) { - citation.getFields().add(FieldDTO.createPrimitiveFieldDTO("dateOfDeposit", parseDate(xmlr, "depDate"))); + citation.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("dateOfDeposit", parseDate(xmlr, "depDate"))); } else if (xmlr.getLocalName().equals("distDate")) { - citation.getFields().add(FieldDTO.createPrimitiveFieldDTO("distributionDate", parseDate(xmlr, "distDate"))); + citation.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("distributionDate", parseDate(xmlr, "distDate"))); } } else if (event == XMLStreamConstants.END_ELEMENT) { @@ -1162,58 +1259,69 @@ private void processDistStmt(XMLStreamReader xmlr, MetadataBlockDTO citation) th } } } - private void processProdStmt(XMLStreamReader xmlr, MetadataBlockDTO citation) throws XMLStreamException { - List> producers = new ArrayList<>(); - List> grants = new ArrayList<>(); - List> software = new ArrayList<>(); + + private void processProdStmt(final XMLStreamReader xmlr, final MetadataBlockDTO citation) + throws XMLStreamException { + final List> producers = new ArrayList<>(); + final List> grants = new ArrayList<>(); + final List> software = new ArrayList<>(); + final List> fundAg = new ArrayList<>(); for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("producer")) { - HashSet set = new HashSet<>(); - addToSet(set,"producerAbbreviation", xmlr.getAttributeValue(null, "abbr")); - addToSet(set,"producerAffiliation", xmlr.getAttributeValue(null, "affiliation")); - - Map prodDetails = parseCompoundText(xmlr, "producer"); - addToSet(set,"producerName", prodDetails.get("name")); - addToSet(set,"producerURL", prodDetails.get("url" )); - addToSet(set,"producerLogoURL", prodDetails.get("logo")); + final HashSet set = new HashSet<>(); + addToSet(set, "producerAbbreviation", xmlr.getAttributeValue(null, "abbr")); + addToSet(set, "producerAffiliation", xmlr.getAttributeValue(null, "affiliation")); + + final Map prodDetails = parseCompoundText(xmlr, "producer"); + addToSet(set, "producerName", prodDetails.get("name")); + addToSet(set, "producerURL", prodDetails.get("url")); + addToSet(set, "producerLogoURL", prodDetails.get("logo")); if (!set.isEmpty()) producers.add(set); } else if (xmlr.getLocalName().equals("prodDate")) { - citation.getFields().add(FieldDTO.createPrimitiveFieldDTO("productionDate", parseDate(xmlr, "prodDate"))); + citation.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("productionDate", parseDate(xmlr, "prodDate"))); } else if (xmlr.getLocalName().equals("prodPlac")) { - citation.getFields().add(FieldDTO.createPrimitiveFieldDTO("productionPlace", parseDate(xmlr, "prodPlac"))); + citation.getFields() + .add(FieldDTO.createPrimitiveFieldDTO("productionPlace", parseDate(xmlr, "prodPlac"))); } else if (xmlr.getLocalName().equals("software")) { - HashSet set = new HashSet<>(); - addToSet(set,"softwareVersion", xmlr.getAttributeValue(null, "version")); - addToSet(set,"softwareName", xmlr.getAttributeValue(null, "version")); + final HashSet set = new HashSet<>(); + addToSet(set, "softwareVersion", xmlr.getAttributeValue(null, "version")); + // XXX: #50 - Fix mapping for Software Name + addToSet(set, "softwareName", parseText(xmlr)); if (!set.isEmpty()) { software.add(set); } - - //TODO: ask Gustavo "fundAg"?TO } else if (xmlr.getLocalName().equals("fundAg")) { - // save this in contributorName - member of compoundFieldContributor - // metadata.setFundingAgency( parseText(xmlr) ); + // XXX: #45 - Map Funding Agency to Grant Agency + final HashSet set = new HashSet<>(); + addToSet(set, "grantNumberAgency", parseText(xmlr)); + addToSet(set, "grantNumberValue", ""); + if (!set.isEmpty()) { + fundAg.add(set); + } } else if (xmlr.getLocalName().equals("grantNo")) { - HashSet set = new HashSet<>(); - addToSet(set,"grantNumberAgency", xmlr.getAttributeValue(null, "agency")); - addToSet(set,"grantNumberValue", parseText(xmlr)); - if (!set.isEmpty()){ + final HashSet set = new HashSet<>(); + addToSet(set, "grantNumberAgency", xmlr.getAttributeValue(null, "agency")); + addToSet(set, "grantNumberValue", parseText(xmlr)); + if (!set.isEmpty()) { grants.add(set); } - } } else if (event == XMLStreamConstants.END_ELEMENT) { if (xmlr.getLocalName().equals("prodStmt")) { - if (software.size()>0) { + if (software.size() > 0) { citation.addField(FieldDTO.createMultipleCompoundFieldDTO("software", software)); } - if (grants.size()>0) { + if (grants.size() > 0) { citation.addField(FieldDTO.createMultipleCompoundFieldDTO("grantNumber", grants)); - } - if (producers.size()>0) { + } + if (fundAg.size() > 0) { + citation.addField(FieldDTO.createMultipleCompoundFieldDTO("grantNumber", fundAg)); + } + if (producers.size() > 0) { citation.getFields().add(FieldDTO.createMultipleCompoundFieldDTO("producer", producers)); } return; @@ -1221,39 +1329,40 @@ private void processProdStmt(XMLStreamReader xmlr, MetadataBlockDTO citation) th } } } - - private void processTitlStmt(XMLStreamReader xmlr, DatasetDTO datasetDTO) throws XMLStreamException, ImportException { - MetadataBlockDTO citation = datasetDTO.getDatasetVersion().getMetadataBlocks().get("citation"); - List> otherIds = new ArrayList<>(); - - for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { + + private void processTitlStmt(final XMLStreamReader xmlr, final DatasetDTO datasetDTO) + throws XMLStreamException, ImportException { + final MetadataBlockDTO citation = datasetDTO.getDatasetVersion().getMetadataBlocks().get("citation"); + final List> otherIds = new ArrayList<>(); + + for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("titl")) { - FieldDTO field = FieldDTO.createPrimitiveFieldDTO("title", parseText(xmlr)); + final FieldDTO field = FieldDTO.createPrimitiveFieldDTO("title", parseText(xmlr)); citation.getFields().add(field); } else if (xmlr.getLocalName().equals("subTitl")) { - FieldDTO field = FieldDTO.createPrimitiveFieldDTO("subtitle", parseText(xmlr)); - citation.getFields().add(field); + final FieldDTO field = FieldDTO.createPrimitiveFieldDTO("subtitle", parseText(xmlr)); + citation.getFields().add(field); } else if (xmlr.getLocalName().equals("altTitl")) { - FieldDTO field = FieldDTO.createPrimitiveFieldDTO("alternativeTitle", parseText(xmlr)); - citation.getFields().add(field); + final FieldDTO field = FieldDTO.createPrimitiveFieldDTO("alternativeTitle", parseText(xmlr)); + citation.getFields().add(field); } else if (xmlr.getLocalName().equals("IDNo")) { - if ( AGENCY_HANDLE.equals( xmlr.getAttributeValue(null, "agency") ) ) { - parseStudyIdHandle( parseText(xmlr), datasetDTO ); - } else if ( AGENCY_DOI.equals( xmlr.getAttributeValue(null, "agency") ) ) { - parseStudyIdDOI( parseText(xmlr), datasetDTO ); + if (AGENCY_HANDLE.equals(xmlr.getAttributeValue(null, "agency"))) { + parseStudyIdHandle(parseText(xmlr), datasetDTO); + } else if (AGENCY_DOI.equals(xmlr.getAttributeValue(null, "agency"))) { + parseStudyIdDOI(parseText(xmlr), datasetDTO); } else { - HashSet set = new HashSet<>(); - addToSet(set,"otherIdAgency", xmlr.getAttributeValue(null, "agency")); - addToSet(set,"otherIdValue", parseText(xmlr)); - if(!set.isEmpty()){ + final HashSet set = new HashSet<>(); + addToSet(set, "otherIdAgency", xmlr.getAttributeValue(null, "agency")); + addToSet(set, "otherIdValue", parseText(xmlr)); + if (!set.isEmpty()) { otherIds.add(set); } } } } else if (event == XMLStreamConstants.END_ELEMENT) { if (xmlr.getLocalName().equals("titlStmt")) { - if (otherIds.size()>0) { + if (otherIds.size() > 0) { citation.addField(FieldDTO.createMultipleCompoundFieldDTO("otherId", otherIds)); } return; @@ -1261,70 +1370,78 @@ private void processTitlStmt(XMLStreamReader xmlr, DatasetDTO datasetDTO) throws } } } - private void processRspStmt(XMLStreamReader xmlr, MetadataBlockDTO citation) throws XMLStreamException { - - List> authors = new ArrayList<>(); + + private void processRspStmt(final XMLStreamReader xmlr, final MetadataBlockDTO citation) throws XMLStreamException { + + final List> authors = new ArrayList<>(); for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("AuthEnty")) { - HashSet set = new HashSet<>(); - addToSet(set,"authorAffiliation", xmlr.getAttributeValue(null, "affiliation")); - addToSet(set,"authorName", parseText(xmlr)); + final HashSet set = new HashSet<>(); + addToSet(set, "authorAffiliation", xmlr.getAttributeValue(null, "affiliation")); + addToSet(set, "authorName", parseText(xmlr)); if (!set.isEmpty()) { authors.add(set); } } } else if (event == XMLStreamConstants.END_ELEMENT) { if (xmlr.getLocalName().equals("rspStmt")) { - if (authors.size()>0) { - FieldDTO author = FieldDTO.createMultipleCompoundFieldDTO("author", authors); + if (authors.size() > 0) { + final FieldDTO author = FieldDTO.createMultipleCompoundFieldDTO("author", authors); citation.getFields().add(author); } - + return; } } } } - private Map parseCompoundText (XMLStreamReader xmlr, String endTag) throws XMLStreamException { - Map returnMap = new HashMap(); + + private Map parseCompoundText(final XMLStreamReader xmlr, final String endTag) + throws XMLStreamException { + final Map returnMap = new HashMap<>(); String text = ""; while (true) { - int event = xmlr.next(); + final int event = xmlr.next(); if (event == XMLStreamConstants.CHARACTERS) { - if (text != "") { text += "\n";} - text += xmlr.getText().trim().replace('\n',' '); + if (text != "") { + text += "\n"; + } + text += xmlr.getText().trim().replace('\n', ' '); } else if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("ExtLink")) { - String mapKey = ("image".equalsIgnoreCase( xmlr.getAttributeValue(null, "role") ) || "logo".equalsIgnoreCase(xmlr.getAttributeValue(null, "title")))? "logo" : "url"; - returnMap.put( mapKey, xmlr.getAttributeValue(null, "URI") ); + final String mapKey = ("image".equalsIgnoreCase(xmlr.getAttributeValue(null, "role")) + || "logo".equalsIgnoreCase(xmlr.getAttributeValue(null, "title"))) ? "logo" : "url"; + returnMap.put(mapKey, xmlr.getAttributeValue(null, "URI")); parseText(xmlr, "ExtLink"); // this line effectively just skips though until the end of the tag } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals(endTag)) break; + if (xmlr.getLocalName().equals(endTag)) + break; } } - returnMap.put( "name", text ); + returnMap.put("name", text); return returnMap; } - - private String parseText(XMLStreamReader xmlr, String endTag) throws XMLStreamException { - return (String) parseTextNew(xmlr,endTag); - } - - - private Object parseTextNew(XMLStreamReader xmlr, String endTag) throws XMLStreamException { + + private String parseText(final XMLStreamReader xmlr, final String endTag) throws XMLStreamException { + return (String) parseTextNew(xmlr, endTag); + } + + private Object parseTextNew(final XMLStreamReader xmlr, final String endTag) throws XMLStreamException { String returnString = ""; Map returnMap = null; while (true) { - if (!returnString.equals("")) { returnString += "\n";} - int event = xmlr.next(); + if (!returnString.equals("")) { + returnString += "\n"; + } + final int event = xmlr.next(); if (event == XMLStreamConstants.CHARACTERS) { - returnString += xmlr.getText().trim().replace('\n',' '); - } else if (event == XMLStreamConstants.START_ELEMENT) { + returnString += xmlr.getText().trim().replace('\n', ' '); + } else if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("p")) { returnString += "

" + parseText(xmlr, "p") + "

"; } else if (xmlr.getLocalName().equals("emph")) { @@ -1332,75 +1449,81 @@ private Object parseTextNew(XMLStreamReader xmlr, String endTag) throws XMLStrea } else if (xmlr.getLocalName().equals("hi")) { returnString += "" + parseText(xmlr, "hi") + ""; } else if (xmlr.getLocalName().equals("ExtLink")) { - String uri = xmlr.getAttributeValue(null, "URI"); - String text = parseText(xmlr, "ExtLink").trim(); - returnString += "" + ( StringUtil.isEmpty(text) ? uri : text) + ""; + final String uri = xmlr.getAttributeValue(null, "URI"); + final String text = parseText(xmlr, "ExtLink").trim(); + returnString += "" + (StringUtil.isEmpty(text) ? uri : text) + ""; } else if (xmlr.getLocalName().equals("list")) { returnString += parseText_list(xmlr); } else if (xmlr.getLocalName().equals("citation")) { - if (SOURCE_DVN_3_0.equals(xmlr.getAttributeValue(null, "source")) ) { + if (SOURCE_DVN_3_0.equals(xmlr.getAttributeValue(null, "source"))) { returnMap = parseDVNCitation(xmlr); } else { returnString += parseText_citation(xmlr); } } else { - throw new EJBException("ERROR occurred in mapDDI (parseText): tag not yet supported: <" + xmlr.getLocalName() + ">" ); + throw new EJBException( + "ERROR occurred in mapDDI (parseText): tag not yet supported: <" + xmlr.getLocalName() + ">"); } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals(endTag)) break; + if (xmlr.getLocalName().equals(endTag)) + break; } } - + if (returnMap != null) { // this is one of our new citation areas for DVN3.0 return returnMap; } - + // otherwise it's a standard section and just return the String like we always did return returnString.trim(); } - - private String parseNoteByType(XMLStreamReader xmlr, String type) throws XMLStreamException { + + private String parseNoteByType(final XMLStreamReader xmlr, final String type) throws XMLStreamException { if (type.equalsIgnoreCase(xmlr.getAttributeValue(null, "type"))) { return parseText(xmlr); } else { return null; } } - private String parseText_list (XMLStreamReader xmlr) throws XMLStreamException { + + private String parseText_list(final XMLStreamReader xmlr) throws XMLStreamException { String listString = null; String listCloseTag = null; // check type - String listType = xmlr.getAttributeValue(null, "type"); - if ("bulleted".equals(listType) ){ + final String listType = xmlr.getAttributeValue(null, "type"); + if ("bulleted".equals(listType)) { listString = "
    \n"; listCloseTag = "
"; - } else if ("ordered".equals(listType) ) { + } else if ("ordered".equals(listType)) { listString = "
    \n"; listCloseTag = "
"; } else { // this includes the default list type of "simple" - throw new EJBException("ERROR occurred in mapDDI (parseText): ListType of types other than {bulleted, ordered} not currently supported."); + throw new EJBException( + "ERROR occurred in mapDDI (parseText): ListType of types other than {bulleted, ordered} not currently supported."); } while (true) { - int event = xmlr.next(); + final int event = xmlr.next(); if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("itm")) { - listString += "
  • " + parseText(xmlr,"itm") + "
  • \n"; + listString += "
  • " + parseText(xmlr, "itm") + "
  • \n"; } else { - throw new EJBException("ERROR occurred in mapDDI (parseText): ListType does not currently supported contained LabelType."); + throw new EJBException( + "ERROR occurred in mapDDI (parseText): ListType does not currently supported contained LabelType."); } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("list")) break; + if (xmlr.getLocalName().equals("list")) + break; } } return (listString + listCloseTag); } - private String parseText_citation (XMLStreamReader xmlr) throws XMLStreamException { + private String parseText_citation(final XMLStreamReader xmlr) throws XMLStreamException { String citation = ""; boolean addHoldings = false; String holdings = ""; @@ -1416,20 +1539,21 @@ private String parseText_citation (XMLStreamReader xmlr) throws XMLStreamExcepti citation += parseText(xmlr); } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("titlStmt")) break; + if (xmlr.getLocalName().equals("titlStmt")) + break; } } } else if (xmlr.getLocalName().equals("holdings")) { - String uri = xmlr.getAttributeValue(null, "URI"); - String holdingsText = parseText(xmlr); + final String uri = xmlr.getAttributeValue(null, "URI"); + final String holdingsText = parseText(xmlr); - if ( !StringUtil.isEmpty(uri) || !StringUtil.isEmpty(holdingsText)) { + if (!StringUtil.isEmpty(uri) || !StringUtil.isEmpty(holdingsText)) { holdings += addHoldings ? ", " : ""; addHoldings = true; - if ( StringUtil.isEmpty(uri) ) { + if (StringUtil.isEmpty(uri)) { holdings += holdingsText; - } else if ( StringUtil.isEmpty(holdingsText) ) { + } else if (StringUtil.isEmpty(holdingsText)) { holdings += "" + uri + ""; } else { // both uri and text have values @@ -1438,7 +1562,8 @@ private String parseText_citation (XMLStreamReader xmlr) throws XMLStreamExcepti } } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("citation")) break; + if (xmlr.getLocalName().equals("citation")) + break; } } @@ -1448,157 +1573,154 @@ private String parseText_citation (XMLStreamReader xmlr) throws XMLStreamExcepti return citation; } - - private String parseUNF(String unfString) { + + private String parseUNF(final String unfString) { if (unfString.indexOf("UNF:") != -1) { - return unfString.substring( unfString.indexOf("UNF:") ); + return unfString.substring(unfString.indexOf("UNF:")); } else { return null; } } - - private Map parseDVNCitation(XMLStreamReader xmlr) throws XMLStreamException { - Map returnValues = new HashMap(); - + + private Map parseDVNCitation(final XMLStreamReader xmlr) throws XMLStreamException { + final Map returnValues = new HashMap(); + while (true) { - int event = xmlr.next(); + final int event = xmlr.next(); if (event == XMLStreamConstants.START_ELEMENT) { - if (xmlr.getLocalName().equals("IDNo")) { - returnValues.put("idType", xmlr.getAttributeValue(null, "agency") ); - returnValues.put("idNumber", parseText(xmlr) ); - } - else if (xmlr.getLocalName().equals("biblCit")) { - returnValues.put("text", parseText(xmlr) ); - } - else if (xmlr.getLocalName().equals("holdings")) { - returnValues.put("url", xmlr.getAttributeValue(null, "URI") ); - } - else if (xmlr.getLocalName().equals("notes")) { - if (NOTE_TYPE_REPLICATION_FOR.equals(xmlr.getAttributeValue(null, "type")) ) { + if (xmlr.getLocalName().equals("IDNo")) { + returnValues.put("idType", xmlr.getAttributeValue(null, "agency")); + returnValues.put("idNumber", parseText(xmlr)); + } else if (xmlr.getLocalName().equals("biblCit")) { + returnValues.put("text", parseText(xmlr)); + } else if (xmlr.getLocalName().equals("holdings")) { + returnValues.put("url", xmlr.getAttributeValue(null, "URI")); + } else if (xmlr.getLocalName().equals("notes")) { + if (NOTE_TYPE_REPLICATION_FOR.equals(xmlr.getAttributeValue(null, "type"))) { returnValues.put("replicationData", new Boolean(true)); } } } else if (event == XMLStreamConstants.END_ELEMENT) { - if (xmlr.getLocalName().equals("citation")) break; + if (xmlr.getLocalName().equals("citation")) + break; } - } - + } + return returnValues; - } - - private void parseStudyIdHandle(String _id, DatasetDTO datasetDTO) { - - int index1 = _id.indexOf(':'); - int index2 = _id.indexOf('/'); - if (index1==-1) { - throw new EJBException("Error parsing (Handle) IdNo: "+_id+". ':' not found in string"); + } + + private void parseStudyIdHandle(final String _id, final DatasetDTO datasetDTO) { + + final int index1 = _id.indexOf(':'); + final int index2 = _id.indexOf('/'); + if (index1 == -1) { + throw new EJBException("Error parsing (Handle) IdNo: " + _id + ". ':' not found in string"); } else { - datasetDTO.setProtocol(_id.substring(0,index1)); + datasetDTO.setProtocol(_id.substring(0, index1)); } if (index2 == -1) { - throw new EJBException("Error parsing (Handle) IdNo: "+_id+". '/' not found in string"); + throw new EJBException("Error parsing (Handle) IdNo: " + _id + ". '/' not found in string"); } else { - datasetDTO.setAuthority(_id.substring(index1+1, index2)); + datasetDTO.setAuthority(_id.substring(index1 + 1, index2)); } datasetDTO.setDoiSeparator("/"); datasetDTO.setProtocol("hdl"); - datasetDTO.setIdentifier(_id.substring(index2+1)); + datasetDTO.setIdentifier(_id.substring(index2 + 1)); } - private void parseStudyIdDOI(String _id, DatasetDTO datasetDTO) throws ImportException{ - int index1 = _id.indexOf(':'); - int index2 = _id.lastIndexOf('/'); - if (index1==-1) { - throw new EJBException("Error parsing (DOI) IdNo: "+_id+". ':' not found in string"); - } - + private void parseStudyIdDOI(final String _id, final DatasetDTO datasetDTO) throws ImportException { + final int index1 = _id.indexOf(':'); + final int index2 = _id.lastIndexOf('/'); + if (index1 == -1) { + throw new EJBException("Error parsing (DOI) IdNo: " + _id + ". ':' not found in string"); + } + if (index2 == -1) { - throw new ImportException("Error parsing (DOI) IdNo: "+_id+". '/' not found in string"); + throw new ImportException("Error parsing (DOI) IdNo: " + _id + ". '/' not found in string"); } else { - datasetDTO.setAuthority(_id.substring(index1+1, index2)); + datasetDTO.setAuthority(_id.substring(index1 + 1, index2)); } datasetDTO.setProtocol("doi"); datasetDTO.setDoiSeparator("/"); - - datasetDTO.setIdentifier(_id.substring(index2+1)); + + datasetDTO.setIdentifier(_id.substring(index2 + 1)); } + // Helper methods - private MetadataBlockDTO getCitation(DatasetVersionDTO dvDTO) { + private MetadataBlockDTO getCitation(final DatasetVersionDTO dvDTO) { return dvDTO.getMetadataBlocks().get("citation"); } - - private MetadataBlockDTO getGeospatial(DatasetVersionDTO dvDTO) { + + private MetadataBlockDTO getGeospatial(final DatasetVersionDTO dvDTO) { return dvDTO.getMetadataBlocks().get("geospatial"); } - - private MetadataBlockDTO getSocialScience(DatasetVersionDTO dvDTO) { + + private MetadataBlockDTO getSocialScience(final DatasetVersionDTO dvDTO) { return dvDTO.getMetadataBlocks().get("socialscience"); } - - - private void addToSet(HashSet set, String typeName, String value ) { - if (value!=null && !value.trim().isEmpty()) { + + private void addToSet(final HashSet set, final String typeName, final String value) { + if (value != null && !value.trim().isEmpty()) { set.add(FieldDTO.createPrimitiveFieldDTO(typeName, value)); } } - - private void processOtherMat(XMLStreamReader xmlr, DatasetDTO datasetDTO, Map filesMap) throws XMLStreamException { - FileMetadataDTO fmdDTO = new FileMetadataDTO(); - + + private void processOtherMat(final XMLStreamReader xmlr, final DatasetDTO datasetDTO, final Map filesMap) + throws XMLStreamException { + final FileMetadataDTO fmdDTO = new FileMetadataDTO(); + if (datasetDTO.getDatasetVersion().getFileMetadatas() == null) { datasetDTO.getDatasetVersion().setFileMetadatas(new ArrayList<>()); } datasetDTO.getDatasetVersion().getFileMetadatas().add(fmdDTO); - DataFileDTO dfDTO = new DataFileDTO(); - //if (datasetDTO.getDataFiles() == null) { - // datasetDTO.setDataFiles(new ArrayList<>()); - //} - //datasetDTO.getDataFiles().add(dfDTO); - - dfDTO.setStorageIdentifier( xmlr.getAttributeValue(null, "URI")); - fmdDTO.setDataFile(dfDTO); + final DataFileDTO dfDTO = new DataFileDTO(); + // if (datasetDTO.getDataFiles() == null) { + // datasetDTO.setDataFiles(new ArrayList<>()); + // } + // datasetDTO.getDataFiles().add(dfDTO); + dfDTO.setStorageIdentifier(xmlr.getAttributeValue(null, "URI")); + fmdDTO.setDataFile(dfDTO); // TODO: handle categories; note that multiple categories are allowed in Dataverse 4; String catName = null; String icpsrDesc = null; String icpsrId = null; - for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("labl")) { - // this is the file name: - fmdDTO.setLabel( parseText(xmlr) ); - // TODO: in DVN3 we used to make an attempt to determine the file type + // this is the file name: + fmdDTO.setLabel(parseText(xmlr)); + // TODO: in DVN3 we used to make an attempt to determine the file type // based on the file name. } else if (xmlr.getLocalName().equals("txt")) { - fmdDTO.setDescription( parseText(xmlr) ); + fmdDTO.setDescription(parseText(xmlr)); } else if (xmlr.getLocalName().equals("notes")) { - String noteType = xmlr.getAttributeValue(null, "type"); - if ("vdc:category".equalsIgnoreCase(noteType) ) { + final String noteType = xmlr.getAttributeValue(null, "type"); + if ("vdc:category".equalsIgnoreCase(noteType)) { catName = parseText(xmlr); - } else if ("icpsr:category".equalsIgnoreCase(noteType) ) { - String subjectType = xmlr.getAttributeValue(null, "subject"); + } else if ("icpsr:category".equalsIgnoreCase(noteType)) { + final String subjectType = xmlr.getAttributeValue(null, "subject"); if ("description".equalsIgnoreCase(subjectType)) { icpsrDesc = parseText(xmlr); } else if ("id".equalsIgnoreCase(subjectType)) { icpsrId = parseText(xmlr); } } else if (NOTE_TYPE_CONTENTTYPE.equalsIgnoreCase(noteType)) { - String contentType = parseText(xmlr); + final String contentType = parseText(xmlr); if (!StringUtil.isEmpty(contentType)) { dfDTO.setContentType(contentType); } } - } + } } else if (event == XMLStreamConstants.END_ELEMENT) {// if (xmlr.getLocalName().equals("otherMat")) { // post process - if (fmdDTO.getLabel() == null || fmdDTO.getLabel().trim().equals("") ) { + if (fmdDTO.getLabel() == null || fmdDTO.getLabel().trim().equals("")) { fmdDTO.setLabel("harvested file"); } @@ -1609,26 +1731,27 @@ private void processOtherMat(XMLStreamReader xmlr, DatasetDTO datasetDTO, Map fi } } - private void processFileDscr(XMLStreamReader xmlr, DatasetDTO datasetDTO, Map filesMap) throws XMLStreamException { - FileMetadataDTO fmdDTO = new FileMetadataDTO(); - + private void processFileDscr(final XMLStreamReader xmlr, final DatasetDTO datasetDTO, final Map filesMap) + throws XMLStreamException { + final FileMetadataDTO fmdDTO = new FileMetadataDTO(); + datasetDTO.getDatasetVersion().getFileMetadatas().add(fmdDTO); - //StudyFile sf = new OtherFile(studyVersion.getStudy()); // until we connect the sf and dt, we have to assume it's an other file + // StudyFile sf = new OtherFile(studyVersion.getStudy()); // until we connect the sf and dt, we have to assume + // it's an other file // as an experiment, I'm going to do it the other way around: // assume that every fileDscr is a subsettable file now, and convert them // to otherFiles later if no variables are referencing it -- L.A. - - // TabularDataFile sf = new TabularDataFile(studyVersion.getStudy()); - DataFileDTO dfDTO = new DataFileDTO(); - DataTableDTO dtDTO = new DataTableDTO(); + // TabularDataFile sf = new TabularDataFile(studyVersion.getStudy()); + final DataFileDTO dfDTO = new DataFileDTO(); + final DataTableDTO dtDTO = new DataTableDTO(); dfDTO.getDataTables().add(dtDTO); fmdDTO.setDataFile(dfDTO); datasetDTO.getDataFiles().add(dfDTO); - + // EMK TODO: ask Gustavo about this property - //dfDTO.setFileSystemLocation( xmlr.getAttributeValue(null, "URI")); + // dfDTO.setFileSystemLocation( xmlr.getAttributeValue(null, "URI")); String ddiFileId = xmlr.getAttributeValue(null, "ID"); /// the following Strings are used to determine the category @@ -1640,41 +1763,39 @@ private void processFileDscr(XMLStreamReader xmlr, DatasetDTO datasetDTO, Map fi for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("fileTxt")) { - String tempDDIFileId = processFileTxt(xmlr, fmdDTO, dtDTO); + final String tempDDIFileId = processFileTxt(xmlr, fmdDTO, dtDTO); ddiFileId = ddiFileId != null ? ddiFileId : tempDDIFileId; - } - else if (xmlr.getLocalName().equals("notes")) { - String noteType = xmlr.getAttributeValue(null, "type"); - if (NOTE_TYPE_UNF.equalsIgnoreCase(noteType) ) { - String unf = parseUNF( parseText(xmlr) ); + } else if (xmlr.getLocalName().equals("notes")) { + final String noteType = xmlr.getAttributeValue(null, "type"); + if (NOTE_TYPE_UNF.equalsIgnoreCase(noteType)) { + final String unf = parseUNF(parseText(xmlr)); dfDTO.setUNF(unf); dtDTO.setUnf(unf); - } else if ("vdc:category".equalsIgnoreCase(noteType) ) { + } else if ("vdc:category".equalsIgnoreCase(noteType)) { catName = parseText(xmlr); - } else if ("icpsr:category".equalsIgnoreCase(noteType) ) { - String subjectType = xmlr.getAttributeValue(null, "subject"); + } else if ("icpsr:category".equalsIgnoreCase(noteType)) { + final String subjectType = xmlr.getAttributeValue(null, "subject"); if ("description".equalsIgnoreCase(subjectType)) { icpsrDesc = parseText(xmlr); } else if ("id".equalsIgnoreCase(subjectType)) { icpsrId = parseText(xmlr); } - } + } } } else if (event == XMLStreamConstants.END_ELEMENT) {// if (xmlr.getLocalName().equals("fileDscr")) { // post process - if (fmdDTO.getLabel() == null || fmdDTO.getLabel().trim().equals("") ) { + if (fmdDTO.getLabel() == null || fmdDTO.getLabel().trim().equals("")) { fmdDTO.setLabel("file"); } fmdDTO.setCategory(determineFileCategory(catName, icpsrDesc, icpsrId)); - if (ddiFileId != null) { - List filesMapEntry = new ArrayList(); + final List filesMapEntry = new ArrayList(); filesMapEntry.add(fmdDTO); filesMapEntry.add(dtDTO); - filesMap.put( ddiFileId, filesMapEntry); + filesMap.put(ddiFileId, filesMapEntry); } return; @@ -1682,13 +1803,13 @@ else if (xmlr.getLocalName().equals("notes")) { } } } - - private String determineFileCategory(String catName, String icpsrDesc, String icpsrId) { + + private String determineFileCategory(String catName, final String icpsrDesc, final String icpsrId) { if (catName == null) { catName = icpsrDesc; if (catName != null) { - if (icpsrId != null && !icpsrId.trim().equals("") ) { + if (icpsrId != null && !icpsrId.trim().equals("")) { catName = icpsrId + ". " + catName; } } @@ -1696,40 +1817,44 @@ private String determineFileCategory(String catName, String icpsrDesc, String ic return (catName != null ? catName : ""); } - /** + + /** * sets fmdDTO.label, fmdDTO.description, fmdDTO.studyfile.subsettableFileType + * * @param xmlr * @param fmdDTO * @param dtDTO * @return fmdDTO.label (ddiFileId) - * @throws XMLStreamException + * @throws XMLStreamException */ - private String processFileTxt(XMLStreamReader xmlr, FileMetadataDTO fmdDTO, DataTableDTO dtDTO) throws XMLStreamException { + private String processFileTxt(final XMLStreamReader xmlr, final FileMetadataDTO fmdDTO, final DataTableDTO dtDTO) + throws XMLStreamException { String ddiFileId = null; - DataFileDTO dfDTO = fmdDTO.getDataFile(); + final DataFileDTO dfDTO = fmdDTO.getDataFile(); for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("fileName")) { ddiFileId = xmlr.getAttributeValue(null, "ID"); - fmdDTO.setLabel( parseText(xmlr) ); - /*sf.setFileType( FileUtil.determineFileType( fmdDTO.getLabel() ) );*/ + fmdDTO.setLabel(parseText(xmlr)); + /* sf.setFileType( FileUtil.determineFileType( fmdDTO.getLabel() ) ); */ } else if (xmlr.getLocalName().equals("fileType")) { - String contentType = parseText(xmlr); + final String contentType = parseText(xmlr); if (!StringUtil.isEmpty(contentType)) { dfDTO.setContentType(contentType); } } else if (xmlr.getLocalName().equals("fileCont")) { - fmdDTO.setDescription( parseText(xmlr) ); - } else if (xmlr.getLocalName().equals("dimensns")) processDimensns(xmlr, dtDTO); + fmdDTO.setDescription(parseText(xmlr)); + } else if (xmlr.getLocalName().equals("dimensns")) + processDimensns(xmlr, dtDTO); } else if (event == XMLStreamConstants.END_ELEMENT) { if (xmlr.getLocalName().equals("fileTxt")) { - // If we still don't know the content type of this file + // If we still don't know the content type of this file // (i.e., if there was no "" tag explicitly specifying - // the type), we can try and make an educated guess. We already - // now that this is a subsettable file. And now that the - // "" section has been parsed, we can further + // the type), we can try and make an educated guess. We already + // now that this is a subsettable file. And now that the + // "" section has been parsed, we can further // decide if it's a tab, or a fixed field: if (StringUtil.isEmpty(dfDTO.getContentType())) { String subsettableFileType = "text/tab-separated-values"; @@ -1737,43 +1862,47 @@ private String processFileTxt(XMLStreamReader xmlr, FileMetadataDTO fmdDTO, Data subsettableFileType = "text/x-fixed-field"; } } - //EMK TODO: ask Gustavo & Leonid what should be used here instead of setFileType + // EMK TODO: ask Gustavo & Leonid what should be used here instead of setFileType // dfDTO.setFileType( subsettableFileType ); - + return ddiFileId; } } } return ddiFileId; - } - - /** - * Set dtDTO. caseQuantity, varQuantity, recordsPerCase - * @param xmlr - * @param dtDTO - * @throws XMLStreamException - */ - private void processDimensns(XMLStreamReader xmlr, DataTableDTO dtDTO) throws XMLStreamException { + } + + /** + * Set dtDTO. caseQuantity, varQuantity, recordsPerCase + * + * @param xmlr + * @param dtDTO + * @throws XMLStreamException + */ + private void processDimensns(final XMLStreamReader xmlr, final DataTableDTO dtDTO) throws XMLStreamException { for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("caseQnty")) { try { - dtDTO.setCaseQuantity( new Long( parseText(xmlr) ) ); - } catch (NumberFormatException ex) {} + dtDTO.setCaseQuantity(new Long(parseText(xmlr))); + } catch (final NumberFormatException ex) { + } } else if (xmlr.getLocalName().equals("varQnty")) { - try{ - dtDTO.setVarQuantity( new Long( parseText(xmlr) ) ); - } catch (NumberFormatException ex) {} + try { + dtDTO.setVarQuantity(new Long(parseText(xmlr))); + } catch (final NumberFormatException ex) { + } } else if (xmlr.getLocalName().equals("recPrCas")) { try { - dtDTO.setRecordsPerCase( new Long( parseText(xmlr) ) ); - } catch (NumberFormatException ex) {} + dtDTO.setRecordsPerCase(new Long(parseText(xmlr))); + } catch (final NumberFormatException ex) { + } } } else if (event == XMLStreamConstants.END_ELEMENT) {// - if (xmlr.getLocalName().equals("dimensns")) return; + if (xmlr.getLocalName().equals("dimensns")) + return; } } } - -} +} diff --git a/src/main/java/edu/harvard/iq/dataverse/export/ddi/DdiExportUtil.java b/src/main/java/edu/harvard/iq/dataverse/export/ddi/DdiExportUtil.java index 4dee2a27f66..6a350c7533a 100644 --- a/src/main/java/edu/harvard/iq/dataverse/export/ddi/DdiExportUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/export/ddi/DdiExportUtil.java @@ -1,23 +1,5 @@ package edu.harvard.iq.dataverse.export.ddi; -import com.google.gson.Gson; -import edu.harvard.iq.dataverse.DataFile; -import edu.harvard.iq.dataverse.DataTable; -import edu.harvard.iq.dataverse.Dataset; -import edu.harvard.iq.dataverse.DatasetFieldConstant; -import edu.harvard.iq.dataverse.DatasetVersion; -import edu.harvard.iq.dataverse.FileMetadata; -import edu.harvard.iq.dataverse.api.dto.DataVariableDTO; -import edu.harvard.iq.dataverse.api.dto.DatasetDTO; -import edu.harvard.iq.dataverse.api.dto.DatasetVersionDTO; -import edu.harvard.iq.dataverse.api.dto.FieldDTO; -import edu.harvard.iq.dataverse.api.dto.FileDTO; -import edu.harvard.iq.dataverse.api.dto.FileMetadataDTO; -import edu.harvard.iq.dataverse.api.dto.MetadataBlockDTO; -import edu.harvard.iq.dataverse.datavariable.DataVariable; -import edu.harvard.iq.dataverse.datavariable.SummaryStatistic; -import edu.harvard.iq.dataverse.datavariable.VariableCategory; -import edu.harvard.iq.dataverse.datavariable.VariableRange; import static edu.harvard.iq.dataverse.export.DDIExportServiceBean.LEVEL_FILE; import static edu.harvard.iq.dataverse.export.DDIExportServiceBean.NOTE_SUBJECT_TAG; import static edu.harvard.iq.dataverse.export.DDIExportServiceBean.NOTE_SUBJECT_UNF; @@ -25,17 +7,14 @@ import static edu.harvard.iq.dataverse.export.DDIExportServiceBean.NOTE_TYPE_UNF; import static edu.harvard.iq.dataverse.util.SystemConfig.FQDN; import static edu.harvard.iq.dataverse.util.SystemConfig.SITE_URL; -import edu.harvard.iq.dataverse.util.json.JsonUtil; -import edu.harvard.iq.dataverse.util.xml.XmlPrinter; + import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.file.Files; import java.nio.file.Paths; -import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -43,51 +22,73 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; + import javax.json.JsonObject; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; +import com.google.gson.Gson; + +import edu.harvard.iq.dataverse.DataFile; +import edu.harvard.iq.dataverse.DataTable; +import edu.harvard.iq.dataverse.DatasetFieldConstant; +import edu.harvard.iq.dataverse.DatasetVersion; +import edu.harvard.iq.dataverse.FileMetadata; +import edu.harvard.iq.dataverse.api.dto.DatasetDTO; +import edu.harvard.iq.dataverse.api.dto.DatasetVersionDTO; +import edu.harvard.iq.dataverse.api.dto.FieldDTO; +import edu.harvard.iq.dataverse.api.dto.FileDTO; +import edu.harvard.iq.dataverse.api.dto.MetadataBlockDTO; +import edu.harvard.iq.dataverse.datavariable.DataVariable; +import edu.harvard.iq.dataverse.datavariable.SummaryStatistic; +import edu.harvard.iq.dataverse.datavariable.VariableCategory; +import edu.harvard.iq.dataverse.datavariable.VariableRange; +import edu.harvard.iq.dataverse.util.json.JsonUtil; +import edu.harvard.iq.dataverse.util.xml.XmlPrinter; + public class DdiExportUtil { private static final Logger logger = Logger.getLogger(DdiExportUtil.class.getCanonicalName()); - + public static final String NOTE_TYPE_CONTENTTYPE = "DATAVERSE:CONTENTTYPE"; public static final String NOTE_SUBJECT_CONTENTTYPE = "Content/MIME Type"; - public static String datasetDtoAsJson2ddi(String datasetDtoAsJson) { + public static String datasetDtoAsJson2ddi(final String datasetDtoAsJson) { logger.fine(JsonUtil.prettyPrint(datasetDtoAsJson)); - Gson gson = new Gson(); - DatasetDTO datasetDto = gson.fromJson(datasetDtoAsJson, DatasetDTO.class); + final Gson gson = new Gson(); + final DatasetDTO datasetDto = gson.fromJson(datasetDtoAsJson, DatasetDTO.class); try { return dto2ddi(datasetDto); - } catch (XMLStreamException ex) { + } catch (final XMLStreamException ex) { Logger.getLogger(DdiExportUtil.class.getName()).log(Level.SEVERE, null, ex); return null; } } - - // "short" ddi, without the "" and "/" sections: - public static void datasetJson2ddi(JsonObject datasetDtoAsJson, OutputStream outputStream) throws XMLStreamException { + + // "short" ddi, without the "" and "/" sections: + public static void datasetJson2ddi(final JsonObject datasetDtoAsJson, final OutputStream outputStream) + throws XMLStreamException { logger.fine(JsonUtil.prettyPrint(datasetDtoAsJson.toString())); - Gson gson = new Gson(); - DatasetDTO datasetDto = gson.fromJson(datasetDtoAsJson.toString(), DatasetDTO.class); + final Gson gson = new Gson(); + final DatasetDTO datasetDto = gson.fromJson(datasetDtoAsJson.toString(), DatasetDTO.class); dtoddi(datasetDto, outputStream); } - - private static String dto2ddi(DatasetDTO datasetDto) throws XMLStreamException { - OutputStream outputStream = new ByteArrayOutputStream(); + + private static String dto2ddi(final DatasetDTO datasetDto) throws XMLStreamException { + final OutputStream outputStream = new ByteArrayOutputStream(); dtoddi(datasetDto, outputStream); - String xml = outputStream.toString(); + final String xml = outputStream.toString(); return XmlPrinter.prettyPrintXml(xml); } - - private static void dtoddi(DatasetDTO datasetDto, OutputStream outputStream) throws XMLStreamException { - XMLStreamWriter xmlw = XMLOutputFactory.newInstance().createXMLStreamWriter(outputStream); + + private static void dtoddi(final DatasetDTO datasetDto, final OutputStream outputStream) throws XMLStreamException { + final 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"); + 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); createOtherMats(xmlw, datasetDto.getDatasetVersion().getFiles()); @@ -95,18 +96,19 @@ private static void dtoddi(DatasetDTO datasetDto, OutputStream outputStream) thr xmlw.flush(); } - - // "full" ddi, with the the "" and "/" sections: - public static void datasetJson2ddi(JsonObject datasetDtoAsJson, DatasetVersion version, OutputStream outputStream) throws XMLStreamException { + // "full" ddi, with the the "" and "/" sections: + public static void datasetJson2ddi(final JsonObject datasetDtoAsJson, final DatasetVersion version, + final 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); + final Gson gson = new Gson(); + final DatasetDTO datasetDto = gson.fromJson(datasetDtoAsJson.toString(), DatasetDTO.class); + + final 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"); + 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); @@ -115,135 +117,133 @@ public static void datasetJson2ddi(JsonObject datasetDtoAsJson, DatasetVersion v xmlw.writeEndElement(); // codeBook xmlw.flush(); } - - + /** - * @todo This is just a stub, copied from DDIExportServiceBean. It should - * produce valid DDI based on - * http://guides.dataverse.org/en/latest/developers/tools.html#msv but it is - * incomplete and will be worked on as part of - * https://github.com/IQSS/dataverse/issues/2579 . We'll want to reference - * the DVN 3.x code for creating a complete DDI. + * @todo This is just a stub, copied from DDIExportServiceBean. It should produce valid DDI based on + * http://guides.dataverse.org/en/latest/developers/tools.html#msv but it is incomplete and will be worked on + * as part of https://github.com/IQSS/dataverse/issues/2579 . We'll want to reference the DVN 3.x code for + * creating a complete DDI. * * @todo Rename this from "study" to "dataset". */ - private static void createStdyDscr(XMLStreamWriter xmlw, DatasetDTO datasetDto) throws XMLStreamException { - DatasetVersionDTO version = datasetDto.getDatasetVersion(); - String persistentProtocol = datasetDto.getProtocol(); + private static void createStdyDscr(final XMLStreamWriter xmlw, final DatasetDTO datasetDto) + throws XMLStreamException { + final DatasetVersionDTO version = datasetDto.getDatasetVersion(); + final String persistentProtocol = datasetDto.getProtocol(); String persistentAgency = persistentProtocol; - // The "persistentAgency" tag is used for the "agency" attribute of the - // ddi section; back in the DVN3 days we used "handle" and "DOI" + // The "persistentAgency" tag is used for the "agency" attribute of the + // ddi section; back in the DVN3 days we used "handle" and "DOI" // for the 2 supported protocols, respectively. For the sake of backward // compatibility, we should probably stick with these labels: (-- L.A. 4.5) - if ("hdl".equals(persistentAgency)) { + if ("hdl".equals(persistentAgency)) { persistentAgency = "handle"; } else if ("doi".equals(persistentAgency)) { persistentAgency = "DOI"; } - - String persistentAuthority = datasetDto.getAuthority(); - String persistentId = datasetDto.getIdentifier(); - //docDesc Block - writeDocDescElement (xmlw, datasetDto); - //stdyDesc Block + + final String persistentAuthority = datasetDto.getAuthority(); + final String persistentId = datasetDto.getIdentifier(); + // docDesc Block + writeDocDescElement(xmlw, datasetDto); + // stdyDesc Block xmlw.writeStartElement("stdyDscr"); xmlw.writeStartElement("citation"); xmlw.writeStartElement("titlStmt"); - - writeFullElement(xmlw, "titl", dto2Primitive(version, DatasetFieldConstant.title)); + + writeFullElement(xmlw, "titl", dto2Primitive(version, DatasetFieldConstant.title)); writeFullElement(xmlw, "subTitl", dto2Primitive(version, DatasetFieldConstant.subTitle)); writeFullElement(xmlw, "altTitl", dto2Primitive(version, DatasetFieldConstant.alternativeTitle)); - + xmlw.writeStartElement("IDNo"); writeAttribute(xmlw, "agency", persistentAgency); xmlw.writeCharacters(persistentProtocol + ":" + persistentAuthority + "/" + persistentId); xmlw.writeEndElement(); // IDNo - + xmlw.writeEndElement(); // titlStmt writeAuthorsElement(xmlw, version); writeProducersElement(xmlw, version); - + xmlw.writeStartElement("distStmt"); writeFullElement(xmlw, "distrbtr", datasetDto.getPublisher()); writeFullElement(xmlw, "distDate", datasetDto.getPublicationDate()); xmlw.writeEndElement(); // diststmt xmlw.writeEndElement(); // citation - //End Citation Block - - //Start Study Info Block + // End Citation Block + + // Start Study Info Block // Study Info xmlw.writeStartElement("stdyInfo"); - - writeSubjectElement(xmlw, version); //Subject and Keywords + + writeSubjectElement(xmlw, version); // Subject and Keywords writeAbstractElement(xmlw, version); // Description writeFullElement(xmlw, "notes", dto2Primitive(version, DatasetFieldConstant.notesText)); - + writeSummaryDescriptionElement(xmlw, version); writeRelPublElement(xmlw, version); writeOtherIdElement(xmlw, version); writeDistributorsElement(xmlw, version); writeContactsElement(xmlw, version); - writeFullElement(xmlw, "depositr", dto2Primitive(version, DatasetFieldConstant.depositor)); - writeFullElement(xmlw, "depDate", dto2Primitive(version, DatasetFieldConstant.dateOfDeposit)); - + writeFullElement(xmlw, "depositr", dto2Primitive(version, DatasetFieldConstant.depositor)); + writeFullElement(xmlw, "depDate", dto2Primitive(version, DatasetFieldConstant.dateOfDeposit)); + writeFullElementList(xmlw, "relMat", dto2PrimitiveList(version, DatasetFieldConstant.relatedMaterial)); writeFullElementList(xmlw, "relStdy", dto2PrimitiveList(version, DatasetFieldConstant.relatedDatasets)); writeFullElementList(xmlw, "othRefs", dto2PrimitiveList(version, DatasetFieldConstant.otherReferences)); writeSeriesElement(xmlw, version); writeSoftwareElement(xmlw, version); writeFullElementList(xmlw, "dataSrc", dto2PrimitiveList(version, DatasetFieldConstant.dataSources)); - writeFullElement(xmlw, "srcOrig", dto2Primitive(version, DatasetFieldConstant.originOfSources)); - writeFullElement(xmlw, "srcChar", dto2Primitive(version, DatasetFieldConstant.characteristicOfSources)); - writeFullElement(xmlw, "srcDocu", dto2Primitive(version, DatasetFieldConstant.accessToSources)); + writeFullElement(xmlw, "srcOrig", dto2Primitive(version, DatasetFieldConstant.originOfSources)); + writeFullElement(xmlw, "srcChar", dto2Primitive(version, DatasetFieldConstant.characteristicOfSources)); + writeFullElement(xmlw, "srcDocu", dto2Primitive(version, DatasetFieldConstant.accessToSources)); xmlw.writeEndElement(); // stdyInfo // End Info Block - - //Social Science Metadata block - + + // Social Science Metadata block + writeMethodElement(xmlw, version); - - //Terms of Use and Access - writeFullElement(xmlw, "useStmt", version.getTermsOfUse()); - writeFullElement(xmlw, "confDec", version.getConfidentialityDeclaration()); - writeFullElement(xmlw, "specPerm", version.getSpecialPermissions()); - writeFullElement(xmlw, "restrctn", version.getRestrictions()); - writeFullElement(xmlw, "citeReq", version.getCitationRequirements()); - writeFullElement(xmlw, "deposReq", version.getDepositorRequirements()); - writeFullElement(xmlw, "dataAccs", version.getTermsOfAccess()); - writeFullElement(xmlw, "accsPlac", version.getDataAccessPlace()); - writeFullElement(xmlw, "conditions", version.getConditions()); - writeFullElement(xmlw, "disclaimer", version.getDisclaimer()); - writeFullElement(xmlw, "origArch", version.getOriginalArchive()); - writeFullElement(xmlw, "avlStatus", version.getAvailabilityStatus()); - writeFullElement(xmlw, "contact", version.getContactForAccess()); - writeFullElement(xmlw, "collSize", version.getSizeOfCollection()); - writeFullElement(xmlw, "complete", version.getStudyCompletion()); - - + + // Terms of Use and Access + writeFullElement(xmlw, "useStmt", version.getTermsOfUse()); + writeFullElement(xmlw, "confDec", version.getConfidentialityDeclaration()); + writeFullElement(xmlw, "specPerm", version.getSpecialPermissions()); + writeFullElement(xmlw, "restrctn", version.getRestrictions()); + writeFullElement(xmlw, "citeReq", version.getCitationRequirements()); + writeFullElement(xmlw, "deposReq", version.getDepositorRequirements()); + writeFullElement(xmlw, "dataAccs", version.getTermsOfAccess()); + writeFullElement(xmlw, "accsPlac", version.getDataAccessPlace()); + writeFullElement(xmlw, "conditions", version.getConditions()); + writeFullElement(xmlw, "disclaimer", version.getDisclaimer()); + writeFullElement(xmlw, "origArch", version.getOriginalArchive()); + writeFullElement(xmlw, "avlStatus", version.getAvailabilityStatus()); + writeFullElement(xmlw, "contact", version.getContactForAccess()); + writeFullElement(xmlw, "collSize", version.getSizeOfCollection()); + writeFullElement(xmlw, "complete", version.getStudyCompletion()); + xmlw.writeEndElement(); // stdyDscr } - - private static void writeDocDescElement (XMLStreamWriter xmlw, DatasetDTO datasetDto) throws XMLStreamException { - DatasetVersionDTO version = datasetDto.getDatasetVersion(); - String persistentProtocol = datasetDto.getProtocol(); + + private static void writeDocDescElement(final XMLStreamWriter xmlw, final DatasetDTO datasetDto) + throws XMLStreamException { + final DatasetVersionDTO version = datasetDto.getDatasetVersion(); + final String persistentProtocol = datasetDto.getProtocol(); String persistentAgency = persistentProtocol; - // The "persistentAgency" tag is used for the "agency" attribute of the - // ddi section; back in the DVN3 days we used "handle" and "DOI" + // The "persistentAgency" tag is used for the "agency" attribute of the + // ddi section; back in the DVN3 days we used "handle" and "DOI" // for the 2 supported protocols, respectively. For the sake of backward // compatibility, we should probably stick with these labels: (-- L.A. 4.5) - if ("hdl".equals(persistentAgency)) { + if ("hdl".equals(persistentAgency)) { persistentAgency = "handle"; } else if ("doi".equals(persistentAgency)) { persistentAgency = "DOI"; } - - String persistentAuthority = datasetDto.getAuthority(); - String persistentId = datasetDto.getIdentifier(); - + + final String persistentAuthority = datasetDto.getAuthority(); + final String persistentId = datasetDto.getIdentifier(); + xmlw.writeStartElement("docDscr"); xmlw.writeStartElement("citation"); xmlw.writeStartElement("titlStmt"); @@ -251,49 +251,51 @@ private static void writeDocDescElement (XMLStreamWriter xmlw, DatasetDTO datase xmlw.writeStartElement("IDNo"); writeAttribute(xmlw, "agency", persistentAgency); xmlw.writeCharacters(persistentProtocol + ":" + persistentAuthority + "/" + persistentId); - xmlw.writeEndElement(); // IDNo + xmlw.writeEndElement(); // IDNo xmlw.writeEndElement(); // titlStmt xmlw.writeStartElement("distStmt"); writeFullElement(xmlw, "distrbtr", datasetDto.getPublisher()); writeFullElement(xmlw, "distDate", datasetDto.getPublicationDate()); - + xmlw.writeEndElement(); // diststmt writeVersionStatement(xmlw, version); xmlw.writeStartElement("biblCit"); xmlw.writeCharacters(version.getCitation()); xmlw.writeEndElement(); // biblCit - xmlw.writeEndElement(); // citation + xmlw.writeEndElement(); // citation xmlw.writeEndElement(); // docDscr - + } - - private static void writeVersionStatement(XMLStreamWriter xmlw, DatasetVersionDTO datasetVersionDTO) throws XMLStreamException{ + + private static void writeVersionStatement(final XMLStreamWriter xmlw, final DatasetVersionDTO datasetVersionDTO) + throws XMLStreamException { xmlw.writeStartElement("verStmt"); - writeAttribute(xmlw,"source","DVN"); + writeAttribute(xmlw, "source", "DVN"); xmlw.writeStartElement("version"); - writeAttribute(xmlw,"date", datasetVersionDTO.getReleaseTime().substring(0, 10)); - writeAttribute(xmlw,"type", datasetVersionDTO.getVersionState().toString()); + writeAttribute(xmlw, "date", datasetVersionDTO.getReleaseTime().substring(0, 10)); + writeAttribute(xmlw, "type", datasetVersionDTO.getVersionState().toString()); xmlw.writeCharacters(datasetVersionDTO.getVersionNumber().toString()); xmlw.writeEndElement(); // version xmlw.writeEndElement(); // verStmt } - - private static void writeSummaryDescriptionElement(XMLStreamWriter xmlw, DatasetVersionDTO datasetVersionDTO) throws XMLStreamException { + + private static void writeSummaryDescriptionElement(final XMLStreamWriter xmlw, + final DatasetVersionDTO datasetVersionDTO) throws XMLStreamException { xmlw.writeStartElement("sumDscr"); - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - String key = entry.getKey(); - MetadataBlockDTO value = entry.getValue(); + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final String key = entry.getKey(); + final MetadataBlockDTO value = entry.getValue(); if ("citation".equals(key)) { Integer per = 0; Integer coll = 0; - for (FieldDTO fieldDTO : value.getFields()) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.timePeriodCovered.equals(fieldDTO.getTypeName())) { String dateValStart = ""; String dateValEnd = ""; - for (HashSet foo : fieldDTO.getMultipleCompound()) { + for (final HashSet foo : fieldDTO.getMultipleCompound()) { per++; - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.timePeriodCoveredStart.equals(next.getTypeName())) { dateValStart = next.getSinglePrimitive(); } @@ -302,20 +304,20 @@ private static void writeSummaryDescriptionElement(XMLStreamWriter xmlw, Dataset } } if (!dateValStart.isEmpty()) { - writeDateElement(xmlw, "timePrd", "P"+ per.toString(), "start", dateValStart ); + writeDateElement(xmlw, "timePrd", "P" + per.toString(), "start", dateValStart); } if (!dateValEnd.isEmpty()) { - writeDateElement(xmlw, "timePrd", "P"+ per.toString(), "end", dateValEnd ); + writeDateElement(xmlw, "timePrd", "P" + per.toString(), "end", dateValEnd); } } } if (DatasetFieldConstant.dateOfCollection.equals(fieldDTO.getTypeName())) { String dateValStart = ""; String dateValEnd = ""; - for (HashSet foo : fieldDTO.getMultipleCompound()) { + for (final HashSet foo : fieldDTO.getMultipleCompound()) { coll++; - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.dateOfCollectionStart.equals(next.getTypeName())) { dateValStart = next.getSinglePrimitive(); } @@ -324,25 +326,25 @@ private static void writeSummaryDescriptionElement(XMLStreamWriter xmlw, Dataset } } if (!dateValStart.isEmpty()) { - writeDateElement(xmlw, "collDate", "P"+ coll.toString(), "start", dateValStart ); + writeDateElement(xmlw, "collDate", "P" + coll.toString(), "start", dateValStart); } if (!dateValEnd.isEmpty()) { - writeDateElement(xmlw, "collDate", "P"+ coll.toString(), "end", dateValEnd ); + writeDateElement(xmlw, "collDate", "P" + coll.toString(), "end", dateValEnd); } } } if (DatasetFieldConstant.kindOfData.equals(fieldDTO.getTypeName())) { - writeMultipleElement(xmlw, "dataKind", fieldDTO); + writeMultipleElement(xmlw, "dataKind", fieldDTO); } } } - - if("geospatial".equals(key)){ - for (FieldDTO fieldDTO : value.getFields()) { + + if ("geospatial".equals(key)) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.geographicCoverage.equals(fieldDTO.getTypeName())) { - for (HashSet foo : fieldDTO.getMultipleCompound()) { - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final HashSet foo : fieldDTO.getMultipleCompound()) { + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.country.equals(next.getTypeName())) { writeFullElement(xmlw, "nation", next.getSinglePrimitive()); } @@ -351,17 +353,17 @@ private static void writeSummaryDescriptionElement(XMLStreamWriter xmlw, Dataset } if (DatasetFieldConstant.state.equals(next.getTypeName())) { writeFullElement(xmlw, "geogCover", next.getSinglePrimitive()); - } + } if (DatasetFieldConstant.otherGeographicCoverage.equals(next.getTypeName())) { writeFullElement(xmlw, "geogCover", next.getSinglePrimitive()); - } + } } } } if (DatasetFieldConstant.geographicBoundingBox.equals(fieldDTO.getTypeName())) { - for (HashSet foo : fieldDTO.getMultipleCompound()) { - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final HashSet foo : fieldDTO.getMultipleCompound()) { + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.westLongitude.equals(next.getTypeName())) { writeFullElement(xmlw, "westBL", next.getSinglePrimitive()); } @@ -370,235 +372,242 @@ private static void writeSummaryDescriptionElement(XMLStreamWriter xmlw, Dataset } if (DatasetFieldConstant.northLatitude.equals(next.getTypeName())) { writeFullElement(xmlw, "northBL", next.getSinglePrimitive()); - } + } if (DatasetFieldConstant.southLatitude.equals(next.getTypeName())) { writeFullElement(xmlw, "southBL", next.getSinglePrimitive()); - } + } } } } } - writeFullElementList(xmlw, "geogUnit", dto2PrimitiveList(datasetVersionDTO, DatasetFieldConstant.geographicUnit)); + writeFullElementList(xmlw, "geogUnit", + dto2PrimitiveList(datasetVersionDTO, DatasetFieldConstant.geographicUnit)); } - if("socialscience".equals(key)){ - for (FieldDTO fieldDTO : value.getFields()) { + if ("socialscience".equals(key)) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.universe.equals(fieldDTO.getTypeName())) { writeMultipleElement(xmlw, "universe", fieldDTO); } if (DatasetFieldConstant.unitOfAnalysis.equals(fieldDTO.getTypeName())) { - writeMultipleElement(xmlw, "anlyUnit", fieldDTO); + writeMultipleElement(xmlw, "anlyUnit", fieldDTO); } - } + } } } - xmlw.writeEndElement(); //sumDscr + xmlw.writeEndElement(); // sumDscr } - - private static void writeMultipleElement(XMLStreamWriter xmlw, String element, FieldDTO fieldDTO) throws XMLStreamException { - for (String value : fieldDTO.getMultiplePrimitive()) { + + private static void writeMultipleElement(final XMLStreamWriter xmlw, final String element, final FieldDTO fieldDTO) + throws XMLStreamException { + for (final String value : fieldDTO.getMultiplePrimitive()) { writeFullElement(xmlw, element, value); } } - - private static void writeDateElement(XMLStreamWriter xmlw, String element, String cycle, String event, String dateIn) throws XMLStreamException { + + private static void writeDateElement(final XMLStreamWriter xmlw, final String element, final String cycle, + final String event, final String dateIn) throws XMLStreamException { xmlw.writeStartElement(element); - writeAttribute(xmlw, "cycle", cycle); + writeAttribute(xmlw, "cycle", cycle); writeAttribute(xmlw, "event", event); writeAttribute(xmlw, "date", dateIn); xmlw.writeCharacters(dateIn); - xmlw.writeEndElement(); + xmlw.writeEndElement(); } - - private static void writeMethodElement(XMLStreamWriter xmlw , DatasetVersionDTO version) throws XMLStreamException{ + + private static void writeMethodElement(final XMLStreamWriter xmlw, final DatasetVersionDTO version) + throws XMLStreamException { xmlw.writeStartElement("method"); xmlw.writeStartElement("dataColl"); - writeFullElement(xmlw, "timeMeth", dto2Primitive(version, DatasetFieldConstant.timeMethod)); - writeFullElement(xmlw, "dataCollector", dto2Primitive(version, DatasetFieldConstant.dataCollector)); - writeFullElement(xmlw, "collectorTraining", dto2Primitive(version, DatasetFieldConstant.collectorTraining)); - writeFullElement(xmlw, "frequenc", dto2Primitive(version, DatasetFieldConstant.frequencyOfDataCollection)); - writeFullElement(xmlw, "sampProc", dto2Primitive(version, DatasetFieldConstant.samplingProcedure)); + writeFullElement(xmlw, "timeMeth", dto2Primitive(version, DatasetFieldConstant.timeMethod)); + writeFullElement(xmlw, "dataCollector", dto2Primitive(version, DatasetFieldConstant.dataCollector)); + writeFullElement(xmlw, "collectorTraining", dto2Primitive(version, DatasetFieldConstant.collectorTraining)); + writeFullElement(xmlw, "frequenc", dto2Primitive(version, DatasetFieldConstant.frequencyOfDataCollection)); + writeFullElement(xmlw, "sampProc", dto2Primitive(version, DatasetFieldConstant.samplingProcedure)); writeTargetSampleElement(xmlw, version); - writeFullElement(xmlw, "deviat", dto2Primitive(version, DatasetFieldConstant.deviationsFromSampleDesign)); - writeFullElement(xmlw, "collMode", dto2Primitive(version, DatasetFieldConstant.collectionMode)); - writeFullElement(xmlw, "resInstru", dto2Primitive(version, DatasetFieldConstant.researchInstrument)); - writeFullElement(xmlw, "collSitu", dto2Primitive(version, DatasetFieldConstant.dataCollectionSituation)); + writeFullElement(xmlw, "deviat", dto2Primitive(version, DatasetFieldConstant.deviationsFromSampleDesign)); + writeFullElement(xmlw, "collMode", dto2Primitive(version, DatasetFieldConstant.collectionMode)); + writeFullElement(xmlw, "resInstru", dto2Primitive(version, DatasetFieldConstant.researchInstrument)); + writeFullElement(xmlw, "collSitu", dto2Primitive(version, DatasetFieldConstant.dataCollectionSituation)); writeFullElement(xmlw, "actMin", dto2Primitive(version, DatasetFieldConstant.actionsToMinimizeLoss)); - writeFullElement(xmlw, "conOps", dto2Primitive(version, DatasetFieldConstant.controlOperations)); - writeFullElement(xmlw, "weight", dto2Primitive(version, DatasetFieldConstant.weighting)); + writeFullElement(xmlw, "conOps", dto2Primitive(version, DatasetFieldConstant.controlOperations)); + writeFullElement(xmlw, "weight", dto2Primitive(version, DatasetFieldConstant.weighting)); writeFullElement(xmlw, "cleanOps", dto2Primitive(version, DatasetFieldConstant.cleaningOperations)); - xmlw.writeEndElement(); //dataColl + xmlw.writeEndElement(); // dataColl xmlw.writeStartElement("anlyInfo"); writeFullElement(xmlw, "anylInfo", dto2Primitive(version, DatasetFieldConstant.datasetLevelErrorNotes)); - writeFullElement(xmlw, "respRate", dto2Primitive(version, DatasetFieldConstant.responseRate)); - writeFullElement(xmlw, "estSmpErr", dto2Primitive(version, DatasetFieldConstant.samplingErrorEstimates)); - writeFullElement(xmlw, "dataAppr", dto2Primitive(version, DatasetFieldConstant.otherDataAppraisal)); - xmlw.writeEndElement(); //anlyInfo + writeFullElement(xmlw, "respRate", dto2Primitive(version, DatasetFieldConstant.responseRate)); + writeFullElement(xmlw, "estSmpErr", dto2Primitive(version, DatasetFieldConstant.samplingErrorEstimates)); + writeFullElement(xmlw, "dataAppr", dto2Primitive(version, DatasetFieldConstant.otherDataAppraisal)); + xmlw.writeEndElement(); // anlyInfo writeNotesElement(xmlw, version); - - xmlw.writeEndElement();//method + + xmlw.writeEndElement();// method } - - private static void writeSubjectElement(XMLStreamWriter xmlw, DatasetVersionDTO datasetVersionDTO) throws XMLStreamException{ - - //Key Words and Topic Classification - - xmlw.writeStartElement("subject"); - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - String key = entry.getKey(); - MetadataBlockDTO value = entry.getValue(); + + private static void writeSubjectElement(final XMLStreamWriter xmlw, final DatasetVersionDTO datasetVersionDTO) + throws XMLStreamException { + + // Key Words and Topic Classification + + xmlw.writeStartElement("subject"); + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final String key = entry.getKey(); + final MetadataBlockDTO value = entry.getValue(); if ("citation".equals(key)) { - for (FieldDTO fieldDTO : value.getFields()) { - if (DatasetFieldConstant.subject.equals(fieldDTO.getTypeName())){ - for ( String subject : fieldDTO.getMultipleVocab()){ + for (final FieldDTO fieldDTO : value.getFields()) { + if (DatasetFieldConstant.subject.equals(fieldDTO.getTypeName())) { + for (final String subject : fieldDTO.getMultipleVocab()) { xmlw.writeStartElement("keyword"); xmlw.writeCharacters(subject); - xmlw.writeEndElement(); //Keyword + xmlw.writeEndElement(); // Keyword } } - + if (DatasetFieldConstant.keyword.equals(fieldDTO.getTypeName())) { - for (HashSet foo : fieldDTO.getMultipleCompound()) { + for (final HashSet foo : fieldDTO.getMultipleCompound()) { String keywordValue = ""; String keywordVocab = ""; String keywordURI = ""; - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.keywordValue.equals(next.getTypeName())) { - keywordValue = next.getSinglePrimitive(); + keywordValue = next.getSinglePrimitive(); } if (DatasetFieldConstant.keywordVocab.equals(next.getTypeName())) { - keywordVocab = next.getSinglePrimitive(); + keywordVocab = next.getSinglePrimitive(); } if (DatasetFieldConstant.keywordVocabURI.equals(next.getTypeName())) { - keywordURI = next.getSinglePrimitive(); + keywordURI = next.getSinglePrimitive(); } } - if (!keywordValue.isEmpty()){ - xmlw.writeStartElement("keyword"); - if(!keywordVocab.isEmpty()){ - writeAttribute(xmlw,"vocab",keywordVocab); + if (!keywordValue.isEmpty()) { + xmlw.writeStartElement("keyword"); + if (!keywordVocab.isEmpty()) { + writeAttribute(xmlw, "vocab", keywordVocab); + } + if (!keywordURI.isEmpty()) { + writeAttribute(xmlw, "URI", keywordURI); } - if(!keywordURI.isEmpty()){ - writeAttribute(xmlw,"URI",keywordURI); - } xmlw.writeCharacters(keywordValue); - xmlw.writeEndElement(); //Keyword + xmlw.writeEndElement(); // Keyword } } } if (DatasetFieldConstant.topicClassification.equals(fieldDTO.getTypeName())) { - for (HashSet foo : fieldDTO.getMultipleCompound()) { + for (final HashSet foo : fieldDTO.getMultipleCompound()) { String topicClassificationValue = ""; String topicClassificationVocab = ""; String topicClassificationURI = ""; - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.topicClassValue.equals(next.getTypeName())) { - topicClassificationValue = next.getSinglePrimitive(); + topicClassificationValue = next.getSinglePrimitive(); } if (DatasetFieldConstant.topicClassVocab.equals(next.getTypeName())) { - topicClassificationVocab = next.getSinglePrimitive(); + topicClassificationVocab = next.getSinglePrimitive(); } if (DatasetFieldConstant.topicClassVocabURI.equals(next.getTypeName())) { - topicClassificationURI = next.getSinglePrimitive(); + topicClassificationURI = next.getSinglePrimitive(); } } - if (!topicClassificationValue.isEmpty()){ - xmlw.writeStartElement("topcClas"); - if(!topicClassificationVocab.isEmpty()){ - writeAttribute(xmlw,"vocab",topicClassificationVocab); - } - if(!topicClassificationURI.isEmpty()){ - writeAttribute(xmlw,"URI",topicClassificationURI); - } + if (!topicClassificationValue.isEmpty()) { + xmlw.writeStartElement("topcClas"); + if (!topicClassificationVocab.isEmpty()) { + writeAttribute(xmlw, "vocab", topicClassificationVocab); + } + if (!topicClassificationURI.isEmpty()) { + writeAttribute(xmlw, "URI", topicClassificationURI); + } xmlw.writeCharacters(topicClassificationValue); - xmlw.writeEndElement(); //topcClas + xmlw.writeEndElement(); // topcClas } } } } } - } - xmlw.writeEndElement(); // subject + } + xmlw.writeEndElement(); // subject } - - private static void writeAuthorsElement(XMLStreamWriter xmlw, DatasetVersionDTO datasetVersionDTO) throws XMLStreamException { - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - String key = entry.getKey(); - MetadataBlockDTO value = entry.getValue(); + private static void writeAuthorsElement(final XMLStreamWriter xmlw, final DatasetVersionDTO datasetVersionDTO) + throws XMLStreamException { + + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final String key = entry.getKey(); + final MetadataBlockDTO value = entry.getValue(); if ("citation".equals(key)) { - for (FieldDTO fieldDTO : value.getFields()) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.author.equals(fieldDTO.getTypeName())) { xmlw.writeStartElement("rspStmt"); String authorName = ""; String authorAffiliation = ""; - for (HashSet foo : fieldDTO.getMultipleCompound()) { - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final HashSet foo : fieldDTO.getMultipleCompound()) { + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.authorName.equals(next.getTypeName())) { - authorName = next.getSinglePrimitive(); + authorName = next.getSinglePrimitive(); } if (DatasetFieldConstant.authorAffiliation.equals(next.getTypeName())) { - authorAffiliation = next.getSinglePrimitive(); + authorAffiliation = next.getSinglePrimitive(); } } - if (!authorName.isEmpty()){ - xmlw.writeStartElement("AuthEnty"); - if(!authorAffiliation.isEmpty()){ - writeAttribute(xmlw,"affiliation",authorAffiliation); - } + if (!authorName.isEmpty()) { + xmlw.writeStartElement("AuthEnty"); + if (!authorAffiliation.isEmpty()) { + writeAttribute(xmlw, "affiliation", authorAffiliation); + } xmlw.writeCharacters(authorName); - xmlw.writeEndElement(); //AuthEnty + xmlw.writeEndElement(); // AuthEnty } } - xmlw.writeEndElement(); //rspStmt + xmlw.writeEndElement(); // rspStmt } } } } } - - private static void writeContactsElement(XMLStreamWriter xmlw, DatasetVersionDTO datasetVersionDTO) throws XMLStreamException { - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - String key = entry.getKey(); - MetadataBlockDTO value = entry.getValue(); + private static void writeContactsElement(final XMLStreamWriter xmlw, final DatasetVersionDTO datasetVersionDTO) + throws XMLStreamException { + + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final String key = entry.getKey(); + final MetadataBlockDTO value = entry.getValue(); if ("citation".equals(key)) { - for (FieldDTO fieldDTO : value.getFields()) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.datasetContact.equals(fieldDTO.getTypeName())) { String datasetContactName = ""; String datasetContactAffiliation = ""; String datasetContactEmail = ""; - for (HashSet foo : fieldDTO.getMultipleCompound()) { - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final HashSet foo : fieldDTO.getMultipleCompound()) { + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.datasetContactName.equals(next.getTypeName())) { - datasetContactName = next.getSinglePrimitive(); + datasetContactName = next.getSinglePrimitive(); } if (DatasetFieldConstant.datasetContactAffiliation.equals(next.getTypeName())) { - datasetContactAffiliation = next.getSinglePrimitive(); + datasetContactAffiliation = next.getSinglePrimitive(); } if (DatasetFieldConstant.datasetContactEmail.equals(next.getTypeName())) { - datasetContactEmail = next.getSinglePrimitive(); + datasetContactEmail = next.getSinglePrimitive(); } } - if (!datasetContactName.isEmpty()){ - xmlw.writeStartElement("contact"); - if(!datasetContactAffiliation.isEmpty()){ - writeAttribute(xmlw,"affiliation",datasetContactAffiliation); - } - if(!datasetContactEmail.isEmpty()){ - writeAttribute(xmlw,"email",datasetContactEmail); - } + if (!datasetContactName.isEmpty()) { + xmlw.writeStartElement("contact"); + if (!datasetContactAffiliation.isEmpty()) { + writeAttribute(xmlw, "affiliation", datasetContactAffiliation); + } + if (!datasetContactEmail.isEmpty()) { + writeAttribute(xmlw, "email", datasetContactEmail); + } xmlw.writeCharacters(datasetContactName); - xmlw.writeEndElement(); //AuthEnty + xmlw.writeEndElement(); // AuthEnty } } } @@ -606,25 +615,26 @@ private static void writeContactsElement(XMLStreamWriter xmlw, DatasetVersionDTO } } } - - private static void writeProducersElement(XMLStreamWriter xmlw, DatasetVersionDTO version) throws XMLStreamException { + + private static void writeProducersElement(final XMLStreamWriter xmlw, final DatasetVersionDTO version) + throws XMLStreamException { xmlw.writeStartElement("prodStmt"); - for (Map.Entry entry : version.getMetadataBlocks().entrySet()) { - String key = entry.getKey(); - MetadataBlockDTO value = entry.getValue(); + for (final Map.Entry entry : version.getMetadataBlocks().entrySet()) { + final String key = entry.getKey(); + final MetadataBlockDTO value = entry.getValue(); if ("citation".equals(key)) { - for (FieldDTO fieldDTO : value.getFields()) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.producer.equals(fieldDTO.getTypeName())) { - for (HashSet foo : fieldDTO.getMultipleCompound()) { + for (final HashSet foo : fieldDTO.getMultipleCompound()) { String producerName = ""; String producerAffiliation = ""; String producerAbbreviation = ""; String producerLogo = ""; String producerURL = ""; - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.producerName.equals(next.getTypeName())) { producerName = next.getSinglePrimitive(); } @@ -657,37 +667,38 @@ private static void writeProducersElement(XMLStreamWriter xmlw, DatasetVersionDT writeAttribute(xmlw, "URI", producerURL); } xmlw.writeCharacters(producerName); - xmlw.writeEndElement(); //AuthEnty + xmlw.writeEndElement(); // AuthEnty } } - + } } } } - writeFullElement(xmlw, "prodDate", dto2Primitive(version, DatasetFieldConstant.productionDate)); + writeFullElement(xmlw, "prodDate", dto2Primitive(version, DatasetFieldConstant.productionDate)); writeFullElement(xmlw, "prodPlac", dto2Primitive(version, DatasetFieldConstant.productionPlace)); - + writeGrantElement(xmlw, version); - xmlw.writeEndElement(); //prodStmt + xmlw.writeEndElement(); // prodStmt } - - private static void writeDistributorsElement(XMLStreamWriter xmlw, DatasetVersionDTO datasetVersionDTO) throws XMLStreamException { - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - String key = entry.getKey(); - MetadataBlockDTO value = entry.getValue(); + + private static void writeDistributorsElement(final XMLStreamWriter xmlw, final DatasetVersionDTO datasetVersionDTO) + throws XMLStreamException { + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final String key = entry.getKey(); + final MetadataBlockDTO value = entry.getValue(); if ("citation".equals(key)) { - for (FieldDTO fieldDTO : value.getFields()) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.distributor.equals(fieldDTO.getTypeName())) { xmlw.writeStartElement("distrbtr"); - for (HashSet foo : fieldDTO.getMultipleCompound()) { + for (final HashSet foo : fieldDTO.getMultipleCompound()) { String distributorName = ""; String distributorAffiliation = ""; String distributorAbbreviation = ""; String distributorURL = ""; String distributorLogoURL = ""; - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.distributorName.equals(next.getTypeName())) { distributorName = next.getSinglePrimitive(); } @@ -719,51 +730,52 @@ private static void writeDistributorsElement(XMLStreamWriter xmlw, DatasetVersio writeAttribute(xmlw, "role", distributorLogoURL); } xmlw.writeCharacters(distributorName); - xmlw.writeEndElement(); //AuthEnty + xmlw.writeEndElement(); // AuthEnty } } - xmlw.writeEndElement(); //rspStmt + xmlw.writeEndElement(); // rspStmt } } } } } - - private static void writeRelPublElement(XMLStreamWriter xmlw, DatasetVersionDTO datasetVersionDTO) throws XMLStreamException { - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - String key = entry.getKey(); - MetadataBlockDTO value = entry.getValue(); + + private static void writeRelPublElement(final XMLStreamWriter xmlw, final DatasetVersionDTO datasetVersionDTO) + throws XMLStreamException { + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final String key = entry.getKey(); + final MetadataBlockDTO value = entry.getValue(); if ("citation".equals(key)) { - for (FieldDTO fieldDTO : value.getFields()) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.publication.equals(fieldDTO.getTypeName())) { - for (HashSet foo : fieldDTO.getMultipleCompound()) { + for (final HashSet foo : fieldDTO.getMultipleCompound()) { String pubString = ""; String citation = ""; String IDType = ""; String IDNo = ""; String url = ""; - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.publicationCitation.equals(next.getTypeName())) { - citation = next.getSinglePrimitive(); + citation = next.getSinglePrimitive(); } if (DatasetFieldConstant.publicationIDType.equals(next.getTypeName())) { - IDType = next.getSinglePrimitive(); + IDType = next.getSinglePrimitive(); } if (DatasetFieldConstant.publicationIDNumber.equals(next.getTypeName())) { - IDNo = next.getSinglePrimitive(); + IDNo = next.getSinglePrimitive(); } if (DatasetFieldConstant.publicationURL.equals(next.getTypeName())) { - url = next.getSinglePrimitive(); + url = next.getSinglePrimitive(); } } pubString = appendCommaSeparatedValue(citation, IDType); pubString = appendCommaSeparatedValue(pubString, IDNo); pubString = appendCommaSeparatedValue(pubString, url); - if (!pubString.isEmpty()){ - xmlw.writeStartElement("relPubl"); + if (!pubString.isEmpty()) { + xmlw.writeStartElement("relPubl"); xmlw.writeCharacters(pubString); - xmlw.writeEndElement(); //relPubl + xmlw.writeEndElement(); // relPubl } } } @@ -771,8 +783,8 @@ private static void writeRelPublElement(XMLStreamWriter xmlw, DatasetVersionDTO } } } - - private static String appendCommaSeparatedValue(String inVal, String next) { + + private static String appendCommaSeparatedValue(final String inVal, final String next) { if (!next.isEmpty()) { if (!inVal.isEmpty()) { return inVal + ", " + next; @@ -782,33 +794,34 @@ private static String appendCommaSeparatedValue(String inVal, String next) { } return inVal; } - - private static void writeAbstractElement(XMLStreamWriter xmlw, DatasetVersionDTO datasetVersionDTO) throws XMLStreamException { - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - String key = entry.getKey(); - MetadataBlockDTO value = entry.getValue(); + + private static void writeAbstractElement(final XMLStreamWriter xmlw, final DatasetVersionDTO datasetVersionDTO) + throws XMLStreamException { + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final String key = entry.getKey(); + final MetadataBlockDTO value = entry.getValue(); if ("citation".equals(key)) { - for (FieldDTO fieldDTO : value.getFields()) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.description.equals(fieldDTO.getTypeName())) { String descriptionText = ""; String descriptionDate = ""; - for (HashSet foo : fieldDTO.getMultipleCompound()) { - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final HashSet foo : fieldDTO.getMultipleCompound()) { + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.descriptionText.equals(next.getTypeName())) { - descriptionText = next.getSinglePrimitive(); + descriptionText = next.getSinglePrimitive(); } if (DatasetFieldConstant.descriptionDate.equals(next.getTypeName())) { - descriptionDate = next.getSinglePrimitive(); + descriptionDate = next.getSinglePrimitive(); } } - if (!descriptionText.isEmpty()){ - xmlw.writeStartElement("abstract"); - if(!descriptionDate.isEmpty()){ - writeAttribute(xmlw,"date",descriptionDate); - } + if (!descriptionText.isEmpty()) { + xmlw.writeStartElement("abstract"); + if (!descriptionDate.isEmpty()) { + writeAttribute(xmlw, "date", descriptionDate); + } xmlw.writeCharacters(descriptionText); - xmlw.writeEndElement(); //abstract + xmlw.writeEndElement(); // abstract } } } @@ -817,32 +830,32 @@ private static void writeAbstractElement(XMLStreamWriter xmlw, DatasetVersionDTO } } - private static void writeGrantElement(XMLStreamWriter xmlw, DatasetVersionDTO datasetVersionDTO) throws XMLStreamException { - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - String key = entry.getKey(); - MetadataBlockDTO value = entry.getValue(); + private static void writeGrantElement(final XMLStreamWriter xmlw, final DatasetVersionDTO datasetVersionDTO) + throws XMLStreamException { + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final String key = entry.getKey(); + final MetadataBlockDTO value = entry.getValue(); if ("citation".equals(key)) { - for (FieldDTO fieldDTO : value.getFields()) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.grantNumber.equals(fieldDTO.getTypeName())) { - String grantNumber = ""; - String grantAgency = ""; - for (HashSet foo : fieldDTO.getMultipleCompound()) { - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final HashSet foo : fieldDTO.getMultipleCompound()) { + String grantNumber = ""; + String grantAgency = ""; + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + // XXX: #45 - Map Funding Agency to Grant Agency, fix DDI Exporter + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.grantNumberValue.equals(next.getTypeName())) { - grantNumber = next.getSinglePrimitive(); + grantNumber = next.getSinglePrimitive(); } if (DatasetFieldConstant.grantNumberAgency.equals(next.getTypeName())) { - grantAgency = next.getSinglePrimitive(); + grantAgency = next.getSinglePrimitive(); } } - if (!grantNumber.isEmpty()){ - xmlw.writeStartElement("grantNo"); - if(!grantAgency.isEmpty()){ - writeAttribute(xmlw,"agency",grantAgency); - } + if (!grantAgency.isEmpty()) { + xmlw.writeStartElement("grantNo"); + writeAttribute(xmlw, "agency", grantAgency); // grant/funding agency xmlw.writeCharacters(grantNumber); - xmlw.writeEndElement(); //grantno + xmlw.writeEndElement(); // grantno } } } @@ -850,33 +863,34 @@ private static void writeGrantElement(XMLStreamWriter xmlw, DatasetVersionDTO da } } } - - private static void writeOtherIdElement(XMLStreamWriter xmlw, DatasetVersionDTO datasetVersionDTO) throws XMLStreamException { - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - String key = entry.getKey(); - MetadataBlockDTO value = entry.getValue(); + + private static void writeOtherIdElement(final XMLStreamWriter xmlw, final DatasetVersionDTO datasetVersionDTO) + throws XMLStreamException { + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final String key = entry.getKey(); + final MetadataBlockDTO value = entry.getValue(); if ("citation".equals(key)) { - for (FieldDTO fieldDTO : value.getFields()) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.otherId.equals(fieldDTO.getTypeName())) { String otherId = ""; String otherIdAgency = ""; - for (HashSet foo : fieldDTO.getMultipleCompound()) { - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final HashSet foo : fieldDTO.getMultipleCompound()) { + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.otherIdValue.equals(next.getTypeName())) { - otherId = next.getSinglePrimitive(); + otherId = next.getSinglePrimitive(); } if (DatasetFieldConstant.otherIdAgency.equals(next.getTypeName())) { - otherIdAgency = next.getSinglePrimitive(); + otherIdAgency = next.getSinglePrimitive(); } } - if (!otherId.isEmpty()){ - xmlw.writeStartElement("IDNo"); - if(!otherIdAgency.isEmpty()){ - writeAttribute(xmlw,"agency",otherIdAgency); - } + if (!otherId.isEmpty()) { + xmlw.writeStartElement("IDNo"); + if (!otherIdAgency.isEmpty()) { + writeAttribute(xmlw, "agency", otherIdAgency); + } xmlw.writeCharacters(otherId); - xmlw.writeEndElement(); //IDNo + xmlw.writeEndElement(); // IDNo } } } @@ -884,33 +898,34 @@ private static void writeOtherIdElement(XMLStreamWriter xmlw, DatasetVersionDTO } } } - - private static void writeSoftwareElement(XMLStreamWriter xmlw, DatasetVersionDTO datasetVersionDTO) throws XMLStreamException { - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - String key = entry.getKey(); - MetadataBlockDTO value = entry.getValue(); + + private static void writeSoftwareElement(final XMLStreamWriter xmlw, final DatasetVersionDTO datasetVersionDTO) + throws XMLStreamException { + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final String key = entry.getKey(); + final MetadataBlockDTO value = entry.getValue(); if ("citation".equals(key)) { - for (FieldDTO fieldDTO : value.getFields()) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.software.equals(fieldDTO.getTypeName())) { String softwareName = ""; String softwareVersion = ""; - for (HashSet foo : fieldDTO.getMultipleCompound()) { - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + for (final HashSet foo : fieldDTO.getMultipleCompound()) { + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.softwareName.equals(next.getTypeName())) { - softwareName = next.getSinglePrimitive(); + softwareName = next.getSinglePrimitive(); } if (DatasetFieldConstant.softwareVersion.equals(next.getTypeName())) { - softwareVersion = next.getSinglePrimitive(); + softwareVersion = next.getSinglePrimitive(); } } - if (!softwareName.isEmpty()){ - xmlw.writeStartElement("software"); - if(!softwareVersion.isEmpty()){ - writeAttribute(xmlw,"version",softwareVersion); - } + if (!softwareName.isEmpty()) { + xmlw.writeStartElement("software"); + if (!softwareVersion.isEmpty()) { + writeAttribute(xmlw, "version", softwareVersion); + } xmlw.writeCharacters(softwareName); - xmlw.writeEndElement(); //software + xmlw.writeEndElement(); // software } } } @@ -918,56 +933,58 @@ private static void writeSoftwareElement(XMLStreamWriter xmlw, DatasetVersionDTO } } } - - private static void writeSeriesElement(XMLStreamWriter xmlw, DatasetVersionDTO datasetVersionDTO) throws XMLStreamException { - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - String key = entry.getKey(); - MetadataBlockDTO value = entry.getValue(); + + private static void writeSeriesElement(final XMLStreamWriter xmlw, final DatasetVersionDTO datasetVersionDTO) + throws XMLStreamException { + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final String key = entry.getKey(); + final MetadataBlockDTO value = entry.getValue(); if ("citation".equals(key)) { - for (FieldDTO fieldDTO : value.getFields()) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.series.equals(fieldDTO.getTypeName())) { - xmlw.writeStartElement("serStmt"); + xmlw.writeStartElement("serStmt"); String seriesName = ""; String seriesInformation = ""; - Set foo = fieldDTO.getSingleCompound(); - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); - if (DatasetFieldConstant.seriesName.equals(next.getTypeName())) { - seriesName = next.getSinglePrimitive(); - } - if (DatasetFieldConstant.seriesInformation.equals(next.getTypeName())) { - seriesInformation = next.getSinglePrimitive(); - } - } - if (!seriesName.isEmpty()){ - xmlw.writeStartElement("serName"); - xmlw.writeCharacters(seriesName); - xmlw.writeEndElement(); //grantno + final Set foo = fieldDTO.getSingleCompound(); + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); + if (DatasetFieldConstant.seriesName.equals(next.getTypeName())) { + seriesName = next.getSinglePrimitive(); } - if (!seriesInformation.isEmpty()){ - xmlw.writeStartElement("serInfo"); - xmlw.writeCharacters(seriesInformation); - xmlw.writeEndElement(); //grantno + if (DatasetFieldConstant.seriesInformation.equals(next.getTypeName())) { + seriesInformation = next.getSinglePrimitive(); } - xmlw.writeEndElement(); //serStmt + } + if (!seriesName.isEmpty()) { + xmlw.writeStartElement("serName"); + xmlw.writeCharacters(seriesName); + xmlw.writeEndElement(); // grantno + } + if (!seriesInformation.isEmpty()) { + xmlw.writeStartElement("serInfo"); + xmlw.writeCharacters(seriesInformation); + xmlw.writeEndElement(); // grantno + } + xmlw.writeEndElement(); // serStmt } } } } } - - private static void writeTargetSampleElement(XMLStreamWriter xmlw, DatasetVersionDTO datasetVersionDTO) throws XMLStreamException { - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - String key = entry.getKey(); - MetadataBlockDTO value = entry.getValue(); + + private static void writeTargetSampleElement(final XMLStreamWriter xmlw, final DatasetVersionDTO datasetVersionDTO) + throws XMLStreamException { + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final String key = entry.getKey(); + final MetadataBlockDTO value = entry.getValue(); if ("socialscience".equals(key)) { - for (FieldDTO fieldDTO : value.getFields()) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.targetSampleSize.equals(fieldDTO.getTypeName())) { String sizeFormula = ""; String actualSize = ""; - Set foo = fieldDTO.getSingleCompound(); - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + final Set foo = fieldDTO.getSingleCompound(); + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.targetSampleSizeFormula.equals(next.getTypeName())) { sizeFormula = next.getSinglePrimitive(); } @@ -978,32 +995,33 @@ private static void writeTargetSampleElement(XMLStreamWriter xmlw, DatasetVersio if (!sizeFormula.isEmpty()) { xmlw.writeStartElement("sampleSizeFormula"); xmlw.writeCharacters(sizeFormula); - xmlw.writeEndElement(); //sampleSizeFormula + xmlw.writeEndElement(); // sampleSizeFormula } if (!actualSize.isEmpty()) { xmlw.writeStartElement("sampleSize"); xmlw.writeCharacters(actualSize); - xmlw.writeEndElement(); //sampleSize + xmlw.writeEndElement(); // sampleSize } } } } } } - - private static void writeNotesElement(XMLStreamWriter xmlw, DatasetVersionDTO datasetVersionDTO) throws XMLStreamException { - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - String key = entry.getKey(); - MetadataBlockDTO value = entry.getValue(); + + private static void writeNotesElement(final XMLStreamWriter xmlw, final DatasetVersionDTO datasetVersionDTO) + throws XMLStreamException { + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final String key = entry.getKey(); + final MetadataBlockDTO value = entry.getValue(); if ("socialscience".equals(key)) { - for (FieldDTO fieldDTO : value.getFields()) { + for (final FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.socialScienceNotes.equals(fieldDTO.getTypeName())) { String notesText = ""; String notesType = ""; - String notesSubject= ""; - Set foo = fieldDTO.getSingleCompound(); - for (Iterator iterator = foo.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); + String notesSubject = ""; + final Set foo = fieldDTO.getSingleCompound(); + for (final Iterator iterator = foo.iterator(); iterator.hasNext();) { + final FieldDTO next = iterator.next(); if (DatasetFieldConstant.socialScienceNotesText.equals(next.getTypeName())) { notesText = next.getSinglePrimitive(); } @@ -1016,30 +1034,31 @@ private static void writeNotesElement(XMLStreamWriter xmlw, DatasetVersionDTO da } if (!notesText.isEmpty()) { xmlw.writeStartElement("notes"); - if(!notesType.isEmpty()){ - writeAttribute(xmlw,"type",notesType); - } - if(!notesSubject.isEmpty()){ - writeAttribute(xmlw,"subject",notesSubject); - } + if (!notesType.isEmpty()) { + writeAttribute(xmlw, "type", notesType); + } + if (!notesSubject.isEmpty()) { + writeAttribute(xmlw, "subject", notesSubject); + } xmlw.writeCharacters(notesText); - xmlw.writeEndElement(); + xmlw.writeEndElement(); } } } } } } - - // TODO: - // see if there's more information that we could encode in this otherMat. - // contentType? Unfs and such? (in the "short" DDI that is being used for + + // TODO: + // see if there's more information that we could encode in this otherMat. + // contentType? Unfs and such? (in the "short" DDI that is being used for // harvesting *all* files are encoded as otherMats; even tabular ones. - private static void createOtherMats(XMLStreamWriter xmlw, List fileDtos) throws XMLStreamException { + private static void createOtherMats(final XMLStreamWriter xmlw, final List fileDtos) + throws XMLStreamException { // The preferred URL for this dataverse, for cooking up the file access API links: - String dataverseUrl = getDataverseSiteUrl(); - - for (FileDTO fileDTo : fileDtos) { + final String dataverseUrl = getDataverseSiteUrl(); + + for (final FileDTO fileDTo : fileDtos) { // We'll continue using the scheme we've used before, in DVN2-3: non-tabular files are put into otherMat, // tabular ones - in fileDscr sections. (fileDscr sections have special fields for numbers of variables // and observations, etc.) @@ -1052,10 +1071,10 @@ private static void createOtherMats(XMLStreamWriter xmlw, List fileDtos xmlw.writeCharacters(fileDTo.getDataFile().getFilename()); xmlw.writeEndElement(); // labl writeFileDescription(xmlw, fileDTo); - // there's no readily available field in the othermat section + // there's no readily available field in the othermat section // for the content type (aka mime type); so we'll store it in this // specially formatted notes section: - String contentType = fileDTo.getDataFile().getContentType(); + final String contentType = fileDTo.getDataFile().getContentType(); if (!StringUtilisEmpty(contentType)) { xmlw.writeStartElement("notes"); writeAttribute(xmlw, "level", LEVEL_FILE); @@ -1068,42 +1087,44 @@ private static void createOtherMats(XMLStreamWriter xmlw, List fileDtos } } } - - // An alternative version of the createOtherMats method - this one is used - // when a "full" DDI is being cooked; just like the fileDscr and data/var sections methods, + + // An alternative version of the createOtherMats method - this one is used + // when a "full" DDI is being cooked; just like the fileDscr and data/var sections methods, // it operates on the list of FileMetadata entities, not on File DTOs. This is because - // DTOs do not support "tabular", variable-level metadata yet. And we need to be able to + // DTOs do not support "tabular", variable-level metadata yet. And we need to be able to // tell if this file is in fact tabular data - so that we know if it needs an - // otherMat, or a fileDscr section. - // -- L.A. 4.5 - - private static void createOtherMatsFromFileMetadatas(XMLStreamWriter xmlw, List fileMetadatas) throws XMLStreamException { + // otherMat, or a fileDscr section. + // -- L.A. 4.5 + + private static void createOtherMatsFromFileMetadatas(final XMLStreamWriter xmlw, + final List fileMetadatas) throws XMLStreamException { // The preferred URL for this dataverse, for cooking up the file access API links: - String dataverseUrl = getDataverseSiteUrl(); - - for (FileMetadata fileMetadata : fileMetadatas) { + final String dataverseUrl = getDataverseSiteUrl(); + + for (final FileMetadata fileMetadata : fileMetadatas) { // We'll continue using the scheme we've used before, in DVN2-3: non-tabular files are put into otherMat, // tabular ones - in fileDscr sections. (fileDscr sections have special fields for numbers of variables // and observations, etc.) if (fileMetadata.getDataFile() != null && !fileMetadata.getDataFile().isTabularData()) { xmlw.writeStartElement("otherMat"); writeAttribute(xmlw, "ID", "f" + fileMetadata.getDataFile().getId()); - writeAttribute(xmlw, "URI", dataverseUrl + "/api/access/datafile/" + fileMetadata.getDataFile().getId()); + writeAttribute(xmlw, "URI", + dataverseUrl + "/api/access/datafile/" + fileMetadata.getDataFile().getId()); writeAttribute(xmlw, "level", "datafile"); xmlw.writeStartElement("labl"); xmlw.writeCharacters(fileMetadata.getLabel()); xmlw.writeEndElement(); // labl - - String description = fileMetadata.getDescription(); + + final String description = fileMetadata.getDescription(); if (description != null) { xmlw.writeStartElement("txt"); xmlw.writeCharacters(description); xmlw.writeEndElement(); // txt } - // there's no readily available field in the othermat section + // there's no readily available field in the othermat section // for the content type (aka mime type); so we'll store it in this // specially formatted notes section: - String contentType = fileMetadata.getDataFile().getContentType(); + final String contentType = fileMetadata.getDataFile().getContentType(); if (!StringUtilisEmpty(contentType)) { xmlw.writeStartElement("notes"); writeAttribute(xmlw, "level", LEVEL_FILE); @@ -1116,20 +1137,21 @@ private static void createOtherMatsFromFileMetadatas(XMLStreamWriter xmlw, List< } } } - - private static void writeFileDescription(XMLStreamWriter xmlw, FileDTO fileDTo) throws XMLStreamException { + + private static void writeFileDescription(final XMLStreamWriter xmlw, final FileDTO fileDTo) + throws XMLStreamException { xmlw.writeStartElement("txt"); - String description = fileDTo.getDataFile().getDescription(); + final String description = fileDTo.getDataFile().getDescription(); if (description != null) { xmlw.writeCharacters(description); } xmlw.writeEndElement(); // txt } - - private static String dto2Primitive(DatasetVersionDTO datasetVersionDTO, String datasetFieldTypeName) { - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - MetadataBlockDTO value = entry.getValue(); - for (FieldDTO fieldDTO : value.getFields()) { + + private static String dto2Primitive(final DatasetVersionDTO datasetVersionDTO, final String datasetFieldTypeName) { + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final MetadataBlockDTO value = entry.getValue(); + for (final FieldDTO fieldDTO : value.getFields()) { if (datasetFieldTypeName.equals(fieldDTO.getTypeName())) { return fieldDTO.getSinglePrimitive(); } @@ -1137,11 +1159,12 @@ private static String dto2Primitive(DatasetVersionDTO datasetVersionDTO, String } return null; } - - private static List dto2PrimitiveList(DatasetVersionDTO datasetVersionDTO, String datasetFieldTypeName) { - for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { - MetadataBlockDTO value = entry.getValue(); - for (FieldDTO fieldDTO : value.getFields()) { + + private static List dto2PrimitiveList(final DatasetVersionDTO datasetVersionDTO, + final String datasetFieldTypeName) { + for (final Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { + final MetadataBlockDTO value = entry.getValue(); + for (final FieldDTO fieldDTO : value.getFields()) { if (datasetFieldTypeName.equals(fieldDTO.getTypeName())) { return fieldDTO.getMultiplePrimitive(); } @@ -1150,19 +1173,21 @@ private static List dto2PrimitiveList(DatasetVersionDTO datasetVersionDT return null; } - private static void writeFullElementList(XMLStreamWriter xmlw, String name, List values) throws XMLStreamException { - //For the simplest Elements we can + private static void writeFullElementList(final XMLStreamWriter xmlw, final String name, final List values) + throws XMLStreamException { + // For the simplest Elements we can if (values != null && !values.isEmpty()) { - for (String value : values) { + for (final String value : values) { xmlw.writeStartElement(name); xmlw.writeCharacters(value); xmlw.writeEndElement(); // labl } } } - - private static void writeFullElement (XMLStreamWriter xmlw, String name, String value) throws XMLStreamException { - //For the simplest Elements we can + + private static void writeFullElement(final XMLStreamWriter xmlw, final String name, final String value) + throws XMLStreamException { + // For the simplest Elements we can if (!StringUtilisEmpty(value)) { xmlw.writeStartElement(name); xmlw.writeCharacters(value); @@ -1170,31 +1195,30 @@ private static void writeFullElement (XMLStreamWriter xmlw, String name, String } } - private static void writeAttribute(XMLStreamWriter xmlw, String name, String value) throws XMLStreamException { + private static void writeAttribute(final XMLStreamWriter xmlw, final String name, final String value) + throws XMLStreamException { if (!StringUtilisEmpty(value)) { xmlw.writeAttribute(name, value); } } - private static boolean StringUtilisEmpty(String str) { + private static boolean StringUtilisEmpty(final String str) { if (str == null || str.trim().equals("")) { return true; } return false; } - private static void saveJsonToDisk(String datasetVersionAsJson) throws IOException { + private static void saveJsonToDisk(final String datasetVersionAsJson) throws IOException { Files.write(Paths.get("/tmp/out.json"), datasetVersionAsJson.getBytes()); } - + /** - * The "official", designated URL of the site; - * can be defined as a complete URL; or derived from the - * "official" hostname. If none of these options is set, - * defaults to the InetAddress.getLocalHOst() and https; + * The "official", designated URL of the site; can be defined as a complete URL; or derived from the "official" + * hostname. If none of these options is set, defaults to the InetAddress.getLocalHOst() and https; */ private static String getDataverseSiteUrl() { - String hostUrl = System.getProperty(SITE_URL); + final String hostUrl = System.getProperty(SITE_URL); if (hostUrl != null && !"".equals(hostUrl)) { return hostUrl; } @@ -1202,34 +1226,32 @@ private static String getDataverseSiteUrl() { if (hostName == null) { try { hostName = InetAddress.getLocalHost().getCanonicalHostName(); - } catch (UnknownHostException e) { + } catch (final UnknownHostException e) { hostName = null; } } - + if (hostName != null) { return "https://" + hostName; } - + return "http://localhost:8080"; } - - - - - // Methods specific to the tabular data ("") section. - // Note that these do NOT operate on DTO objects, but instead directly - // on Dataverse DataVariable, DataTable, etc. objects. - // This is because for this release (4.5) we are recycling the already available - // code, and this is what we got. (We already have DTO objects for DataTable, - // and DataVariable, etc., but the current version JsonPrinter.jsonAsDatasetDto() - // does not produce JSON for these objects - it stops at DataFile. Eventually + + // Methods specific to the tabular data ("") section. + // Note that these do NOT operate on DTO objects, but instead directly + // on Dataverse DataVariable, DataTable, etc. objects. + // This is because for this release (4.5) we are recycling the already available + // code, and this is what we got. (We already have DTO objects for DataTable, + // and DataVariable, etc., but the current version JsonPrinter.jsonAsDatasetDto() + // does not produce JSON for these objects - it stops at DataFile. Eventually // we want all of our objects to be exportable as JSON, and then all the exports - // can go through the same DTO state... But we don't have time for it now; - // plus, the structure of file-level metadata is currently being re-designed, + // can go through the same DTO state... But we don't have time for it now; + // plus, the structure of file-level metadata is currently being re-designed, // so we probably should not invest any time into it right now). -- L.A. 4.5 - - private static void createDataDscr(XMLStreamWriter xmlw, DatasetVersion datasetVersion) throws XMLStreamException { + + private static void createDataDscr(final XMLStreamWriter xmlw, final DatasetVersion datasetVersion) + throws XMLStreamException { if (datasetVersion.getFileMetadatas() == null || datasetVersion.getFileMetadatas().isEmpty()) { return; @@ -1237,10 +1259,10 @@ private static void createDataDscr(XMLStreamWriter xmlw, DatasetVersion datasetV boolean tabularData = false; - // we're not writing the opening tag until we find an actual + // we're not writing the opening tag until we find an actual // tabular datafile. - for (FileMetadata fileMetadata : datasetVersion.getFileMetadatas()) { - DataFile dataFile = fileMetadata.getDataFile(); + for (final FileMetadata fileMetadata : datasetVersion.getFileMetadatas()) { + final DataFile dataFile = fileMetadata.getDataFile(); if (dataFile != null && dataFile.isTabularData()) { if (!tabularData) { @@ -1248,9 +1270,9 @@ private static void createDataDscr(XMLStreamWriter xmlw, DatasetVersion datasetV tabularData = true; } - List vars = dataFile.getDataTable().getDataVariables(); + final List vars = dataFile.getDataTable().getDataVariables(); - for (DataVariable var : vars) { + for (final DataVariable var : vars) { createVarDDI(xmlw, var); } } @@ -1260,8 +1282,8 @@ private static void createDataDscr(XMLStreamWriter xmlw, DatasetVersion datasetV xmlw.writeEndElement(); // dataDscr } } - - private static void createVarDDI(XMLStreamWriter xmlw, DataVariable dv) throws XMLStreamException { + + private static void createVarDDI(final XMLStreamWriter xmlw, final DataVariable dv) throws XMLStreamException { xmlw.writeStartElement("var"); writeAttribute(xmlw, "ID", "v" + dv.getId().toString()); writeAttribute(xmlw, "name", dv.getName()); @@ -1275,7 +1297,7 @@ private static void createVarDDI(XMLStreamWriter xmlw, DataVariable dv) throws X } if (dv.getInterval() != null) { - String interval = dv.getIntervalLabel(); + final String interval = dv.getIntervalLabel(); if (interval != null) { writeAttribute(xmlw, "intrvl", interval); } @@ -1300,13 +1322,14 @@ private static void createVarDDI(XMLStreamWriter xmlw, DataVariable dv) throws X xmlw.writeStartElement("labl"); writeAttribute(xmlw, "level", "variable"); xmlw.writeCharacters(dv.getLabel()); - xmlw.writeEndElement(); //labl + xmlw.writeEndElement(); // labl } // invalrng boolean invalrngAdded = false; - for (VariableRange range : dv.getInvalidRanges()) { - //if (range.getBeginValueType() != null && range.getBeginValueType().getName().equals(DB_VAR_RANGE_TYPE_POINT)) { + for (final VariableRange range : dv.getInvalidRanges()) { + // if (range.getBeginValueType() != null && + // range.getBeginValueType().getName().equals(DB_VAR_RANGE_TYPE_POINT)) { if (range.getBeginValueType() != null && range.isBeginValueTypePoint()) { if (range.getBeginValue() != null) { invalrngAdded = checkParentElement(xmlw, "invalrng", invalrngAdded); @@ -1336,15 +1359,15 @@ private static void createVarDDI(XMLStreamWriter xmlw, DataVariable dv) throws X xmlw.writeEndElement(); // invalrng } - //universe + // universe if (!StringUtilisEmpty(dv.getUniverse())) { xmlw.writeStartElement("universe"); xmlw.writeCharacters(dv.getUniverse()); - xmlw.writeEndElement(); //universe + xmlw.writeEndElement(); // universe } - //sum stats - for (SummaryStatistic sumStat : dv.getSummaryStatistics()) { + // sum stats + for (final SummaryStatistic sumStat : dv.getSummaryStatistics()) { xmlw.writeStartElement("sumStat"); if (sumStat.getTypeLabel() != null) { writeAttribute(xmlw, "type", sumStat.getTypeLabel()); @@ -1352,11 +1375,11 @@ private static void createVarDDI(XMLStreamWriter xmlw, DataVariable dv) throws X writeAttribute(xmlw, "type", "unknown"); } xmlw.writeCharacters(sumStat.getValue()); - xmlw.writeEndElement(); //sumStat + xmlw.writeEndElement(); // sumStat } // categories - for (VariableCategory cat : dv.getCategories()) { + for (final VariableCategory cat : dv.getCategories()) { xmlw.writeStartElement("catgry"); if (cat.isMissing()) { writeAttribute(xmlw, "missing", "Y"); @@ -1365,14 +1388,14 @@ private static void createVarDDI(XMLStreamWriter xmlw, DataVariable dv) throws X // catValu xmlw.writeStartElement("catValu"); xmlw.writeCharacters(cat.getValue()); - xmlw.writeEndElement(); //catValu + xmlw.writeEndElement(); // catValu // label if (!StringUtilisEmpty(cat.getLabel())) { xmlw.writeStartElement("labl"); writeAttribute(xmlw, "level", "category"); xmlw.writeCharacters(cat.getLabel()); - xmlw.writeEndElement(); //labl + xmlw.writeEndElement(); // labl } // catStat @@ -1385,10 +1408,10 @@ private static void createVarDDI(XMLStreamWriter xmlw, DataVariable dv) throws X } else { xmlw.writeCharacters(cat.getFrequency().toString()); } - xmlw.writeEndElement(); //catStat + xmlw.writeEndElement(); // catStat } - xmlw.writeEndElement(); //catgry + xmlw.writeEndElement(); // catgry } // varFormat @@ -1401,7 +1424,7 @@ private static void createVarDDI(XMLStreamWriter xmlw, DataVariable dv) throws X throw new XMLStreamException("Illegal Variable Format Type!"); } writeAttribute(xmlw, "formatname", dv.getFormat()); - //experiment writeAttribute(xmlw, "schema", dv.getFormatSchema()); + // experiment writeAttribute(xmlw, "schema", dv.getFormatSchema()); writeAttribute(xmlw, "category", dv.getFormatCategory()); // notes @@ -1411,20 +1434,21 @@ private static void createVarDDI(XMLStreamWriter xmlw, DataVariable dv) throws X writeAttribute(xmlw, "level", "variable"); writeAttribute(xmlw, "type", "Dataverse:UNF"); xmlw.writeCharacters(dv.getUnf()); - xmlw.writeEndElement(); //notes + xmlw.writeEndElement(); // notes } - xmlw.writeEndElement(); //var + xmlw.writeEndElement(); // var } - - private static void createFileDscr(XMLStreamWriter xmlw, DatasetVersion datasetVersion) throws XMLStreamException { - String dataverseUrl = getDataverseSiteUrl(); - for (FileMetadata fileMetadata : datasetVersion.getFileMetadatas()) { - DataFile dataFile = fileMetadata.getDataFile(); + + private static void createFileDscr(final XMLStreamWriter xmlw, final DatasetVersion datasetVersion) + throws XMLStreamException { + final String dataverseUrl = getDataverseSiteUrl(); + for (final FileMetadata fileMetadata : datasetVersion.getFileMetadatas()) { + final DataFile dataFile = fileMetadata.getDataFile(); if (dataFile != null && dataFile.isTabularData()) { - DataTable dt = dataFile.getDataTable(); + final DataTable dt = dataFile.getDataTable(); xmlw.writeStartElement("fileDscr"); writeAttribute(xmlw, "ID", "f" + dataFile.getId()); writeAttribute(xmlw, "URI", dataverseUrl + "/api/access/datafile/" + dataFile.getId()); @@ -1492,10 +1516,9 @@ private static void createFileDscr(XMLStreamWriter xmlw, DatasetVersion datasetV } } } - - - private static boolean checkParentElement(XMLStreamWriter xmlw, String elementName, boolean elementAdded) throws XMLStreamException { + private static boolean checkParentElement(final XMLStreamWriter xmlw, final String elementName, + final boolean elementAdded) throws XMLStreamException { if (!elementAdded) { xmlw.writeStartElement(elementName); } diff --git a/src/test/java/edu/harvard/iq/dataverse/util/xml/XmlPrinterTest.java b/src/test/java/edu/harvard/iq/dataverse/util/xml/XmlPrinterTest.java index 8b027b797c5..ff3c0b29d99 100644 --- a/src/test/java/edu/harvard/iq/dataverse/util/xml/XmlPrinterTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/util/xml/XmlPrinterTest.java @@ -1,18 +1,17 @@ package edu.harvard.iq.dataverse.util.xml; -import org.junit.Test; import static org.junit.Assert.assertEquals; +import org.junit.Test; + public class XmlPrinterTest { @Test public void testPrettyPrintXmlShort() { - String xml = "baz"; - String expResult = "\n" - + "\n" - + " baz\n" - + "\n"; - String result = XmlPrinter.prettyPrintXml(xml); + final String xml = "baz"; + final String expResult = + "" + "\n" + " baz\n" + "\n"; + final String result = XmlPrinter.prettyPrintXml(xml); assertEquals(expResult, result); }