import java.util.logging.Logger; import java.util.Iterator; import java.util.List; import java.util.ArrayList; /* 'JSON-Simple' library */ import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import vo.parameter.*; // The cutout-args: // CutResult doCutoutFile( // String id, // Pos pos, Band band, Time time, Pol pol, String pixels, // boolean countNullValues) // // The result: //class CutResult //{ // String fileName; // long fileSize; // NullValueCount nullValueCount; // String pixels; <- from WCS-conversion (not input) //} // //class NullValueCount //{ // double percent; // long nullCount; // long totalCount; //} // // vlkb-soda has: //class Coord //{ // Pos pos; // Band band; // Time time; // Pol pol; // String pixels; //} // FIXME or clla this Jdl.java ? class CutArgs { static final Logger LOGGER = Logger.getLogger("CutArgs"); static CutArgs[] parseCutArgsArr(String jsonString) { LOGGER.info("trace : " + jsonString); List<CutArgs> argsList = new ArrayList<CutArgs>(); JSONParser parser = new JSONParser(); try { // FIXME explicit converions: should check type first JSONArray a = (JSONArray) parser.parse(jsonString); for (Object o : a) { // FIXME check type JSONObject jElem = (JSONObject) o; LOGGER.info("jElem: " + jElem.toString()); CutArgs args = new CutArgs(); args.id = (String) jElem.get("id"); if(args.id == null) args.id = (String) jElem.get("pubdid"); Object jCNV = jElem.get("countNullVals"); args.countNullValues = (jCNV == null) ? false : (Boolean) jElem.get("countNullVals"); // FIXME first check if array (or null?) and then cast String defaultPosSystem = "GALACTIC"; Pos pos = Pos.parsePosCirclePolygonFromJson(jElem.toString(), defaultPosSystem); args.pos = pos; String defaultBandSystem = "VELO_LSRK"; Band band = Band.parseBandFromJson(jElem.toString(), defaultBandSystem); args.band = band; // TBD: * legacy is parsed inside POS and BAND, not here -> do modif // * still missing TIME and POL and ID and (?)countNullValues // FIXME explicit converions: check if exists and then check type first JSONObject jCoord = (JSONObject) jElem.get("coord"); if(jCoord != null) { // legacy LOGGER.info("TEST: " + jCoord.toString()); args.lon = (Double) jCoord.get("l"); args.lat = (Double) jCoord.get("b"); args.radius = (Double) jCoord.get("r"); args.dl = (Double) jCoord.get("dl"); args.db = (Double) jCoord.get("db"); args.vl = (Double) jCoord.get("vl"); args.vu = (Double) jCoord.get("vu"); } // FIXME missing: String skySystem = "GALACTIC"; String specSystem = "VELO_LSRK"; // convert: if(args.lon != null && args.lat != null && args.radius != null) { Circle circle = new Circle(args.lon, args.lat, args.radius); args.pos = new Pos(circle, skySystem); } if(args.lon != null && args.lat != null && args.dl != null && args.db != null) { //Range range(args.lon - args.dl/2.0, args.lon + args.dl/2.0, // args.lat - args.db/2.0, args.lat + args.db/2.0);, Range range = new Range(args.lon, args.lat, args.dl, args.db); args.pos = new Pos(range, skySystem); } if(args.vl != null && args.vu != null) { args.band = new Band(args.vl, args.vu, specSystem); } argsList.add(args); } } catch(ParseException e) { e.printStackTrace(); } return argsList.toArray(new CutArgs[0]); } String id; Pos pos; Band band; Time time; Pol pol; String pixels; // FitxCard[] extraCards; ??? Boolean countNullValues; // legacy Double lon, lat, radius, dl, db, vl, vu; // double throws except if json-null }