1
2 package hoplugins.transfers.ui;
3
4 import hoplugins.Commons;
5
6 import hoplugins.commons.ui.DefaultTableSorter;
7 import hoplugins.commons.ui.info.clearthought.layout.TableLayout;
8 import hoplugins.commons.ui.info.clearthought.layout.TableLayoutConstraints;
9 import hoplugins.commons.utils.PluginProperty;
10
11 import hoplugins.transfers.constants.TransferTypes;
12 import hoplugins.transfers.dao.DividerDAO;
13 import hoplugins.transfers.dao.TransfersDAO;
14 import hoplugins.transfers.ui.component.TransferTypeComboBox;
15 import hoplugins.transfers.ui.controller.DividerListener;
16 import hoplugins.transfers.ui.model.TransferTypeTableModel;
17 import hoplugins.transfers.utils.PlayerRetriever;
18 import hoplugins.transfers.vo.PlayerTransfer;
19 import hoplugins.transfers.vo.TransferRecap;
20 import hoplugins.transfers.vo.TransferTypeRecap;
21 import hoplugins.transfers.vo.TransferredPlayer;
22
23 import plugins.ISpieler;
24
25 import java.awt.BorderLayout;
26 import java.awt.Font;
27
28 import java.text.NumberFormat;
29
30 import java.util.ArrayList;
31 import java.util.Iterator;
32 import java.util.LinkedHashMap;
33 import java.util.List;
34 import java.util.Map;
35 import java.util.Vector;
36
37 import javax.swing.BorderFactory;
38 import javax.swing.DefaultCellEditor;
39 import javax.swing.JComboBox;
40 import javax.swing.JLabel;
41 import javax.swing.JPanel;
42 import javax.swing.JScrollPane;
43 import javax.swing.JSplitPane;
44 import javax.swing.JTable;
45 import javax.swing.ListSelectionModel;
46 import javax.swing.event.ListSelectionEvent;
47 import javax.swing.event.ListSelectionListener;
48 import javax.swing.event.TableModelEvent;
49 import javax.swing.event.TableModelListener;
50 import javax.swing.table.TableColumn;
51 import javax.swing.table.TableModel;
52
53
54 /***
55 * Pane to show transfer type recp information.
56 *
57 * @author <a href=mailto:draghetto@users.sourceforge.net>Massimiliano Amato</a>
58 */
59 public class TransferTypePane extends JSplitPane implements ListSelectionListener,
60 TableModelListener {
61
62
63 private static final NumberFormat FORMAT = NumberFormat.getIntegerInstance();
64
65
66
67 private JPanel sidePanel = Commons.getModel().getGUI().createImagePanel();
68 private JTable transferTable;
69 private List transferred = new ArrayList();
70 private PlayerDetailPanel playerDetailPanel = new PlayerDetailPanel();
71
72
73
74 /***
75 * Creates a TransferTypePane.
76 */
77 public TransferTypePane() {
78 super(JSplitPane.VERTICAL_SPLIT);
79
80 FORMAT.setGroupingUsed(true);
81 FORMAT.setMaximumFractionDigits(0);
82
83
84 sidePanel.setOpaque(false);
85
86 final JScrollPane sidePane = new JScrollPane(sidePanel);
87 sidePane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
88 sidePane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
89 sidePane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
90
91
92 final JPanel topPanel = Commons.getModel().getGUI().createImagePanel();
93 topPanel.setLayout(new BorderLayout());
94
95 final TableModel model = new TransferTypeTableModel(new ArrayList());
96 final TransferTypeSorter sorter = new TransferTypeSorter(model);
97 transferTable = new JTable(sorter);
98
99 transferTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
100 transferTable.getSelectionModel().addListSelectionListener(this);
101
102 sorter.setTableHeader(transferTable.getTableHeader());
103
104 final JScrollPane transferPane = new JScrollPane(transferTable);
105 transferPane.setOpaque(false);
106
107 topPanel.add(transferPane, BorderLayout.CENTER);
108 topPanel.add(sidePane, BorderLayout.WEST);
109
110 setDividerLocation(DividerDAO.getDividerPosition("TypeTabDivider"));
111 addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY,
112 new DividerListener("TypeTabDivider"));
113
114 setLeftComponent(topPanel);
115 setRightComponent(playerDetailPanel);
116
117 refresh(new Vector());
118 }
119
120
121
122 /***
123 * Refreshes the information on the panel.
124 *
125 * @param transfers List of transfers to show.
126 */
127 public final void refresh(List transfers) {
128 final Map players = new LinkedHashMap();
129 final List wasted = new ArrayList();
130
131 for (final Iterator iter = transfers.iterator(); iter.hasNext();) {
132 final PlayerTransfer pt = (PlayerTransfer) iter.next();
133 final int id = pt.getPlayerId();
134
135 if (id == 0) {
136 wasted.add(pt);
137 } else {
138 TransferredPlayer tt = (TransferredPlayer) players.get(pt.getPlayerId() + "");
139
140 if (tt == null) {
141 ISpieler player = PlayerRetriever.getPlayer(pt.getPlayerId());
142
143 if (player != null) {
144 tt = new TransferredPlayer(player);
145 } else {
146 tt = new TransferredPlayer(pt);
147 }
148
149 players.put("" + tt.getPlayerId(), tt);
150 }
151
152 if (tt != null) {
153 tt.addTransfer(pt);
154 }
155 }
156 }
157
158 transferred = new ArrayList(players.values());
159
160 final TransferRecap recap = new TransferRecap();
161
162 for (final Iterator iter = wasted.iterator(); iter.hasNext();) {
163 final PlayerTransfer element = (PlayerTransfer) iter.next();
164 recap.addWastedOperation(element);
165 }
166
167 for (final Iterator iter = transferred.iterator(); iter.hasNext();) {
168 final TransferredPlayer element = (TransferredPlayer) iter.next();
169 recap.addTradingOperation(element);
170 }
171
172 this.sidePanel.removeAll();
173
174 final double[][] sizes = {
175 {10, 150, 10, 75, TableLayout.FILL, 10},
176 {10, TableLayout.PREFERRED, 10}
177 };
178 final TableLayout tLayout = new TableLayout(sizes);
179 this.sidePanel.setLayout(tLayout);
180
181 final TableLayoutConstraints c = new TableLayoutConstraints();
182 c.vAlign = TableLayout.CENTER;
183
184 c.row1 = 1;
185 c.row2 = c.row1;
186
187 c.col1 = 1;
188 c.col2 = c.col1;
189 c.hAlign = TableLayout.LEFT;
190
191 final JLabel type = new JLabel(PluginProperty.getString("Type"));
192 type.setFont(new Font(type.getFont().getName(), Font.BOLD, type.getFont().getSize()));
193
194 this.sidePanel.add(type, c);
195
196 c.col1 = 3;
197 c.col2 = c.col1;
198 c.hAlign = TableLayout.LEFT;
199
200 final JLabel income = new JLabel(PluginProperty.getString("Income"));
201 income.setFont(new Font(income.getFont().getName(), Font.BOLD, income.getFont().getSize()));
202 this.sidePanel.add(income, c);
203
204 int row = 2;
205 int totalIncome = 0;
206
207 for (int i = -1; i < TransferTypes.NUMBER; i++) {
208 final TransferTypeRecap ttc = recap.getRecap(i);
209
210 if ((ttc != null) && (ttc.getNumber() > 0)) {
211 tLayout.insertRow(++row, TableLayout.PREFERRED);
212 c.row1 = row;
213 c.row2 = c.row1;
214
215 c.col1 = 1;
216 c.col2 = c.col1;
217 c.hAlign = TableLayout.LEFT;
218 this.sidePanel.add(new JLabel(TransferTypes.getTransferDesc(i) + " ("
219 + Integer.toString(ttc.getNumber()) + ")"), c);
220
221 c.col1 = 2;
222 c.col2 = c.col1;
223 c.hAlign = TableLayout.CENTER;
224 this.sidePanel.add(new JLabel(Commons.getModel().getXtraDaten().getCurrencyName()),
225 c);
226
227 c.col1 = 3;
228 c.col2 = c.col1;
229 c.hAlign = TableLayout.RIGHT;
230 this.sidePanel.add(new JLabel(FORMAT.format(ttc.getNetIncome())), c);
231
232 totalIncome += ttc.getNetIncome();
233 }
234 }
235
236 row++;
237 tLayout.insertRow(row, 10);
238
239 row++;
240 tLayout.insertRow(row, TableLayout.PREFERRED);
241 c.row1 = row;
242 c.row2 = c.row1;
243
244 c.col1 = 1;
245 c.col2 = c.col1;
246 c.hAlign = TableLayout.CENTER;
247
248 final JLabel total = new JLabel(PluginProperty.getString("Total"));
249 total.setFont(new Font(total.getFont().getName(), Font.BOLD, total.getFont().getSize()));
250 this.sidePanel.add(total, c);
251
252 c.col1 = 2;
253 c.col2 = c.col1;
254 c.hAlign = TableLayout.CENTER;
255 this.sidePanel.add(new JLabel(Commons.getModel().getXtraDaten().getCurrencyName()), c);
256
257 c.col1 = 3;
258 c.col2 = c.col1;
259 c.hAlign = TableLayout.RIGHT;
260 this.sidePanel.add(new JLabel(FORMAT.format(totalIncome)), c);
261
262 final DefaultTableSorter sorter = (DefaultTableSorter) transferTable.getModel();
263 sorter.setTableModel(new TransferTypeTableModel(transferred));
264
265 final JComboBox comboBox = new TransferTypeComboBox();
266 final TableColumn column = transferTable.getColumnModel().getColumn(2);
267 column.setCellEditor(new DefaultCellEditor(comboBox));
268 column.setPreferredWidth(120);
269
270 sorter.getTableModel().addTableModelListener(this);
271 updateUI();
272 }
273
274 /***
275 * Executed when table has changed.
276 *
277 * @param e TableModelEvent
278 */
279 public final void tableChanged(TableModelEvent e) {
280 refresh(TransfersDAO.getTransfers(0, true, true));
281 }
282
283 /*** {@inheritDoc} */
284 public final void valueChanged(ListSelectionEvent e) {
285 if (!e.getValueIsAdjusting()) {
286 final DefaultTableSorter sorter = (DefaultTableSorter) transferTable.getModel();
287
288 if (transferTable.getSelectedRow() >= 0) {
289 final int index = sorter.modelIndex(transferTable.getSelectedRow());
290 final TransferredPlayer transfer = (TransferredPlayer) this.transferred.get(index);
291 this.playerDetailPanel.setPlayer(transfer.getPlayerId(), transfer.getPlayerName());
292 } else {
293 this.playerDetailPanel.clearPanel();
294 }
295 }
296 }
297 }