diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/JSONServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/JSONServlet.java
index e250fece0..85d1ff5e5 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/JSONServlet.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/JSONServlet.java
@@ -97,7 +97,7 @@ public class JSONServlet extends VitroHttpServlet {
log.debug("parameter vclassId URI parameter expected ");
throw new Exception("parameter vclassId URI parameter expected ");
}
- rObj = getLuceneIndividualsByVClass(vclass.getURI(),req,resp,getServletContext());
+ rObj = getLuceneIndividualsByVClass(vclass.getURI(),req, getServletContext());
}catch(Exception ex){
errorMessage = ex.toString();
log.error(ex,ex);
@@ -126,7 +126,7 @@ public class JSONServlet extends VitroHttpServlet {
}
- protected static JSONObject getLuceneIndividualsByVClass(String vclassURI, HttpServletRequest req, HttpServletResponse resp, ServletContext context) throws Exception {
+ public static JSONObject getLuceneIndividualsByVClass(String vclassURI, HttpServletRequest req, ServletContext context) throws Exception {
VitroRequest vreq = new VitroRequest(req);
VClass vclass=null;
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/JSONtoFmModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/JSONtoFmModel.java
new file mode 100644
index 000000000..707138fcc
--- /dev/null
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/JSONtoFmModel.java
@@ -0,0 +1,202 @@
+package edu.cornell.mannlib.vitro.webapp.utils;
+
+/*
+ * Copyright (C) 2005-2010 Alfresco Software Limited.
+ *
+ * This file is part of Alfresco
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
+//import java.util.regex.Pattern;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.json.JSONTokener;
+//import org.springframework.extensions.surf.util.ISO8601DateFormat;
+
+/**
+ * Utility to convert JSON to Freemarker-compatible data model
+ *
+ * @author janv
+ */
+public final class JSONtoFmModel
+{
+ public static String ROOT_ARRAY = "root";
+
+ // note: current format is dependent on ISO8601DateFormat.parser, eg. YYYY-MM-DDThh:mm:ss.sssTZD
+// private static String REGEXP_ISO8061 = "^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(.([0-9]){3})?(Z|[\\+\\-]([0-9]{2}):([0-9]{2}))$";
+// private static Pattern matcherISO8601 = Pattern.compile(REGEXP_ISO8061);
+//
+// public static boolean autoConvertISO8601 = true;
+
+ /**
+ * Convert JSON Object string to Freemarker-compatible data model
+ *
+ * @param jsonString
+ * @return model
+ * @throws JSONException
+ */
+ public static Map convertJSONObjectToMap(String jsonString) throws JSONException
+ {
+ JSONObject jo = new JSONObject(new JSONTokener(jsonString));
+ return convertJSONObjectToMap(jo);
+ }
+
+ /**
+ * JSONObject is an unordered collection of name/value pairs -> convert to Map (equivalent to Freemarker "hash")
+ */
+ @SuppressWarnings("unchecked")
+ public static Map convertJSONObjectToMap(JSONObject jo) throws JSONException
+ {
+ Map model = new HashMap();
+
+ Iterator itr = (Iterator)jo.keys();
+ while (itr.hasNext())
+ {
+ String key = (String)itr.next();
+
+ Object o = jo.get(key);
+ if (o instanceof JSONObject)
+ {
+ model.put(key, convertJSONObjectToMap((JSONObject)o));
+ }
+ else if (o instanceof JSONArray)
+ {
+ model.put(key, convertJSONArrayToList((JSONArray)o));
+ }
+ else if (o == JSONObject.NULL)
+ {
+ model.put(key, null); // note: http://freemarker.org/docs/dgui_template_exp.html#dgui_template_exp_missing
+ }
+ else
+ {
+// if ((o instanceof String) && autoConvertISO8601 && (matcherISO8601.matcher((String)o).matches()))
+// {
+// o = ISO8601DateFormat.parse((String)o);
+// }
+
+ model.put(key, o);
+ }
+ }
+
+ return model;
+ }
+
+ /**
+ * Convert JSON Array string to Freemarker-compatible data model
+ *
+ * @param jsonString
+ * @return model
+ * @throws JSONException
+ */
+ public static Map convertJSONArrayToMap(String jsonString) throws JSONException
+ {
+ Map model = new HashMap();
+ JSONArray ja = new JSONArray(new JSONTokener(jsonString));
+ model.put(ROOT_ARRAY, convertJSONArrayToList(ja));
+ return model;
+ }
+
+ /**
+ * JSONArray is an ordered sequence of values -> convert to List (equivalent to Freemarker "sequence")
+ */
+ public static List