From 916640ef43bf1e105815fec498cfffe826182189 Mon Sep 17 00:00:00 2001 From: Graham Triggs Date: Fri, 15 Sep 2017 18:30:53 +0100 Subject: [PATCH] [VIVO-1320] Convert some org.json usages to Jackson --- .../controller/AutocompleteController.java | 18 +++++++++------- .../DataAutocompleteController.java | 8 +++++-- .../utils/dataGetter/ClassGroupPageData.java | 7 +++---- .../utils/dataGetter/DataGetterUtils.java | 21 +++++++++---------- .../IndividualsForClassesDataGetter.java | 7 +++---- 5 files changed, 33 insertions(+), 28 deletions(-) diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java index ad6b893ce..5d3a48c1f 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java @@ -16,11 +16,12 @@ import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.json.JSONArray; -import org.json.JSONObject; import edu.cornell.mannlib.vitro.webapp.application.ApplicationUtils; import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission; @@ -148,10 +149,10 @@ public class AutocompleteController extends VitroAjaxController { Collections.sort(results); - JSONArray jsonArray = new JSONArray(); + ArrayNode jsonArray = JsonNodeFactory.instance.arrayNode(); for (SearchResult result : results) { //jsonArray.put(result.toMap()); - jsonArray.put(result.toJSONObject()); + jsonArray.add(result.toJSONObject()); } response.getWriter().write(jsonArray.toString()); @@ -356,8 +357,8 @@ public class AutocompleteController extends VitroAjaxController { //Simply passing in the array in the map converts it to a string and not to an array //which is what we want so need to convert to an object instad - JSONObject toJSONObject() { - JSONObject jsonObj = new JSONObject(); + ObjectNode toJSONObject() { + ObjectNode jsonObj = JsonNodeFactory.instance.objectNode(); try { jsonObj.put("label", label); jsonObj.put("uri", uri); @@ -365,7 +366,10 @@ public class AutocompleteController extends VitroAjaxController { //But this should really be changed so that the entire array is all that should be returned jsonObj.put("msType", msType); //map.put("allMsTypes", allMsTypes); - JSONArray allMsTypesArray = new JSONArray(allMsTypes); + ArrayNode allMsTypesArray = JsonNodeFactory.instance.arrayNode(); + for (String msType : allMsTypes) { + allMsTypesArray.add(msType); + } jsonObj.put("allMsTypes", allMsTypesArray); } catch(Exception ex) { log.error("Error occurred in converting values to JSON object", ex); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/DataAutocompleteController.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/DataAutocompleteController.java index 8e10c8c01..b6596e7bf 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/DataAutocompleteController.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/DataAutocompleteController.java @@ -12,9 +12,10 @@ import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletResponse; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.json.JSONArray; import org.apache.jena.query.Dataset; import org.apache.jena.query.DatasetFactory; @@ -107,7 +108,10 @@ public class DataAutocompleteController extends VitroAjaxController { String dataValue = dataLiteral.getString(); outputResults.add(dataValue); } - JSONArray jsonArray = new JSONArray(outputResults); + ArrayNode jsonArray = JsonNodeFactory.instance.arrayNode(); + for (String res : outputResults) { + jsonArray.add(res); + } try { response.getWriter().write(jsonArray.toString()); } catch (Throwable e) { diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/ClassGroupPageData.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/ClassGroupPageData.java index 9789b1fd5..e678f012e 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/ClassGroupPageData.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/ClassGroupPageData.java @@ -8,9 +8,9 @@ import java.util.Map; import javax.servlet.ServletContext; +import com.fasterxml.jackson.databind.JsonNode; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.json.JSONObject; import org.apache.jena.rdf.model.Model; @@ -180,9 +180,8 @@ public class ClassGroupPageData extends DataGetterBase implements DataGetter{ * For processing of JSONObject */ //Currently empty, TODO: Review requirements - public JSONObject convertToJSON(Map dataMap, VitroRequest vreq) { - JSONObject rObj = null; - return rObj; + public JsonNode convertToJSON(Map dataMap, VitroRequest vreq) { + return null; } protected static void setAllClassCountsToZero(VClassGroup vcg){ for(VClass vc : vcg){ diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/DataGetterUtils.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/DataGetterUtils.java index ce16b010a..b290d3122 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/DataGetterUtils.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/DataGetterUtils.java @@ -10,10 +10,12 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.json.JSONObject; import org.apache.jena.query.Query; import org.apache.jena.query.QueryExecution; @@ -313,17 +315,14 @@ public class DataGetterUtils { * * Convert data to JSON for page uri based on type and related datagetters * TODO: How to handle different data getters? Will this replace json fields or add to them? - * @throws ClassNotFoundException - * @throws IllegalAccessException - * @throws InstantiationException */ - public static JSONObject covertDataToJSONForPage(VitroRequest vreq, String pageUri, Model displayModel) throws InstantiationException, IllegalAccessException, ClassNotFoundException { + public static ObjectNode covertDataToJSONForPage(VitroRequest vreq, String pageUri, Model displayModel) throws InstantiationException, IllegalAccessException, ClassNotFoundException { //Get PageDataGetter types associated with pageUri - JSONObject rObj = null; + ObjectNode rObj = null; try{ List dataGetters = getDataGettersForPage(vreq, displayModel, pageUri); for(DataGetter getter: dataGetters) { - JSONObject typeObj = null; + ObjectNode typeObj = null; try{ //Assumes the data getter itself will have a convert to json method /* @@ -394,12 +393,12 @@ public class DataGetterUtils { /* * Copied from JSONServlet as expect this to be related to VitroClassGroup */ - public static JSONObject processVClassGroupJSON(VClassGroup vcg) { - JSONObject map = new JSONObject(); + public static ObjectNode processVClassGroupJSON(VClassGroup vcg) { + ObjectNode map = JsonNodeFactory.instance.objectNode(); try { - ArrayList classes = new ArrayList(vcg.size()); + ArrayNode classes = JsonNodeFactory.instance.arrayNode(); for( VClass vc : vcg){ - JSONObject vcObj = new JSONObject(); + ObjectNode vcObj = JsonNodeFactory.instance.objectNode(); vcObj.put("name", vc.getName()); vcObj.put("URI", vc.getURI()); vcObj.put("entityCount", vc.getEntityCount()); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/IndividualsForClassesDataGetter.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/IndividualsForClassesDataGetter.java index 7e618bd10..1be0d1d08 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/IndividualsForClassesDataGetter.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/IndividualsForClassesDataGetter.java @@ -11,10 +11,10 @@ import java.util.Map; import javax.servlet.ServletContext; +import com.fasterxml.jackson.databind.JsonNode; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.json.JSONObject; import org.apache.jena.query.QueryExecution; import org.apache.jena.query.QueryExecutionFactory; @@ -359,9 +359,8 @@ public class IndividualsForClassesDataGetter extends DataGetterBase implements D /** * For processig of JSONObject */ - public JSONObject convertToJSON(Map dataMap, VitroRequest vreq) { - JSONObject rObj = null; - return rObj; + public JsonNode convertToJSON(Map dataMap, VitroRequest vreq) { + return null; } protected static void setAllClassCountsToZero(VClassGroup vcg){