    001// License: GPL. For details, see LICENSE file.
    002package org.openstreetmap.josm.plugins.streetside;
    003
    004import java.util.List;
    005
    006import org.openstreetmap.josm.data.coor.LatLon;
    007import org.openstreetmap.josm.plugins.streetside.cubemap.CubemapUtils;
    008import org.openstreetmap.josm.plugins.streetside.model.UserProfile;
    009
    010/**
    011 * A StreetsideImage object represents each of the images stored in Streetside.
    012 *
    013 * @author nokutu
    014 * @author renerr18
    015 *
    016 * @see StreetsideSequence
    017 * @see StreetsideData
    018 */
    019public class StreetsideImage extends StreetsideAbstractImage {
    020  /**
    021   * Rn is a Bing Streetside image attribute - currently not
    022   * used, mapped or supported in the Streetside plugin -
    023   * left out initially because it's an unrequired complex object.
    024   */
    025  public static class Rn {
    026          // placeholder for Rn attribute (undocumented streetside complex inner type)
    027  }
    028
    029  // latitude of the Streetside image
    030  private double la;
    031
    032  //longitude of the Streetside image
    033  private double lo;
    034
    035  // The bubble altitude, in meters above the WGS84 ellipsoid
    036  private double al;
    037
    038  // Roll
    039  private double ro;
    040
    041  // Pitch
    042  private double pi;
    043
    044  // Blurring instructions - not currently used by the plugin
    045  private String bl;
    046
    047  // Undocumented Attributes
    048  private int ml;
    049  private List<String> nbn;
    050  private List<String> pbn;
    051  private int ad;
    052  private Rn rn;
    053
    054  /**
    055   * Main constructor of the class StreetsideImage
    056   *
    057   * @param id     The unique identifier of the image.
    058   * @param latLon The latitude and longitude where it is positioned.
    059   * @param he     The direction of the images in degrees, meaning 0 north.
    060   */
    061  public StreetsideImage(String id, LatLon latLon, double he) {
    062    super(id, latLon, he);
    063  }
    064
    065  public StreetsideImage(String id, LatLon latLon) {
    066    super(id, latLon, 0.0);
    067  }
    068
    069  public StreetsideImage(String id, double la, double lo) {
    070    super(id, new LatLon(la,lo), 0.0);
    071  }
    072
    073  public StreetsideImage(String id) {
    074            super(id);
    075  }
    076
    077  // Default constructor for Jackson/JSON Deserializattion
    078  public StreetsideImage() {
    079    super(CubemapUtils.IMPORTED_ID, null, 0.0);
    080  }
    081
    082  /**
    083   * Returns the unique identifier of the object.
    084   *
    085   * @return A {@code String} containing the unique identifier of the object.
    086   */
    087  @Override
    088public String getId() {
    089    return String.valueOf(id);
    090  }
    091
    092  public UserProfile getUser() {
    093            return getSequence().getUser();
    094  }
    095
    096  @Override
    097  public String toString() {
    098    return String.format(
    099      // TODO: format date cd (Gradle build error command line)
    100      "Image[id=%s,lat=%f,lon=%f,he=%f,user=%s]",
    101      id, latLon.lat(), latLon.lon(), he, "null"//, cd
    102    );
    103  }
    104
    105  @Override
    106  public boolean equals(Object object) {
    107    return object instanceof StreetsideImage && id.equals(((StreetsideImage) object).getId());
    108  }
    109
    110  @Override
    111  public int compareTo(StreetsideAbstractImage image) {
    112    if (image instanceof StreetsideImage) {
    113      return id.compareTo(((StreetsideImage) image).getId());
    114    }
    115    return hashCode() - image.hashCode();
    116  }
    117
    118  @Override
    119  public int hashCode() {
    120    return id.hashCode();
    121  }
    122
    123  @Override
    124  public void stopMoving() {
    125    super.stopMoving();
    126    checkModified();
    127  }
    128
    129  private void checkModified() {
    130    if (StreetsideLayer.hasInstance()) {
    131      if (isModified()) {
    132        StreetsideLayer.getInstance().getLocationChangeset().add(this);
    133      } else {
    134        StreetsideLayer.getInstance().getLocationChangeset().remove(this);
    135      }
    136    }
    137  }
    138
    139  @Override
    140  public void turn(double ca) {
    141    super.turn(ca);
    142    checkModified();
    143  }
    144
    145  /**
    146   * @return the altitude
    147   */
    148  public double getAl() {
    149    return al;
    150  }
    151
    152  /**
    153   * @param altitude the altitude to set
    154   */
    155  public void setAl(double altitude) {
    156    al = altitude;
    157  }
    158
    159  /**
    160   * @return the roll
    161   */
    162  public double getRo() {
    163    return ro;
    164  }
    165
    166  /**
    167   * @param roll the roll to set
    168   */
    169  public void setRo(double roll) {
    170    ro = roll;
    171  }
    172
    173  /**
    174   * @return the pi
    175   */
    176  public double getPi() {
    177    return pi;
    178  }
    179
    180  /**
    181   * @param pitch the pi to set
    182   */
    183  public void setPi(double pitch) {
    184    pi = pitch;
    185  }
    186
    187  /**
    188   * @return the burringl
    189   */
    190  public String getBl() {
    191    return bl;
    192  }
    193
    194  /**
    195   * @param blurring the blurring to set
    196   */
    197  public void setBl(String blurring) {
    198    bl = blurring;
    199  }
    200
    201  /**
    202   * @return the ml
    203   */
    204  public int getMl() {
    205    return ml;
    206  }
    207
    208  /**
    209   * @param ml the ml to set
    210   */
    211  public void setMl(int ml) {
    212    this.ml = ml;
    213  }
    214
    215  /**
    216   * @return the nbn
    217   */
    218  public List<String> getNbn() {
    219    return nbn;
    220  }
    221
    222  /**
    223   * @param nbn the nbn to set
    224   */
    225  public void setNbn(List<String> nbn) {
    226    this.nbn = nbn;
    227  }
    228
    229  /**
    230   * @return the pbn
    231   */
    232  public List<String> getPbn() {
    233    return pbn;
    234  }
    235
    236  /**
    237   * @param pbn the pbn to set
    238   */
    239  public void setPbn(List<String> pbn) {
    240    this.pbn = pbn;
    241  }
    242
    243  /**
    244   * @return the ad
    245   */
    246  public int getAd() {
    247    return ad;
    248  }
    249
    250  /**
    251   * @param ad the ad to set
    252   */
    253  public void setAd(int ad) {
    254    this.ad = ad;
    255  }
    256
    257  /**
    258   * @return the la
    259   */
    260  public double getLa() {
    261    return la;
    262  }
    263
    264  /**
    265   * @param la the la to set
    266   */
    267  public void setLa(double la) {
    268    this.la = la;
    269  }
    270
    271  /**
    272   * @return the lo
    273   */
    274  public double getLo() {
    275    return lo;
    276  }
    277
    278  /**
    279   * @param lo the lo to set
    280   */
    281  public void setLo(double lo) {
    282    this.lo = lo;
    283  }
    284
    285  /**
    286   * @param id the id to set
    287   */
    288  @Override
    289public void setId(String id) {
    290    this.id = id;
    291  }
    292
    293  /**
    294   * @return the rn
    295   */
    296  public Rn getRn() {
    297    return rn;
    298  }
    299
    300  /**
    301   * @param rn the rn to set
    302   */
    303  public void setRn(Rn rn) {
    304    this.rn = rn;
    305  }
    306}