1
2 package hoplugins;
3
4 import hoplugins.commons.utils.HTCalendar;
5 import hoplugins.commons.utils.HTCalendarFactory;
6 import hoplugins.commons.utils.PluginProperty;
7 import hoplugins.commons.utils.SeriesUtil;
8
9 import hoplugins.transfers.dao.TransferSettingDAO;
10 import hoplugins.transfers.dao.TransferStatusDAO;
11 import hoplugins.transfers.dao.TransfersDAO;
12 import hoplugins.transfers.ui.HistoryPane;
13 import hoplugins.transfers.ui.TransferTypePane;
14 import hoplugins.transfers.ui.component.OptionPanel;
15 import hoplugins.transfers.ui.component.StartingPanel;
16 import hoplugins.transfers.vo.PlayerTransfer;
17
18 import plugins.IHOMiniModel;
19 import plugins.IOfficialPlugin;
20 import plugins.IPlugin;
21 import plugins.IRefreshable;
22 import plugins.ISpieler;
23
24 import java.awt.BorderLayout;
25 import java.awt.event.ActionEvent;
26 import java.awt.event.ActionListener;
27
28 import java.io.File;
29 import java.io.IOException;
30
31 import java.text.SimpleDateFormat;
32
33 import java.util.ArrayList;
34 import java.util.Calendar;
35 import java.util.Iterator;
36 import java.util.List;
37 import java.util.Vector;
38
39 import javax.swing.JMenu;
40 import javax.swing.JMenuItem;
41 import javax.swing.JOptionPane;
42 import javax.swing.JPanel;
43 import javax.swing.JTabbedPane;
44 import javax.swing.JWindow;
45
46
47 /***
48 * Plugin regarding transfer information.
49 *
50 * @author <a href=mailto:nethyperon@users.sourceforge.net>Boy van der Werf</a>
51 */
52 public class Transfers implements IPlugin, IRefreshable, ActionListener, IOfficialPlugin {
53
54
55 /*** PLugin String name */
56 private static final String PLUGIN_NAME = "Transfers";
57
58
59
60 /*** Plugin version constant */
61 private final double PLUGIN_VERSION = 0.94;
62
63 /*** Plugin Id */
64 private final int PLUGIN_ID = 25;
65 private HistoryPane historyPane;
66 private List oldplayers;
67 private List players;
68 private TransferTypePane transferTypePane;
69
70
71
72 /***
73 * {@inheritDoc}
74 */
75 public final String getName() {
76 return getPluginName() + " " + getVersion();
77 }
78
79 /***
80 * {@inheritDoc}
81 */
82 public final int getPluginID() {
83 return PLUGIN_ID;
84 }
85
86 /***
87 * {@inheritDoc}
88 */
89 public final String getPluginName() {
90 return PLUGIN_NAME;
91 }
92
93 /***
94 * {@inheritDoc}
95 */
96 public final File[] getUnquenchableFiles() {
97 return null;
98 }
99
100 /***
101 * {@inheritDoc}
102 */
103 public final double getVersion() {
104 return PLUGIN_VERSION;
105 }
106
107 /***
108 * {@inheritDoc}
109 */
110 public final void actionPerformed(ActionEvent evt) {
111 final IHOMiniModel model = Commons.getModel();
112
113 if (model.getBasics().getTeamId() != 0) {
114 final StringBuffer sBuffer = new StringBuffer();
115 sBuffer.append(PluginProperty.getString("UpdConfirmMsg.0"));
116 sBuffer.append("\n" + PluginProperty.getString("UpdConfirmMsg.1"));
117 sBuffer.append("\n" + PluginProperty.getString("UpdConfirmMsg.2"));
118 sBuffer.append("\n\n" + PluginProperty.getString("UpdConfirmMsg.3"));
119
120 final int choice = JOptionPane.showConfirmDialog(model.getGUI().getOwner4Dialog(),
121 sBuffer.toString(),
122 PluginProperty.getString("Warning"),
123 JOptionPane.YES_NO_OPTION);
124
125 if (choice == JOptionPane.YES_OPTION) {
126 try {
127 final JWindow waitWindow = model.getGUI().createWaitDialog(model.getGUI()
128 .getOwner4Dialog());
129 waitWindow.show();
130 TransfersDAO.reloadTeamTransfers(model.getBasics().getTeamId());
131 waitWindow.hide();
132 waitWindow.dispose();
133 } catch (Exception e) {
134 e.printStackTrace();
135 }
136
137 refresh();
138 }
139 } else {
140 model.getHelper().showMessage(model.getGUI().getOwner4Dialog(),
141 PluginProperty.getString("UpdMsg"), "", 1);
142 }
143 }
144
145 /***
146 * {@inheritDoc}
147 */
148 public final void refresh() {
149 final IHOMiniModel model = Commons.getModel();
150
151 final JWindow waitWindow = model.getGUI().createWaitDialog(model.getGUI().getOwner4Dialog());
152 waitWindow.show();
153
154 final List allOutdated = new Vector();
155
156
157 final List tmp = new Vector();
158 tmp.clear();
159 tmp.addAll(model.getAllSpieler());
160 tmp.removeAll(this.players);
161 allOutdated.addAll(tmp);
162
163
164 tmp.clear();
165 tmp.addAll(model.getAllOldSpieler());
166 tmp.removeAll(this.oldplayers);
167 allOutdated.addAll(tmp);
168
169 final List outdated = new ArrayList(allOutdated);
170
171 for (Iterator iter = allOutdated.iterator(); iter.hasNext();) {
172 final ISpieler player = (ISpieler) iter.next();
173
174 if (player.getSpielerID() < 0) {
175 outdated.remove(player);
176 }
177 }
178
179 if ((outdated.size() > 0) && (TransfersDAO.getTransfers(0, true, true).size() == 0)) {
180 TransfersDAO.updateTeamTransfers(model.getBasics().getTeamId());
181 }
182
183 for (Iterator iter = outdated.iterator(); iter.hasNext();) {
184 final ISpieler player = (ISpieler) iter.next();
185 TransfersDAO.updatePlayerTransfers(player.getSpielerID());
186 }
187
188 final List transfers = reloadData();
189
190 if (TransferSettingDAO.isAutomatic()) {
191 uploadTransfers(transfers);
192 }
193
194 waitWindow.hide();
195 waitWindow.dispose();
196 }
197
198 /***
199 * {@inheritDoc}
200 */
201 public final void start(IHOMiniModel hoMiniModel) {
202 this.players = new Vector(hoMiniModel.getAllSpieler());
203 this.oldplayers = new Vector(hoMiniModel.getAllOldSpieler());
204
205
206 final JTabbedPane tabPane = new JTabbedPane();
207
208 historyPane = new HistoryPane();
209 tabPane.add(PluginProperty.getString("History"), historyPane);
210
211 transferTypePane = new TransferTypePane();
212 tabPane.add(PluginProperty.getString("TransferTypes"), transferTypePane);
213
214
215
216
217 final JPanel pluginPanel = hoMiniModel.getGUI().createImagePanel();
218 pluginPanel.setLayout(new BorderLayout());
219 pluginPanel.add(tabPane, BorderLayout.CENTER);
220
221 hoMiniModel.getGUI().addTab(getPluginName(), pluginPanel);
222 hoMiniModel.getGUI().registerRefreshable(this);
223
224 final JMenu menu = new JMenu(getPluginName());
225 final JMenuItem item = new JMenuItem(PluginProperty.getString("Menu.refreshData"));
226 item.addActionListener(this);
227 menu.add(item);
228 hoMiniModel.getGUI().addMenu(menu);
229 hoMiniModel.getGUI().addOptionPanel(getPluginName(), new OptionPanel());
230 reloadData();
231
232 if (!TransferSettingDAO.isStarted()) {
233 JOptionPane.showMessageDialog(hoMiniModel.getGUI().getOwner4Dialog(),
234 new StartingPanel(), "Info",
235 JOptionPane.PLAIN_MESSAGE);
236 TransferSettingDAO.setStarted();
237 }
238
239 if (!TransferSettingDAO.isFixed()) {
240 TransferStatusDAO.resetTransfers();
241 TransferSettingDAO.setFixed();
242 }
243 }
244
245 /***
246 * Refresh the data in the plugin
247 *
248 * @return List of transfers shown in the plugin
249 */
250 private List reloadData() {
251 final IHOMiniModel model = Commons.getModel();
252 this.players = new Vector(model.getAllSpieler());
253 this.oldplayers = new Vector(model.getAllOldSpieler());
254
255 final List transfers = TransfersDAO.getTransfers(0, true, true);
256
257 historyPane.refresh();
258 transferTypePane.refresh(transfers);
259 return transfers;
260 }
261
262 /***
263 * Uploads transfer and player information for TPE
264 *
265 * @param pt Transfer information
266 *
267 * @return Boolean to indicate succesfull upload
268 */
269 private boolean upload(PlayerTransfer pt) {
270 final IHOMiniModel model = Commons.getModel();
271 final ISpieler spieler = model.getSpielerAtDate(pt.getPlayerId(), pt.getDate());
272
273
274 if (spieler == null) {
275 return false;
276 }
277
278
279
280 final HTCalendar transferDate = HTCalendarFactory.createTrainingCalendar(model, pt.getDate());
281 final HTCalendar spielerDate = HTCalendarFactory.createTrainingCalendar(model,
282 spieler.getHrfDate());
283
284
285 if (((transferDate.getHTSeason() * 16) + transferDate.getHTWeek()) != ((spielerDate
286 .getHTSeason() * 16)
287 + spielerDate.getHTWeek())) {
288
289
290 return false;
291 }
292
293 final StringBuffer url = new StringBuffer();
294 url.append("http://cgi.ethz.ch/~masenn/ho.php?cmd=addTransfer");
295 url.append("&id=" + pt.getTransferID());
296 url.append("&age=" + spieler.getAlter());
297 url.append("&for=" + spieler.getForm());
298 url.append("&inj=" + spieler.getVerletzt());
299 url.append("&exp=" + spieler.getErfahrung());
300 url.append("&lea=" + spieler.getFuehrung());
301 url.append("&tsi=" + pt.getTsi());
302 url.append("&sta=" + spieler.getKondition());
303 url.append("&kee=" + spieler.getTorwart());
304 url.append("&pla=" + spieler.getSpielaufbau());
305 url.append("&pas=" + spieler.getPasspiel());
306 url.append("&win=" + spieler.getFluegelspiel());
307 url.append("&def=" + spieler.getVerteidigung());
308 url.append("&att=" + spieler.getTorschuss());
309 url.append("&set=" + spieler.getStandards());
310 url.append("&spe=" + spieler.getSpezialitaet());
311 url.append("&agg=" + spieler.getAgressivitaet());
312 url.append("&pop=" + spieler.getCharakter());
313 url.append("&hon=" + spieler.getAnsehen());
314
315 final double curr_rate = Commons.getModel().getXtraDaten().getCurrencyRate();
316 final double price = (pt.getPrice() * curr_rate) / 10;
317 url.append("&pri=" + (int) price);
318
319 final HTCalendar globalDate = HTCalendarFactory.createGlobalCalendar(pt.getDate());
320 url.append("&wee=" + globalDate.getHTWeek());
321 url.append("&sea=" + globalDate.getHTSeason());
322
323 final Calendar c = Calendar.getInstance();
324 c.setTimeInMillis(pt.getDate().getTime());
325 url.append("&hou=" + c.get(Calendar.HOUR_OF_DAY));
326
327 final SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
328 url.append("&date=" + sdf.format(c.getTime()));
329
330 url.append("&ver=" + getVersion());
331
332 url.append("&teamId=" + Commons.getModel().getBasics().getTeamId());
333 url.append("&countryId=" + Commons.getModel().getBasics().getLand());
334
335 String liga = Commons.getModel().getLiga().getLiga();
336 int level = SeriesUtil.getSeriesLevel(liga);
337 url.append("&levelId=" + level);
338
339 try {
340 final String result = Commons.getModel().getDownloadHelper().getUsalWebPage(url
341 .toString(),
342 false);
343
344
345 if ((result.equalsIgnoreCase("True")) || (result.equalsIgnoreCase("Skipped"))) {
346 return true;
347 }
348 } catch (IOException e) {
349 e.printStackTrace();
350 }
351
352 return false;
353 }
354
355 /***
356 * Upload to EPV Server the needed Transfer operation
357 *
358 * @param transfers list of transfers to check for upload
359 */
360 private void uploadTransfers(List transfers) {
361 for (Iterator iter = transfers.iterator(); iter.hasNext();) {
362 final PlayerTransfer pt = (PlayerTransfer) iter.next();
363
364 if (!TransferStatusDAO.isUploaded(pt.getTransferID())) {
365 if (upload(pt)) {
366 TransferStatusDAO.setUploaded(pt.getTransferID());
367 }
368 }
369 }
370 }
371 }