Пример #1
0
  /**
   * Creates a Track and adds its contents to the DB layer (adapter).
   *
   * @param json the input json object
   * @param adapter the DB layer adapter
   * @return the Track object
   * @throws JSONException parsing fails or contains unexpected properties
   * @throws ParseException if DateTime parsing fails
   */
  public static Track fromJson(JSONObject json, DbAdapter adapter)
      throws JSONException, ParseException {
    JSONObject trackProperties = json.getJSONObject("properties");
    Track t = Track.createRemoteTrack(trackProperties.getString("id"), adapter);
    String trackName = "unnamed Track #" + t.getId();
    try {
      trackName = trackProperties.getString("name");
    } catch (JSONException e) {
      logger.warn(e.getMessage(), e);
    }

    t.setName(trackName);
    String description = "";
    try {
      description = trackProperties.getString("description");
    } catch (JSONException e) {
      logger.warn(e.getMessage(), e);
    }

    t.setDescription(description);
    JSONObject sensorProperties =
        trackProperties.getJSONObject("sensor").getJSONObject("properties");

    t.setCar(Car.fromJson(sensorProperties));
    // include server properties tracks created, modified?

    t.dbAdapter.updateTrack(t);
    // Log.i("track_id",t.getId()+" "+((DbAdapterRemote)
    // dbAdapter).trackExistsInDatabase(t.getId())+" "+dbAdapter.getNumberOfStoredTracks());

    Measurement recycleMeasurement;

    List<Measurement> measurements = new ArrayList<Measurement>();
    JSONArray features = json.getJSONArray("features");
    logger.info(
        "Parsing measurements of track " + t.getRemoteID() + ". Count: " + features.length());
    for (int j = 0; j < features.length(); j++) {
      JSONObject measurementJsonObject = features.getJSONObject(j);
      recycleMeasurement = Measurement.fromJson(measurementJsonObject);

      recycleMeasurement.setTrack(t);
      measurements.add(recycleMeasurement);
    }

    t.setMeasurementsAsArrayList(measurements);
    logger.info("Storing measurements in database");
    t.storeMeasurementsInDbAdapter();
    return t;
  }