/** * Use this method only to insert "fresh" measurements, not to recreate a Track from the database * Use {@code insertMeasurement(ArrayList<Measurement> measurements)} instead Inserts measurments * into the Track and into the database! * * @param measurement * @throws TrackAlreadyFinishedException * @throws MeasurementsException */ public void addMeasurement(Measurement measurement) throws TrackAlreadyFinishedException { measurement.setTrack(Track.this); this.measurements.add(measurement); if (this.dbAdapter != null) { try { this.dbAdapter.insertNewMeasurement(measurement); } catch (MeasurementsException e) { logger.severe("This should never happen", e); return; } } else { logger.warn("DbAdapter was null! Could not insert measurement"); } }
/** * 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; }