View Javadoc

1   // %1126721330041:hoplugins.transfers.dao%
2   package hoplugins.transfers.dao;
3   
4   import hoplugins.Commons;
5   
6   import hoplugins.commons.utils.HTCalendar;
7   import hoplugins.commons.utils.HTCalendarFactory;
8   
9   import hoplugins.transfers.vo.PlayerTransfer;
10  
11  import org.w3c.dom.Document;
12  import org.w3c.dom.Element;
13  import org.w3c.dom.NodeList;
14  
15  import plugins.IXMLParser;
16  
17  import java.io.IOException;
18  
19  import java.sql.Timestamp;
20  
21  import java.text.ParseException;
22  import java.text.SimpleDateFormat;
23  
24  import java.util.Date;
25  import java.util.List;
26  import java.util.Vector;
27  
28  
29  /***
30   * XML Parser used to parse HT xml for tansfer information.
31   *
32   * @author <a href=mailto:nethyperon@users.sourceforge.net>Boy van der Werf</a>
33   */
34  final class XMLParser {
35      //~ Static fields/initializers -----------------------------------------------------------------
36  
37      private static final SimpleDateFormat DATETIME = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
38      private static final SimpleDateFormat DATE = new SimpleDateFormat("yyyy-MM-dd");
39      private static final SimpleDateFormat XMLDATETIME = new SimpleDateFormat("yyyy-MM-dd%20HH:mm");
40  
41      //~ Constructors -------------------------------------------------------------------------------
42  
43      /***
44       * Private default constuctor to prevent class instantiation. 
45       */
46      private XMLParser() {
47      }
48  
49      //~ Methods ------------------------------------------------------------------------------------
50  
51      /***
52       * Gets all transfers for a player.
53       *
54       * @param playerId Player ID
55       *
56       * @return List of transfers.
57       *
58       * @throws IOException If something goes wrong.
59       */
60      static List getAllPlayerTransfers(int playerId) throws IOException {
61          final String url = "/common/transferHistory.asp?outputType=XML&actionType=player&playerID="
62                       + playerId;
63          final String xml = Commons.getModel().getDownloadHelper().getHattrickXMLFile(url);
64  
65          final IXMLParser parser = Commons.getModel().getXMLParser();
66  
67          final List transferList = new Vector();
68  
69          final HTCalendar htcal = HTCalendarFactory.createEconomyCalendar(Commons.getModel());
70  
71          final Document doc = parser.parseString(xml);
72  
73          //get Root element ('HattrickData') :
74          final Element root = doc.getDocumentElement();
75  
76          // Get tranfer info
77          final NodeList containers = root.getElementsByTagName("Transfers"); //$NON-NLS-1$
78  
79          for (int cont = 0; cont < containers.getLength(); cont++) {
80              try {
81                  final Element container = (Element) containers.item(cont);
82  
83                  // Get the player info
84                  final Element playerElement = (Element) container.getElementsByTagName("Player").item(0); //$NON-NLS-1$
85                  final int playerid = Integer.parseInt(getChildNodeValue(playerElement, "PlayerID")); //$NON-NLS-1$
86                  final String playerName = getChildNodeValue(playerElement, "PlayerName"); //$NON-NLS-1$
87  
88                  // Get the player transfers
89                  final NodeList transfers = container.getElementsByTagName("Transfer"); //$NON-NLS-1$
90  
91                  for (int trans = 0; trans < transfers.getLength(); trans++) {
92                      final Element transfer = (Element) transfers.item(trans);
93  
94                      if (transfer != null) {
95                          final int transferid = Integer.parseInt(getChildNodeValue(transfer, "TransferID")); //$NON-NLS-1$
96                          final PlayerTransfer playerTranfer = new PlayerTransfer(transferid, playerid);
97                          playerTranfer.setPlayerName(playerName);
98  
99                          final String deadline = getChildNodeValue(transfer, "Deadline");
100 
101                         Date transferDate = null;
102 
103                         try {
104                             transferDate = DATETIME.parse(deadline);
105                         } catch (ParseException e) {
106                             try {
107                                 transferDate = DATE.parse(deadline);
108                             } catch (ParseException e0) {
109                                 Commons.getModel().getHelper().showMessage(Commons.getModel()
110                                                                                   .getGUI()
111                                                                                   .getOwner4Dialog(),
112                                                                            "XML Parse error",
113                                                                            "Error parsing XML: transfer '"
114                                                                            + transferid
115                                                                            + "' will be skipped", 0);
116                                 continue;
117                             }
118                         }
119 
120                         playerTranfer.setDate(new Timestamp(transferDate.getTime())); //$NON-NLS-1$
121                         htcal.setTime(playerTranfer.getDate());
122                         playerTranfer.setSeason(htcal.getHTSeason());
123                         playerTranfer.setWeek(htcal.getHTWeek());
124 
125                         final Element buyer = (Element) transfer.getElementsByTagName("Buyer").item(0); //$NON-NLS-1$
126                         final Element seller = (Element) transfer.getElementsByTagName("Seller").item(0); //$NON-NLS-1$
127 
128                         if ((buyer != null) && (seller != null)) {
129                             // Get the buyer info
130                             playerTranfer.setBuyerid(Integer.parseInt(getChildNodeValue(buyer,
131                                                                                         "BuyerTeamID"))); //$NON-NLS-1$
132                             playerTranfer.setBuyerName(getChildNodeValue(buyer, "BuyerTeamName")); //$NON-NLS-1$
133 
134                             // Get the seller info
135                             playerTranfer.setSellerid(Integer.parseInt(getChildNodeValue(seller,
136                                                                                          "SellerTeamID"))); //$NON-NLS-1$
137                             playerTranfer.setSellerName(getChildNodeValue(seller, "SellerTeamName")); //$NON-NLS-1$
138 
139                             playerTranfer.setPrice(Integer.parseInt(getChildNodeValue(transfer,
140                                                                                        "Price"))); //$NON-NLS-1$
141                             playerTranfer.setMarketvalue(Integer.parseInt(getChildNodeValue(transfer,
142                                                                                             "MarketValue"))); //$NON-NLS-1$
143                             playerTranfer.setTsi(Integer.parseInt(getChildNodeValue(transfer, "TSI"))); //$NON-NLS-1$
144                         }
145 
146                         transferList.add(playerTranfer);
147                     }
148                 }
149             } catch (Exception e) {
150                 continue;
151             }
152         }
153 
154         return transferList;
155     }
156 
157     /***
158      * TODO Missing Method Documentation
159      *
160      * @param teamid TODO Missing Method Parameter Documentation
161      * @param endDate TODO Missing Method Parameter Documentation
162      *
163      * @return TODO Missing Return Method Documentation
164      *
165      * @throws IOException TODO Missing Method Exception Documentation
166      * @throws ParseException TODO Missing Method Exception Documentation
167      * @throws Exception TODO Missing Method Exception Documentation
168      */
169     static List getAllTeamTransfers(int teamid, Date endDate)
170       throws IOException, ParseException, Exception {
171         final List transferList = new Vector();
172 
173         final String url = "/common/transferHistory.asp?outputType=XML&actionType=team&teamID=" + teamid
174                      + "&endDate=" + XMLDATETIME.format(endDate);
175         final String xml = Commons.getModel().getDownloadHelper().getHattrickXMLFile(url); //$NON-NLS-1$
176 
177         final IXMLParser parser = Commons.getModel().getXMLParser();
178         final Document doc = parser.parseString(xml);
179 
180         //get Root element ('HattrickData') :
181         final Element root = doc.getDocumentElement();
182 
183         final Element teamElement = (Element) root.getElementsByTagName("Team").item(0); //$NON-NLS-1$
184         Date activatedDate = null;
185 
186         try {
187             activatedDate = DATETIME.parse(getChildNodeValue(teamElement, "ActivatedDate"));
188         } catch (ParseException e) {
189             activatedDate = DATE.parse(getChildNodeValue(teamElement, "ActivatedDate"));
190         }
191 
192         final Element transfersElement = (Element) root.getElementsByTagName("Transfers").item(0); //$NON-NLS-1$
193         Date startDate = null;
194 
195         try {
196             startDate = DATETIME.parse(getChildNodeValue(transfersElement, "StartDate"));
197         } catch (ParseException e) {
198             startDate = DATE.parse(getChildNodeValue(transfersElement, "StartDate"));
199         }
200 
201         transferList.addAll(parseTeamTransfers(doc));
202 
203         if (!startDate.equals(activatedDate)) {
204             transferList.addAll(getAllTeamTransfers(teamid, startDate));
205         }
206 
207         return transferList;
208     }
209 
210     /***
211      * Get the value of a child node
212      *
213      * @param element Parent element
214      * @param childnode Tag name of the childnode
215      *
216      * @return Value of the child node
217      *
218      * @throws Exception If something goes wrong
219      */
220     private static String getChildNodeValue(Element element, String childnode)
221       throws Exception {
222         try {
223             String retval = ""; //$NON-NLS-1$
224 
225             if (element != null) {
226                 final NodeList list = element.getElementsByTagName(childnode);
227 
228                 if ((list != null) && (list.getLength() > 0)) {
229                     final Element child = (Element) list.item(0);
230                     Commons.getModel().getXMLParser().getFirstChildNodeValue(child);
231 
232                     if ((child != null) && (element.getFirstChild() != null)) {
233                         retval = child.getFirstChild().getNodeValue();
234                     }
235                 }
236             }
237 
238             return retval;
239         } catch (NullPointerException e) {
240             return ""; //$NON-NLS-1$
241         }
242     }
243 
244     /***
245      * Parse xml data for team transfers
246      *
247      * @param doc Xml document
248      *
249      * @return List of transfers.
250      */
251     private static List parseTeamTransfers(Document doc) {
252         final List transferList = new Vector();
253 
254         final HTCalendar htcal = HTCalendarFactory.createEconomyCalendar(Commons.getModel());
255 
256         //get Root element ('HattrickData') :
257         final Element root = doc.getDocumentElement();
258 
259         // Get tranfer info
260         final NodeList containers = root.getElementsByTagName("Transfers"); //$NON-NLS-1$
261 
262         for (int cont = 0; cont < containers.getLength(); cont++) {
263             try {
264                 final Element container = (Element) containers.item(cont);
265 
266                 // Get the player transfers
267                 final NodeList transfers = container.getElementsByTagName("Transfer"); //$NON-NLS-1$
268 
269                 for (int trans = 0; trans < transfers.getLength(); trans++) {
270                     final Element transfer = (Element) transfers.item(trans);
271 
272                     if (transfer != null) {
273                         // Get the player info
274                         final Element playerElement = (Element) transfer.getElementsByTagName("Player")
275                                                                   .item(0); //$NON-NLS-1$
276                         final int playerid = Integer.parseInt(getChildNodeValue(playerElement, "PlayerID")); //$NON-NLS-1$
277                         final String playerName = getChildNodeValue(playerElement, "PlayerName"); //$NON-NLS-1$
278 
279                         final int transferid = Integer.parseInt(getChildNodeValue(transfer, "TransferID")); //$NON-NLS-1$
280                         final PlayerTransfer playerTranfer = new PlayerTransfer(transferid, playerid);
281                         playerTranfer.setPlayerName(playerName);
282 
283                         final String deadline = getChildNodeValue(transfer, "Deadline");
284 
285                         Date transferDate = null;
286 
287                         try {
288                             transferDate = DATETIME.parse(deadline);
289                         } catch (ParseException e) {
290                             try {
291                                 transferDate = DATE.parse(deadline);
292                             } catch (ParseException e0) {
293                                 Commons.getModel().getHelper().showMessage(Commons.getModel()
294                                                                                   .getGUI()
295                                                                                   .getOwner4Dialog(),
296                                                                            "XML Parse error",
297                                                                            "Error parsing XML: transfer '"
298                                                                            + transferid
299                                                                            + "' will be skipped", 0);
300                                 continue;
301                             }
302                         }
303 
304                         playerTranfer.setDate(new Timestamp(transferDate.getTime())); //$NON-NLS-1$
305                         htcal.setTime(playerTranfer.getDate());
306                         playerTranfer.setSeason(htcal.getHTSeason());
307                         playerTranfer.setWeek(htcal.getHTWeek());
308 
309                         final Element buyer = (Element) transfer.getElementsByTagName("Buyer").item(0); //$NON-NLS-1$
310                         final Element seller = (Element) transfer.getElementsByTagName("Seller").item(0); //$NON-NLS-1$
311 
312                         if ((buyer != null) && (seller != null)) {
313                             // Get the buyer info
314                             playerTranfer.setBuyerid(Integer.parseInt(getChildNodeValue(buyer,
315                                                                                         "BuyerTeamID"))); //$NON-NLS-1$
316                             playerTranfer.setBuyerName(getChildNodeValue(buyer, "BuyerTeamName")); //$NON-NLS-1$
317 
318                             // Get the seller info
319                             playerTranfer.setSellerid(Integer.parseInt(getChildNodeValue(seller,
320                                                                                          "SellerTeamID"))); //$NON-NLS-1$
321                             playerTranfer.setSellerName(getChildNodeValue(seller, "SellerTeamName")); //$NON-NLS-1$
322 
323                             playerTranfer.setPrice(Integer.parseInt(getChildNodeValue(transfer,
324                                                                                        "Price"))); //$NON-NLS-1$
325                             playerTranfer.setMarketvalue(Integer.parseInt(getChildNodeValue(transfer,
326                                                                                             "MarketValue"))); //$NON-NLS-1$
327                             playerTranfer.setTsi(Integer.parseInt(getChildNodeValue(transfer, "TSI"))); //$NON-NLS-1$
328                         }
329 
330                         transferList.add(playerTranfer);
331                     }
332                 }
333             } catch (Exception e) {
334                 continue;
335             }
336         }
337 
338         return transferList;
339     }
340 }