1
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
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
42
43 /***
44 * Private default constuctor to prevent class instantiation.
45 */
46 private XMLParser() {
47 }
48
49
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
74 final Element root = doc.getDocumentElement();
75
76
77 final NodeList containers = root.getElementsByTagName("Transfers");
78
79 for (int cont = 0; cont < containers.getLength(); cont++) {
80 try {
81 final Element container = (Element) containers.item(cont);
82
83
84 final Element playerElement = (Element) container.getElementsByTagName("Player").item(0);
85 final int playerid = Integer.parseInt(getChildNodeValue(playerElement, "PlayerID"));
86 final String playerName = getChildNodeValue(playerElement, "PlayerName");
87
88
89 final NodeList transfers = container.getElementsByTagName("Transfer");
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"));
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()));
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);
126 final Element seller = (Element) transfer.getElementsByTagName("Seller").item(0);
127
128 if ((buyer != null) && (seller != null)) {
129
130 playerTranfer.setBuyerid(Integer.parseInt(getChildNodeValue(buyer,
131 "BuyerTeamID")));
132 playerTranfer.setBuyerName(getChildNodeValue(buyer, "BuyerTeamName"));
133
134
135 playerTranfer.setSellerid(Integer.parseInt(getChildNodeValue(seller,
136 "SellerTeamID")));
137 playerTranfer.setSellerName(getChildNodeValue(seller, "SellerTeamName"));
138
139 playerTranfer.setPrice(Integer.parseInt(getChildNodeValue(transfer,
140 "Price")));
141 playerTranfer.setMarketvalue(Integer.parseInt(getChildNodeValue(transfer,
142 "MarketValue")));
143 playerTranfer.setTsi(Integer.parseInt(getChildNodeValue(transfer, "TSI")));
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);
176
177 final IXMLParser parser = Commons.getModel().getXMLParser();
178 final Document doc = parser.parseString(xml);
179
180
181 final Element root = doc.getDocumentElement();
182
183 final Element teamElement = (Element) root.getElementsByTagName("Team").item(0);
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);
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 = "";
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 "";
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
257 final Element root = doc.getDocumentElement();
258
259
260 final NodeList containers = root.getElementsByTagName("Transfers");
261
262 for (int cont = 0; cont < containers.getLength(); cont++) {
263 try {
264 final Element container = (Element) containers.item(cont);
265
266
267 final NodeList transfers = container.getElementsByTagName("Transfer");
268
269 for (int trans = 0; trans < transfers.getLength(); trans++) {
270 final Element transfer = (Element) transfers.item(trans);
271
272 if (transfer != null) {
273
274 final Element playerElement = (Element) transfer.getElementsByTagName("Player")
275 .item(0);
276 final int playerid = Integer.parseInt(getChildNodeValue(playerElement, "PlayerID"));
277 final String playerName = getChildNodeValue(playerElement, "PlayerName");
278
279 final int transferid = Integer.parseInt(getChildNodeValue(transfer, "TransferID"));
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()));
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);
310 final Element seller = (Element) transfer.getElementsByTagName("Seller").item(0);
311
312 if ((buyer != null) && (seller != null)) {
313
314 playerTranfer.setBuyerid(Integer.parseInt(getChildNodeValue(buyer,
315 "BuyerTeamID")));
316 playerTranfer.setBuyerName(getChildNodeValue(buyer, "BuyerTeamName"));
317
318
319 playerTranfer.setSellerid(Integer.parseInt(getChildNodeValue(seller,
320 "SellerTeamID")));
321 playerTranfer.setSellerName(getChildNodeValue(seller, "SellerTeamName"));
322
323 playerTranfer.setPrice(Integer.parseInt(getChildNodeValue(transfer,
324 "Price")));
325 playerTranfer.setMarketvalue(Integer.parseInt(getChildNodeValue(transfer,
326 "MarketValue")));
327 playerTranfer.setTsi(Integer.parseInt(getChildNodeValue(transfer, "TSI")));
328 }
329
330 transferList.add(playerTranfer);
331 }
332 }
333 } catch (Exception e) {
334 continue;
335 }
336 }
337
338 return transferList;
339 }
340 }