Subversion Repositories ES

Compare Revisions

Last modification

Ignore whitespace Rev 16 → Rev 15

/trunk/src/de/pointedears/converter/db/CurrenciesDatabase.java
20,22 → 20,36
public class CurrenciesDatabase extends SQLiteOpenHelper
{
private static final String DATABASE_NAME = "currency.db"; //$NON-NLS-1$
private static final int DATABASE_VERSION = 3;
private static final int DATABASE_VERSION = 2;
 
private static final String TABLE = "currency"; //$NON-NLS-1$
private static final String COLUMN_CURRENCY = "currency1"; //$NON-NLS-1$
private static final String COLUMN_CURRENCY1 = "currency1"; //$NON-NLS-1$
private static final String COLUMN_CURRENCY2 = "currency2"; //$NON-NLS-1$
private static final String COLUMN_FACTOR = "factor"; //$NON-NLS-1$
 
private static HashMap<String, Double> conversionRates =
new HashMap<String, Double>();
private static HashMap<String, HashMap<String, Double>> conversionRates =
new HashMap<String, HashMap<String, Double>>();
static
{
/* Default conversion rates from Euro (EUR) to other currencies */
CurrenciesDatabase.conversionRates
.put(CurrenciesActivity.VALUE_CHF, 1.3013);
CurrenciesDatabase.conversionRates
.put(CurrenciesActivity.VALUE_USD, 1.3521);
HashMap<String, Double> conversionFactors = new HashMap<String, Double>();
conversionFactors.put(CurrenciesActivity.VALUE_EUR, 0.767842293);
conversionFactors.put(CurrenciesActivity.VALUE_USD, 1.03413);
CurrenciesDatabase.conversionRates.put(CurrenciesActivity.VALUE_CHF,
conversionFactors);
 
conversionFactors = new HashMap<String, Double>();
conversionFactors.put(CurrenciesActivity.VALUE_CHF, 1.30235077);
conversionFactors.put(CurrenciesActivity.VALUE_USD, 1.3468);
CurrenciesDatabase.conversionRates.put(CurrenciesActivity.VALUE_EUR,
conversionFactors);
 
conversionFactors = new HashMap<String, Double>();
conversionFactors.put(CurrenciesActivity.VALUE_CHF, 0.966996412);
conversionFactors.put(CurrenciesActivity.VALUE_EUR, 0.742500743);
CurrenciesDatabase.conversionRates.put(CurrenciesActivity.VALUE_USD,
conversionFactors);
}
private final CurrenciesActivity context;
 
/**
* @param context
45,6 → 59,7
{
super(context, CurrenciesDatabase.DATABASE_NAME, null,
CurrenciesDatabase.DATABASE_VERSION);
this.context = context;
this.readConversionsFromDatabase();
}
 
60,21 → 75,28
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE IF NOT EXISTS " + CurrenciesDatabase.TABLE
+ " (" + CurrenciesDatabase.COLUMN_CURRENCY + " TEXT, "
+ " (" + CurrenciesDatabase.COLUMN_CURRENCY1 + " TEXT, "
+ CurrenciesDatabase.COLUMN_CURRENCY2 + " TEXT, "
+ CurrenciesDatabase.COLUMN_FACTOR
+ " NUMERIC"
+ ", CONSTRAINT unique_currency_pair UNIQUE ("
+ CurrenciesDatabase.COLUMN_CURRENCY + "))");
+ CurrenciesDatabase.COLUMN_CURRENCY1 + ", "
+ CurrenciesDatabase.COLUMN_CURRENCY2 + "))");
 
HashMap<String, Double> currencyConversions =
HashMap<String, HashMap<String, Double>> currencyConversions =
this.getConversionRates();
for (Entry<String, Double> factorEntry : currencyConversions.entrySet())
for (String key : currencyConversions.keySet())
{
ContentValues values = new ContentValues();
values.put(CurrenciesDatabase.COLUMN_CURRENCY, factorEntry.getKey());
values.put(CurrenciesDatabase.COLUMN_FACTOR, factorEntry.getValue());
db.insert(CurrenciesDatabase.TABLE, CurrenciesDatabase.COLUMN_FACTOR,
values);
for (Entry<String, Double> factorEntry : currencyConversions.get(key)
.entrySet())
{
ContentValues values = new ContentValues();
values.put(CurrenciesDatabase.COLUMN_CURRENCY1, key);
values.put(CurrenciesDatabase.COLUMN_CURRENCY2, factorEntry.getKey());
values.put(CurrenciesDatabase.COLUMN_FACTOR, factorEntry.getValue());
db.insert(CurrenciesDatabase.TABLE, CurrenciesDatabase.COLUMN_FACTOR,
values);
}
}
}
 
97,7 → 119,7
/**
* @return
*/
public HashMap<String, Double> getConversionRates()
public HashMap<String, HashMap<String, Double>> getConversionRates()
{
return CurrenciesDatabase.conversionRates;
}
113,9 → 135,11
/* Get database connection, but upgrade database first if necessary! */
SQLiteDatabase dbConn = this.getWritableDatabase();
 
@SuppressWarnings("nls")
Cursor cursor =
dbConn.query(true, CurrenciesDatabase.TABLE, null, null, null, null,
null, CurrenciesDatabase.COLUMN_CURRENCY, null);
null, CurrenciesDatabase.COLUMN_CURRENCY1 + ","
+ CurrenciesDatabase.COLUMN_CURRENCY2, null);
 
if (cursor != null)
{
123,7 → 147,10
{
int currency1Id =
cursor
.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_CURRENCY);
.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_CURRENCY1);
int currency2Id =
cursor
.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_CURRENCY2);
int factorId =
cursor.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_FACTOR);
 
130,17 → 157,58
/* NOTE: Don't change the default values if the table is empty */
if (cursor.moveToFirst())
{
HashMap<String, Double> newCurrencyConversions =
new HashMap<String, Double>();
HashMap<String, HashMap<String, Double>> newCurrencyConversions =
new HashMap<String, HashMap<String, Double>>();
HashMap<String, Double> mapForCurrency = null;
String lastCurrency1Str = null;
String currency1Str;
 
do
{
String currencyStr = cursor.getString(currency1Id);
currency1Str = cursor.getString(currency1Id);
String currency2Str = cursor.getString(currency2Id);
Double factor = cursor.getDouble(factorId);
newCurrencyConversions.put(currencyStr, factor);
 
if (lastCurrency1Str == null
|| !lastCurrency1Str.equals(currency1Str))
{
/*
* NOTE: Update outer map when we see a new currency;
* ORDER BY ensures we don't see a currency1 twice except
* consecutively
*/
if (mapForCurrency != null)
{
newCurrencyConversions.put(lastCurrency1Str, mapForCurrency);
}
 
lastCurrency1Str = new String(currency1Str);
 
/* NOTE: New currency1: Reset inner map */
mapForCurrency = newCurrencyConversions.get(currency1Str);
}
 
/* If we did not see this currency1 before */
if (mapForCurrency == null)
{
mapForCurrency = new HashMap<String, Double>();
}
 
/*
* NOTE: Update inner map after each table row; assignment to
* mapForCurrency above ensures we are putting the factor
* into the correct map.
*/
mapForCurrency.put(currency2Str, factor);
}
while (cursor.moveToNext());
 
/*
* NOTE: Update from last table row; cursor not empty, so we can
* skip the test for null
*/
newCurrencyConversions.put(currency1Str, mapForCurrency);
 
CurrenciesDatabase.conversionRates = newCurrencyConversions;
}
}
169,9 → 237,11
{
SQLiteDatabase dbConn = this.getReadableDatabase();
 
@SuppressWarnings("nls")
Cursor myCursor =
dbConn.query(true, CurrenciesDatabase.TABLE, null, null, null, null,
null, CurrenciesDatabase.COLUMN_CURRENCY, null);
null, CurrenciesDatabase.COLUMN_CURRENCY1 + ","
+ CurrenciesDatabase.COLUMN_CURRENCY2, null);
 
@SuppressWarnings({ "unused", "nls" })
String queryResult = "";
181,7 → 251,10
{
int currency1Id =
myCursor
.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_CURRENCY);
.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_CURRENCY1);
int currency2Id =
myCursor
.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_CURRENCY2);
int factorId =
myCursor.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_FACTOR);
 
189,12 → 262,13
{
do
{
String currencyStr = myCursor.getString(currency1Id);
String currency1Str = myCursor.getString(currency1Id);
String currency2Str = myCursor.getString(currency2Id);
Double factor = myCursor.getDouble(factorId);
 
/* DEBUG */
queryResult +=
"EUR --> " + currencyStr + ": " + factor + "\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
currency1Str + " --> " + currency2Str + ": " + factor + "\n";
}
while (myCursor.moveToNext());
}