extensions/net.sf.basedb.meludi/trunk/src/net/sf/basedb/meludi/JsonUtil.java

Code
Comments
Other
Rev Date Author Line
2933 14 Nov 14 olle 1 package net.sf.basedb.meludi;
2933 14 Nov 14 olle 2
4785 27 Apr 18 olle 3 import java.io.BufferedReader;
4785 27 Apr 18 olle 4 import java.io.IOException;
4785 27 Apr 18 olle 5 import java.io.InputStreamReader;
4785 27 Apr 18 olle 6 import java.io.Reader;
4785 27 Apr 18 olle 7 import java.nio.charset.Charset;
2933 14 Nov 14 olle 8 import java.util.Collection;
2933 14 Nov 14 olle 9
4785 27 Apr 18 olle 10 import javax.servlet.http.HttpServletRequest;
2933 14 Nov 14 olle 11 import javax.servlet.http.HttpServletResponse;
2933 14 Nov 14 olle 12
2933 14 Nov 14 olle 13 import net.sf.basedb.core.BioPlate;
2933 14 Nov 14 olle 14 import net.sf.basedb.core.BioWell;
2933 14 Nov 14 olle 15 import net.sf.basedb.core.Hardware;
3431 29 Jun 15 olle 16 import net.sf.basedb.core.ItemList;
2933 14 Nov 14 olle 17 import net.sf.basedb.core.Job;
3660 09 Dec 15 olle 18 import net.sf.basedb.core.Kit;
2933 14 Nov 14 olle 19 import net.sf.basedb.core.Permission;
2933 14 Nov 14 olle 20 import net.sf.basedb.core.Protocol;
2933 14 Nov 14 olle 21 import net.sf.basedb.meludi.converter.ValueConverter;
2933 14 Nov 14 olle 22
2933 14 Nov 14 olle 23 import org.json.simple.JSONArray;
2933 14 Nov 14 olle 24 import org.json.simple.JSONObject;
4785 27 Apr 18 olle 25 import org.json.simple.parser.JSONParser;
4785 27 Apr 18 olle 26 import org.json.simple.parser.ParseException;
2933 14 Nov 14 olle 27
2933 14 Nov 14 olle 28 /**
2933 14 Nov 14 olle 29   Utility functions for JSON.
2933 14 Nov 14 olle 30   @since 1.0
2933 14 Nov 14 olle 31 */
2933 14 Nov 14 olle 32 public class JsonUtil 
2933 14 Nov 14 olle 33 {
2933 14 Nov 14 olle 34   /**
2933 14 Nov 14 olle 35     Set proper response headers for returning a JSON response.
2933 14 Nov 14 olle 36     This sets the content type to: application/json;charset=UTF8
2933 14 Nov 14 olle 37     and disable caching of the responses.
2933 14 Nov 14 olle 38   */
2933 14 Nov 14 olle 39   public static void setJsonResponseHeaders(HttpServletResponse resp)
2933 14 Nov 14 olle 40   {
2933 14 Nov 14 olle 41     resp.setContentType("application/json");
2933 14 Nov 14 olle 42     resp.setCharacterEncoding("UTF-8");
2933 14 Nov 14 olle 43     resp.setHeader("Cache-Control", "no-cache, max-age=0");
2933 14 Nov 14 olle 44   }
2933 14 Nov 14 olle 45
2933 14 Nov 14 olle 46   /**
4785 27 Apr 18 olle 47     Parse the request as JSON data.
4785 27 Apr 18 olle 48     @since 1.6
4785 27 Apr 18 olle 49    */
4785 27 Apr 18 olle 50   public static JSONObject parseRequest(HttpServletRequest request)
4785 27 Apr 18 olle 51     throws IOException, ParseException
4785 27 Apr 18 olle 52   {
4785 27 Apr 18 olle 53     Reader reader = new BufferedReader(new InputStreamReader(request.getInputStream(), Charset.forName("UTF-8")));
4785 27 Apr 18 olle 54     JSONObject json = (JSONObject)new JSONParser().parse(reader);
4785 27 Apr 18 olle 55     return json;
4785 27 Apr 18 olle 56   }
4785 27 Apr 18 olle 57
4785 27 Apr 18 olle 58   /**
2933 14 Nov 14 olle 59     Create a JSON array from a collection.
2933 14 Nov 14 olle 60   */
2933 14 Nov 14 olle 61   @SuppressWarnings("unchecked")
2933 14 Nov 14 olle 62   public static <F> JSONArray toArray(Collection<F> values, ValueConverter<F, ?> converter)
2933 14 Nov 14 olle 63   {
2933 14 Nov 14 olle 64     JSONArray array = new JSONArray();
2933 14 Nov 14 olle 65     if (values != null)
2933 14 Nov 14 olle 66     {
2933 14 Nov 14 olle 67       for (F value : values)
2933 14 Nov 14 olle 68       {
2933 14 Nov 14 olle 69         array.add(converter.convert(value));
2933 14 Nov 14 olle 70       }
2933 14 Nov 14 olle 71     }
2933 14 Nov 14 olle 72     return array;
2933 14 Nov 14 olle 73   }
2933 14 Nov 14 olle 74
2933 14 Nov 14 olle 75   /**
2933 14 Nov 14 olle 76     Get a value from a JSON object as a Float value, or null
2933 14 Nov 14 olle 77     if no value exists.
2933 14 Nov 14 olle 78     @since 2.12
2933 14 Nov 14 olle 79   */
2933 14 Nov 14 olle 80   public static Float getAsFloat(JSONObject json, String key)
2933 14 Nov 14 olle 81   {
2933 14 Nov 14 olle 82     Number n = (Number)json.get(key);
2933 14 Nov 14 olle 83     return n == null ? null : n.floatValue();
2933 14 Nov 14 olle 84   }
2933 14 Nov 14 olle 85   
2933 14 Nov 14 olle 86   @SuppressWarnings("unchecked")
2933 14 Nov 14 olle 87   public static JSONObject getProtocolAsJSON(Protocol p)
2933 14 Nov 14 olle 88   {
2933 14 Nov 14 olle 89     if (p == null) return null;
2933 14 Nov 14 olle 90     JSONObject json = new JSONObject();
2933 14 Nov 14 olle 91     json.put("id", p.getId());
2933 14 Nov 14 olle 92     json.put("name", p.getName());
2933 14 Nov 14 olle 93     json.put("editable", p.hasPermission(Permission.WRITE));
2933 14 Nov 14 olle 94     return json;
2933 14 Nov 14 olle 95   }
2933 14 Nov 14 olle 96
2933 14 Nov 14 olle 97   @SuppressWarnings("unchecked")
3660 09 Dec 15 olle 98   public static JSONObject getKitAsJSON(Kit k)
3660 09 Dec 15 olle 99   {
3660 09 Dec 15 olle 100     if (k == null) return null;
3660 09 Dec 15 olle 101     JSONObject json = new JSONObject();
3660 09 Dec 15 olle 102     json.put("id", k.getId());
3660 09 Dec 15 olle 103     json.put("name", k.getName());
3660 09 Dec 15 olle 104     json.put("editable", k.hasPermission(Permission.WRITE));
3660 09 Dec 15 olle 105     return json;
3660 09 Dec 15 olle 106   }
3660 09 Dec 15 olle 107
3660 09 Dec 15 olle 108   @SuppressWarnings("unchecked")
2933 14 Nov 14 olle 109   public static JSONObject getBioWellAsJSON(BioWell well, boolean includePlateInfo)
2933 14 Nov 14 olle 110   {
2933 14 Nov 14 olle 111     if (well == null) return null;
2933 14 Nov 14 olle 112     JSONObject json = new JSONObject();
2933 14 Nov 14 olle 113
2933 14 Nov 14 olle 114     json.put("id", well.getId());
2933 14 Nov 14 olle 115     json.put("row", well.getRow());
2933 14 Nov 14 olle 116     json.put("column", well.getColumn());
2933 14 Nov 14 olle 117     json.put("location", well.getCoordinate());
2933 14 Nov 14 olle 118     json.put("canAdd", well.canAddBioMaterial());
2933 14 Nov 14 olle 119     json.put("canRemove", well.canClearBioMaterial());
2933 14 Nov 14 olle 120     
2933 14 Nov 14 olle 121     if (includePlateInfo)
2933 14 Nov 14 olle 122     {        
2933 14 Nov 14 olle 123       BioPlate plate = well.getPlate();
2933 14 Nov 14 olle 124       JSONObject jsonPlate = new JSONObject();
2933 14 Nov 14 olle 125       jsonPlate.put("id", plate.getId());
2933 14 Nov 14 olle 126       jsonPlate.put("name", plate.getName());
2933 14 Nov 14 olle 127       jsonPlate.put("barcode", plate.getBarcode());
2933 14 Nov 14 olle 128       jsonPlate.put("editable", plate.hasPermission(Permission.WRITE));
2933 14 Nov 14 olle 129       
2933 14 Nov 14 olle 130       Hardware storage = plate.getFreezer();
2933 14 Nov 14 olle 131       if (storage != null || plate.getSection() != null || plate.getTray() != null || plate.getPosition() != null)
2933 14 Nov 14 olle 132       {
2933 14 Nov 14 olle 133         JSONObject jsonStorage = new JSONObject();
2933 14 Nov 14 olle 134         if (storage != null)
2933 14 Nov 14 olle 135         {
2933 14 Nov 14 olle 136           jsonStorage.put("id", storage.getId());
2933 14 Nov 14 olle 137           jsonStorage.put("name", storage.getName());
2933 14 Nov 14 olle 138         }
2933 14 Nov 14 olle 139         jsonStorage.put("section", plate.getSection());
2933 14 Nov 14 olle 140         jsonStorage.put("tray", plate.getTray());
2933 14 Nov 14 olle 141         jsonStorage.put("position", plate.getPosition());
2933 14 Nov 14 olle 142         jsonPlate.put("storage", jsonStorage);
2933 14 Nov 14 olle 143       }
2933 14 Nov 14 olle 144       
2933 14 Nov 14 olle 145       json.put("bioPlate", jsonPlate);
2933 14 Nov 14 olle 146     }
2933 14 Nov 14 olle 147     return json;
2933 14 Nov 14 olle 148   }
2933 14 Nov 14 olle 149
3207 23 Mar 15 olle 150   @SuppressWarnings("unchecked")
3207 23 Mar 15 olle 151   public static JSONObject getBioPlateAsJSON(BioPlate plate)
3207 23 Mar 15 olle 152   {
3207 23 Mar 15 olle 153     if (plate == null) return null;
3207 23 Mar 15 olle 154     JSONObject json = new JSONObject();
3207 23 Mar 15 olle 155
3207 23 Mar 15 olle 156     JSONObject jsonPlate = new JSONObject();
3207 23 Mar 15 olle 157     json.put("id", plate.getId());
3207 23 Mar 15 olle 158     json.put("name", plate.getName());
3207 23 Mar 15 olle 159     json.put("barcode", plate.getBarcode());
3207 23 Mar 15 olle 160     json.put("editable", plate.hasPermission(Permission.WRITE));
3207 23 Mar 15 olle 161       
3207 23 Mar 15 olle 162     Hardware storage = plate.getFreezer();
3207 23 Mar 15 olle 163     if (storage != null || plate.getSection() != null || plate.getTray() != null || plate.getPosition() != null)
3207 23 Mar 15 olle 164     {
3207 23 Mar 15 olle 165       JSONObject jsonStorage = new JSONObject();
3207 23 Mar 15 olle 166       if (storage != null)
3207 23 Mar 15 olle 167       {
3207 23 Mar 15 olle 168         jsonStorage.put("id", storage.getId());
3207 23 Mar 15 olle 169         jsonStorage.put("name", storage.getName());
3207 23 Mar 15 olle 170       }
3207 23 Mar 15 olle 171       jsonStorage.put("section", plate.getSection());
3207 23 Mar 15 olle 172       jsonStorage.put("tray", plate.getTray());
3207 23 Mar 15 olle 173       jsonStorage.put("position", plate.getPosition());
3207 23 Mar 15 olle 174       json.put("storage", jsonStorage);
3207 23 Mar 15 olle 175     }
3207 23 Mar 15 olle 176     return json;
3207 23 Mar 15 olle 177   }
3207 23 Mar 15 olle 178
2933 14 Nov 14 olle 179   /**
2933 14 Nov 14 olle 180     Get job information as a JSON object.
2933 14 Nov 14 olle 181     @since 2.16
2933 14 Nov 14 olle 182   */
2933 14 Nov 14 olle 183   @SuppressWarnings("unchecked")
2933 14 Nov 14 olle 184   public static JSONObject getJobAsJSON(Job job)
2933 14 Nov 14 olle 185   {
2933 14 Nov 14 olle 186     if (job == null) return null;
2933 14 Nov 14 olle 187     JSONObject json = new JSONObject();
2933 14 Nov 14 olle 188     json.put("id", job.getId());
2933 14 Nov 14 olle 189     json.put("name", job.getName());
2933 14 Nov 14 olle 190     json.put("editable", job.hasPermission(Permission.WRITE));
2933 14 Nov 14 olle 191     json.put("status", job.getStatus().name());
2933 14 Nov 14 olle 192     json.put("statusMessage", job.getStatusMessage());
2933 14 Nov 14 olle 193     json.put("scheduled", Meludi.CONVERTER_DATETIME_TO_STRING.convert(job.getScheduled()));
2933 14 Nov 14 olle 194     json.put("started", Meludi.CONVERTER_DATETIME_TO_STRING.convert(job.getStarted()));
2933 14 Nov 14 olle 195     json.put("ended", Meludi.CONVERTER_DATETIME_TO_STRING.convert(job.getEnded()));
2933 14 Nov 14 olle 196     json.put("externalId", job.getExternalId());
2933 14 Nov 14 olle 197     json.put("server", job.getServer());
2933 14 Nov 14 olle 198     return json;
2933 14 Nov 14 olle 199     
2933 14 Nov 14 olle 200   }
3431 29 Jun 15 olle 201
3431 29 Jun 15 olle 202   @SuppressWarnings("unchecked")
3431 29 Jun 15 olle 203   public static JSONObject getItemListAsJSON(ItemList l)
3431 29 Jun 15 olle 204   {
3431 29 Jun 15 olle 205     if (l == null) return null;
3431 29 Jun 15 olle 206     JSONObject json = new JSONObject();
3431 29 Jun 15 olle 207     json.put("id", l.getId());
3431 29 Jun 15 olle 208     json.put("name", l.getName());
3431 29 Jun 15 olle 209     json.put("editable", l.hasPermission(Permission.WRITE));
3431 29 Jun 15 olle 210     json.put("size", l.getSize());
3431 29 Jun 15 olle 211     return json;
3431 29 Jun 15 olle 212   }
2933 14 Nov 14 olle 213 }