Merge branch 'Jalview-BH/JAL-3026-JAL-3063-JAXB' into Jalview-JS/demo
[jalview.git] / src / jalview / util / JSONUtils.java
index cdfc88e..f91275d 100644 (file)
@@ -1,6 +1,14 @@
 package jalview.util;
 
-import org.json.simple.JSONArray;
+import jalview.javascript.json.JSON;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.List;
+
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
 
 public class JSONUtils
 {
@@ -12,23 +20,68 @@ public class JSONUtils
    * @param jsonArray
    * @return
    */
-  public static String arrayToList(JSONArray jsonArray)
+  public static String arrayToStringList(List<Object> jsonArray)
   {
-    if (jsonArray == null)
+       int n;
+       
+    if (jsonArray == null || (n = jsonArray.size()) == 0)
     {
       return null;
     }
 
-    StringBuilder sb = new StringBuilder();
-    for (int i = 0; i < jsonArray.size(); i++)
+    /**
+     * @j2sNative
+     * 
+     * return jsonArray.elementData.slice(0, n).join(",");
+     */
     {
-      if (i > 0)
-      {
-        sb.append(",");
-      }
-      sb.append(jsonArray.get(i).toString());
+           StringBuilder sb = new StringBuilder();
+           for (int i = 0; i < n; i++)
+           {
+             if (i > 0)
+             {
+               sb.append(",");
+             }
+             sb.append(jsonArray.get(i).toString());
+           }
+           return sb.toString();
     }
-    return sb.length() == 0 ? null : sb.toString();
+  }
+
+  /**
+   * The method all JSON parsing must go through for JavaScript. 
+   * @param r a BufferedReader or a javascript.json.JSON.JSONReader
+   * @return
+   * @throws IOException
+   * @throws ParseException
+   */
+  public static Object parse(Reader r) throws IOException, ParseException 
+  {
+      // Using a file reader is not currently supported in SwingJS JavaScript
+
+         if (r == null)
+                 return null;
+//       
+//             Platform.timeCheck("JSONUtils.parse0 ", Platform.TIME_MARK);
+
+       Object ret;    
+       if (Platform.isJS()) 
+       {
+         if (r instanceof FileReader) 
+         {
+           throw new IOException("StringJS does not support FileReader parsing for JSON -- but it could...");
+         }
+         return JSON.parse(r);
+       } else {
+        ret = new JSONParser().parse(r);
+       }
+//     Platform.timeCheck("JSONUtils.parse1 ", Platform.TIME_MARK);
+       return ret;
+  }
+
+  public static Object parse(String json) throws ParseException 
+  {
+       return (Platform.isJS() ? JSON.parse(json) : new JSONParser().parse(json));
   }
 
 }