| 1 package org.myoodb.event; 25 26 import org.myoodb.collectable.*; 27 28 public class EventLogDbImpl extends LogStoreDbImpl implements EventLog 29 { 30 public EventLogDbImpl() 31 { 32 } 33 34 private boolean shouldEventBeAdded(java.util.ArrayList listOfInterest, org.myoodb.core.Identifier handle) 35 { 36 boolean retval = false; 37 38 if ((listOfInterest != null) && (listOfInterest.size() != 0)) 39 { 40 java.util.Iterator objectIter = listOfInterest.iterator(); 41 while (objectIter.hasNext()) 42 { 43 if (objectIter.next().equals(handle) == true) 44 { 45 retval = true; 46 break; 47 } 48 } 49 } 50 else 51 { 52 retval = true; 53 } 54 55 return retval; 56 } 57 58 public void fixUpReference(long fixUpTime) 59 { 60 if (referenceHasBeenFixedUp(fixUpTime) == true) 61 { 62 return; 63 } 64 65 super.fixUpReference(fixUpTime); 66 } 67 68 public void cleanUpReference() 69 { 70 super.cleanUpReference(); 71 } 72 73 public Event addEvent(Event event) 74 { 75 if (isExplicitLock() == true) 76 { 77 throw new org.myoodb.exception.PermissionException("Invocation cannot be part of a transaction"); 78 } 79 80 event = (Event) super.addLogObject((LogObject) event); 81 82 synchronized(this) 83 { 84 notifyAll(); 85 } 86 87 return event; 88 } 89 90 public Event removeEvent(Event event) 91 { 92 if (isExplicitLock() == true) 93 { 94 throw new org.myoodb.exception.PermissionException("Invocation cannot be part of a transaction"); 95 } 96 97 event = (Event) super.removeLogObject((LogObject) event); 98 99 return event; 100 } 101 102 public Event getFirstEvent() 103 { 104 return (Event) super.getFirstLogObject(); 105 } 106 107 public Event getLastEvent() 108 { 109 return (Event) super.getLastLogObject(); 110 } 111 112 public Event getEvent(long time) 113 { 114 return (Event) super.getLogObject(time); 115 } 116 117 public java.util.ArrayList getEvents() 118 { 119 return super.getLogObjects(); 120 } 121 122 public java.util.ArrayList getEvents(long start, long end) 123 { 124 return getEvents(start, end, Event.class); 125 } 126 127 public java.util.ArrayList getEvents(long start, long end, Collectable ofInterest) 128 { 129 return getEvents(start, end, Event.class, ofInterest); 130 } 131 132 public java.util.ArrayList getEvents(long start, long end, java.util.ArrayList listOfInterest) 133 { 134 return getEvents(start, end, Event.class, listOfInterest); 135 } 136 137 public java.util.ArrayList getEvents(long start, long end, Class baseEventType) 138 { 139 return super.getLogObjects(start, end, baseEventType); 140 } 141 142 public java.util.ArrayList getEvents(long start, long end, Class baseEventType, Collectable ofInterest) 143 { 144 java.util.ArrayList retval = new java.util.ArrayList (); retval.add(ofInterest); 145 146 return getEvents(start, end, baseEventType, retval); 147 } 148 149 public java.util.ArrayList getEvents(long start, long end, Class baseEventType, java.util.ArrayList listOfInterest) 150 { 151 java.util.ArrayList retval = new java.util.ArrayList (); 152 153 java.util.ArrayList events = getLogStoreRange(getContainerIndexes(start, end)); 154 155 for (int i = 0; i < events.size(); i++) 156 { 157 Event event = (Event) events.get(i); 158 org.myoodb.core.Identifier handle = event.getCollectableHandle(); 159 160 if ((handle == null) || (baseEventType.isAssignableFrom(event.getClass()) == false)) 161 { 162 continue; 163 } 164 165 if (((start == 0) || (event.getTime() >= start)) && ((end == 0) || (event.getTime() <= end))) 166 { 167 if (shouldEventBeAdded(listOfInterest, handle) == true) 168 { 169 retval.add(event); 170 } 171 } 172 } 173 174 return retval; 175 } 176 177 public java.util.ArrayList getEvents(long moment, int number, Direction direction) 178 { 179 return getEvents(moment, number, direction, Event.class); 180 } 181 182 public java.util.ArrayList getEvents(long moment, int number, Direction direction, Collectable ofInterest) 183 { 184 java.util.ArrayList retval = new java.util.ArrayList (); retval.add(ofInterest); 185 186 return getEvents(moment, number, direction, Event.class, retval); 187 } 188 189 public java.util.ArrayList getEvents(long moment, int number, Direction direction, java.util.ArrayList listOfInterest) 190 { 191 return getEvents(moment, number, direction, Event.class, listOfInterest); 192 } 193 194 public java.util.ArrayList getEvents(long moment, int number, Direction direction, Class baseEventType) 195 { 196 return super.getLogObjects(moment, number, direction, baseEventType); 197 } 198 199 public java.util.ArrayList getEvents(long moment, int number, Direction direction, Class baseEventType, Collectable ofInterest) 200 { 201 java.util.ArrayList retval = new java.util.ArrayList (); retval.add(ofInterest); 202 203 return getEvents(moment, number, direction, baseEventType, retval); 204 } 205 206 public java.util.ArrayList getEvents(long moment, int number, Direction direction, Class baseEventType, java.util.ArrayList listOfInterest) 207 { 208 boolean done = false; 209 java.util.ArrayList retval = new java.util.ArrayList (); 210 java.util.LinkedList keys = new java.util.LinkedList (getContainerOfContainersKeySet()); 211 212 if (direction == LogStore.Direction.FORWARDS) 214 { 215 java.util.ListIterator iter = keys.listIterator(); 216 while ((done == false) && iter.hasNext()) 217 { 218 java.util.ArrayList events = getLogStoreRange((Long ) iter.next()); 219 220 for (int i = 0; (done == false) && (i < events.size()); i++) 221 { 222 Event event = (Event) events.get(i); 223 org.myoodb.core.Identifier handle = event.getCollectableHandle(); 224 225 if ((handle == null) || (baseEventType.isAssignableFrom(event.getClass()) == false)) 226 { 227 continue; 228 } 229 230 if ((event.getTime() >= moment) && (retval.size() < number)) 231 { 232 if (shouldEventBeAdded(listOfInterest, handle) == true) 233 { 234 retval.add(event); 235 } 236 } 237 else if (retval.size() >= number) 238 { 239 done = true; 240 break; 241 } 242 } 243 } 244 } 245 else 247 { 248 java.util.ListIterator iter = keys.listIterator(keys.size()); 249 while ((done == false) && iter.hasPrevious()) 250 { 251 java.util.ArrayList events = getLogStoreRange((Long ) iter.previous()); 252 253 for (int i = (events.size() - 1); (done == false) && (i >= 0); i--) 254 { 255 Event event = (Event) events.get(i); 256 org.myoodb.core.Identifier handle = event.getCollectableHandle(); 257 258 if ((handle == null) || (baseEventType.isAssignableFrom(event.getClass()) == false)) 259 { 260 continue; 261 } 262 263 if ((event.getTime() <= moment) && (retval.size() < number)) 264 { 265 if (shouldEventBeAdded(listOfInterest, handle) == true) 266 { 267 retval.add(event); 268 } 269 } 270 else if (retval.size() >= number) 271 { 272 done = true; 273 break; 274 } 275 } 276 } 277 } 278 279 return retval; 280 } 281 282 288 public java.util.ArrayList listenForEvents(Class baseEventType) 289 { 290 return listenForEvents(0, baseEventType, (java.util.ArrayList ) null); 291 } 292 293 public java.util.ArrayList listenForEvents(Class baseEventType, Collectable ofInterest) 294 { 295 java.util.ArrayList list = null; 296 297 if (ofInterest != null) 298 { 299 list = new java.util.ArrayList (); 300 list.add(ofInterest); 301 } 302 303 return listenForEvents(0, baseEventType, list, 0); 304 } 305 306 public java.util.ArrayList listenForEvents(Class baseEventType, java.util.ArrayList listOfInterest) 307 { 308 return listenForEvents(0, baseEventType, listOfInterest, 0); 309 } 310 311 public java.util.ArrayList listenForEvents(Class baseEventType, long timeout) 312 { 313 return listenForEvents(0, baseEventType, new java.util.ArrayList (), timeout); 314 } 315 316 public java.util.ArrayList listenForEvents(Class baseEventType, Collectable ofInterest, long timeout) 317 { 318 java.util.ArrayList list = null; 319 320 if (ofInterest != null) 321 { 322 list = new java.util.ArrayList (); 323 list.add(ofInterest); 324 } 325 326 return listenForEvents(0, baseEventType, list, timeout); 327 } 328 329 public java.util.ArrayList listenForEvents(Class baseEventType, java.util.ArrayList listOfInterest, long timeout) 330 { 331 return listenForEvents(0, baseEventType, listOfInterest, timeout); 332 } 333 334 public java.util.ArrayList listenForEvents(long moment, Class baseEventType) 335 { 336 return listenForEvents(moment, baseEventType, new java.util.ArrayList ()); 337 } 338 339 public java.util.ArrayList listenForEvents(long moment, Class baseEventType, Collectable ofInterest) 340 { 341 java.util.ArrayList list = null; 342 343 if (ofInterest != null) 344 { 345 list = new java.util.ArrayList (); 346 list.add(ofInterest); 347 } 348 349 return listenForEvents(moment, baseEventType, list, 0); 350 } 351 352 public java.util.ArrayList listenForEvents(long moment, Class baseEventType, java.util.ArrayList listOfInterest) 353 { 354 return listenForEvents(moment, baseEventType, listOfInterest, 0); 355 } 356 357 public java.util.ArrayList listenForEvents(long moment, Class baseEventType, long timeout) 358 { 359 return listenForEvents(moment, baseEventType, new java.util.ArrayList (), timeout); 360 } 361 362 public java.util.ArrayList listenForEvents(long moment, Class baseEventType, Collectable ofInterest, long timeout) 363 { 364 java.util.ArrayList list = null; 365 366 if (ofInterest != null) 367 { 368 list = new java.util.ArrayList (); 369 list.add(ofInterest); 370 } 371 372 return listenForEvents(moment, baseEventType, list, timeout); 373 } 374 375 public java.util.ArrayList listenForEvents(long moment, Class baseEventType, java.util.ArrayList listOfInterest, long timeout) 376 { 377 if (isExplicitLock() == true) 378 { 379 throw new org.myoodb.exception.PermissionException("Invocation cannot be part of a transaction"); 380 } 381 382 if (moment == 0) 384 { 385 moment = getLocalTime(); 386 } 387 388 if (timeout != 0) 390 { 391 if (timeout < 1000) 392 { 393 timeout = 1000; 394 } 395 } 396 397 java.util.ArrayList list = new java.util.ArrayList (); 398 399 do 400 { 401 try 403 { 404 long nextMoment = getLocalTime(); 405 406 list = getEvents(moment, 0, baseEventType, listOfInterest); 407 408 moment = nextMoment; 409 } 410 catch (Exception e) 411 { 412 break; 413 } 414 415 if ((timeout >= 0) && (list.size() == 0)) 416 { 417 try 418 { 419 long timeRemaining = 0; 420 421 if (timeout == 0) 422 { 423 synchronized(this) 424 { 425 wait(5000); 426 } 427 } 428 else 429 { 430 long startTime = System.currentTimeMillis(); 431 432 synchronized(this) 433 { 434 wait(timeout); 435 } 436 437 long endTime = System.currentTimeMillis(); 438 439 timeRemaining = timeout - (endTime - startTime); 440 timeRemaining -= 500; 442 if (timeRemaining <= 0) { 444 timeRemaining = -1; 445 } 446 } 447 448 timeout = timeRemaining; 449 450 Thread.sleep(500); } 452 catch (Exception e) 453 { 454 throw new org.myoodb.exception.InternalException("Internal Error", e); 455 } 456 } 457 else 458 { 459 break; 460 } 461 } 462 while (true); 463 464 return list; 465 } 466 } 467 | Popular Tags |