1 package org.paneris.jammyjoes.model;
2
3 import java.sql.ResultSet;
4 import java.util.Hashtable;
5 import java.util.Locale;
6
7 import org.melati.poem.Database;
8 import org.melati.poem.DefinitionSource;
9 import org.melati.poem.PoemException;
10 import org.melati.poem.PoemThread;
11 import org.paneris.jammyjoes.model.generated.ShopCurrencyTableBase;
12
13 public class ShopCurrencyTable extends ShopCurrencyTableBase {
14
15 public ShopCurrencyTable(
16 Database database, String name,
17 DefinitionSource definitionSource) throws PoemException {
18 super(database, name, definitionSource);
19 }
20
21 private ShopCurrency UK,US,Euro;
22
23 public synchronized void unifyWithDB(ResultSet colDescs)
24 throws PoemException {
25 super.unifyWithDB(colDescs);
26 UK = ensure("UK Pound Sterling", 1d, Locale.UK);
27 US = ensure("US Dollar", 1.473, Locale.US);
28 Euro = ensure("Euro", 1.606, Locale.US);
29 }
30
31 public ShopCurrency ensure(String name, double conversionrate, Locale locale) {
32 ShopCurrency c = (ShopCurrency)newPersistent();
33 c.setName(name);
34 c.setConversionrate(conversionrate);
35 c.setLocale(locale.toString());
36 return (ShopCurrency)getNameColumn().ensure(c);
37 }
38
39 public ShopCurrency getCurrency(Locale locale) {
40 return getCurrency(locale.toString());
41 }
42
43 private Hashtable cache = null;
44 private long cacheSerial = 0L;
45 private static final Object nullEntry = new Object();
46
47 public ShopCurrency getCurrency(String name) {
48 if (cache == null || cacheSerial != serial(PoemThread.transaction()))
49 cache = new Hashtable();
50 Object value = cache.get(name);
51 if (value == nullEntry)
52 return null;
53 else if (value != null)
54 return (ShopCurrency)value;
55 else {
56 ShopCurrency prop =
57 (ShopCurrency)getLocaleColumn().firstWhereEq(name);
58 if (prop == null) {
59 cache.put(name, nullEntry);
60 return null;
61 }
62 else {
63 cache.put(name, prop);
64 return prop;
65 }
66 }
67 }
68 }