View Javadoc

1   // %1126721330823:hoplugins.transfers.ui%
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      //~ Static fields/initializers -----------------------------------------------------------------
62  
63      private static final NumberFormat FORMAT = NumberFormat.getIntegerInstance();
64  
65      //~ Instance fields ----------------------------------------------------------------------------
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      //~ Constructors -------------------------------------------------------------------------------
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          // Create side panel
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          // Create the top panel and add it to the split pane
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")); //$NON-NLS-1$
111         addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY,
112                                   new DividerListener("TypeTabDivider")); //$NON-NLS-1$
113 
114         setLeftComponent(topPanel);
115         setRightComponent(playerDetailPanel);
116 
117         refresh(new Vector());
118     }
119 
120     //~ Methods ------------------------------------------------------------------------------------
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 }