View Javadoc

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  }