package games.strategy.triplea.ui;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Calendar;
import java.util.Optional;
import java.util.Properties;
import games.strategy.engine.data.PlayerID;
import games.strategy.engine.data.UnitType;
import games.strategy.triplea.ResourceLoader;
import games.strategy.util.UrlStreams;
public class TooltipProperties {
// Filename
private static final String PROPERTY_FILE = "tooltips.properties";
// Properties
private static final String TOOLTIP = "tooltip";
private static final String UNIT = "unit";
private static TooltipProperties s_ttp = null;
private static long s_timestamp = 0;
private final Properties m_properties = new Properties();
protected TooltipProperties() {
final ResourceLoader loader = AbstractUIContext.getResourceLoader();
final URL url = loader.getResource(PROPERTY_FILE);
if (url != null) {
final Optional<InputStream> inputStream = UrlStreams.openStream(url);
if (inputStream.isPresent()) {
try {
m_properties.load(inputStream.get());
} catch (final IOException e) {
System.out.println("Error reading " + PROPERTY_FILE + " : " + e);
}
}
}
}
public static TooltipProperties getInstance() {
// cache properties for 5 seconds
if (s_ttp == null || Calendar.getInstance().getTimeInMillis() > s_timestamp + 5000) {
s_ttp = new TooltipProperties();
s_timestamp = Calendar.getInstance().getTimeInMillis();
}
return s_ttp;
}
public String getToolTip(final UnitType ut, final PlayerID playerId) {
final String tooltip = m_properties.getProperty(TOOLTIP + "." + UNIT + "." + ut.getName() + "."
+ (playerId == null ? PlayerID.NULL_PLAYERID.getName() : playerId.getName()), "");
if (tooltip == null || tooltip.equals("")) {
return m_properties.getProperty(TOOLTIP + "." + UNIT + "." + ut.getName(), "");
} else {
return tooltip;
}
}
}