001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.plugins.streetside.model;
003
004import javax.swing.ImageIcon;
005
006import org.openstreetmap.josm.data.coor.LatLon;
007import org.openstreetmap.josm.plugins.streetside.cache.Caches.MapObjectIconCache;
008import org.openstreetmap.josm.tools.ImageProvider;
009
010public class MapObject extends KeyIndexedObject {
011  private static final ImageIcon ICON_UNKNOWN_TYPE = ImageProvider.get("unknown-mapobject-type");
012  //private static Function<String, URL> iconUrlGen = MainWebsite::mapObjectIcon;
013
014  private final LatLon coordinate;
015  private final String objPackage;
016  private final String value;
017  private final long firstSeenTime;
018  private final long lastSeenTime;
019  private final long updatedTime;
020
021  public MapObject(
022    final LatLon coordinate, final String key, final String objPackage, final String value,
023    long firstSeenTime, long lastSeenTime, long updatedTime
024  ) {
025    super(key);
026    if (objPackage == null || value == null || coordinate == null) {
027      throw new IllegalArgumentException("The fields of a MapObject must not be null!");
028    }
029    this.coordinate = coordinate;
030    this.objPackage = objPackage;
031    this.value = value;
032    this.firstSeenTime = firstSeenTime;
033    this.lastSeenTime = lastSeenTime;
034    this.updatedTime = updatedTime;
035  }
036
037  public LatLon getCoordinate() {
038    return coordinate;
039  }
040
041  /**
042   * @param objectTypeID the {@link String} representing the type of map object. This ID can be retrieved via
043   *   {@link #getValue()} for any given {@link MapObject}.
044   * @return the icon, which represents the given objectTypeID
045   */
046  public static ImageIcon getIcon(final String objectTypeID) {
047    final ImageIcon cachedIcon = MapObjectIconCache.getInstance().get(objectTypeID);
048    if ("not-in-set".equals(objectTypeID)) {
049      return ICON_UNKNOWN_TYPE;
050    } else if (cachedIcon == null) {
051      /*try {
052        final ImageIcon downloadedIcon = new ImageIcon(ImageIO.read(iconUrlGen.apply(objectTypeID)));
053        MapObjectIconCache.getInstance().put(objectTypeID, downloadedIcon);
054        return downloadedIcon;
055      } catch (IOException e) {
056        logger.warn(I18n.tr("Failed to download icon " + objectTypeID, e));
057        return ICON_UNKNOWN_TYPE;
058      }*/
059    }
060    return cachedIcon;
061  }
062
063  public String getPackage() {
064    return objPackage;
065  }
066
067  public long getFirstSeenTime() {
068    return firstSeenTime;
069  }
070
071  public long getLastSeenTime() {
072    return lastSeenTime;
073  }
074
075  public long getUpdatedTime() {
076    return updatedTime;
077  }
078
079  public String getValue() {
080    return value;
081  }
082}