package com.jbidwatcher.auction.server.ebay; import com.jbidwatcher.util.Currency; import com.jbidwatcher.util.config.JConfig; public class ebayCurrencyTables { private static Currency[][] us_incrementTable = { { new Currency( "$0.99"), new Currency( "$0.05") }, { new Currency( "$4.99"), new Currency( "$0.25") }, { new Currency( "$24.99"), new Currency( "$0.50") }, { new Currency( "$99.99"), new Currency( "$1.00") }, { new Currency( "$249.99"), new Currency( "$2.50") }, { new Currency( "$499.99"), new Currency( "$5.00") }, { new Currency( "$999.99"), new Currency("$10.00") }, { new Currency("$2499.99"), new Currency("$25.00") }, { new Currency("$4999.99"), new Currency("$50.00") }, { Currency.NoValue(), new Currency("$100.00") } }; private static Currency[][] au_incrementTable = { { new Currency( "AUD0.99"), new Currency( "AUD0.05") }, { new Currency( "AUD4.99"), new Currency( "AUD0.25") }, { new Currency( "AUD24.99"), new Currency( "AUD0.50") }, { new Currency( "AUD99.99"), new Currency( "AUD1.00") }, { new Currency( "AUD249.99"), new Currency( "AUD2.50") }, { new Currency( "AUD499.99"), new Currency( "AUD5.00") }, { new Currency( "AUD999.99"), new Currency("AUD10.00") }, { new Currency("AUD2499.99"), new Currency("AUD25.00") }, { new Currency("AUD4999.99"), new Currency("AUD50.00") }, { Currency.NoValue(), new Currency("AUD100.00") } }; private static Currency[][] ca_incrementTable = { { new Currency( "CAD0.99"), new Currency( "CAD0.05") }, { new Currency( "CAD4.99"), new Currency( "CAD0.25") }, { new Currency("CAD24.99"), new Currency( "CAD0.50") }, { new Currency("CAD99.99"), new Currency( "CAD1.00") }, { Currency.NoValue(), new Currency("CAD2.50") } }; // eBay.co.uk increments change *at* the boundary regardless of what the documentation // may say: http://pages.ebay.co.uk/help/buy/bid-increments.html private static Currency[][] uk_incrementTable = { { new Currency( "GBP0.99"), new Currency( "GBP0.05") }, { new Currency( "GBP4.99"), new Currency( "GBP0.20") }, { new Currency( "GBP14.99"), new Currency( "GBP0.50") }, { new Currency( "GBP59.99"), new Currency( "GBP1.00") }, { new Currency( "GBP149.99"), new Currency( "GBP2.00") }, { new Currency( "GBP299.99"), new Currency( "GBP5.00") }, { new Currency( "GBP599.99"), new Currency("GBP10.00") }, { new Currency("GBP1499.99"), new Currency("GBP25.00") }, { new Currency("GBP2999.99"), new Currency("GBP50.00") }, { Currency.NoValue(), new Currency("GBP100.00") } }; private static Currency[][] eu_incrementTable = { { new Currency( "EUR49.99"), new Currency( "EUR0.50") }, { new Currency( "EUR499.99"), new Currency( "EUR1.00") }, { new Currency( "EUR999.99"), new Currency( "EUR5.00") }, { new Currency( "EUR4999.99"), new Currency("EUR10.00") }, { Currency.NoValue(), new Currency("EUR50.00") } }; private static Currency[][] tw_incrementTable = { { new Currency( "NTD500"), new Currency( "NTD15") }, { new Currency( "NTD2500"), new Currency( "NTD30") }, { new Currency( "NTD5000"), new Currency( "NTD50") }, { new Currency( "NTD25000"), new Currency("NTD100") }, { Currency.NoValue(), new Currency("NTD200") } }; private static Currency[][] ch_incrementTable = { { new Currency( "CHF49.99"), new Currency( "CHF0.50") }, { new Currency( "CHF499.99"), new Currency( "CHF1.00") }, { new Currency( "CHF999.99"), new Currency( "CHF5.00") }, { new Currency( "CHF4999.99"), new Currency("CHF10.00") }, { Currency.NoValue(), new Currency("CHF50.00") } }; private static Currency[][] ir_incrementTable = { {new Currency("INR99.99"), new Currency("INR25.00")}, {new Currency("INR499.99"), new Currency("INR50.00")}, {new Currency("INR999.99"), new Currency("INR75.00")}, {new Currency("INR1999.99"), new Currency("INR100.00")}, {new Currency("INR3999.99"), new Currency("INR150.00")}, {new Currency("INR9999.99"), new Currency("INR200.00")}, {new Currency("INR24999.99"), new Currency("INR300.00")}, {new Currency("INR49999.99"), new Currency("INR500.00")}, {new Currency("INR99999.99"), new Currency("INR750.00")}, {Currency.NoValue(), new Currency("INR2000.00")}}; private static Currency zeroDollars = new Currency("$0.00"); private static Currency zeroPounds = new Currency("GBP 0.00"); private static Currency zeroFrancs = new Currency("FR 0.00"); private static Currency zeroSwissFrancs = new Currency("CHF0.00"); private static Currency zeroEuros = new Currency("EUR 0.00"); private static Currency zeroAustralian = new Currency("AUD0.00"); private static Currency zeroIndianRupee = new Currency("INR0.00"); private static Currency zeroTaiwanese = new Currency("NTD0.00"); private static Currency zeroCanadian = new Currency("CAD0.00"); Currency getMinimumBidIncrement(Currency currentBid, int bidCount) { Currency correctedValue = currentBid; Currency zeroIncrement = zeroDollars; Currency[][] rightTable; switch (currentBid.getCurrencyType()) { // Default to USD, so we don't freak if we're passed a bad // value. We'll get the wrong answer, but we won't thrash. default: correctedValue = zeroDollars; rightTable = us_incrementTable; break; case Currency.US_DOLLAR: rightTable = us_incrementTable; break; case Currency.UK_POUND: rightTable = uk_incrementTable; zeroIncrement = zeroPounds; break; case Currency.CH_FRANC: rightTable = ch_incrementTable; zeroIncrement = zeroSwissFrancs; break; case Currency.EURO: rightTable = eu_incrementTable; zeroIncrement = zeroEuros; break; case Currency.TW_DOLLAR: rightTable = tw_incrementTable; zeroIncrement = zeroTaiwanese; break; case Currency.CAN_DOLLAR: rightTable = ca_incrementTable; zeroIncrement = zeroCanadian; break; case Currency.AU_DOLLAR: rightTable = au_incrementTable; zeroIncrement = zeroAustralian; break; case Currency.IND_RUPEE: rightTable = ir_incrementTable; zeroIncrement = zeroIndianRupee; break; } if (bidCount == 0) return zeroIncrement; for (Currency[] aRightTable : rightTable) { Currency endValue = aRightTable[0]; Currency incrementValue = aRightTable[1]; // Sentinel. If we reach the end, return the max. if (endValue == null || endValue.isNull()) return incrementValue; try { // If it's less than, or equal, to the end value than we use // that increment amount. if (correctedValue.less(endValue)) return incrementValue; if (!endValue.less(correctedValue)) return incrementValue; } catch (Currency.CurrencyTypeException e) { /* Should never happen, since we've checked the currency already. */ JConfig.log().handleException("Currency comparison threw a bad currency exception, which should be impossible.", e); } } return null; } }