1 31 32 package org.opencms.db.generic; 33 34 import org.opencms.configuration.CmsConfigurationManager; 35 import org.opencms.db.CmsDbContext; 36 import org.opencms.db.CmsDbEntryNotFoundException; 37 import org.opencms.db.CmsDbSqlException; 38 import org.opencms.db.CmsDbUtil; 39 import org.opencms.db.CmsDriverManager; 40 import org.opencms.db.I_CmsDriver; 41 import org.opencms.db.I_CmsWorkflowDriver; 42 import org.opencms.file.CmsDataAccessException; 43 import org.opencms.file.CmsGroup; 44 import org.opencms.file.CmsProject; 45 import org.opencms.file.CmsUser; 46 import org.opencms.main.CmsLog; 47 import org.opencms.main.OpenCms; 48 import org.opencms.util.CmsUUID; 49 import org.opencms.workflow.CmsTask; 50 import org.opencms.workflow.CmsTaskLog; 51 import org.opencms.workflow.CmsTaskService; 52 53 import java.sql.Connection ; 54 import java.sql.PreparedStatement ; 55 import java.sql.ResultSet ; 56 import java.sql.SQLException ; 57 import java.sql.Statement ; 58 import java.util.ArrayList ; 59 import java.util.List ; 60 import java.util.Map ; 61 62 import org.apache.commons.logging.Log; 63 64 74 public class CmsWorkflowDriver implements I_CmsDriver, I_CmsWorkflowDriver { 75 76 77 protected static final String TABLE_TASK = "CMS_TASKS"; 78 79 80 protected static final String TABLE_TASKLOG = "CMS_TASKLOG"; 81 82 83 protected static final String TABLE_TASKPAR = "CMS_TASKPAR"; 84 85 86 protected static final String TABLE_TASKTYPE = "CMS_TASKTYPE"; 87 88 89 private static final Log LOG = CmsLog.getLog(org.opencms.db.generic.CmsWorkflowDriver.class); 90 91 92 protected CmsDriverManager m_driverManager; 93 94 95 protected org.opencms.db.generic.CmsSqlManager m_sqlManager; 96 97 100 public CmsTask createTask( 101 CmsDbContext dbc, 102 int rootId, 103 int parentId, 104 int tasktype, 105 CmsUUID ownerId, 106 CmsUUID agentId, 107 CmsUUID roleId, 108 String taskname, 109 java.sql.Timestamp wakeuptime, 110 java.sql.Timestamp timeout, 111 int priority) throws CmsDataAccessException { 112 113 int newId = m_sqlManager.nextId(TABLE_TASK); 115 PreparedStatement stmt = null; 117 Connection conn = null; 118 try { 119 conn = m_sqlManager.getConnection(dbc); 120 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASK_CREATE"); 121 stmt.setInt(1, newId); 122 stmt.executeUpdate(); 123 124 } catch (SQLException e) { 125 throw new CmsDbSqlException(Messages.get().container( 126 Messages.ERR_GENERIC_SQL_1, 127 CmsDbSqlException.getErrorQuery(stmt)), e); 128 } finally { 129 m_sqlManager.closeAll(dbc, conn, stmt, null); 130 } 131 CmsTask task = new CmsTask( 134 newId, 135 taskname, 136 CmsTaskService.TASK_STATE_STARTED, 137 tasktype, 138 rootId, 139 parentId, 140 ownerId, 141 roleId, 142 agentId, 143 agentId, 144 new java.sql.Timestamp (System.currentTimeMillis()), 145 wakeuptime, 146 timeout, 147 null, 148 0, 149 "30308", 150 priority, 151 0, 152 "../taskforms/adhoc.asp", 153 0, 154 1); 155 task = writeTask(dbc, task); 157 return task; 158 } 159 160 163 public void destroy() throws Throwable { 164 165 finalize(); 166 if (CmsLog.INIT.isInfoEnabled()) { 167 CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_SHUTDOWN_DRIVER_1, getClass().getName())); 168 } 169 } 170 171 174 public void endTask(CmsDbContext dbc, int taskId) throws CmsDataAccessException { 175 176 Connection conn = null; 177 PreparedStatement stmt = null; 178 try { 179 conn = m_sqlManager.getConnection(dbc); 180 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASK_END"); 181 stmt.setInt(1, 100); 182 stmt.setTimestamp(2, new java.sql.Timestamp (System.currentTimeMillis())); 183 stmt.setInt(3, taskId); 184 stmt.executeUpdate(); 185 186 } catch (SQLException e) { 187 throw new CmsDbSqlException(Messages.get().container( 188 Messages.ERR_GENERIC_SQL_1, 189 CmsDbSqlException.getErrorQuery(stmt)), e); 190 } finally { 191 m_sqlManager.closeAll(dbc, conn, stmt, null); 192 } 193 } 194 195 198 public void forwardTask(CmsDbContext dbc, int taskId, CmsUUID newRoleId, CmsUUID newUserId) 199 throws CmsDataAccessException { 200 201 Connection conn = null; 202 PreparedStatement stmt = null; 203 try { 204 conn = m_sqlManager.getConnection(dbc); 205 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASK_FORWARD"); 206 stmt.setString(1, newRoleId.toString()); 207 stmt.setString(2, newUserId.toString()); 208 stmt.setInt(3, taskId); 209 stmt.executeUpdate(); 210 } catch (SQLException e) { 211 throw new CmsDbSqlException(Messages.get().container( 212 Messages.ERR_GENERIC_SQL_1, 213 CmsDbSqlException.getErrorQuery(stmt)), e); 214 } finally { 215 m_sqlManager.closeAll(dbc, conn, stmt, null); 216 } 217 } 218 219 222 public CmsSqlManager getSqlManager() { 223 224 return m_sqlManager; 225 } 226 227 230 public void init( 231 CmsDbContext dbc, 232 CmsConfigurationManager configurationManager, 233 List successiveDrivers, 234 CmsDriverManager driverManager) { 235 236 Map configuration = configurationManager.getConfiguration(); 237 String poolUrl = (String )configuration.get("db.workflow.pool"); 238 String classname = (String )configuration.get("db.workflow.sqlmanager"); 239 m_sqlManager = this.initSqlManager(classname); 240 m_sqlManager.init(I_CmsWorkflowDriver.DRIVER_TYPE_ID, poolUrl); 241 242 m_driverManager = driverManager; 243 244 if (CmsLog.INIT.isInfoEnabled()) { 245 CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_ASSIGNED_POOL_1, poolUrl)); 246 } 247 248 if (successiveDrivers != null && !successiveDrivers.isEmpty()) { 249 if (LOG.isWarnEnabled()) { 250 LOG.warn(Messages.get().getBundle().key( 251 Messages.LOG_SUCCESSIVE_DRIVERS_UNSUPPORTED_1, 252 getClass().getName())); 253 } 254 } 255 } 256 257 260 public org.opencms.db.generic.CmsSqlManager initSqlManager(String classname) { 261 262 return CmsSqlManager.getInstance(classname); 263 } 264 265 268 public CmsUUID readAgent(CmsDbContext dbc, CmsUUID roleId) throws CmsDataAccessException { 269 270 CmsUUID result = CmsUUID.getNullUUID(); 271 Connection conn = null; 272 PreparedStatement stmt = null; 273 ResultSet res = null; 274 275 try { 276 conn = m_sqlManager.getConnection(dbc); 277 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASK_FIND_AGENT"); 278 stmt.setString(1, roleId.toString()); 279 res = stmt.executeQuery(); 280 281 if (res.next()) { 282 result = new CmsUUID(res.getString(1)); 283 } 284 } catch (SQLException e) { 285 throw new CmsDbSqlException(Messages.get().container( 286 Messages.ERR_GENERIC_SQL_1, 287 CmsDbSqlException.getErrorQuery(stmt)), e); 288 } catch (Exception exc) { 289 throw new CmsDataAccessException(Messages.get().container(Messages.ERR_READ_AGENT_0), exc); 290 } finally { 291 m_sqlManager.closeAll(dbc, conn, stmt, res); 292 } 293 return result; 294 } 295 296 299 public CmsProject readProject(CmsDbContext dbc, CmsTask task) throws CmsDataAccessException { 300 301 PreparedStatement stmt = null; 302 CmsProject project = null; 303 ResultSet res = null; 304 Connection conn = null; 305 306 try { 307 conn = m_sqlManager.getConnection(dbc); 308 stmt = m_sqlManager.getPreparedStatement(conn, "C_PROJECTS_READ_BYTASK"); 309 310 stmt.setInt(1, task.getId()); 311 res = stmt.executeQuery(); 312 313 if (res.next()) { 314 project = new CmsProject(res, m_sqlManager); 315 } else { 316 throw new CmsDbEntryNotFoundException(Messages.get().container( 318 Messages.ERR_TASK_PROJECT_NOT_FOUND_1, 319 task)); 320 } 321 } catch (SQLException e) { 322 throw new CmsDbSqlException(Messages.get().container( 323 Messages.ERR_GENERIC_SQL_1, 324 CmsDbSqlException.getErrorQuery(stmt)), e); 325 } finally { 326 m_sqlManager.closeAll(dbc, conn, stmt, res); 328 } 329 return project; 330 } 331 332 335 public List readProjectLogs(CmsDbContext dbc, int projectid) throws CmsDataAccessException { 336 337 ResultSet res = null; 338 Connection conn = null; 339 340 CmsTaskLog tasklog = null; 341 List logs = new ArrayList (); 342 PreparedStatement stmt = null; 343 String comment = null; 344 java.sql.Timestamp starttime = null; 345 int id = CmsDbUtil.UNKNOWN_ID; 346 CmsUUID user = CmsUUID.getNullUUID(); 347 int type = CmsDbUtil.UNKNOWN_ID; 348 349 try { 350 conn = m_sqlManager.getConnection(dbc); 351 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASKLOG_READ_PPROJECTLOGS"); 352 stmt.setInt(1, projectid); 353 res = stmt.executeQuery(); 354 while (res.next()) { 355 comment = res.getString(m_sqlManager.readQuery("C_LOG_COMMENT")); 356 id = res.getInt(m_sqlManager.readQuery("C_LOG_ID")); 357 starttime = CmsDbUtil.getTimestamp(res, m_sqlManager.readQuery("C_LOG_STARTTIME")); 358 user = new CmsUUID(res.getString(m_sqlManager.readQuery("C_LOG_USER"))); 359 type = res.getInt(m_sqlManager.readQuery("C_LOG_TYPE")); 360 361 tasklog = new CmsTaskLog(id, comment, user, starttime, type); 362 logs.add(tasklog); 363 } 364 } catch (SQLException e) { 365 throw new CmsDbSqlException(Messages.get().container( 366 Messages.ERR_GENERIC_SQL_1, 367 CmsDbSqlException.getErrorQuery(stmt)), e); 368 } catch (Exception exc) { 369 throw new CmsDataAccessException(Messages.get().container(Messages.ERR_READ_TASK_LOGS_0), exc); 370 } finally { 371 m_sqlManager.closeAll(dbc, conn, stmt, res); 373 } 374 return logs; 375 } 376 377 380 public CmsTask readTask(CmsDbContext dbc, int id) throws CmsDataAccessException { 381 382 ResultSet res = null; 383 CmsTask task = null; 384 PreparedStatement stmt = null; 385 Connection conn = null; 386 try { 387 conn = m_sqlManager.getConnection(dbc); 388 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASK_READ"); 389 stmt.setInt(1, id); 390 res = stmt.executeQuery(); 391 392 if (res.next()) { 393 task = internalCreateTask(res); 394 } 395 } catch (SQLException e) { 396 throw new CmsDbSqlException(Messages.get().container( 397 Messages.ERR_GENERIC_SQL_1, 398 CmsDbSqlException.getErrorQuery(stmt)), e); 399 } catch (Exception exc) { 400 throw new CmsDataAccessException(Messages.get().container(Messages.ERR_READ_TASK_1), exc); 401 } finally { 402 m_sqlManager.closeAll(dbc, conn, stmt, res); 404 } 405 return task; 406 } 407 408 411 public CmsTaskLog readTaskLog(CmsDbContext dbc, int id) throws CmsDataAccessException { 412 413 ResultSet res = null; 414 CmsTaskLog tasklog = null; 415 PreparedStatement stmt = null; 416 Connection conn = null; 417 try { 418 conn = m_sqlManager.getConnection(dbc); 419 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASKLOG_READ"); 420 stmt.setInt(1, id); 421 res = stmt.executeQuery(); 422 if (res.next()) { 423 String comment = res.getString(m_sqlManager.readQuery("C_LOG_COMMENT")); 424 id = res.getInt(m_sqlManager.readQuery("C_LOG_ID")); 425 java.sql.Timestamp starttime = CmsDbUtil.getTimestamp(res, m_sqlManager.readQuery("C_LOG_STARTTIME")); 426 CmsUUID user = new CmsUUID(res.getString(m_sqlManager.readQuery("C_LOG_USER"))); 427 int type = res.getInt(m_sqlManager.readQuery("C_LOG_TYPE")); 428 429 tasklog = new CmsTaskLog(id, comment, user, starttime, type); 430 } 431 } catch (SQLException e) { 432 throw new CmsDbSqlException(Messages.get().container( 433 Messages.ERR_GENERIC_SQL_1, 434 CmsDbSqlException.getErrorQuery(stmt)), e); 435 } catch (Exception exc) { 436 throw new CmsDataAccessException(Messages.get().container(Messages.ERR_READ_TASK_LOG_0), exc); 437 } finally { 438 m_sqlManager.closeAll(dbc, conn, stmt, res); 440 } 441 442 return tasklog; 443 } 444 445 448 public List readTaskLogs(CmsDbContext dbc, int taskId) throws CmsDataAccessException { 449 450 Connection conn = null; 451 ResultSet res = null; 452 CmsTaskLog tasklog = null; 453 List logs = new ArrayList (); 454 PreparedStatement stmt = null; 455 String comment = null; 456 java.sql.Timestamp starttime = null; 457 int id = CmsDbUtil.UNKNOWN_ID; 458 CmsUUID user = CmsUUID.getNullUUID(); 459 int type = CmsDbUtil.UNKNOWN_ID; 460 461 try { 462 conn = m_sqlManager.getConnection(dbc); 463 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASKLOG_READ_LOGS"); 464 stmt.setInt(1, taskId); 465 res = stmt.executeQuery(); 466 while (res.next()) { 467 comment = res.getString(m_sqlManager.readQuery("C_TASKLOG_COMMENT")); 468 id = res.getInt(m_sqlManager.readQuery("C_TASKLOG_ID")); 469 starttime = CmsDbUtil.getTimestamp(res, m_sqlManager.readQuery("C_TASKLOG_STARTTIME")); 470 user = new CmsUUID(res.getString(m_sqlManager.readQuery("C_TASKLOG_USER"))); 471 type = res.getInt(m_sqlManager.readQuery("C_TASKLOG_TYPE")); 472 tasklog = new CmsTaskLog(id, comment, user, starttime, type); 473 logs.add(tasklog); 474 } 475 } catch (SQLException e) { 476 throw new CmsDbSqlException(Messages.get().container( 477 Messages.ERR_GENERIC_SQL_1, 478 CmsDbSqlException.getErrorQuery(stmt)), e); 479 } catch (Exception exc) { 480 throw new CmsDataAccessException(Messages.get().container(Messages.ERR_READ_TASK_LOGS_0), exc); 481 } finally { 482 m_sqlManager.closeAll(dbc, conn, stmt, res); 484 } 485 return logs; 486 } 487 488 491 public String readTaskParameter(CmsDbContext dbc, int taskId, String parname) throws CmsDataAccessException { 492 493 String result = null; 494 ResultSet res = null; 495 PreparedStatement stmt = null; 496 Connection conn = null; 497 498 try { 499 conn = m_sqlManager.getConnection(dbc); 500 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASKPAR_GET"); 501 stmt.setInt(1, taskId); 502 stmt.setString(2, parname); 503 res = stmt.executeQuery(); 504 if (res.next()) { 505 result = res.getString(m_sqlManager.readQuery("C_PAR_VALUE")); 506 } 507 } catch (SQLException e) { 508 throw new CmsDbSqlException(Messages.get().container( 509 Messages.ERR_GENERIC_SQL_1, 510 CmsDbSqlException.getErrorQuery(stmt)), e); 511 } finally { 512 m_sqlManager.closeAll(dbc, conn, stmt, res); 514 } 515 return result; 516 } 517 518 521 public List readTasks( 522 CmsDbContext dbc, 523 CmsProject project, 524 CmsUser agent, 525 CmsUser owner, 526 CmsGroup role, 527 int tasktype, 528 String orderBy, 529 String sort) throws CmsDataAccessException { 530 531 boolean first = true; 532 List tasks = new ArrayList (); CmsTask task = null; ResultSet res = null; 535 Connection conn = null; 536 537 String sqlstr = "SELECT * FROM " + m_sqlManager.readQuery("C_TABLENAME_TASK") + " WHERE "; 540 if (project != null) { 541 sqlstr = sqlstr + m_sqlManager.readQuery("C_TASK_ROOT") + "=" + project.getTaskId(); 542 first = false; 543 } else { 544 sqlstr = sqlstr 545 + m_sqlManager.readQuery("C_TASK_ROOT") 546 + "<> 0 AND " 547 + m_sqlManager.readQuery("C_TASK_PARENT") 548 + "<> 0"; 549 first = false; 550 } 551 552 if (agent != null) { 554 if (!first) { 555 sqlstr = sqlstr + " AND "; 556 } 557 sqlstr = sqlstr + m_sqlManager.readQuery("C_TASK_AGENTUSER") + "='" + agent.getId() + "'"; 558 first = false; 559 } 560 561 if (owner != null) { 563 if (!first) { 564 sqlstr = sqlstr + " AND "; 565 } 566 sqlstr = sqlstr + m_sqlManager.readQuery("C_TASK_INITIATORUSER") + "='" + owner.getId() + "'"; 567 first = false; 568 } 569 570 if (role != null) { 572 if (!first) { 573 sqlstr = sqlstr + " AND "; 574 } 575 sqlstr = sqlstr + m_sqlManager.readQuery("C_TASK_ROLE") + "='" + role.getId() + "'"; 576 first = false; 577 } 578 579 sqlstr = sqlstr + internalReadTaskTypeCondition(first, tasktype); 580 581 if (orderBy != null) { 583 if (!orderBy.equals("")) { 584 sqlstr = sqlstr + " ORDER BY " + orderBy; 585 if (orderBy != null) { 586 if (!orderBy.equals("")) { 587 sqlstr = sqlstr + " " + sort; 588 } 589 } 590 } 591 } 592 593 Statement stmt = null; 594 595 try { 596 conn = m_sqlManager.getConnection(dbc); 597 stmt = conn.createStatement(); 598 res = stmt.executeQuery(sqlstr); 599 600 while (res.next()) { 602 task = internalCreateTask(res); 603 tasks.add(task); 604 } 605 606 } catch (SQLException e) { 607 throw new CmsDbSqlException(Messages.get().container( 608 Messages.ERR_GENERIC_SQL_1, 609 CmsDbSqlException.getErrorQuery(stmt)), e); 610 } catch (Exception exc) { 611 throw new CmsDataAccessException(Messages.get().container(Messages.ERR_READ_TASKS_0), exc); 612 } finally { 613 m_sqlManager.closeAll(dbc, conn, stmt, res); 615 } 616 617 return tasks; 618 } 619 620 623 public int readTaskType(CmsDbContext dbc, String taskName) throws CmsDataAccessException { 624 625 int result = 1; 626 627 PreparedStatement stmt = null; 628 ResultSet res = null; 629 Connection conn = null; 630 631 try { 632 conn = m_sqlManager.getConnection(dbc); 633 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASK_GET_TASKTYPE"); 634 stmt.setString(1, taskName); 635 res = stmt.executeQuery(); 636 if (res.next()) { 637 result = res.getInt("id"); 638 } 639 } catch (SQLException e) { 640 throw new CmsDbSqlException(Messages.get().container( 641 Messages.ERR_GENERIC_SQL_1, 642 CmsDbSqlException.getErrorQuery(stmt)), e); 643 } finally { 644 m_sqlManager.closeAll(dbc, conn, stmt, res); 646 } 647 return result; 648 } 649 650 653 public void writeSystemTaskLog(CmsDbContext dbc, int taskid, String comment) throws CmsDataAccessException { 654 655 this.writeTaskLog( 656 dbc, 657 taskid, 658 CmsUUID.getNullUUID(), 659 new java.sql.Timestamp (System.currentTimeMillis()), 660 comment, 661 CmsTaskService.TASKLOG_USER); 662 } 663 664 667 public CmsTask writeTask(CmsDbContext dbc, CmsTask task) throws CmsDataAccessException { 668 669 PreparedStatement stmt = null; 670 Connection conn = null; 671 672 try { 673 conn = m_sqlManager.getConnection(dbc); 674 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASK_UPDATE"); 675 stmt.setString(1, task.getName()); 676 stmt.setInt(2, task.getState()); 677 stmt.setInt(3, task.getTaskType()); 678 stmt.setInt(4, task.getRoot()); 679 stmt.setInt(5, task.getParent()); 680 stmt.setString(6, task.getInitiatorUser().toString()); 681 stmt.setString(7, task.getRole().toString()); 682 stmt.setString(8, task.getAgentUser().toString()); 683 stmt.setString(9, task.getOriginalUser().toString()); 684 stmt.setTimestamp(10, task.getStartTime()); 685 stmt.setTimestamp(11, task.getWakeupTime()); 686 stmt.setTimestamp(12, task.getTimeOut()); 687 stmt.setTimestamp(13, task.getEndTime()); 688 stmt.setInt(14, task.getPercentage()); 689 stmt.setString(15, task.getPermission()); 690 stmt.setInt(16, task.getPriority()); 691 stmt.setInt(17, task.getEscalationType()); 692 stmt.setString(18, task.getHtmlLink()); 693 stmt.setInt(19, task.getMilestone()); 694 stmt.setInt(20, task.getAutoFinish()); 695 stmt.setInt(21, task.getId()); 696 stmt.executeUpdate(); 697 698 } catch (SQLException e) { 699 throw new CmsDbSqlException(Messages.get().container( 700 Messages.ERR_GENERIC_SQL_1, 701 CmsDbSqlException.getErrorQuery(stmt)), e); 702 } finally { 703 m_sqlManager.closeAll(dbc, conn, stmt, null); 704 } 705 return (readTask(dbc, task.getId())); 706 } 707 708 711 public void writeTaskLog( 712 CmsDbContext dbc, 713 int taskId, 714 CmsUUID userId, 715 java.sql.Timestamp starttime, 716 String comment, 717 int type) throws CmsDataAccessException { 718 719 PreparedStatement stmt = null; 720 Connection conn = null; 721 try { 722 conn = m_sqlManager.getConnection(dbc); 723 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASKLOG_WRITE"); 724 725 stmt.setInt(1, m_sqlManager.nextId(TABLE_TASKLOG)); 726 stmt.setInt(2, taskId); 727 if (!userId.isNullUUID()) { 728 stmt.setString(3, userId.toString()); 729 } else { 730 stmt.setString(3, m_driverManager.readUser( 732 dbc, 733 OpenCms.getDefaultUsers().getUserGuest(), 734 CmsUser.USER_TYPE_SYSTEMUSER).getId().toString()); 735 } 736 stmt.setTimestamp(4, starttime); 737 stmt.setString(5, m_sqlManager.validateEmpty(comment)); 738 stmt.setInt(6, type); 739 740 stmt.executeUpdate(); 741 } catch (SQLException e) { 742 throw new CmsDbSqlException(Messages.get().container( 743 Messages.ERR_GENERIC_SQL_1, 744 CmsDbSqlException.getErrorQuery(stmt)), e); 745 } finally { 746 m_sqlManager.closeAll(dbc, conn, stmt, null); 747 } 748 } 749 750 753 public void writeTaskParameter(CmsDbContext dbc, int taskId, String parname, String parvalue) 754 throws CmsDataAccessException { 755 756 ResultSet res = null; 757 Connection conn = null; 758 PreparedStatement stmt = null; 759 760 try { 761 conn = m_sqlManager.getConnection(dbc); 762 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASKPAR_TEST"); 763 stmt.setInt(1, taskId); 765 stmt.setString(2, parname); 766 res = stmt.executeQuery(); 767 768 if (res.next()) { 769 internalWriteTaskParameter(dbc, res.getInt(m_sqlManager.readQuery("C_PAR_ID")), parvalue); 771 } else { 772 internalWriteTaskParameter(dbc, taskId, parname, parvalue); 774 775 } 776 } catch (SQLException e) { 777 throw new CmsDbSqlException(Messages.get().container( 778 Messages.ERR_GENERIC_SQL_1, 779 CmsDbSqlException.getErrorQuery(stmt)), e); 780 } finally { 781 m_sqlManager.closeAll(dbc, conn, stmt, res); 783 } 784 } 785 786 789 public void writeTaskType( 790 CmsDbContext dbc, 791 int autofinish, 792 int escalationtyperef, 793 String htmllink, 794 String name, 795 String permission, 796 int priorityref, 797 int roleref) throws CmsDataAccessException { 798 799 ResultSet res = null; 800 PreparedStatement stmt = null; 801 Connection conn = null; 802 803 try { 804 conn = m_sqlManager.getConnection(dbc); 805 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASK_GET_TASKTYPE"); 806 stmt.setString(1, name); 808 res = stmt.executeQuery(); 809 810 if (res.next()) { 811 internalWriteTaskType( 813 dbc, 814 res.getInt(m_sqlManager.readQuery("C_PAR_ID")), 815 autofinish, 816 escalationtyperef, 817 htmllink, 818 name, 819 permission, 820 priorityref, 821 roleref); 822 823 } else { 824 internalWriteTaskType( 826 dbc, 827 autofinish, 828 escalationtyperef, 829 htmllink, 830 name, 831 permission, 832 priorityref, 833 roleref); 834 835 } 836 } catch (SQLException e) { 837 throw new CmsDbSqlException(Messages.get().container( 838 Messages.ERR_GENERIC_SQL_1, 839 CmsDbSqlException.getErrorQuery(stmt)), e); 840 } finally { 841 m_sqlManager.closeAll(dbc, conn, stmt, res); 843 } 844 } 845 846 849 protected void finalize() throws Throwable { 850 851 try { 852 m_sqlManager = null; 853 m_driverManager = null; 854 } catch (Throwable t) { 855 } 857 super.finalize(); 858 } 859 860 867 protected CmsTask internalCreateTask(ResultSet res) throws SQLException { 868 869 int autofinish = res.getInt(m_sqlManager.readQuery("C_TASK_AUTOFINISH")); 870 java.sql.Timestamp endtime = CmsDbUtil.getTimestamp(res, m_sqlManager.readQuery("C_TASK_ENDTIME")); 871 int escalationtype = res.getInt(m_sqlManager.readQuery("C_TASK_ESCALATIONTYPE")); 872 int id = res.getInt(m_sqlManager.readQuery("C_TASK_ID")); 873 CmsUUID initiatoruser = new CmsUUID(res.getString(m_sqlManager.readQuery("C_TASK_INITIATORUSER"))); 874 int milestone = res.getInt(m_sqlManager.readQuery("C_TASK_MILESTONE")); 875 String name = res.getString(m_sqlManager.readQuery("C_TASK_NAME")); 876 CmsUUID originaluser = new CmsUUID(res.getString(m_sqlManager.readQuery("C_TASK_ORIGINALUSER"))); 877 CmsUUID agentuser = new CmsUUID(res.getString(m_sqlManager.readQuery("C_TASK_AGENTUSER"))); 878 int parent = res.getInt(m_sqlManager.readQuery("C_TASK_PARENT")); 879 int percentage = res.getInt(m_sqlManager.readQuery("C_TASK_PERCENTAGE")); 880 String permission = res.getString(m_sqlManager.readQuery("C_TASK_PERMISSION")); 881 int priority = res.getInt(m_sqlManager.readQuery("C_TASK_PRIORITY")); 882 CmsUUID role = new CmsUUID(res.getString(m_sqlManager.readQuery("C_TASK_ROLE"))); 883 int root = res.getInt(m_sqlManager.readQuery("C_TASK_ROOT")); 884 java.sql.Timestamp starttime = CmsDbUtil.getTimestamp(res, m_sqlManager.readQuery("C_TASK_STARTTIME")); 885 int state = res.getInt(m_sqlManager.readQuery("C_TASK_STATE")); 886 int tasktype = res.getInt(m_sqlManager.readQuery("C_TASK_TASKTYPE")); 887 java.sql.Timestamp timeout = CmsDbUtil.getTimestamp(res, m_sqlManager.readQuery("C_TASK_TIMEOUT")); 888 java.sql.Timestamp wakeuptime = CmsDbUtil.getTimestamp(res, m_sqlManager.readQuery("C_TASK_WAKEUPTIME")); 889 String htmllink = res.getString(m_sqlManager.readQuery("C_TASK_HTMLLINK")); 890 891 return new CmsTask( 892 id, 893 name, 894 state, 895 tasktype, 896 root, 897 parent, 898 initiatoruser, 899 role, 900 agentuser, 901 originaluser, 902 starttime, 903 wakeuptime, 904 timeout, 905 endtime, 906 percentage, 907 permission, 908 priority, 909 escalationtype, 910 htmllink, 911 milestone, 912 autofinish); 913 } 914 915 922 protected String internalReadTaskTypeCondition(boolean first, int tasktype) { 923 924 String result = ""; 925 if (!first) { 927 result = result + " AND "; 928 } 929 930 switch (tasktype) { 931 case CmsTaskService.TASKS_ALL: 932 result = result + m_sqlManager.readQuery("C_TASK_ROOT") + "<>0"; 933 break; 934 935 case CmsTaskService.TASKS_OPEN: 936 result = result + m_sqlManager.readQuery("C_TASK_STATE") + "=" + CmsTaskService.TASK_STATE_STARTED; 937 break; 938 939 case CmsTaskService.TASKS_ACTIVE: 940 result = result + m_sqlManager.readQuery("C_TASK_STATE") + "=" + CmsTaskService.TASK_STATE_STARTED; 941 break; 942 943 case CmsTaskService.TASKS_DONE: 944 result = result + m_sqlManager.readQuery("C_TASK_STATE") + "=" + CmsTaskService.TASK_STATE_ENDED; 945 break; 946 947 case CmsTaskService.TASKS_NEW: 948 result = result 949 + m_sqlManager.readQuery("C_TASK_PERCENTAGE") 950 + "='0' AND " 951 + m_sqlManager.readQuery("C_TASK_STATE") 952 + "=" 953 + CmsTaskService.TASK_STATE_STARTED; 954 break; 955 956 default: 957 } 958 959 return result; 960 } 961 962 971 protected void internalWriteTaskParameter(CmsDbContext dbc, int parid, String parvalue) 972 throws CmsDataAccessException { 973 974 PreparedStatement stmt = null; 975 Connection conn = null; 976 try { 977 conn = m_sqlManager.getConnection(dbc); 978 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASKPAR_UPDATE"); 979 stmt.setString(1, parvalue); 980 stmt.setInt(2, parid); 981 stmt.executeUpdate(); 982 } catch (SQLException e) { 983 throw new CmsDbSqlException(Messages.get().container( 984 Messages.ERR_GENERIC_SQL_1, 985 CmsDbSqlException.getErrorQuery(stmt)), e); 986 } finally { 987 m_sqlManager.closeAll(dbc, conn, stmt, null); 988 } 989 } 990 991 1002 protected int internalWriteTaskParameter(CmsDbContext dbc, int taskId, String parname, String parvalue) 1003 throws CmsDataAccessException { 1004 1005 PreparedStatement stmt = null; 1006 Connection conn = null; 1007 int newId = CmsDbUtil.UNKNOWN_ID; 1008 try { 1009 conn = m_sqlManager.getConnection(dbc); 1010 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASKPAR_INSERT"); 1011 newId = m_sqlManager.nextId(TABLE_TASKPAR); 1012 stmt.setInt(1, newId); 1013 stmt.setInt(2, taskId); 1014 stmt.setString(3, m_sqlManager.validateEmpty(parname)); 1015 stmt.setString(4, m_sqlManager.validateEmpty(parvalue)); 1016 stmt.executeUpdate(); 1017 } catch (SQLException e) { 1018 throw new CmsDbSqlException(Messages.get().container( 1019 Messages.ERR_GENERIC_SQL_1, 1020 CmsDbSqlException.getErrorQuery(stmt)), e); 1021 } finally { 1022 m_sqlManager.closeAll(dbc, conn, stmt, null); 1024 } 1025 return newId; 1026 } 1027 1028 1043 protected void internalWriteTaskType( 1044 CmsDbContext dbc, 1045 int taskId, 1046 int autofinish, 1047 int escalationtyperef, 1048 String htmllink, 1049 String name, 1050 String permission, 1051 int priorityref, 1052 int roleref) throws CmsDataAccessException { 1053 1054 PreparedStatement stmt = null; 1055 Connection conn = null; 1056 try { 1057 conn = m_sqlManager.getConnection(dbc); 1058 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASKTYPE_UPDATE"); 1059 stmt.setInt(1, autofinish); 1060 stmt.setInt(2, escalationtyperef); 1061 stmt.setString(3, htmllink); 1062 stmt.setString(4, name); 1063 stmt.setString(5, permission); 1064 stmt.setInt(6, priorityref); 1065 stmt.setInt(7, roleref); 1066 stmt.setInt(8, taskId); 1067 stmt.executeUpdate(); 1068 } catch (SQLException e) { 1069 throw new CmsDbSqlException(Messages.get().container( 1070 Messages.ERR_GENERIC_SQL_1, 1071 CmsDbSqlException.getErrorQuery(stmt)), e); 1072 } finally { 1073 m_sqlManager.closeAll(dbc, conn, stmt, null); 1074 } 1075 } 1076 1077 1092 protected int internalWriteTaskType( 1093 CmsDbContext dbc, 1094 int autofinish, 1095 int escalationtyperef, 1096 String htmllink, 1097 String name, 1098 String permission, 1099 int priorityref, 1100 int roleref) throws CmsDataAccessException { 1101 1102 PreparedStatement stmt = null; 1103 Connection conn = null; 1104 1105 int newId = CmsDbUtil.UNKNOWN_ID; 1106 1107 try { 1108 conn = m_sqlManager.getConnection(dbc); 1109 stmt = m_sqlManager.getPreparedStatement(conn, "C_TASKTYPE_INSERT"); 1110 newId = m_sqlManager.nextId(TABLE_TASKPAR); 1111 stmt.setInt(1, autofinish); 1112 stmt.setInt(2, escalationtyperef); 1113 stmt.setString(3, htmllink); 1114 stmt.setInt(4, newId); 1115 stmt.setString(5, name); 1116 stmt.setString(6, permission); 1117 stmt.setInt(7, priorityref); 1118 stmt.setInt(8, roleref); 1119 stmt.executeUpdate(); 1120 } catch (SQLException e) { 1121 throw new CmsDbSqlException(Messages.get().container( 1122 Messages.ERR_GENERIC_SQL_1, 1123 CmsDbSqlException.getErrorQuery(stmt)), e); 1124 } finally { 1125 m_sqlManager.closeAll(dbc, conn, stmt, null); 1127 } 1128 return newId; 1129 } 1130} | Popular Tags |