1 32 33 package com.knowgate.addrbook; 34 35 import java.util.Date ; 36 37 import java.sql.SQLException ; 38 39 import com.knowgate.debug.DebugFile; 40 import com.knowgate.jdc.JDCConnection; 41 import com.knowgate.dataobjs.DB; 42 import com.knowgate.dataobjs.DBBind; 43 import com.knowgate.dataobjs.DBSubset; 44 45 50 51 103 104 public class DayPlan { 105 private int aMeetings[][]; 106 private DBSubset oMeetings; 107 private Meeting oMeeting; 108 109 private final int MaxSlots = 8; private final int MaxSlices = 96; private final int EmptySlot = -1; 112 private final long SliceLapsus = (24*3600*1000)/MaxSlices; 113 114 public DayPlan() { 115 oMeeting = new Meeting(); 116 aMeetings = new int[MaxSlots][MaxSlices]; 117 for (int slice=0; slice<MaxSlices; slice++) 118 for (int slot=0; slot<MaxSlots; slot++) 119 aMeetings[slot][slice] = EmptySlot; 120 } 122 124 132 public void load(JDCConnection oConn, String sFellowId, java.util.Date dtToday) throws SQLException { 133 if (DebugFile.trace) { 134 DebugFile.writeln("Begin DayPlan.load([Connection], " + sFellowId + "," + dtToday.toString() + ")"); 135 DebugFile.incIdent(); 136 } 137 138 long lToday = dtToday.getTime(); 139 java.util.Date zero = new java.util.Date (lToday); 140 java.util.Date four = new java.util.Date (lToday); 141 142 zero.setHours(0) ; zero.setMinutes(0) ; zero.setSeconds(0) ; 143 zero.setTime((zero.getTime()/1000l)*1000l); 145 four.setHours(23); four.setMinutes(59); four.setSeconds(59); 146 147 oMeetings = new DBSubset(DB.k_meetings + " m," + DB.k_x_meeting_fellow + " f", 148 "m." + DB.gu_meeting + ",m." + DB.gu_fellow + ",m." + DB.dt_start + ",m." + DB.dt_end + ",m." + DB.bo_private + ",m." + DB.df_before + ",m." + DB.tp_meeting + ",m." + DB.tx_meeting + ",m." + DB.de_meeting, 149 "m." + DB.gu_meeting +"=f." + DB.gu_meeting + " AND f." + DB.gu_fellow + "=? AND m." + DB.dt_start + ">=" + DBBind.escape(zero, "ts") + " AND m." + DB.dt_start + "< " + DBBind.escape(four, "ts") + " ORDER BY m."+ DB.dt_start, 8); 150 151 int mCount = oMeetings.load(oConn, new Object [] { sFellowId }); 152 153 if (DebugFile.trace) DebugFile.writeln(String.valueOf(mCount) + " meetings found"); 154 155 long dtStart, dtEnd, dtSliceBegin, dtZero = zero.getTime(); 156 157 for (int meeting=0; meeting<mCount; meeting++) { 158 dtStart = oMeetings.getDate(2,meeting).getTime(); 159 dtEnd = oMeetings.getDate(3,meeting).getTime(); 160 161 dtSliceBegin = dtZero; 162 for (int slice=0; slice<MaxSlices; slice++) { 163 if ((dtStart>=dtSliceBegin && dtStart<dtSliceBegin+SliceLapsus) || 164 (dtStart<dtSliceBegin && dtEnd>dtSliceBegin+SliceLapsus)) 165 for (int slot=0; slot<MaxSlots; slot++) 166 if (EmptySlot==aMeetings[slot][slice]) { 167 if (DebugFile.trace) { 168 DebugFile.writeln("set slot[" + String.valueOf(slot) + "][" + String.valueOf(slice) + "] to meeting " + String.valueOf(meeting) + " " + oMeetings.getStringNull(7,meeting,"")); 169 DebugFile.writeln("dtStart=" + new Date (dtStart).toString() + "(" + String.valueOf(dtStart) + "ms)"); 170 DebugFile.writeln("dtEnd=" + new Date (dtEnd).toString() + "(" + String.valueOf(dtEnd) + "ms)"); 171 DebugFile.writeln("dtSliceBegin=" + new Date (dtSliceBegin).toString() + "(" + String.valueOf(dtSliceBegin) + "ms)"); 172 DebugFile.writeln("dtSliceNext=" + new Date (dtSliceBegin+SliceLapsus).toString() + "(" + String.valueOf(dtSliceBegin+SliceLapsus) + "ms)"); 173 } 174 aMeetings[slot][slice] = meeting; 175 break; 176 } dtSliceBegin += SliceLapsus; 178 } } 181 if (DebugFile.trace) { 182 DebugFile.decIdent(); 183 DebugFile.writeln("End DayPlan.load()"); 184 } 185 } 187 189 194 public int sliceCount() { 195 return MaxSlices; 196 } 197 198 200 203 public int slotsPerSlice() { 204 return MaxSlots; 205 } 206 207 209 214 215 public int concurrentMeetings(int slice) throws ArrayIndexOutOfBoundsException { 216 int slots = 0; 217 218 do { 219 if (EmptySlot!=aMeetings[slots][slice]) 220 slots++; 221 else 222 break; 223 } 224 while (slots < MaxSlots); 225 226 return slots; 227 } 229 231 242 public Meeting getMeeting(int slice, int slot) throws ArrayIndexOutOfBoundsException { 243 if (DebugFile.trace) { 244 DebugFile.writeln("Begin DayPlan.getMeeting(" + String.valueOf(slice) + "," + String.valueOf(slot) + ")"); 245 } 246 247 if (slice>=MaxSlices || slot>=MaxSlots) return null; 248 249 int iMeeting = aMeetings[slot][slice]; 250 251 if (DebugFile.trace) DebugFile.writeln("iMeeting=" + String.valueOf(iMeeting)); 252 253 if (-1==iMeeting) return null; 254 255 oMeeting.clear(); 256 257 if (DebugFile.trace) DebugFile.writeln("Meeting object cleared"); 258 259 oMeeting.put(DB.gu_meeting, oMeetings.getString(0,iMeeting)); 260 oMeeting.put(DB.gu_fellow, oMeetings.getString(1,iMeeting)); 261 oMeeting.put(DB.dt_start, oMeetings.getDate (2,iMeeting)); 262 oMeeting.put(DB.dt_end, oMeetings.getDate (3,iMeeting)); 263 264 if (DebugFile.trace) 265 if (oMeetings.getShort (4,iMeeting)!=(short)0) 266 DebugFile.writeln("meeting is private"); 267 268 oMeeting.put(DB.bo_private, oMeetings.getShort (4,iMeeting)); 269 270 if (!oMeetings.isNull(5,iMeeting)) 271 oMeeting.put(DB.df_before, oMeetings.getInt (5,iMeeting)); 272 if (!oMeetings.isNull(6,iMeeting)) 273 oMeeting.put(DB.tp_meeting, oMeetings.getString(6,iMeeting)); 274 oMeeting.put(DB.tx_meeting, oMeetings.getStringNull(7,iMeeting,"")); 275 oMeeting.put(DB.de_meeting, oMeetings.getStringNull(8,iMeeting,"")); 276 277 if (DebugFile.trace) { 278 DebugFile.writeln("End DayPlan.getMeeting() : " + oMeetings.getString(0,iMeeting)); 279 } 280 281 return oMeeting; 282 } 284 286 291 public Meeting seekMeeting(String sMeeting) { 292 int iMeetings = oMeetings.getRowCount(); 293 294 for (int m=0; m<iMeetings; m++) { 295 if (sMeeting.equals(oMeetings.getString(0, m))) { 296 oMeeting.clear(); 297 298 oMeeting.put(DB.gu_meeting, oMeetings.getString(0,m)); 299 oMeeting.put(DB.gu_fellow, oMeetings.getString(1,m)); 300 oMeeting.put(DB.dt_start, oMeetings.getDate (2,m)); 301 oMeeting.put(DB.dt_end, oMeetings.getDate (3,m)); 302 oMeeting.put(DB.bo_private, oMeetings.getShort (4,m)); 303 if (!oMeetings.isNull(5,m)) 304 oMeeting.put(DB.df_before, oMeetings.getInt (5,m)); 305 if (!oMeetings.isNull(6,m)) 306 oMeeting.put(DB.tp_meeting, oMeetings.getString(6,m)); 307 oMeeting.put(DB.tx_meeting, oMeetings.getStringNull(7,m,"")); 308 oMeeting.put(DB.de_meeting, oMeetings.getStringNull(8,m,"")); 309 310 return oMeeting; 311 } 312 } 313 return null; 314 } }
| Popular Tags
|