1
2 package hoplugins.trainingExperience.dao;
3
4 import gui.UserParameter;
5
6 import hoplugins.Commons;
7
8 import hoplugins.commons.utils.HTCalendar;
9 import hoplugins.commons.utils.HTCalendarFactory;
10
11 import hoplugins.trainingExperience.OldTrainingManager;
12 import hoplugins.trainingExperience.vo.PlayerValues;
13 import hoplugins.trainingExperience.vo.TrainWeekEffect;
14
15 import plugins.IJDBCAdapter;
16 import plugins.ISkillup;
17 import plugins.ISpieler;
18
19 import java.sql.ResultSet;
20 import java.sql.Timestamp;
21
22 import java.util.Calendar;
23 import java.util.Collections;
24 import java.util.Comparator;
25 import java.util.HashMap;
26 import java.util.Iterator;
27 import java.util.List;
28 import java.util.Map;
29 import java.util.Vector;
30
31
32 /***
33 * This class is used to collect all required data and fill the lists of values with instances of
34 * value objects.
35 *
36 * @author NetHyperon
37 */
38 public class EffectDAO {
39
40
41 private static List trainWeeks = new Vector();
42
43
44
45 /***
46 * Return list of TrainingEffects for each week
47 *
48 * @return
49 */
50 public static List getTrainEffect() {
51 return trainWeeks;
52 }
53
54 /***
55 * Calculates the training weeks and returns a list of TrainWeek instances. These value object
56 * contain the last hrf id before the training update and the first hrf id after the update.
57 */
58 public static void reload() {
59 try {
60 Map weeklySkillups = new HashMap();
61
62
63
64 List players = new Vector(Commons.getModel().getAllSpieler());
65
66 players.addAll(Commons.getModel().getAllOldSpieler());
67
68 for (Iterator iterPlayers = players.iterator(); iterPlayers.hasNext();) {
69 ISpieler player = (ISpieler) iterPlayers.next();
70 OldTrainingManager otm = new OldTrainingManager(player);
71 List skillups = otm.getTrainedSkillups();
72
73 for (Iterator iterSkillups = skillups.iterator(); iterSkillups.hasNext();) {
74 ISkillup skillup = (ISkillup) iterSkillups.next();
75 String key = skillup.getHtSeason() + "-" + skillup.getHtWeek();
76 List collectedSkillups = (List) weeklySkillups.get(key);
77
78 if (collectedSkillups == null) {
79 collectedSkillups = new Vector();
80 weeklySkillups.put(key, collectedSkillups);
81 }
82
83 collectedSkillups.add(skillup);
84 }
85 }
86
87 IJDBCAdapter db = Commons.getModel().getAdapter();
88
89 trainWeeks.clear();
90
91 Calendar date = Calendar.getInstance();
92 date.add(Calendar.HOUR, UserParameter.instance().TimeZoneDifference);
93
94 Timestamp datum = new Timestamp(date.getTimeInMillis());
95 ResultSet tDateset = db.executeQuery("SELECT DISTINCT trainingdate FROM xtradata WHERE trainingdate < '"
96 + datum.toString() + "'");
97 List trainingDates = new Vector();
98
99 try {
100 while (tDateset.next()) {
101 trainingDates.add(tDateset.getTimestamp("trainingdate"));
102 }
103
104 tDateset.close();
105 } catch (Exception e) {
106 }
107
108 Collections.sort(trainingDates,
109 new Comparator() {
110 public int compare(Object o1, Object o2) {
111 Timestamp t1 = (Timestamp) o1;
112 Timestamp t2 = (Timestamp) o2;
113
114 return t2.compareTo(t1);
115 }
116 });
117
118 HTCalendar trainCalendar = HTCalendarFactory.createEconomyCalendar(Commons.getModel());
119
120 for (Iterator iter = trainingDates.iterator(); iter.hasNext();) {
121 Timestamp trainDate = (Timestamp) iter.next();
122
123 trainCalendar.setTime(trainDate);
124
125 StringBuffer minHrf_SQLStmt = new StringBuffer("SELECT hrf.hrf_id FROM hrf, xtradata");
126
127 minHrf_SQLStmt.append(" WHERE hrf.hrf_id=xtradata.hrf_id");
128 minHrf_SQLStmt.append(" AND datum = (SELECT MAX(datum) FROM hrf WHERE datum < '"
129 + trainDate.toString() + "')");
130 minHrf_SQLStmt.append(" AND trainingdate = '" + trainDate.toString() + "'");
131
132 ResultSet minHRFSet = db.executeQuery(minHrf_SQLStmt.toString());
133
134 int hrfBeforeUpdate = 0;
135
136 try {
137 minHRFSet.next();
138 hrfBeforeUpdate = minHRFSet.getInt("hrf_id");
139 minHRFSet.close();
140 } catch (Exception e) {
141 hrfBeforeUpdate = 0;
142 }
143
144 TrainWeekEffect week = null;
145
146 if (hrfBeforeUpdate > 0) {
147 StringBuffer maxHrf_SQLStmt = new StringBuffer("SELECT hrf.hrf_id FROM hrf, xtradata");
148
149 maxHrf_SQLStmt.append(" WHERE hrf.hrf_id=xtradata.hrf_id");
150 maxHrf_SQLStmt.append(" AND datum = (SELECT MIN(datum) FROM hrf WHERE datum > '"
151 + trainDate.toString() + "')");
152 maxHrf_SQLStmt.append(" AND trainingdate > '" + trainDate.toString() + "'");
153
154 ResultSet maxHRFSet = db.executeQuery(maxHrf_SQLStmt.toString());
155
156 int hrfAfterUpdate = 0;
157
158 try {
159 maxHRFSet.next();
160 hrfAfterUpdate = maxHRFSet.getInt("hrf_id");
161 maxHRFSet.close();
162 } catch (Exception e) {
163 hrfAfterUpdate = 0;
164 }
165
166 if (hrfAfterUpdate > 0) {
167 week = new TrainWeekEffect(trainCalendar.getHTWeek(),
168 trainCalendar.getHTSeason(), hrfBeforeUpdate,
169 hrfAfterUpdate);
170
171 ResultSet set = db.executeQuery("SELECT SUM(marktwert) as totaltsi, AVG(marktwert) as avgtsi , SUM(form) as form, COUNT(form) as number FROM spieler WHERE trainer = 0 AND hrf_id = "
172 + Integer.toString(week.getHRFafterUpdate()));
173
174 if (set != null) {
175 set.next();
176 week.setTotalTSI(set.getInt("totaltsi"));
177 week.setAverageTSI(set.getInt("avgtsi"));
178
179 double avgForm = 0.0d;
180
181 if (set.getInt("number") != 0) {
182 avgForm = set.getDouble("form") / set.getInt("number");
183 }
184
185 week.setAverageForm(avgForm);
186 set.close();
187 }
188
189 Map valuesBeforeUpdate = new HashMap();
190
191 set = db.executeQuery("SELECT * FROM spieler WHERE trainer = 0 AND hrf_id = "
192 + Integer.toString(week.getHRFbeforeUpdate()));
193
194 if (set != null) {
195 while (set.next()) {
196 PlayerValues result = new PlayerValues(set.getInt("marktwert"),
197 set.getInt("form"));
198
199 valuesBeforeUpdate.put(new Integer(set.getInt("spielerid")), result);
200 }
201
202 set.close();
203 }
204
205 set = db.executeQuery("SELECT * FROM spieler, basics WHERE trainer = 0 AND spieler.hrf_id = basics.hrf_id AND spieler.hrf_id = "
206 + Integer.toString(week.getHRFafterUpdate()));
207
208 if (set != null) {
209 while (set.next()) {
210 Integer playerID = new Integer(set.getInt("spielerid"));
211
212 if (valuesBeforeUpdate.containsKey(playerID)) {
213 PlayerValues before = (PlayerValues) valuesBeforeUpdate.get(playerID);
214
215 week.addTSI(set.getInt("marktwert") - before.getTsi());
216 week.addForm(set.getInt("form") - before.getForm());
217 }
218 }
219
220 set.close();
221 }
222 }
223 }
224
225
226 String key = trainCalendar.getHTSeason() + "-" + trainCalendar.getHTWeek();
227
228 if (weeklySkillups.containsKey(key)) {
229 if (week == null) {
230 week = new TrainWeekEffect(trainCalendar.getHTWeek(),
231 trainCalendar.getHTSeason(), 0, 0);
232 }
233
234 week.setAmountSkillups(((List) weeklySkillups.get(key)).size());
235 }
236
237 if (week != null) {
238 trainWeeks.add(week);
239 }
240 }
241 } catch (Exception e) {
242 e.printStackTrace();
243 }
244 }
245 }