private CurrencyNode decodeCurrency(final String currency) { // Check if the currency is already in the cache. if (currencyCache.containsKey(currency)) { return currencyCache.get(currency); } String split[] = CURRENCY_DELIMITER_PATTERN.split(currency); String symbol = split[0]; CurrencyNode node = EngineFactory.getEngine(EngineFactory.DEFAULT).getCurrency(symbol); if (node == null) { logger.log(Level.INFO, "Converting a commodity into a currency: {0}", symbol); Commodity cNode = commodityMap.get(symbol); if (cNode != null) { node = new CurrencyNode(); node.setDescription(cNode.description); node.setPrefix(cNode.prefix); node.setSuffix(cNode.suffix); node.setScale(cNode.scale); node.setSymbol(cNode.symbol); EngineFactory.getEngine(EngineFactory.DEFAULT).addCurrency(node); } else { // Convert security to currency. For users who figured out how to push the limits of the // jGnash 1.x commodity interface SecurityNode sNode = EngineFactory.getEngine(EngineFactory.DEFAULT).getSecurity(symbol); if (sNode != null) { node = new CurrencyNode(); node.setDescription(sNode.getDescription()); node.setPrefix(sNode.getPrefix()); node.setSuffix(sNode.getSuffix()); node.setScale(sNode.getScale()); node.setSymbol(sNode.getSymbol()); EngineFactory.getEngine(EngineFactory.DEFAULT).addCurrency(node); } else { logger.log(Level.SEVERE, "Bad file, currency " + symbol + " not mapped", new Exception()); } } } // Put the currency in the cache. currencyCache.put(currency, node); return node; }