package uk.ac.cam.cstibhotel.otcanalyser.gui; import uk.ac.cam.cstibhotel.otcanalyser.trade.Trade; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.swing.table.AbstractTableModel; class DataTableModel extends AbstractTableModel{ private static final long serialVersionUID = 1L; public static final String[] columnNames = { "Dissemination ID", "Original Dissemination ID", "Action", "Execution Timestamp", "Cleared", "Collateralization", "End User Exception", "Bespoke", "Execution Venue", "Block Trades", "Effective Date", "Maturity Date", "Day Count Convention", "Settlement Currency", "Trade Type", "Asset Class", "Subasset Class", "UPI/Taxonomy", "Price Forming Continuation Data", "Underlying Asset 1", "Underlying Asset 2", "Price Notation Type", "Price Notation", "Additional Price Notation Type", "Additional Price Notation", "Notional Currency 1", "Notional Currency 2", "Rounded Notional Amount 1", "Rounded Notional Amount 2", "Payment Frequency 1", "Payment Frequency 2", "Reset Frequency 1", "Reset Frequency 2", "Embedded Option", "Option Strike Price", "Option Type", "Option Family", "Option Currency", "Option Premium", "Option Lock Period", "Option Expiration Date", "Price Notation 2 Type", "Price Notation 2", "Price Notation 3 Type", "Price Notation 3" }; private final List<Object[]> data; public DataTableModel(List<Trade> trades){ data = new ArrayList<>(trades.size()); for (Trade t : trades){ addRow(t, false); } } @Override public String getColumnName(int col) { return columnNames[col]; } @Override public int getRowCount() { return data.size(); } @Override public int getColumnCount() { return columnNames.length; } //make sure date columns sorted correctly (not alphabetically) @Override public Class<?> getColumnClass(int columnIndex) { if (!data.isEmpty() && data.get(0)[columnIndex] instanceof Date) { return Date.class; } else if (columnIndex == 27 || columnIndex == 28) { return Long.class; } else { return super.getColumnClass(columnIndex); } } @Override public Object getValueAt(int rowIndex, int columnIndex) { return data.get(rowIndex)[columnIndex]; } public final void addRow(Trade t, boolean toBeginning){ Object[] row = new Object[columnNames.length]; //fill row row[0] = t.getDisseminationID(); row[1] = t.getOriginalDisseminationID(); row[2] = t.getAction(); row[3] = t.getExecutionTimestamp(); row[4] = t.isCleared(); row[5] = t.getCollateralization(); row[6] = t.isEndUserException(); row[7] = t.isBespoke(); row[8] = t.isExecutionVenue(); row[9] = t.isBlockTrades(); row[10] = t.getEffectiveDate(); row[11] = t.getEndDate(); row[12] = t.getDayCountConvention(); row[13] = t.getSettlementCurrency(); row[14] = t.getTradeType(); row[15] = t.getAssetClass(); row[16] = t.getTaxonomy().getSubProduct(); row[17] = t.getTaxonomy().getFullTaxonomy(); row[18] = t.getPriceFormingContinuationData(); row[19] = t.getUnderlyingAsset1(); row[20] = t.getUnderlyingAsset2(); row[21] = t.getPriceNotationType(); row[22] = t.getPriceNotation(); row[23] = t.getAdditionalPriceNotationType(); row[24] = t.getAdditionalPriceNotation(); row[25] = t.getNotionalCurrency1(); row[26] = t.getNotionalCurrency2(); row[27] = t.getRoundedNotionalAmount1(); row[28] = t.getRoundedNotionalAmount2(); row[29] = t.getPaymentFrequency1(); row[30] = t.getPaymentFrequency2(); row[31] = t.getResetFrequency1(); row[32] = t.getResetFrequency2(); row[33] = t.getEmbeddedOption(); row[34] = t.getOptionStrikePrice(); row[35] = t.getOptionType(); row[36] = t.getOptionFamily(); row[37] = t.getOptionCurrency(); row[38] = t.getOptionPremium(); row[39] = t.getOptionLockPeriod(); row[40] = t.getOptionExpirationDate(); row[41] = t.getPriceNotation2Type(); row[42] = t.getPriceNotation2(); row[43] = t.getPriceNotation3Type(); row[44] = t.getPriceNotation3(); if (toBeginning) { data.add(0, row); } else { data.add(row); } } }