package name.abuchen.portfolio.money;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import name.abuchen.portfolio.Messages;
public final class CurrencyUnit implements Comparable<CurrencyUnit>
{
public static final CurrencyUnit EMPTY = new CurrencyUnit(Messages.LabelNoCurrency, Messages.LabelNoCurrencyDescription, null);
public static final String EUR = "EUR"; //$NON-NLS-1$
public static final String USD = "USD"; //$NON-NLS-1$
private static final String BUNDLE_NAME = "name.abuchen.portfolio.money.currencies"; //$NON-NLS-1$
private static final ResourceBundle BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
private static final Map<String, CurrencyUnit> CACHE = new HashMap<>();
static
{
Enumeration<String> codes = BUNDLE.getKeys();
while (codes.hasMoreElements())
{
String currencyCode = codes.nextElement();
if (currencyCode.indexOf('.') >= 0)
continue;
String displayName = BUNDLE.getString(currencyCode);
// currency symbol
String currencySymbol = null;
try
{
currencySymbol = BUNDLE.getString(currencyCode + ".symbol"); //$NON-NLS-1$
}
catch (MissingResourceException ignore) // NOSONAR
{
// no symbol defined
}
CACHE.put(currencyCode, new CurrencyUnit(currencyCode, displayName, currencySymbol));
}
}
private String currencyCode;
private String displayName;
private String currencySymbol;
private CurrencyUnit(String currencyCode, String displayName, String currencySymbol)
{
this.currencyCode = currencyCode;
this.displayName = displayName;
this.currencySymbol = currencySymbol;
}
public static List<CurrencyUnit> getAvailableCurrencyUnits()
{
return new ArrayList<>(CACHE.values());
}
public static CurrencyUnit getInstance(String currencyCode)
{
return CACHE.get(currencyCode);
}
public String getCurrencyCode()
{
return currencyCode;
}
public String getDisplayName()
{
return displayName;
}
public String getCurrencySymbol()
{
return currencySymbol;
}
public String getLabel()
{
return MessageFormat.format(Messages.FixAssignCurrencyCode, currencyCode, displayName);
}
@Override
public String toString()
{
return getLabel();
}
@Override
public int compareTo(CurrencyUnit other)
{
return getCurrencyCode().compareTo(other.getCurrencyCode());
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((currencyCode == null) ? 0 : currencyCode.hashCode());
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
CurrencyUnit other = (CurrencyUnit) obj;
if (currencyCode == null)
{
if (other.currencyCode != null)
return false;
}
else if (!currencyCode.equals(other.currencyCode))
return false;
return true;
}
}