| 1 package org.enhydra.shark.eventaudit; 2 3 import java.util.*; 4 import org.enhydra.shark.api.internal.eventaudit.*; 5 import org.enhydra.shark.eventaudit.data.*; 6 7 import com.lutris.appserver.server.sql.DBTransaction; 8 import java.math.BigDecimal ; 9 import org.enhydra.dods.DODS; 10 import org.enhydra.shark.api.RootException; 11 import org.enhydra.shark.api.SharkTransaction; 12 import org.enhydra.shark.api.internal.working.CallbackUtilities; 13 import org.enhydra.shark.transaction.SharkDODSTransaction; 14 import org.enhydra.shark.utilities.MiscUtilities; 15 import org.enhydra.shark.utilities.dods.DODSUtilities; 16 17 24 public class DODSEventAuditManager implements EventAuditManagerInterface { 25 26 protected static final String LOG_CHANNEL="Persistence"; 27 protected static final String PACKAGE_LOADED="packageLoaded"; 28 protected static final String PACKAGE_UNLOADED="packageUnloaded"; 29 protected static final String PACKAGE_UPDATED="packageUpdated"; 30 protected static final String PROCESS_CREATED="processCreated"; 31 protected static final String PROCESS_STATE_CHANGED="processStateChanged"; 32 protected static final String PROCESS_CONTEXT_CHANGED="processContextChanged"; 33 protected static final String ACTIVITY_STATE_CHANGED="activityStateChanged"; 34 protected static final String ACTIVITY_CONTEXT_CHANGED="activityContextChanged"; 35 protected static final String ACTIVITY_RESULT_CHANGED="activityResultChanged"; 36 protected static final String ACTIVITY_ASSIGNMENT_CHANGED="activityAssignmentChanged"; 37 protected static final int RESOURCE_TYPE_OBJECT=0; 38 protected static final int PROCESS_DEFINITION_TYPE_OBJECT=1; 39 protected static final int PROCESS_TYPE_OBJECT=2; 40 protected static final int ACTIVITY_TYPE_OBJECT=3; 41 protected static final int ASSIGNMENT_TYPE_OBJECT=4; 42 protected static final int EVENT_AUDIT_ASSIGNMENT_TYPE_OBJECT=5; 43 protected static final int EVENT_AUDIT_DATA_TYPE_OBJECT=6; 44 protected static final int EVENT_AUDIT_STATE_TYPE_OBJECT=7; 45 protected static final int EVENT_AUDIT_CREATE_PROCESS_TYPE_OBJECT=8; 46 protected static final int EVENT_AUDIT_PACKAGE_TYPE_OBJECT=9; 47 48 protected static final String [] activityAndProcessStates={"open.running", 49 "open.not_running.not_started","open.not_running.suspended", 50 "closed.completed", "closed.terminated", "closed.aborted"}; 51 52 protected static final String [] eventTypes={PACKAGE_LOADED,PACKAGE_UNLOADED, 53 PACKAGE_UPDATED,PROCESS_CREATED,PROCESS_STATE_CHANGED, 54 PROCESS_CONTEXT_CHANGED,ACTIVITY_STATE_CHANGED,ACTIVITY_CONTEXT_CHANGED, 55 ACTIVITY_RESULT_CHANGED,ACTIVITY_ASSIGNMENT_CHANGED}; 56 57 protected static final short DB_TYPE_BOOLEAN=0; 58 protected static final short DB_TYPE_LONG=1; 59 protected static final short DB_TYPE_DOUBLE=2; 60 protected static final short DB_TYPE_VCHAR=3; 61 protected static final short DB_TYPE_DATE=4; 62 protected static final short DB_TYPE_BLOB=5; 63 64 protected static final int MAX_VCHAR_SIZE_LIMIT=4000; 65 66 protected static int max_vchar_size=4000; 67 68 protected CallbackUtilities cus; 69 protected Map _prStates; 70 protected Map _acStates; 71 protected Map _evTypes; 72 73 protected boolean usingStandardVariableDataModel=true; 74 protected boolean persistOldEventAuditData=true; 75 76 public void configure (CallbackUtilities cus) throws RootException { 77 this.cus=cus; 78 String mvc=cus.getProperty("DODSEventAuditManager.maxVARCHARSize","4000"); 79 try { 80 max_vchar_size=Integer.parseInt(mvc); 81 if (max_vchar_size>MAX_VCHAR_SIZE_LIMIT || max_vchar_size<1) { 82 max_vchar_size=MAX_VCHAR_SIZE_LIMIT; 83 cus.warn("Invalid value "+mvc+" for property DODSEventAuditManager.maxVARCHARSize. Using default value "+max_vchar_size); 84 } 85 } catch (Exception e) { 86 cus.warn("Invalid value "+mvc+" for property DODSEventAuditManager.maxVARCHARSize. Using default value "+max_vchar_size); 87 } 88 89 usingStandardVariableDataModel=new Boolean (cus.getProperty("DODSEventAuditManager.useStandardVariableDataModel","true")).booleanValue(); 90 persistOldEventAuditData=new Boolean (cus.getProperty("PERSIST_OLD_EVENT_AUDIT_DATA","true")).booleanValue(); 91 92 _prStates = new HashMap(); 93 _acStates = new HashMap(); 94 _evTypes = new HashMap(); 95 try { 96 try { 97 DODSUtilities.init(cus.getProperties()); 98 } 99 catch (Throwable ex) { 100 ex.printStackTrace(); 101 } 102 initActivityAndProcessStatesTable(); 103 initEventTypesTable(); 104 } 105 catch (Throwable tr) { 106 cus.error(LOG_CHANNEL,"Problem with registering database manager with DODS !", new RootException(tr)); 107 throw new RootException("Problem with registering database manager with DODS !",tr); 108 } 109 } 110 111 119 protected void initActivityAndProcessStatesTable () throws EventAuditException { 120 DBTransaction t=null; 121 try { 122 t = DODS.getDatabaseManager().createTransaction(); 123 for (int i=0; i<activityAndProcessStates.length; i++) { 124 String state=activityAndProcessStates[i]; 125 ProcessStateEventAuditDO psDO=getPersistedProcessStateObject(state,true,t); 126 if (!psDO.isPersistent()) { 127 psDO.setKeyValue(state); 128 } 129 psDO.setName(state); 130 psDO.save(t); 131 _prStates.put(state, psDO.get_OId().toBigDecimal()); 132 ActivityStateEventAuditDO asDO=getPersistedActivityStateObject(state,true,t); 133 if (!asDO.isPersistent()) { 134 asDO.setKeyValue(state); 135 } 136 asDO.setName(state); 137 asDO.save(t); 138 _acStates.put(state, asDO.get_OId().toBigDecimal()); 139 } 140 t.commit(); 141 } 142 catch (Throwable thr) { 143 throw new EventAuditException(thr); 144 } 145 finally { 146 try { 147 t.release(); 148 } catch (Exception ex) {} 149 } 150 } 151 152 161 protected void initEventTypesTable () throws EventAuditException { 162 DBTransaction t=null; 163 try { 164 t = DODS.getDatabaseManager().createTransaction(); 165 for (int i=0; i<eventTypes.length; i++) { 166 String eventType=eventTypes[i]; 167 EventTypeDO etDO=getPersistedEventTypeObject(eventType,true,t); 168 if (!etDO.isPersistent()) { 169 etDO.setKeyValue(eventType); 170 } 171 etDO.setName(eventType); 172 etDO.save(t); 173 _evTypes.put(eventType, etDO.get_OId().toBigDecimal()); 174 } 175 t.commit(); 176 } 177 catch (Throwable thr) { 178 throw new EventAuditException(thr); 179 } 180 finally { 181 try { 182 t.release(); 183 } catch (Exception ex) {} 184 } 185 } 186 187 public void persist(AssignmentEventAuditPersistenceInterface aea,SharkTransaction ti) throws EventAuditException { 188 try { 189 AssignmentEventAuditDO DO=AssignmentEventAuditDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction()); 190 if (!DO.isPersistent()) { 192 DO.setUTCTime(aea.getUTCTime()); 193 DO.oid_setTheType((BigDecimal )_evTypes.get(aea.getType())); 194 DO.setProcessId(aea.getProcessId()); 195 DO.setActivityId(aea.getActivityId()); 196 if (aea.getActivityName()!=null) { 197 DO.setActivityName(aea.getActivityName()); 198 } 199 DO.setProcessName(aea.getProcessName()); 200 DO.setProcessDefinitionName(aea.getProcessDefinitionName()); 201 DO.setProcessDefinitionVersion(aea.getProcessDefinitionVersion()); 202 if (aea.getActivityDefinitionId()!=null) { 203 DO.setActivityDefinitionId(aea.getActivityDefinitionId()); 204 DO.setActivitySetDefinitionId(aea.getActivitySetDefinitionId()); 205 } 206 DO.setProcessDefinitionId(aea.getProcessDefinitionId()); 207 DO.setPackageId(aea.getPackageId()); 208 DO.setNewResourceUsername(aea.getNewResourceUsername()); 209 if (aea.getNewResourceName()!=null) { 210 DO.setNewResourceName(aea.getNewResourceName()); 211 } 212 if (aea.getOldResourceUsername()!=null) { 213 DO.setOldResourceUsername(aea.getOldResourceUsername()); 214 } 215 if (aea.getOldResourceName()!=null) { 216 DO.setOldResourceName(aea.getOldResourceName()); 217 } 218 DO.setIsAccepted(aea.getIsAccepted()); 219 DO.setCNT(getNextDecId("assignmenteventaudit")); 220 ((SharkDODSTransaction)ti).store(DO); 221 } 222 cus.info(LOG_CHANNEL,"AssignmentEventAudit[processId="+aea.getProcessId()+",activityId="+aea.getActivityId()+"] persisted"); 223 } 224 catch (Throwable tr) { 225 cus.error(LOG_CHANNEL,"Persisting of AssignmentEventAudit failed"); 226 throw new EventAuditException 228 ("Persisting of AssignmentEventAudit failed", tr); 229 } 230 } 231 232 public void persist(DataEventAuditPersistenceInterface dea,SharkTransaction ti) throws EventAuditException { 233 try { 234 DataEventAuditDO DO=DataEventAuditDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction()); 235 if (!DO.isPersistent()) { 237 DO.setUTCTime(dea.getUTCTime()); 238 DO.oid_setTheType((BigDecimal )_evTypes.get(dea.getType())); 239 DO.setProcessId(dea.getProcessId()); 240 if (dea.getActivityId()!=null) { 241 DO.setActivityId(dea.getActivityId()); 242 } 243 if (dea.getActivityName()!=null) { 244 DO.setActivityName(dea.getActivityName()); 245 } 246 DO.setProcessName(dea.getProcessName()); 247 DO.setProcessDefinitionName(dea.getProcessDefinitionName()); 248 DO.setProcessDefinitionVersion(dea.getProcessDefinitionVersion()); 249 if (dea.getActivityDefinitionId()!=null) { 250 DO.setActivityDefinitionId(dea.getActivityDefinitionId()); 251 DO.setActivitySetDefinitionId(dea.getActivitySetDefinitionId()); 252 } 253 DO.setProcessDefinitionId(dea.getProcessDefinitionId()); 254 DO.setPackageId(dea.getPackageId()); 255 DO.setCNT(getNextDecId("dataeventaudit")); 256 ((SharkDODSTransaction)ti).store(DO); 257 if (usingStandardVariableDataModel) { 258 if (persistOldEventAuditData) { 259 persistOldEventAuditDataBLOB(dea,DO,ti); 260 } 261 persistNewEventAuditDataBLOB(dea,DO,ti); 262 } else { 263 if (persistOldEventAuditData) { 264 persistOldEventAuditDataWOB(dea,DO,ti); 265 } 266 persistNewEventAuditDataWOB(dea,DO,ti); 267 } 268 } 269 if(dea.getActivityId()!=null) { 270 cus.info(LOG_CHANNEL,"DataEventAudit[processId="+dea.getProcessId()+",activityId="+dea.getActivityId()+"] persisted"); 271 } 272 else { 273 cus.info(LOG_CHANNEL,"DataEventAudit[processId="+dea.getProcessId()+"] persisted"); 274 } 275 } 276 catch (Throwable tr) { 277 cus.error(LOG_CHANNEL,"Persisting of DataEventAudit failed"); 278 throw new EventAuditException 279 ("Persisting of DataEventAudit failed", tr); 280 } 281 } 282 283 public void persist(StateEventAuditPersistenceInterface sea,SharkTransaction ti) throws EventAuditException { 284 try { 285 StateEventAuditDO DO=StateEventAuditDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction()); 286 288 if (!DO.isPersistent()) { 289 DO.setUTCTime(sea.getUTCTime()); 290 DO.oid_setTheType((BigDecimal )_evTypes.get(sea.getType())); 291 DO.setProcessId(sea.getProcessId()); 292 if (sea.getActivityId()!=null) { 293 DO.setActivityId(sea.getActivityId()); 294 DO.oid_setNewActivityState((BigDecimal )_acStates.get(sea.getNewState())); 295 if (sea.getOldState()!=null) { 296 DO.oid_setOldActivityState((BigDecimal )_acStates.get(sea.getOldState())); 297 } 298 } 299 else { 300 DO.oid_setNewProcessState((BigDecimal )_prStates.get(sea.getNewState())); 301 if (sea.getOldState()!=null) { 302 DO.oid_setOldProcessState((BigDecimal )_prStates.get(sea.getOldState())); 303 } 304 } 305 306 if (sea.getActivityName()!=null) { 307 DO.setActivityName(sea.getActivityName()); 308 } 309 DO.setProcessName(sea.getProcessName()); 310 DO.setProcessDefinitionName(sea.getProcessDefinitionName()); 311 DO.setProcessDefinitionVersion(sea.getProcessDefinitionVersion()); 312 if (sea.getActivityDefinitionId()!=null) { 313 DO.setActivityDefinitionId(sea.getActivityDefinitionId()); 314 DO.setActivitySetDefinitionId(sea.getActivitySetDefinitionId()); 315 } 316 DO.setProcessDefinitionId(sea.getProcessDefinitionId()); 317 DO.setPackageId(sea.getPackageId()); 318 DO.setCNT(getNextDecId("stateeventaudit")); 319 ((SharkDODSTransaction)ti).store(DO); 320 } 321 if(sea.getActivityId()!=null) { 322 cus.info(LOG_CHANNEL,"StateEventAudit[processId="+sea.getProcessId()+",activityId="+sea.getActivityId()+"] persisted"); 323 } 324 else { 325 cus.info(LOG_CHANNEL,"StateEventAudit[processId="+sea.getProcessId()+"] persisted"); 326 } 327 } 328 catch (Throwable tr) { 329 cus.error(LOG_CHANNEL,"Persisting of StateEventAudit failed"); 330 throw new EventAuditException 332 ("Persisting of StateEventAudit failed", tr); 333 } 334 } 335 336 public void persist(CreateProcessEventAuditPersistenceInterface cpea,SharkTransaction ti) throws EventAuditException { 337 try { 338 CreateProcessEventAuditDO DO=CreateProcessEventAuditDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction()); 339 if (!DO.isPersistent()) { 341 DO.setUTCTime(cpea.getUTCTime()); 342 DO.oid_setTheType((BigDecimal )_evTypes.get(cpea.getType())); 343 DO.setProcessId(cpea.getProcessId()); 344 DO.setProcessName(cpea.getProcessName()); 345 DO.setProcessDefinitionId(cpea.getProcessDefinitionId()); 346 DO.setProcessDefinitionName(cpea.getProcessDefinitionName()); 347 DO.setProcessDefinitionVersion(cpea.getProcessDefinitionVersion()); 348 DO.setPackageId(cpea.getPackageId()); 349 if (cpea.getPProcessId()!=null) { 350 DO.setPProcessId(cpea.getPProcessId()); 351 } 352 if (cpea.getPProcessName()!=null) { 353 DO.setPProcessName(cpea.getPProcessName()); 354 } 355 if (cpea.getPActivityId()!=null) { 356 DO.setPActivityId(cpea.getPActivityId()); 357 } 358 if (cpea.getPPackageId()!=null) { 359 DO.setPPackageId(cpea.getPPackageId()); 360 } 361 if (cpea.getPProcessDefinitionId()!=null) { 362 DO.setPProcessDefinitionId(cpea.getPProcessDefinitionId()); 363 } 364 if (cpea.getPActivityDefinitionId()!=null) { 365 DO.setPActivityDefinitionId(cpea.getPActivityDefinitionId()); 366 DO.setPActivitySetDefinitionId(cpea.getPActivitySetDefinitionId()); 367 } 368 if (cpea.getPProcessDefinitionName()!=null) { 369 DO.setPProcessDefinitionName(cpea.getPProcessDefinitionName()); 370 } 371 if (cpea.getPProcessDefinitionVersion()!=null) { 372 DO.setPProcessDefinitionVersion(cpea.getPProcessDefinitionVersion()); 373 } 374 DO.setCNT(getNextDecId("createprocesseventaudit")); 375 ((SharkDODSTransaction)ti).store(DO); 376 } 377 cus.info(LOG_CHANNEL,"CreateProcessEventAudit[processId="+cpea.getProcessId()+"] persisted"); 378 } 379 catch (Throwable tr) { 380 cus.error(LOG_CHANNEL,"Persisting of CreateProcessEventAudit failed"); 381 throw new EventAuditException 382 ("Persisting of CreateProcessEventAudit failed", tr); 383 } 384 } 385 386 protected void persistOldEventAuditDataBLOB (DataEventAuditPersistenceInterface dea, 387 DataEventAuditDO deaDO,SharkTransaction ti) throws EventAuditException { 388 try { 389 Map od=dea.getOldData(); 390 if (null != od) { 391 Iterator it=od.entrySet().iterator(); 392 while (it.hasNext()) { 393 Map.Entry me=(Map.Entry)it.next(); 394 String vdId=(String )me.getKey(); 395 Object val=me.getValue(); 396 OldEventAuditDataDO oedDO=OldEventAuditDataDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction()); 397 oedDO.setDataEventAudit(deaDO); 398 oedDO.setVariableDefinitionId(vdId); 399 400 boolean isBLOB=false; 401 if (val instanceof Boolean ) { 402 oedDO.setVariableValueBOOL(((Boolean )val).booleanValue()); 403 oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BOOLEAN); 404 } else if (val instanceof Long ) { 405 oedDO.setVariableValueLONG(((Long )val).longValue()); 406 oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_LONG); 407 } else if (val instanceof String ) { 408 String sv=(String )val; 409 if (sv.length()<=max_vchar_size) { 410 oedDO.setVariableValueVCHAR(sv); 411 oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_VCHAR); 412 } else { 413 isBLOB=true; 414 } 415 } else if (val instanceof Double ) { 416 oedDO.setVariableValueDBL(((Double )val).doubleValue()); 417 oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DOUBLE); 418 } else if (val instanceof java.util.Date ) { 419 oedDO.setVariableValueDATE(new java.sql.Timestamp (((java.util.Date )val).getTime())); 420 oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DATE); 421 } else if (val==null) { 422 short vt=oedDO.getVariableType(); 423 if (vt==DODSEventAuditManager.DB_TYPE_DATE) { 424 oedDO.setVariableValueDATE(null); 425 } else if (vt==DODSEventAuditManager.DB_TYPE_VCHAR) { 426 oedDO.setVariableValueVCHAR(null); 427 } else { 428 oedDO.setVariableValue(null); 429 oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB); 430 } 431 } else { 432 isBLOB=true; 433 } 434 435 if (isBLOB) { 436 oedDO.setVariableValue(MiscUtilities.serialize(val)); 437 oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB); 438 } 439 440 ((SharkDODSTransaction)ti).store(oedDO); 441 } 442 } 443 } 444 catch (Throwable tr) { 445 cus.error(LOG_CHANNEL,"Persisting of OldEventAuditData failed"); 446 throw new EventAuditException 447 ("Persisting of OldEventAuditData failed", tr); 448 } 449 } 450 451 protected void persistOldEventAuditDataWOB (DataEventAuditPersistenceInterface dea, 452 DataEventAuditDO deaDO,SharkTransaction ti) throws EventAuditException { 453 454 try { 455 Map od=dea.getOldData(); 456 if (null != od) { 457 Iterator it=od.entrySet().iterator(); 458 while (it.hasNext()) { 459 Map.Entry me=(Map.Entry)it.next(); 460 String vdId=(String )me.getKey(); 461 Object val=me.getValue(); 462 OldEventAuditDataWOBDO oedDO=OldEventAuditDataWOBDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction()); 463 oedDO.setDataEventAudit(deaDO); 464 oedDO.setVariableDefinitionId(vdId); 465 466 boolean isBLOB=false; 467 if (val instanceof Boolean ) { 468 oedDO.setVariableValueBOOL(((Boolean )val).booleanValue()); 469 oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BOOLEAN); 470 } else if (val instanceof Long ) { 471 oedDO.setVariableValueLONG(((Long )val).longValue()); 472 oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_LONG); 473 } else if (val instanceof String ) { 474 String sv=(String )val; 475 if (sv.length()<=max_vchar_size) { 476 oedDO.setVariableValueVCHAR(sv); 477 oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_VCHAR); 478 } else { 479 isBLOB=true; 480 } 481 } else if (val instanceof Double ) { 482 oedDO.setVariableValueDBL(((Double )val).doubleValue()); 483 oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DOUBLE); 484 } else if (val instanceof java.util.Date ) { 485 oedDO.setVariableValueDATE(new java.sql.Timestamp (((java.util.Date )val).getTime())); 486 oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DATE); 487 } else if (val==null) { 488 short vt=oedDO.getVariableType(); 489 if (vt==DODSEventAuditManager.DB_TYPE_DATE) { 490 oedDO.setVariableValueDATE(null); 491 } else if (vt==DODSEventAuditManager.DB_TYPE_VCHAR) { 492 oedDO.setVariableValueVCHAR(null); 493 } else { 494 OldEventAuditDataBLOBDO bDO=OldEventAuditDataBLOBDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction()); 495 bDO.setOldEventAuditDataWOB(oedDO); 496 bDO.setVariableValue(null); 497 oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB); 498 ((SharkDODSTransaction)ti).store(bDO); 499 } 500 } else { 501 isBLOB=true; 502 } 503 504 if (isBLOB) { 505 OldEventAuditDataBLOBDO bDO=OldEventAuditDataBLOBDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction()); 506 bDO.setOldEventAuditDataWOB(oedDO); 507 bDO.setVariableValue(MiscUtilities.serialize(val)); 508 oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB); 509 ((SharkDODSTransaction)ti).store(bDO); 510 } 511 512 ((SharkDODSTransaction)ti).store(oedDO); 513 } 514 } 515 } 516 catch (Throwable tr) { 517 cus.error(LOG_CHANNEL,"Persisting of OldEventAuditData failed"); 518 throw new EventAuditException 519 ("Persisting of OldEventAuditData failed", tr); 520 } 521 } 522 523 protected void persistNewEventAuditDataBLOB (DataEventAuditPersistenceInterface dea, 524 DataEventAuditDO deaDO,SharkTransaction ti) throws EventAuditException { 525 try { 526 Map nd=dea.getNewData(); 527 Iterator it=nd.entrySet().iterator(); 528 while (it.hasNext()) { 529 Map.Entry me=(Map.Entry)it.next(); 530 String vdId=(String )me.getKey(); 531 Object val= me.getValue(); 532 NewEventAuditDataDO nedDO=NewEventAuditDataDO .createVirgin(((SharkDODSTransaction)ti).getDODSTransaction()); 533 nedDO.setDataEventAudit(deaDO); 534 nedDO.setVariableDefinitionId(vdId); 535 536 boolean isBLOB=false; 537 if (val instanceof Boolean ) { 538 nedDO.setVariableValueBOOL(((Boolean )val).booleanValue()); 539 nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BOOLEAN); 540 } else if (val instanceof Long ) { 541 nedDO.setVariableValueLONG(((Long )val).longValue()); 542 nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_LONG); 543 } else if (val instanceof String ) { 544 String sv=(String )val; 545 if (sv.length()<=max_vchar_size) { 546 nedDO.setVariableValueVCHAR(sv); 547 nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_VCHAR); 548 } else { 549 isBLOB=true; 550 } 551 } else if (val instanceof Double ) { 552 nedDO.setVariableValueDBL(((Double )val).doubleValue()); 553 nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DOUBLE); 554 } else if (val instanceof java.util.Date ) { 555 nedDO.setVariableValueDATE(new java.sql.Timestamp (((java.util.Date )val).getTime())); 556 nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DATE); 557 } else if (val==null) { 558 short vt=nedDO.getVariableType(); 559 if (vt==DODSEventAuditManager.DB_TYPE_DATE) { 560 nedDO.setVariableValueDATE(null); 561 } else if (vt==DODSEventAuditManager.DB_TYPE_VCHAR) { 562 nedDO.setVariableValueVCHAR(null); 563 } else { 564 nedDO.setVariableValue(null); 565 nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB); 566 } 567 } else { 568 isBLOB=true; 569 } 570 571 if (isBLOB) { 572 nedDO.setVariableValue(MiscUtilities.serialize(val)); 573 nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB); 574 } 575 576 ((SharkDODSTransaction)ti).store(nedDO); 577 } 578 } 579 catch (Throwable tr) { 580 cus.error(LOG_CHANNEL,"Persisting of NewEventAuditData failed"); 581 throw new EventAuditException 582 ("Persisting of NewEventAuditData failed", tr); 583 } 584 } 585 586 protected void persistNewEventAuditDataWOB (DataEventAuditPersistenceInterface dea, 587 DataEventAuditDO deaDO,SharkTransaction ti) throws EventAuditException { 588 589 try { 590 Map nd=dea.getNewData(); 591 Iterator it=nd.entrySet().iterator(); 592 while (it.hasNext()) { 593 Map.Entry me=(Map.Entry)it.next(); 594 String vdId=(String )me.getKey(); 595 Object val= me.getValue(); 596 NewEventAuditDataWOBDO nedDO=NewEventAuditDataWOBDO .createVirgin(((SharkDODSTransaction)ti).getDODSTransaction()); 597 nedDO.setDataEventAudit(deaDO); 598 nedDO.setVariableDefinitionId(vdId); 599 600 boolean isBLOB=false; 601 if (val instanceof Boolean ) { 602 nedDO.setVariableValueBOOL(((Boolean )val).booleanValue()); 603 nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BOOLEAN); 604 } else if (val instanceof Long ) { 605 nedDO.setVariableValueLONG(((Long )val).longValue()); 606 nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_LONG); 607 } else if (val instanceof String ) { 608 String sv=(String )val; 609 if (sv.length()<=max_vchar_size) { 610 nedDO.setVariableValueVCHAR(sv); 611 nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_VCHAR); 612 } else { 613 isBLOB=true; 614 } 615 } else if (val instanceof Double ) { 616 nedDO.setVariableValueDBL(((Double )val).doubleValue()); 617 nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DOUBLE); 618 } else if (val instanceof java.util.Date ) { 619 nedDO.setVariableValueDATE(new java.sql.Timestamp (((java.util.Date )val).getTime())); 620 nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DATE); 621 } else if (val==null) { 622 short vt=nedDO.getVariableType(); 623 if (vt==DODSEventAuditManager.DB_TYPE_DATE) { 624 nedDO.setVariableValueDATE(null); 625 } else if (vt==DODSEventAuditManager.DB_TYPE_VCHAR) { 626 nedDO.setVariableValueVCHAR(null); 627 } else { 628 NewEventAuditDataBLOBDO bDO=NewEventAuditDataBLOBDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction()); 629 bDO.setNewEventAuditDataWOB(nedDO); 630 bDO.setVariableValue(null); 631 632 nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB); 633 ((SharkDODSTransaction)ti).store(bDO); 634 } 635 } else { 636 isBLOB=true; 637 } 638 639 if (isBLOB) { 640 NewEventAuditDataBLOBDO bDO=NewEventAuditDataBLOBDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction()); 641 bDO.setNewEventAuditDataWOB(nedDO); 642 bDO.setVariableValue(MiscUtilities.serialize(val)); 643 nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB); 644 ((SharkDODSTransaction)ti).store(bDO); 645 } 646 647 ((SharkDODSTransaction)ti).store(nedDO); 648 } 649 } 650 catch (Throwable tr) { 651 cus.error(LOG_CHANNEL,"Persisting of NewEventAuditData failed"); 652 throw new EventAuditException 653 ("Persisting of NewEventAuditData failed", tr); 654 } 655 } 656 |