1 package org.paneris.bibliomania;
2
3 import java.util.Hashtable;
4 import java.util.Locale;
5
6 import org.melati.poem.Database;
7 import org.melati.poem.DefinitionSource;
8 import org.melati.poem.PoemException;
9 import org.melati.poem.PoemThread;
10 import org.paneris.bibliomania.generated.CurrencyTableBase;
11
12 public class CurrencyTable<T extends Currency> extends CurrencyTableBase<Currency> {
13
14 public CurrencyTable(
15 Database database,
16 String name,
17 DefinitionSource definitionSource)
18 throws PoemException {
19 super(database, name, definitionSource);
20 }
21
22 public Currency ensure(String name, double conversionrate, Locale locale) {
23 Currency c = (Currency)newPersistent();
24 c.setName(name);
25 c.setConversionrate(conversionrate);
26 c.setLocale(locale.toString());
27 return (Currency)getNameColumn().ensure(c);
28 }
29
30 public Currency getCurrency(Locale locale) {
31 return getCurrency(locale.toString());
32 }
33
34 private Hashtable cache = null;
35 private long cacheSerial = 0L;
36 private static final Object nullEntry = new Object();
37
38 public Currency getCurrency(String name) {
39 if (cache == null || cacheSerial != serial(PoemThread.transaction()))
40 cache = new Hashtable();
41 Object value = cache.get(name);
42 if (value == nullEntry)
43 return null;
44 else if (value != null)
45 return (Currency)value;
46 else {
47 Currency prop = (Currency)getLocaleColumn().firstWhereEq(name);
48 cache.put(name, prop == null ? nullEntry : prop);
49 return prop;
50 }
51 }
52
53 }