Subversion Repositories ES

Compare Revisions

Last modification

Ignore whitespace Rev 15 → Rev 16

/trunk/src/de/pointedears/converter/db/CurrenciesDatabase.java
20,36 → 20,22
public class CurrenciesDatabase extends SQLiteOpenHelper
{
private static final String DATABASE_NAME = "currency.db"; //$NON-NLS-1$
private static final int DATABASE_VERSION = 2;
private static final int DATABASE_VERSION = 3;
 
private static final String TABLE = "currency"; //$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_CURRENCY = "currency1"; //$NON-NLS-1$
private static final String COLUMN_FACTOR = "factor"; //$NON-NLS-1$
 
private static HashMap<String, HashMap<String, Double>> conversionRates =
new HashMap<String, HashMap<String, Double>>();
private static HashMap<String, Double> conversionRates =
new HashMap<String, Double>();
static
{
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);
/* 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);
}
private final CurrenciesActivity context;
 
/**
* @param context
59,7 → 45,6
{
super(context, CurrenciesDatabase.DATABASE_NAME, null,
CurrenciesDatabase.DATABASE_VERSION);
this.context = context;
this.readConversionsFromDatabase();
}
 
75,28 → 60,21
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE IF NOT EXISTS " + CurrenciesDatabase.TABLE
+ " (" + CurrenciesDatabase.COLUMN_CURRENCY1 + " TEXT, "
+ CurrenciesDatabase.COLUMN_CURRENCY2 + " TEXT, "
+ " (" + CurrenciesDatabase.COLUMN_CURRENCY + " TEXT, "
+ CurrenciesDatabase.COLUMN_FACTOR
+ " NUMERIC"
+ ", CONSTRAINT unique_currency_pair UNIQUE ("
+ CurrenciesDatabase.COLUMN_CURRENCY1 + ", "
+ CurrenciesDatabase.COLUMN_CURRENCY2 + "))");
+ CurrenciesDatabase.COLUMN_CURRENCY + "))");
 
HashMap<String, HashMap<String, Double>> currencyConversions =
HashMap<String, Double> currencyConversions =
this.getConversionRates();
for (String key : currencyConversions.keySet())
for (Entry<String, Double> factorEntry : currencyConversions.entrySet())
{
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);
}
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);
}
}
 
119,7 → 97,7
/**
* @return
*/
public HashMap<String, HashMap<String, Double>> getConversionRates()
public HashMap<String, Double> getConversionRates()
{
return CurrenciesDatabase.conversionRates;
}
135,11 → 113,9
/* 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_CURRENCY1 + ","
+ CurrenciesDatabase.COLUMN_CURRENCY2, null);
null, CurrenciesDatabase.COLUMN_CURRENCY, null);
 
if (cursor != null)
{
147,10 → 123,7
{
int currency1Id =
cursor
.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_CURRENCY1);
int currency2Id =
cursor
.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_CURRENCY2);
.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_CURRENCY);
int factorId =
cursor.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_FACTOR);
 
157,58 → 130,17
/* NOTE: Don't change the default values if the table is empty */
if (cursor.moveToFirst())
{
HashMap<String, HashMap<String, Double>> newCurrencyConversions =
new HashMap<String, HashMap<String, Double>>();
HashMap<String, Double> mapForCurrency = null;
String lastCurrency1Str = null;
String currency1Str;
HashMap<String, Double> newCurrencyConversions =
new HashMap<String, Double>();
 
do
{
currency1Str = cursor.getString(currency1Id);
String currency2Str = cursor.getString(currency2Id);
String currencyStr = cursor.getString(currency1Id);
Double factor = cursor.getDouble(factorId);
 
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);
newCurrencyConversions.put(currencyStr, 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;
}
}
237,11 → 169,9
{
SQLiteDatabase dbConn = this.getReadableDatabase();
 
@SuppressWarnings("nls")
Cursor myCursor =
dbConn.query(true, CurrenciesDatabase.TABLE, null, null, null, null,
null, CurrenciesDatabase.COLUMN_CURRENCY1 + ","
+ CurrenciesDatabase.COLUMN_CURRENCY2, null);
null, CurrenciesDatabase.COLUMN_CURRENCY, null);
 
@SuppressWarnings({ "unused", "nls" })
String queryResult = "";
251,10 → 181,7
{
int currency1Id =
myCursor
.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_CURRENCY1);
int currency2Id =
myCursor
.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_CURRENCY2);
.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_CURRENCY);
int factorId =
myCursor.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_FACTOR);
 
262,13 → 189,12
{
do
{
String currency1Str = myCursor.getString(currency1Id);
String currency2Str = myCursor.getString(currency2Id);
String currencyStr = myCursor.getString(currency1Id);
Double factor = myCursor.getDouble(factorId);
 
/* DEBUG */
queryResult +=
currency1Str + " --> " + currency2Str + ": " + factor + "\n";
"EUR --> " + currencyStr + ": " + factor + "\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
while (myCursor.moveToNext());
}