Skip to content

Commit 93f6600

Browse files
committed
number vs string and npe fixes
1 parent cf36eef commit 93f6600

1 file changed

Lines changed: 100 additions & 88 deletions

File tree

src/main/java/edu/harvard/iq/dataverse/export/ddi/DdiExportUtil.java

Lines changed: 100 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -1750,7 +1750,7 @@ public static void createDataDscr(XMLStreamWriter xmlw, JsonArray fileDetails) t
17501750
if (vars != null) {
17511751
for (int j = 0; j < vars.size(); j++) {
17521752
createVarDDI(xmlw, vars.getJsonObject(j), fileJson.getJsonNumber("id").toString(),
1753-
fileJson.getString("fileMetadataId"));
1753+
fileJson.getJsonNumber("fileMetadataId").toString());
17541754
}
17551755
}
17561756
}
@@ -1797,7 +1797,7 @@ private static void createVarDDI(XMLStreamWriter xmlw, JsonObject dvar, String f
17971797
}
17981798

17991799
if (dvar.containsKey("numberOfDecimalPoints")) {
1800-
writeAttribute(xmlw, "dcml", dvar.getString("numberOfDecimalPoints"));
1800+
writeAttribute(xmlw, "dcml", dvar.getJsonNumber("numberOfDecimalPoints").toString());
18011801
}
18021802

18031803
if (dvar.getBoolean("isOrderedCategorical")) {
@@ -1820,13 +1820,13 @@ private static void createVarDDI(XMLStreamWriter xmlw, JsonObject dvar, String f
18201820
// location
18211821
xmlw.writeEmptyElement("location");
18221822
if (dvar.containsKey("fileStartPosition")) {
1823-
writeAttribute(xmlw, "StartPos", dvar.getString("fileStartPosition"));
1823+
writeAttribute(xmlw, "StartPos", dvar.getJsonNumber("fileStartPosition").toString());
18241824
}
18251825
if (dvar.containsKey("fileEndPosition")) {
1826-
writeAttribute(xmlw, "EndPos", dvar.getString("fileEndPosition"));
1826+
writeAttribute(xmlw, "EndPos", dvar.getJsonNumber("fileEndPosition").toString());
18271827
}
18281828
if (dvar.containsKey("recordSegmentNumber")) {
1829-
writeAttribute(xmlw, "RecSegNo", dvar.getString("recordSegmentNumber"));
1829+
writeAttribute(xmlw, "RecSegNo", dvar.getJsonNumber("recordSegmentNumber").toString());
18301830
}
18311831

18321832
writeAttribute(xmlw, "fileid", "f" + fileId);
@@ -1867,38 +1867,41 @@ private static void createVarDDI(XMLStreamWriter xmlw, JsonObject dvar, String f
18671867
}
18681868

18691869
// invalrng
1870-
boolean invalrngAdded = false;
1871-
JsonArray ranges = dvar.getJsonArray("invalidRanges");
1872-
for (int i=0;i<ranges.size();i++) {
1873-
JsonObject range = ranges.getJsonObject(0);
1874-
//if (range.getBeginValueType() != null && range.getBeginValueType().getName().equals(DB_VAR_RANGE_TYPE_POINT)) {
1875-
if (range.getBoolean("hasBeginValueType") && range.getBoolean("isBeginValueTypePoint")) {
1876-
if (range.containsKey("beginValue")) {
1870+
if (dvar.containsKey("invalidRanges")) {
1871+
boolean invalrngAdded = false;
1872+
JsonArray ranges = dvar.getJsonArray("invalidRanges");
1873+
for (int i = 0; i < ranges.size(); i++) {
1874+
JsonObject range = ranges.getJsonObject(0);
1875+
// if (range.getBeginValueType() != null &&
1876+
// range.getBeginValueType().getName().equals(DB_VAR_RANGE_TYPE_POINT)) {
1877+
if (range.getBoolean("hasBeginValueType") && range.getBoolean("isBeginValueTypePoint")) {
1878+
if (range.containsKey("beginValue")) {
1879+
invalrngAdded = checkParentElement(xmlw, "invalrng", invalrngAdded);
1880+
xmlw.writeEmptyElement("item");
1881+
writeAttribute(xmlw, "VALUE", range.getString("beginValue"));
1882+
}
1883+
} else {
18771884
invalrngAdded = checkParentElement(xmlw, "invalrng", invalrngAdded);
1878-
xmlw.writeEmptyElement("item");
1879-
writeAttribute(xmlw, "VALUE", range.getString("beginValue"));
1880-
}
1881-
} else {
1882-
invalrngAdded = checkParentElement(xmlw, "invalrng", invalrngAdded);
1883-
xmlw.writeEmptyElement("range");
1884-
if (range.getBoolean("hasBeginValueType") && range.containsKey("beginValue")) {
1885-
if (range.getBoolean("isBeginValueTypeMin")) {
1886-
writeAttribute(xmlw, "min", range.getString("beginValue"));
1887-
} else if (range.getBoolean("isBeginValueTypeMinExcl")) {
1888-
writeAttribute(xmlw, "minExclusive", range.getString("beginValue"));
1885+
xmlw.writeEmptyElement("range");
1886+
if (range.getBoolean("hasBeginValueType") && range.containsKey("beginValue")) {
1887+
if (range.getBoolean("isBeginValueTypeMin")) {
1888+
writeAttribute(xmlw, "min", range.getString("beginValue"));
1889+
} else if (range.getBoolean("isBeginValueTypeMinExcl")) {
1890+
writeAttribute(xmlw, "minExclusive", range.getString("beginValue"));
1891+
}
18891892
}
1890-
}
1891-
if (range.getBoolean("hasEndValueType") && range.containsKey("endValue")) {
1892-
if (range.getBoolean("isEndValueTypeMax")) {
1893-
writeAttribute(xmlw, "max", range.getString("endValue"));
1894-
} else if (range.getBoolean("isEndValueTypeMaxExcl")) {
1895-
writeAttribute(xmlw, "maxExclusive", range.getString("endValue"));
1893+
if (range.getBoolean("hasEndValueType") && range.containsKey("endValue")) {
1894+
if (range.getBoolean("isEndValueTypeMax")) {
1895+
writeAttribute(xmlw, "max", range.getString("endValue"));
1896+
} else if (range.getBoolean("isEndValueTypeMaxExcl")) {
1897+
writeAttribute(xmlw, "maxExclusive", range.getString("endValue"));
1898+
}
18961899
}
18971900
}
18981901
}
1899-
}
1900-
if (invalrngAdded) {
1901-
xmlw.writeEndElement(); // invalrng
1902+
if (invalrngAdded) {
1903+
xmlw.writeEndElement(); // invalrng
1904+
}
19021905
}
19031906

19041907
//universe
@@ -1910,67 +1913,72 @@ private static void createVarDDI(XMLStreamWriter xmlw, JsonObject dvar, String f
19101913
}
19111914
}
19121915

1913-
//sum stats
1914-
for (Entry<String, JsonValue> sumStat : dvar.getJsonObject("summaryStatistics").entrySet()) {
1915-
xmlw.writeStartElement("sumStat");
1916-
writeAttribute(xmlw, "type", sumStat.getKey());
1917-
xmlw.writeCharacters(sumStat.getValue().toString());
1918-
xmlw.writeEndElement(); //sumStat
1916+
// sum stats
1917+
if (dvar.containsKey("summaryStatistics")) {
1918+
for (Entry<String, JsonValue> sumStat : dvar.getJsonObject("summaryStatistics").entrySet()) {
1919+
xmlw.writeStartElement("sumStat");
1920+
writeAttribute(xmlw, "type", sumStat.getKey());
1921+
xmlw.writeCharacters(sumStat.getValue().toString());
1922+
xmlw.writeEndElement(); // sumStat
1923+
}
19191924
}
19201925

19211926
// categories
1922-
JsonArray varCats = dvar.getJsonArray("variableCategories");
1923-
for (int i=0;i<varCats.size();i++) {
1924-
JsonObject varCat = varCats.getJsonObject(i);
1925-
xmlw.writeStartElement("catgry");
1926-
if (varCat.getBoolean("isMissing")) {
1927-
writeAttribute(xmlw, "missing", "Y");
1928-
}
1929-
1930-
// catValu
1931-
xmlw.writeStartElement("catValu");
1932-
xmlw.writeCharacters(varCat.getString("value"));
1933-
xmlw.writeEndElement(); //catValu
1927+
if (dvar.containsKey("variableCategories")) {
1928+
JsonArray varCats = dvar.getJsonArray("variableCategories");
1929+
for (int i = 0; i < varCats.size(); i++) {
1930+
JsonObject varCat = varCats.getJsonObject(i);
1931+
xmlw.writeStartElement("catgry");
1932+
if (varCat.getBoolean("isMissing")) {
1933+
writeAttribute(xmlw, "missing", "Y");
1934+
}
19341935

1935-
// label
1936-
if (varCat.containsKey("label")) {
1937-
xmlw.writeStartElement("labl");
1938-
writeAttribute(xmlw, "level", "category");
1939-
xmlw.writeCharacters(varCat.getString("label"));
1940-
xmlw.writeEndElement(); //labl
1941-
}
1936+
// catValu
1937+
xmlw.writeStartElement("catValu");
1938+
xmlw.writeCharacters(varCat.getString("value"));
1939+
xmlw.writeEndElement(); // catValu
1940+
1941+
// label
1942+
if (varCat.containsKey("label")) {
1943+
xmlw.writeStartElement("labl");
1944+
writeAttribute(xmlw, "level", "category");
1945+
xmlw.writeCharacters(varCat.getString("label"));
1946+
xmlw.writeEndElement(); // labl
1947+
}
19421948

1943-
// catStat
1944-
if (varCat.containsKey("frequency")) {
1945-
xmlw.writeStartElement("catStat");
1946-
writeAttribute(xmlw, "type", "freq");
1947-
Double freq = Double.parseDouble(varCat.getString("frequency"));
1948-
// if frequency is actually a long value, we want to write "100" instead of "100.0"
1949-
if (Math.floor(freq) == freq) {
1950-
xmlw.writeCharacters(Long.valueOf(freq.longValue()).toString());
1951-
} else {
1952-
xmlw.writeCharacters(freq.toString());
1949+
// catStat
1950+
if (varCat.containsKey("frequency")) {
1951+
xmlw.writeStartElement("catStat");
1952+
writeAttribute(xmlw, "type", "freq");
1953+
Double freq = varCat.getJsonNumber("frequency").doubleValue();
1954+
// if frequency is actually a long value, we want to write "100" instead of
1955+
// "100.0"
1956+
if (Math.floor(freq) == freq) {
1957+
xmlw.writeCharacters(Long.valueOf(freq.longValue()).toString());
1958+
} else {
1959+
xmlw.writeCharacters(freq.toString());
1960+
}
1961+
xmlw.writeEndElement(); // catStat
19531962
}
1954-
xmlw.writeEndElement(); //catStat
1955-
}
19561963

1957-
//catStat weighted freq
1958-
if (vm != null && vm.getBoolean("isWeighted")) {
1959-
JsonArray catMetas = vm.getJsonArray("categoryMetadatas");
1960-
for (int j=0;i<catMetas.size();j++) {
1961-
JsonObject cm = catMetas.getJsonObject(j);
1962-
if (cm.getString("categoryValue").equals(varCat.getString("value"))) {
1963-
xmlw.writeStartElement("catStat");
1964-
writeAttribute(xmlw, "wgtd", "wgtd");
1965-
writeAttribute(xmlw, "type", "freq");
1966-
xmlw.writeCharacters(cm.getString("wFreq"));
1967-
xmlw.writeEndElement(); //catStat
1968-
break;
1964+
// catStat weighted freq
1965+
if (vm != null && vm.getBoolean("isWeighted")) {
1966+
JsonArray catMetas = vm.getJsonArray("categoryMetadatas");
1967+
for (int j = 0; i < catMetas.size(); j++) {
1968+
JsonObject cm = catMetas.getJsonObject(j);
1969+
if (cm.getString("categoryValue").equals(varCat.getString("value"))) {
1970+
xmlw.writeStartElement("catStat");
1971+
writeAttribute(xmlw, "wgtd", "wgtd");
1972+
writeAttribute(xmlw, "type", "freq");
1973+
xmlw.writeCharacters(cm.getJsonNumber("wFreq").toString());
1974+
xmlw.writeEndElement(); // catStat
1975+
break;
1976+
}
19691977
}
19701978
}
1971-
}
19721979

1973-
xmlw.writeEndElement(); //catgry
1980+
xmlw.writeEndElement(); // catgry
1981+
}
19741982
}
19751983

19761984

@@ -1981,9 +1989,13 @@ private static void createVarDDI(XMLStreamWriter xmlw, JsonObject dvar, String f
19811989
} else {
19821990
throw new XMLStreamException("Illegal Variable Format Type!");
19831991
}
1984-
writeAttribute(xmlw, "formatname", dvar.getString("format"));
1992+
if(dvar.containsKey("format")) {
1993+
writeAttribute(xmlw, "formatname", dvar.getString("format"));
1994+
}
19851995
//experiment writeAttribute(xmlw, "schema", dv.getFormatSchema());
1986-
writeAttribute(xmlw, "category", dvar.getString("formatCategory"));
1996+
if(dvar.containsKey("formatCategory")) {
1997+
writeAttribute(xmlw, "category", dvar.getString("formatCategory"));
1998+
}
19871999

19882000
// notes
19892001
if (dvar.containsKey("UNF") && !dvar.getString("UNF").isBlank()) {
@@ -2031,19 +2043,19 @@ private static void createFileDscr(XMLStreamWriter xmlw, JsonArray fileDetails)
20312043

20322044
if (dt.containsKey("caseQuantity")) {
20332045
xmlw.writeStartElement("caseQnty");
2034-
xmlw.writeCharacters(dt.getString("caseQuantity"));
2046+
xmlw.writeCharacters(dt.getJsonNumber("caseQuantity").toString());
20352047
xmlw.writeEndElement(); // caseQnty
20362048
}
20372049

20382050
if (dt.containsKey("varQuantity")) {
20392051
xmlw.writeStartElement("varQnty");
2040-
xmlw.writeCharacters(dt.getString("varQuantity"));
2052+
xmlw.writeCharacters(dt.getJsonNumber("varQuantity").toString());
20412053
xmlw.writeEndElement(); // varQnty
20422054
}
20432055

20442056
if (dt.containsKey("recordsPerCase")) {
20452057
xmlw.writeStartElement("recPrCas");
2046-
xmlw.writeCharacters(dt.getString("recordsPerCase"));
2058+
xmlw.writeCharacters(dt.getJsonNumber("recordsPerCase").toString());
20472059
xmlw.writeEndElement(); // recPrCas
20482060
}
20492061

0 commit comments

Comments
 (0)