/* ===========================================================
* TradeManager : a application to trade strategies for the Java(tm) platform
* ===========================================================
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Project Info: org.trade
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
* [Java is a trademark or registered trademark of Oracle, Inc.
* in the United States and other countries.]
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Original Author: Simon Allen;
* Contributor(s): -;
*
* Changes
* -------
*
*/
package org.trade.ui.models;
import java.util.Vector;
import javax.swing.event.TableModelEvent;
import org.trade.core.valuetype.Decimal;
import org.trade.core.valuetype.Money;
import org.trade.core.valuetype.Percent;
import org.trade.core.valuetype.Quantity;
import org.trade.persistent.dao.TradelogReport;
import org.trade.persistent.dao.TradelogSummary;
import org.trade.ui.base.TableModel;
/**
*/
public class TradelogSummaryTableModel extends TableModel {
/**
*
*/
private static final long serialVersionUID = 3087514589731145479L;
public static final String PERIOD = "Period";
public static final String BATTING_AVERAGE = "Batting Avg";
public static final String SHARPE_RATIO = "Sharpe Ratio";
public static final String GROSS_PL = "Gross P/L";
public static final String QUANTITY = "Quantity";
public static final String COMMISSION = "Commission";
public static final String NET_PL = "Net P/L";
public static final String WIN_COUNT = "Wins";
public static final String WIN_AMOUNT = "Profit Amount";
public static final String LOSS_COUNT = "Losses";
public static final String LOSS_AMOUNT = "Loss Amount";
public static final String POSITION_COUNT = "Positions";
public static final String CONTRACT_COUNT = "Contracts";
private static final String[] columnHeaderToolTip = { null, "% wins vs loss",
"Simple sharpe ratio (sum $wins/#wins)/(sum $loss/#loss)", null, null, null, null, null, null, null, null,
null, null };
private TradelogReport m_data = null;
/**
* OrderModel() -
*
*
* @exception *
* @see
*/
public TradelogSummaryTableModel() {
super(columnHeaderToolTip);
columnNames = new String[13];
columnNames[0] = PERIOD;
columnNames[1] = BATTING_AVERAGE;
columnNames[2] = SHARPE_RATIO;
columnNames[3] = GROSS_PL;
columnNames[4] = QUANTITY;
columnNames[5] = COMMISSION;
columnNames[6] = NET_PL;
columnNames[7] = WIN_COUNT;
columnNames[8] = WIN_AMOUNT;
columnNames[9] = LOSS_COUNT;
columnNames[10] = LOSS_AMOUNT;
columnNames[11] = POSITION_COUNT;
columnNames[12] = CONTRACT_COUNT;
}
/**
* Method isCellEditable.
*
* @param row
* int
* @param column
* int
* @return boolean
* @see javax.swing.table.TableModel#isCellEditable(int, int)
*/
public boolean isCellEditable(int row, int column) {
return false;
}
/**
* Method getData.
*
* @return TradelogReport
*/
public TradelogReport getData() {
return m_data;
}
/**
* setData() -
*
* @param data
* TradelogReport
* @exception *
* @see
*/
public void setData(TradelogReport data) {
this.m_data = data;
this.clearAll();
if (!getData().getTradelogSummary().isEmpty()) {
for (final TradelogSummary element : getData().getTradelogSummary()) {
final Vector<Object> newRow = new Vector<Object>();
getNewRow(newRow, element);
rows.add(newRow);
}
fireTableDataChanged();
}
}
/**
* getData() -
*
* @param value
* Object
* @param row
* int
* @param column
* int
* @exception *
* @see
*/
public void populateDAO(Object value, int row, int column) {
final TradelogSummary element = getData().getTradelogSummary().get(row);
switch (column) {
case 1: {
element.setPeriod((String) value);
break;
}
case 2: {
element.setBattingAverage(((Percent) value).getBigDecimalValue());
break;
}
case 3: {
element.setSimpleSharpeRatio(((Decimal) value).getBigDecimalValue());
break;
}
case 4: {
element.setGrossProfitLoss(((Money) value).getBigDecimalValue());
break;
}
case 5: {
element.setQuantity(((Quantity) value).getIntegerValue());
break;
}
case 6: {
element.setCommission(((Money) value).getBigDecimalValue());
break;
}
case 7: {
element.setNetProfitLoss(((Money) value).getBigDecimalValue());
break;
}
case 8: {
element.setWinCount(((Quantity) value).getIntegerValue());
break;
}
case 9: {
element.setProfitAmount(((Money) value).getBigDecimalValue());
break;
}
case 10: {
element.setLossCount(((Quantity) value).getIntegerValue());
break;
}
case 11: {
element.setLossAmount(((Money) value).getBigDecimalValue());
break;
}
case 12: {
element.setPositionCount(((Quantity) value).getIntegerValue());
break;
}
case 13: {
element.setTradestrategyCount(((Quantity) value).getIntegerValue());
break;
}
default: {
}
}
}
/**
* deleteRow() -
*
* @param selectedRow
* int
* @exception *
* @see
*/
public void deleteRow(int selectedRow) {
int i = 0;
for (final TradelogSummary element : getData().getTradelogSummary()) {
if (i == selectedRow) {
getData().getTradelogSummary().remove(element);
final Vector<Object> currRow = rows.get(selectedRow);
rows.remove(currRow);
this.fireTableRowsDeleted(selectedRow, selectedRow);
break;
}
i++;
}
}
/**
* Method addRow.
*
* @param element
* TradelogSummary
*/
public void addRow(TradelogSummary element) {
getData().getTradelogSummary().add(element);
final Vector<Object> newRow = new Vector<Object>();
getNewRow(newRow, element);
rows.add(newRow);
// Tell the listeners a new table has arrived.
this.fireTableRowsInserted(rows.size() - 1, rows.size() - 1);
}
public void addRow() {
final TradelogSummary element = new TradelogSummary();
getData().getTradelogSummary().add(element);
final Vector<Object> newRow = new Vector<Object>();
getNewRow(newRow, element);
rows.add(newRow);
// Tell the listeners a new table has arrived.
fireTableChanged(new TableModelEvent(this));
}
/**
* Method getNewRow.
*
* @param newRow
* Vector<Object>
* @param element
* TradelogSummary
*/
public void getNewRow(Vector<Object> newRow, TradelogSummary element) {
newRow.addElement(element.getPeriod());
newRow.addElement(new Percent(element.getBattingAverage()));
newRow.addElement(new Decimal(element.getSimpleSharpeRatio(), 2));
newRow.addElement(new Money(element.getGrossProfitLoss()));
newRow.addElement(new Quantity(element.getQuantity()));
newRow.addElement(new Money(element.getCommission()));
newRow.addElement(new Money(element.getNetProfitLoss()));
newRow.addElement(new Quantity(element.getWinCount()));
newRow.addElement(new Money(element.getProfitAmount()));
newRow.addElement(new Quantity(element.getLossCount()));
newRow.addElement(new Money(element.getLossAmount()));
newRow.addElement(new Quantity(element.getPositionCount()));
newRow.addElement(new Quantity(element.getTradestrategyCount()));
}
}