001    /**
002     * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.currencyconverter.util;
016    
017    import com.liferay.portal.kernel.language.LanguageUtil;
018    import com.liferay.portal.kernel.util.StringPool;
019    import com.liferay.portal.kernel.webcache.WebCacheItem;
020    import com.liferay.portal.kernel.webcache.WebCachePoolUtil;
021    import com.liferay.portlet.currencyconverter.model.Currency;
022    
023    import java.util.HashSet;
024    import java.util.Iterator;
025    import java.util.Locale;
026    import java.util.Map;
027    import java.util.Set;
028    import java.util.TreeMap;
029    import java.util.concurrent.ConcurrentHashMap;
030    
031    import javax.servlet.http.HttpServletRequest;
032    import javax.servlet.jsp.PageContext;
033    
034    /**
035     * @author Brian Wing Shun Chan
036     */
037    public class CurrencyUtil {
038    
039            public static Map<String, String> getAllSymbols(PageContext pageContext) {
040                    HttpServletRequest request =
041                            (HttpServletRequest)pageContext.getRequest();
042    
043                    Locale locale = request.getLocale();
044    
045                    String key = locale.toString();
046    
047                    Map<String, String> symbols = _symbolsPool.get(key);
048    
049                    if (symbols != null) {
050                            return symbols;
051                    }
052    
053                    symbols = new TreeMap<String, String>();
054    
055                    Iterator<String> itr = _instance._currencyIds.iterator();
056    
057                    while (itr.hasNext()) {
058                            String symbol = itr.next();
059    
060                            symbols.put(LanguageUtil.get(pageContext, symbol), symbol);
061                    }
062    
063                    _symbolsPool.put(key, symbols);
064    
065                    return symbols;
066            }
067    
068            public static Currency getCurrency(String symbol) {
069                    WebCacheItem wci = new CurrencyWebCacheItem(symbol);
070    
071                    return (Currency)WebCachePoolUtil.get(
072                            CurrencyUtil.class.getName() + StringPool.PERIOD + symbol, wci);
073            }
074    
075            public static boolean isCurrency(String symbol) {
076                    return _instance._currencyIds.contains(symbol);
077            }
078    
079            private CurrencyUtil() {
080                    _currencyIds = new HashSet<String>();
081    
082                    _currencyIds.add("ALL");
083                    _currencyIds.add("DZD");
084                    _currencyIds.add("XAL");
085                    _currencyIds.add("ARS");
086                    _currencyIds.add("AWG");
087                    _currencyIds.add("AUD");
088                    _currencyIds.add("BSD");
089                    _currencyIds.add("BHD");
090                    _currencyIds.add("BDT");
091                    _currencyIds.add("BBD");
092                    _currencyIds.add("BYR");
093                    _currencyIds.add("BZD");
094                    _currencyIds.add("BMD");
095                    _currencyIds.add("BTN");
096                    _currencyIds.add("BOB");
097                    _currencyIds.add("BRL");
098                    _currencyIds.add("GBP");
099                    _currencyIds.add("BND");
100                    _currencyIds.add("BGN");
101                    _currencyIds.add("BIF");
102                    _currencyIds.add("KHR");
103                    _currencyIds.add("CAD");
104                    _currencyIds.add("KYD");
105                    _currencyIds.add("XOF");
106                    _currencyIds.add("XAF");
107                    _currencyIds.add("CLP");
108                    _currencyIds.add("CNY");
109                    _currencyIds.add("COP");
110                    _currencyIds.add("KMF");
111                    _currencyIds.add("XCP");
112                    _currencyIds.add("CRC");
113                    _currencyIds.add("HRK");
114                    _currencyIds.add("CUP");
115                    _currencyIds.add("CYP");
116                    _currencyIds.add("CZK");
117                    _currencyIds.add("DKK");
118                    _currencyIds.add("DJF");
119                    _currencyIds.add("DOP");
120                    _currencyIds.add("XCD");
121                    _currencyIds.add("ECS");
122                    _currencyIds.add("EGP");
123                    _currencyIds.add("SVC");
124                    _currencyIds.add("ERN");
125                    _currencyIds.add("EEK");
126                    _currencyIds.add("ETB");
127                    _currencyIds.add("EUR");
128                    _currencyIds.add("FKP");
129                    _currencyIds.add("GMD");
130                    _currencyIds.add("GHC");
131                    _currencyIds.add("GIP");
132                    _currencyIds.add("XAU");
133                    _currencyIds.add("GTQ");
134                    _currencyIds.add("GNF");
135                    _currencyIds.add("HTG");
136                    _currencyIds.add("HNL");
137                    _currencyIds.add("HKD");
138                    _currencyIds.add("HUF");
139                    _currencyIds.add("ISK");
140                    _currencyIds.add("INR");
141                    _currencyIds.add("IDR");
142                    _currencyIds.add("IRR");
143                    _currencyIds.add("ILS");
144                    _currencyIds.add("JMD");
145                    _currencyIds.add("JPY");
146                    _currencyIds.add("JOD");
147                    _currencyIds.add("KZT");
148                    _currencyIds.add("KES");
149                    _currencyIds.add("KRW");
150                    _currencyIds.add("KWD");
151                    _currencyIds.add("LAK");
152                    _currencyIds.add("LVL");
153                    _currencyIds.add("LBP");
154                    _currencyIds.add("LSL");
155                    _currencyIds.add("LYD");
156                    _currencyIds.add("LTL");
157                    _currencyIds.add("MOP");
158                    _currencyIds.add("MKD");
159                    _currencyIds.add("MGF");
160                    _currencyIds.add("MWK");
161                    _currencyIds.add("MYR");
162                    _currencyIds.add("MVR");
163                    _currencyIds.add("MTL");
164                    _currencyIds.add("MRO");
165                    _currencyIds.add("MUR");
166                    _currencyIds.add("MXN");
167                    _currencyIds.add("MDL");
168                    _currencyIds.add("MNT");
169                    _currencyIds.add("MAD");
170                    _currencyIds.add("MZM");
171                    _currencyIds.add("NAD");
172                    _currencyIds.add("NPR");
173                    _currencyIds.add("ANG");
174                    _currencyIds.add("TRY");
175                    _currencyIds.add("NZD");
176                    _currencyIds.add("NIO");
177                    _currencyIds.add("NGN");
178                    _currencyIds.add("NOK");
179                    _currencyIds.add("OMR");
180                    _currencyIds.add("XPF");
181                    _currencyIds.add("PKR");
182                    _currencyIds.add("XPD");
183                    _currencyIds.add("PAB");
184                    _currencyIds.add("PGK");
185                    _currencyIds.add("PYG");
186                    _currencyIds.add("PEN");
187                    _currencyIds.add("PHP");
188                    _currencyIds.add("XPT");
189                    _currencyIds.add("PLN");
190                    _currencyIds.add("QAR");
191                    _currencyIds.add("ROL");
192                    _currencyIds.add("RON");
193                    _currencyIds.add("RUB");
194                    _currencyIds.add("RWF");
195                    _currencyIds.add("WST");
196                    _currencyIds.add("STD");
197                    _currencyIds.add("SAR");
198                    _currencyIds.add("SCR");
199                    _currencyIds.add("SLL");
200                    _currencyIds.add("XAG");
201                    _currencyIds.add("SGD");
202                    _currencyIds.add("SKK");
203                    _currencyIds.add("SIT");
204                    _currencyIds.add("SOS");
205                    _currencyIds.add("ZAR");
206                    _currencyIds.add("LKR");
207                    _currencyIds.add("SHP");
208                    _currencyIds.add("SDD");
209                    _currencyIds.add("SRG");
210                    _currencyIds.add("SZL");
211                    _currencyIds.add("SEK");
212                    _currencyIds.add("CHF");
213                    _currencyIds.add("SYP");
214                    _currencyIds.add("TWD");
215                    _currencyIds.add("TZS");
216                    _currencyIds.add("THB");
217                    _currencyIds.add("TOP");
218                    _currencyIds.add("TTD");
219                    _currencyIds.add("TND");
220                    _currencyIds.add("USD");
221                    _currencyIds.add("AED");
222                    _currencyIds.add("UGX");
223                    _currencyIds.add("UAH");
224                    _currencyIds.add("UYU");
225                    _currencyIds.add("VUV");
226                    _currencyIds.add("VEB");
227                    _currencyIds.add("VND");
228                    _currencyIds.add("YER");
229                    _currencyIds.add("ZMK");
230                    _currencyIds.add("ZWD");
231            }
232    
233            private static CurrencyUtil _instance = new CurrencyUtil();
234    
235            private static Map<String, Map<String, String>> _symbolsPool =
236                    new ConcurrentHashMap<String, Map<String, String>>();
237    
238            private Set<String> _currencyIds;
239    
240    }