View Javadoc

1   // %2362941848:hoplugins%
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      //~ Static fields/initializers -----------------------------------------------------------------
54  
55      /*** PLugin String name */
56      private static final String PLUGIN_NAME = "Transfers";
57  
58      //~ Instance fields ----------------------------------------------------------------------------
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      //~ Methods ------------------------------------------------------------------------------------
71  
72      /***
73       * {@inheritDoc}
74       */
75      public final String getName() {
76          return getPluginName() + " " + getVersion(); //$NON-NLS-1$
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; //$NON-NLS-1$
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         // Check for outdated players.
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         // Check for outdated old players.
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         // Create the top panel
206         final JTabbedPane tabPane = new JTabbedPane();
207 
208         historyPane = new HistoryPane();
209         tabPane.add(PluginProperty.getString("History"), historyPane); //$NON-NLS-1$
210 
211         transferTypePane = new TransferTypePane();
212         tabPane.add(PluginProperty.getString("TransferTypes"), transferTypePane);
213 
214         //tabPane.add("Bookmarked Teams", new TeamBookmarkPane());
215         //JPanel playerPanel = hoMiniModel.getGUI().createImagePanel();
216         //tabPane.add("Bookmarked Players", playerPanel);
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()); //$NON-NLS-1$
225         final JMenuItem item = new JMenuItem(PluginProperty.getString("Menu.refreshData")); //$NON-NLS-1$
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", //$NON-NLS-1$
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         //System.out.println(spieler + "-" + pt.getPlayerName() + "|" + pt.getPlayerId());
274         if (spieler == null) {
275             return false;
276         }
277 
278         //System.out.println(new Date(pt.getDate().getTime()));
279         //System.out.println(new Date(spieler.getHrfDate().getTime()));
280         final HTCalendar transferDate = HTCalendarFactory.createTrainingCalendar(model, pt.getDate());
281         final HTCalendar spielerDate = HTCalendarFactory.createTrainingCalendar(model,
282                                                                                 spieler.getHrfDate());
283 
284         // Not in the same week, possible skillup so skip it
285         if (((transferDate.getHTSeason() * 16) + transferDate.getHTWeek()) != ((spielerDate
286                                                                                 .getHTSeason() * 16)
287             + spielerDate.getHTWeek())) {
288             //System.out.println((transferDate.getHTSeason() * 16) + transferDate.getHTWeek());
289             //System.out.println((spielerDate.getHTSeason() * 16) + spielerDate.getHTWeek());
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()); //$NON-NLS-1$ //$NON-NLS-2$
296         url.append("&age=" + spieler.getAlter()); //$NON-NLS-1$ //$NON-NLS-2$
297         url.append("&for=" + spieler.getForm()); //$NON-NLS-1$ //$NON-NLS-2$
298         url.append("&inj=" + spieler.getVerletzt()); //$NON-NLS-1$ //$NON-NLS-2$
299         url.append("&exp=" + spieler.getErfahrung()); //$NON-NLS-1$ //$NON-NLS-2$
300         url.append("&lea=" + spieler.getFuehrung()); //$NON-NLS-1$ //$NON-NLS-2$
301         url.append("&tsi=" + pt.getTsi()); //$NON-NLS-1$ //$NON-NLS-2$
302         url.append("&sta=" + spieler.getKondition()); //$NON-NLS-1$ //$NON-NLS-2$
303         url.append("&kee=" + spieler.getTorwart()); //$NON-NLS-1$ //$NON-NLS-2$
304         url.append("&pla=" + spieler.getSpielaufbau()); //$NON-NLS-1$ //$NON-NLS-2$
305         url.append("&pas=" + spieler.getPasspiel()); //$NON-NLS-1$ //$NON-NLS-2$
306         url.append("&win=" + spieler.getFluegelspiel()); //$NON-NLS-1$ //$NON-NLS-2$
307         url.append("&def=" + spieler.getVerteidigung()); //$NON-NLS-1$ //$NON-NLS-2$
308         url.append("&att=" + spieler.getTorschuss()); //$NON-NLS-1$ //$NON-NLS-2$
309         url.append("&set=" + spieler.getStandards()); //$NON-NLS-1$ //$NON-NLS-2$
310         url.append("&spe=" + spieler.getSpezialitaet()); //$NON-NLS-1$ //$NON-NLS-2$
311         url.append("&agg=" + spieler.getAgressivitaet()); //$NON-NLS-1$ //$NON-NLS-2$
312         url.append("&pop=" + spieler.getCharakter()); //$NON-NLS-1$ //$NON-NLS-2$
313         url.append("&hon=" + spieler.getAnsehen()); //$NON-NLS-1$ //$NON-NLS-2$
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); //$NON-NLS-1$ //$NON-NLS-2$
318 
319         final HTCalendar globalDate = HTCalendarFactory.createGlobalCalendar(pt.getDate());
320         url.append("&wee=" + globalDate.getHTWeek()); //$NON-NLS-1$ //$NON-NLS-2$        
321         url.append("&sea=" + globalDate.getHTSeason()); //$NON-NLS-1$ //$NON-NLS-2$                
322 
323         final Calendar c = Calendar.getInstance();
324         c.setTimeInMillis(pt.getDate().getTime());
325         url.append("&hou=" + c.get(Calendar.HOUR_OF_DAY)); //$NON-NLS-1$
326 
327         final SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
328         url.append("&date=" + sdf.format(c.getTime())); //$NON-NLS-1$
329 
330         url.append("&ver=" + getVersion()); //$NON-NLS-1$
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             //System.out.println(result);
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 }