1 package com.jbidwatcher.auction.server.ebay; 2 3 import com.jbidwatcher.util.Currency; 4 import com.jbidwatcher.util.config.JConfig; 5 6 public class ebayCurrencyTables { 7 private static Currency[][] us_incrementTable = { 8 { new Currency( "$0.99"), new Currency( "$0.05") }, 9 { new Currency( "$4.99"), new Currency( "$0.25") }, 10 { new Currency( "$24.99"), new Currency( "$0.50") }, 11 { new Currency( "$99.99"), new Currency( "$1.00") }, 12 { new Currency( "$249.99"), new Currency( "$2.50") }, 13 { new Currency( "$499.99"), new Currency( "$5.00") }, 14 { new Currency( "$999.99"), new Currency("$10.00") }, 15 { new Currency("$2499.99"), new Currency("$25.00") }, 16 { new Currency("$4999.99"), new Currency("$50.00") }, 17 { Currency.NoValue(), new Currency("$100.00") } }; 18 19 private static Currency[][] au_incrementTable = { 20 { new Currency( "AUD0.99"), new Currency( "AUD0.05") }, 21 { new Currency( "AUD4.99"), new Currency( "AUD0.25") }, 22 { new Currency( "AUD24.99"), new Currency( "AUD0.50") }, 23 { new Currency( "AUD99.99"), new Currency( "AUD1.00") }, 24 { new Currency( "AUD249.99"), new Currency( "AUD2.50") }, 25 { new Currency( "AUD499.99"), new Currency( "AUD5.00") }, 26 { new Currency( "AUD999.99"), new Currency("AUD10.00") }, 27 { new Currency("AUD2499.99"), new Currency("AUD25.00") }, 28 { new Currency("AUD4999.99"), new Currency("AUD50.00") }, 29 { Currency.NoValue(), new Currency("AUD100.00") } }; 30 31 private static Currency[][] ca_incrementTable = { 32 { new Currency( "CAD0.99"), new Currency( "CAD0.05") }, 33 { new Currency( "CAD4.99"), new Currency( "CAD0.25") }, 34 { new Currency("CAD24.99"), new Currency( "CAD0.50") }, 35 { new Currency("CAD99.99"), new Currency( "CAD1.00") }, 36 { Currency.NoValue(), new Currency("CAD2.50") } }; 37 38 // eBay.co.uk increments change *at* the boundary regardless of what the documentation 39 // may say: http://pages.ebay.co.uk/help/buy/bid-increments.html 40 private static Currency[][] uk_incrementTable = { 41 { new Currency( "GBP0.99"), new Currency( "GBP0.05") }, 42 { new Currency( "GBP4.99"), new Currency( "GBP0.20") }, 43 { new Currency( "GBP14.99"), new Currency( "GBP0.50") }, 44 { new Currency( "GBP59.99"), new Currency( "GBP1.00") }, 45 { new Currency( "GBP149.99"), new Currency( "GBP2.00") }, 46 { new Currency( "GBP299.99"), new Currency( "GBP5.00") }, 47 { new Currency( "GBP599.99"), new Currency("GBP10.00") }, 48 { new Currency("GBP1499.99"), new Currency("GBP25.00") }, 49 { new Currency("GBP2999.99"), new Currency("GBP50.00") }, 50 { Currency.NoValue(), new Currency("GBP100.00") } }; 51 52 private static Currency[][] fr_incrementTable = { 53 { new Currency( "FRF4.99"), new Currency( "FRF0.25") }, 54 { new Currency( "FRF24.99"), new Currency( "FRF0.50") }, 55 { new Currency( "FRF99.99"), new Currency( "FRF1.00") }, 56 { new Currency( "FRF249.99"), new Currency( "FRF2.50") }, 57 { new Currency( "FRF499.99"), new Currency( "FRF5.00") }, 58 { new Currency( "FRF999.99"), new Currency("FRF10.00") }, 59 { new Currency( "FRF2499.99"), new Currency("FRF25.00") }, 60 { new Currency( "FRF9999.99"), new Currency("FRF100.00") }, 61 { new Currency("FRF49999.99"), new Currency("FRF250.00") }, 62 { Currency.NoValue(), new Currency("FRF500.00") } }; 63 64 private static Currency[][] eu_incrementTable = { 65 { new Currency( "EUR49.99"), new Currency( "EUR0.50") }, 66 { new Currency( "EUR499.99"), new Currency( "EUR1.00") }, 67 { new Currency( "EUR999.99"), new Currency( "EUR5.00") }, 68 { new Currency( "EUR4999.99"), new Currency("EUR10.00") }, 69 { Currency.NoValue(), new Currency("EUR50.00") } }; 70 71 private static Currency[][] tw_incrementTable = { 72 { new Currency( "NTD500"), new Currency( "NTD15") }, 73 { new Currency( "NTD2500"), new Currency( "NTD30") }, 74 { new Currency( "NTD5000"), new Currency( "NTD50") }, 75 { new Currency( "NTD25000"), new Currency("NTD100") }, 76 { Currency.NoValue(), new Currency("NTD200") } }; 77 78 private static Currency[][] ch_incrementTable = { 79 { new Currency( "CHF49.99"), new Currency( "CHF0.50") }, 80 { new Currency( "CHF499.99"), new Currency( "CHF1.00") }, 81 { new Currency( "CHF999.99"), new Currency( "CHF5.00") }, 82 { new Currency( "CHF4999.99"), new Currency("CHF10.00") }, 83 { Currency.NoValue(), new Currency("CHF50.00") } }; 84 85 private static Currency[][] ir_incrementTable = { 86 {new Currency("INR99.99"), new Currency("INR25.00")}, 87 {new Currency("INR499.99"), new Currency("INR50.00")}, 88 {new Currency("INR999.99"), new Currency("INR75.00")}, 89 {new Currency("INR1999.99"), new Currency("INR100.00")}, 90 {new Currency("INR3999.99"), new Currency("INR150.00")}, 91 {new Currency("INR9999.99"), new Currency("INR200.00")}, 92 {new Currency("INR24999.99"), new Currency("INR300.00")}, 93 {new Currency("INR49999.99"), new Currency("INR500.00")}, 94 {new Currency("INR99999.99"), new Currency("INR750.00")}, 95 {Currency.NoValue(), new Currency("INR2000.00")}}; 96 97 private static Currency zeroDollars = new Currency("$0.00"); 98 private static Currency zeroPounds = new Currency("GBP 0.00"); 99 private static Currency zeroFrancs = new Currency("FR 0.00"); 100 private static Currency zeroSwissFrancs = new Currency("CHF0.00"); 101 private static Currency zeroEuros = new Currency("EUR 0.00"); 102 private static Currency zeroAustralian = new Currency("AUD0.00"); 103 private static Currency zeroIndianRupee = new Currency("INR0.00"); 104 private static Currency zeroTaiwanese = new Currency("NTD0.00"); 105 private static Currency zeroCanadian = new Currency("CAD0.00"); 106 getMinimumBidIncrement(Currency currentBid, int bidCount)107 Currency getMinimumBidIncrement(Currency currentBid, int bidCount) { 108 Currency correctedValue = currentBid; 109 Currency zeroIncrement = zeroDollars; 110 Currency[][] rightTable; 111 112 switch (currentBid.getCurrencyType()) { 113 // Default to USD, so we don't freak if we're passed a bad 114 // value. We'll get the wrong answer, but we won't thrash. 115 default: 116 correctedValue = zeroDollars; 117 rightTable = us_incrementTable; 118 break; 119 case Currency.US_DOLLAR: 120 rightTable = us_incrementTable; 121 break; 122 case Currency.UK_POUND: 123 rightTable = uk_incrementTable; 124 zeroIncrement = zeroPounds; 125 break; 126 case Currency.FR_FRANC: 127 rightTable = fr_incrementTable; 128 zeroIncrement = zeroFrancs; 129 break; 130 case Currency.CH_FRANC: 131 rightTable = ch_incrementTable; 132 zeroIncrement = zeroSwissFrancs; 133 break; 134 case Currency.EURO: 135 rightTable = eu_incrementTable; 136 zeroIncrement = zeroEuros; 137 break; 138 case Currency.TW_DOLLAR: 139 rightTable = tw_incrementTable; 140 zeroIncrement = zeroTaiwanese; 141 break; 142 case Currency.CAN_DOLLAR: 143 rightTable = ca_incrementTable; 144 zeroIncrement = zeroCanadian; 145 break; 146 case Currency.AU_DOLLAR: 147 rightTable = au_incrementTable; 148 zeroIncrement = zeroAustralian; 149 break; 150 case Currency.IND_RUPEE: 151 rightTable = ir_incrementTable; 152 zeroIncrement = zeroIndianRupee; 153 break; 154 } 155 156 if (bidCount == 0) return zeroIncrement; 157 158 for (Currency[] aRightTable : rightTable) { 159 Currency endValue = aRightTable[0]; 160 Currency incrementValue = aRightTable[1]; 161 162 // Sentinel. If we reach the end, return the max. 163 if (endValue == null || endValue.isNull()) return incrementValue; 164 165 try { 166 // If it's less than, or equal, to the end value than we use 167 // that increment amount. 168 if (correctedValue.less(endValue)) return incrementValue; 169 if (!endValue.less(correctedValue)) return incrementValue; 170 } catch (Currency.CurrencyTypeException e) { 171 /* Should never happen, since we've checked the currency already. */ 172 JConfig.log().handleException("Currency comparison threw a bad currency exception, which should be impossible.", e); 173 } 174 } 175 return null; 176 } 177 } 178