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