/**
* Copyright 2011 multibit.org
*
* Licensed under the MIT license (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://opensource.org/licenses/mit-license.php
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.multibit.viewsystem.swing.view.ticker;
import org.multibit.controller.Controller;
import org.multibit.controller.exchange.ExchangeController;
import org.multibit.model.exchange.ExchangeData;
import org.multibit.model.exchange.ExchangeModel;
import javax.swing.table.AbstractTableModel;
/**
* Table model for ticker.
*
* @author jim
*
*/
public class TickerTableModel extends AbstractTableModel {
public static final String TICKER_COLUMN_NONE = "none";
public static final String TICKER_COLUMN_CURRENCY = "currency";
public static final String TICKER_COLUMN_LAST_PRICE = "lastPrice";
public static final String TICKER_COLUMN_BID = "bid";
public static final String TICKER_COLUMN_ASK = "ask";
public static final String TICKER_COLUMN_EXCHANGE = "exchange";
private static final int MAX_NUMBER_OF_COLUMNS = 5;
public static final String DEFAULT_COLUMNS_TO_SHOW = "currency lastPrice exchange";
public static final String DEFAULT_CURRENCY = "USD";
private static final long serialVersionUID = -775886012854496208L;
private boolean showSecondRow;
private String exchange1;
private String currency1;
private String exchange2;
private String currency2;
private final Controller controller;
private final ExchangeController exchangeController;
private boolean showCurrency;
private boolean showLastPrice;
private boolean showBid;
private boolean showAsk;
private boolean showExchange;
private String[] columnVariables = new String[MAX_NUMBER_OF_COLUMNS];
private String[] tempColumns = new String[MAX_NUMBER_OF_COLUMNS];
private int numberOfColumns;
public TickerTableModel(ExchangeController exchangeController) {
this.exchangeController = exchangeController;
this.controller = this.exchangeController;
String tickerColumnsToShow = controller.getModel().getUserPreference(ExchangeModel.TICKER_COLUMNS_TO_SHOW);
if (tickerColumnsToShow == null || tickerColumnsToShow.equals("")) {
tickerColumnsToShow = DEFAULT_COLUMNS_TO_SHOW;
}
showCurrency = tickerColumnsToShow.indexOf(TICKER_COLUMN_CURRENCY) > -1;
showLastPrice = tickerColumnsToShow.indexOf(TICKER_COLUMN_LAST_PRICE) > -1;
showBid = tickerColumnsToShow.indexOf(TICKER_COLUMN_BID) > -1;
showAsk = tickerColumnsToShow.indexOf(TICKER_COLUMN_ASK) > -1;
showExchange = tickerColumnsToShow.indexOf(TICKER_COLUMN_EXCHANGE) > -1;
numberOfColumns = 0;
if (showExchange) {
tempColumns[numberOfColumns] = TICKER_COLUMN_EXCHANGE;
numberOfColumns++;
}
if (showCurrency) {
tempColumns[numberOfColumns] = TICKER_COLUMN_CURRENCY;
numberOfColumns++;
}
if (showLastPrice) {
tempColumns[numberOfColumns] = TICKER_COLUMN_LAST_PRICE;
numberOfColumns++;
}
if (showBid) {
tempColumns[numberOfColumns] = TICKER_COLUMN_BID;
numberOfColumns++;
}
if (showAsk) {
tempColumns[numberOfColumns] = TICKER_COLUMN_ASK;
numberOfColumns++;
}
columnVariables = new String[numberOfColumns];
System.arraycopy(tempColumns, 0, columnVariables, 0, numberOfColumns);
showSecondRow = Boolean.TRUE.toString().equals(
controller.getModel().getUserPreference(ExchangeModel.TICKER_SHOW_SECOND_ROW));
exchange1 = controller.getModel().getUserPreference(ExchangeModel.TICKER_FIRST_ROW_EXCHANGE);
if (exchange1 == null || "".equals(exchange1) || "null".equals(exchange1)) {
exchange1 = ExchangeData.DEFAULT_EXCHANGE;
}
currency1 = controller.getModel().getUserPreference(ExchangeModel.TICKER_FIRST_ROW_CURRENCY);
if (currency1 == null || "".equals(currency1) || "null".equals(currency1)) {
currency1 = ExchangeData.DEFAULT_CURRENCY;
}
// Map MtGox to Bitstamp
if (ExchangeData.MT_GOX_EXCHANGE_NAME.equalsIgnoreCase(exchange1)) {
exchange1 = ExchangeData.BITSTAMP_EXCHANGE_NAME;
controller.getModel().setUserPreference(ExchangeModel.TICKER_FIRST_ROW_EXCHANGE, ExchangeData.BITSTAMP_EXCHANGE_NAME);
currency1 = "USD";
controller.getModel().setUserPreference(ExchangeModel.TICKER_FIRST_ROW_CURRENCY, "USD");
}
exchange2 = controller.getModel().getUserPreference(ExchangeModel.TICKER_SECOND_ROW_EXCHANGE);
if (exchange2 == null || "".equals(exchange2) || "null".equals(exchange2)) {
exchange2 = ExchangeData.DEFAULT_EXCHANGE;
}
currency2 = controller.getModel().getUserPreference(ExchangeModel.TICKER_SECOND_ROW_CURRENCY);
if (currency2 == null || "".equals(currency2) || "null".equals(currency2)) {
currency2 = ExchangeData.DEFAULT_CURRENCY;
}
// Map MtGox to Bitstamp
if (ExchangeData.MT_GOX_EXCHANGE_NAME.equalsIgnoreCase(exchange2)) {
exchange2 = ExchangeData.BITSTAMP_EXCHANGE_NAME;
controller.getModel().setUserPreference(ExchangeModel.TICKER_SECOND_ROW_EXCHANGE, ExchangeData.BITSTAMP_EXCHANGE_NAME);
currency2 = "USD";
controller.getModel().setUserPreference(ExchangeModel.TICKER_SECOND_ROW_CURRENCY, "USD");
}
}
@Override
public int getColumnCount() {
return numberOfColumns;
}
@Override
public int getRowCount() {
if (showSecondRow) {
return 2;
} else {
return 1;
}
}
@Override
public String getColumnName(int column) {
return controller.getLocaliser().getString("tickerTableModel." + columnVariables[column]);
}
@Override
public Object getValueAt(int row, int column) {
if (row < 0 && row >= getRowCount()) {
return null;
}
String exchange;
String currency;
ExchangeData exchangeData;
if (row == 0) {
exchange = exchange1;
currency = currency1;
exchangeData = this.exchangeController.getModel().getExchangeData(exchange1);
} else {
exchange = exchange2;
currency = currency2;
exchangeData = this.exchangeController.getModel().getExchangeData(exchange2);;
}
String variable = columnVariables[column];
if (TICKER_COLUMN_CURRENCY.equals(variable)) {
// currency
return currency;
} else if (TICKER_COLUMN_LAST_PRICE.equals(variable)) {
// rate
if (exchangeData == null || exchangeData.getLastPrice(currency) == null) {
return " ";
} else {
return controller.getLocaliser().bigMoneyValueToString(exchangeData.getLastPrice(currency));
}
} else if (TICKER_COLUMN_BID.equals(variable)) {
// bid
if (exchangeData == null || exchangeData.getLastBid(currency) == null) {
return " ";
} else {
return controller.getLocaliser().bigMoneyValueToString(exchangeData.getLastBid(currency));
}
} else if (TICKER_COLUMN_ASK.equals(variable)) {
// ask
if (exchangeData == null || exchangeData.getLastAsk(currency) == null) {
return " ";
} else {
return controller.getLocaliser().bigMoneyValueToString(exchangeData.getLastAsk(currency));
}
} else if (TICKER_COLUMN_EXCHANGE.equals(variable)) {
// exchange
return exchange;
} else {
// do not know
return "";
}
}
/**
* Table model is read only.
*/
@Override
public void setValueAt(Object value, int row, int column) {
throw new UnsupportedOperationException();
}
public String[] getColumnVariables() {
return columnVariables;
}
}