001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.plugins.streetside.utils.api;
003
004
005import javax.json.JsonObject;
006import javax.json.JsonValue;
007
008import org.openstreetmap.josm.plugins.streetside.StreetsideData;
009import org.openstreetmap.josm.plugins.streetside.StreetsideImage;
010import org.openstreetmap.josm.plugins.streetside.utils.StreetsideURL.APIv3;
011
012
013/**
014 * Decodes the JSON returned by {@link APIv3} into Java objects.
015 * Takes a {@link JsonObject} and {@link #decodeImageInfos(JsonObject, StreetsideData)} tries to add the timestamps.
016 */
017public final class JsonImageDetailsDecoder {
018  private JsonImageDetailsDecoder() {
019    // Private constructor to avoid instantiation
020  }
021
022  public static void decodeImageInfos(final JsonObject json, final StreetsideData data) {
023    if (data != null) {
024      JsonDecoder.decodeFeatureCollection(json, j -> {
025        decodeImageInfo(j, data);
026        return null;
027      });
028    }
029  }
030
031  private static void decodeImageInfo(final JsonObject json, final StreetsideData data) {
032    if (json != null && data != null) {
033      JsonValue properties = json.get("properties");
034      if (properties instanceof JsonObject) {
035        String id = ((JsonObject) properties).getString("id", null);
036        Long he = JsonDecoder.decodeTimestamp(((JsonObject)properties).getString("he", null));
037        if (id != null && he != null) {
038          data.getImages().stream().filter(
039            img -> img instanceof StreetsideImage && id.equals(((StreetsideImage) img).getId())
040          ).forEach(img -> img.setHe(he));
041        }
042      }
043    }
044  }
045}