0001: /*
0002: * JFolder, Copyright 2001-2006 Gary Steinmetz
0003: *
0004: * Distributable under LGPL license.
0005: * See terms of license at gnu.org.
0006: */
0007:
0008: package org.jfolder.services.workflow;
0009:
0010: //base classes
0011: import java.io.File;
0012: import java.io.IOException;
0013: import java.math.BigDecimal;
0014: import java.sql.Connection;
0015: import java.sql.PreparedStatement;
0016: import java.sql.SQLException;
0017: import java.util.Collection;
0018: import java.util.HashMap;
0019: import java.util.Iterator;
0020: import java.util.Properties;
0021: import javax.xml.parsers.ParserConfigurationException;
0022: import org.w3c.dom.Document;
0023: import org.w3c.dom.Element;
0024: import org.w3c.dom.Node;
0025: import org.w3c.dom.NodeList;
0026: import org.xml.sax.SAXException;
0027:
0028: //project specific classes
0029: import org.jfolder.common.UnexpectedSystemException;
0030: import org.jfolder.common.tagging.ConceptTagCharacteristic;
0031: import org.jfolder.common.tagging.ConceptTagCharacteristicHolder;
0032: import org.jfolder.common.tagging.ConceptTagMenuBranch;
0033: import org.jfolder.common.tagging.ConceptTagMenuContext;
0034: import org.jfolder.common.tagging.ConceptTagPreferences;
0035: import org.jfolder.common.tagging.ConceptTagSetContext;
0036: import org.jfolder.common.tagging.ConceptTagSetHolder;
0037: import org.jfolder.common.tagging.RootConceptTagHolder;
0038: import org.jfolder.common.utils.misc.MiscHelper;
0039: import org.jfolder.common.utils.xml.LinearXPath;
0040: import org.jfolder.common.utils.xml.LinearXPathHelper;
0041: import org.jfolder.common.utils.xml.XMLHelper;
0042: import org.jfolder.config.instance.ConfigInstance;
0043: import org.jfolder.config.instance.ConfigInstanceConfig;
0044: import org.jfolder.config.instance.ConfigInstanceTagHelper;
0045: import org.jfolder.security.audit.SecurityAudit;
0046: import org.jfolder.security.audit.SecurityAuditQuery;
0047: import org.jfolder.security.audit.SecurityAuditSet;
0048: import org.jfolder.security.model.UserHolder;
0049: import org.jfolder.services.base.AbstractBaseServiceBean;
0050: import org.jfolder.workflow.model.dms.WorkflowDocumentSetUpdates;
0051: import org.jfolder.workflow.model.instance.WorkflowInstance;
0052: import org.jfolder.workflow.model.instance.WorkflowInstanceUpdates;
0053: import org.jfolder.workflow.model.trigger.WorkflowTrigger;
0054: import org.jfolder.workflow.query.ResultSetContainer;
0055: import org.jfolder.workflow.query.StatementContainer;
0056:
0057: //other classes
0058:
0059: public class WorkflowServiceBean extends AbstractBaseServiceBean
0060: implements WorkflowService {
0061:
0062: protected WorkflowServiceBean() {
0063: }
0064:
0065: //public GenericHSQLWorkflowLifecycleBean() {
0066: //}
0067:
0068: //protected BaseDBQueryVendorProprietarySyntax
0069: // getBaseDBQueryVendorProprietarySyntax() {
0070: //
0071: // return new HSQLQueryVendorProprietarySyntax();
0072: //}
0073:
0074: public String updateWorkflowInstance(WorkflowInstanceUpdates inWiu) {
0075:
0076: throw UnexpectedSystemException.notImplemented();
0077: //Connection con = null;
0078: //
0079: //try {
0080: // String outValue = null;
0081: //
0082: // con = getDatabaseConnection();
0083: //
0084: // boolean notNew = (inWiu.getId() != null);
0085: //
0086: // BigDecimal workflowInstanceId = null;
0087: // if (!notNew) {
0088: // workflowInstanceId = getNextIndex(con);
0089: // }
0090: // else {
0091: // workflowInstanceId = new BigDecimal(inWiu.getId());
0092: // }
0093: //
0094: // //
0095: // //SECURITY AUDIT
0096: // //
0097: // SecurityAudit sa = inWiu.getSecurityAudit();
0098: // BigDecimal saId = processSecurityAudit(sa, con);
0099: // MiscHelper.println("saId = " + saId);
0100: //
0101: // //
0102: // //DOCUMENT GROUP SET
0103: // //
0104: // WorkflowDocumentSetUpdates wdsu =
0105: // inWiu.getWorkflowDocumentSetUpdates();
0106: // BigDecimal wdsuId = processDocumentSet(
0107: // notNew, wdsu, workflowInstanceId, con);
0108: //
0109: // //
0110: // //TRIGGER
0111: // //
0112: // WorkflowTriggerUpdates wtu = inWiu.getWorkflowTriggerUpdates();
0113: // BigDecimal wtuId = processTrigger(
0114: // notNew, wtu, workflowInstanceId, con);
0115: //
0116: // //
0117: //
0118: // //
0119: // //INSTANCE
0120: // //
0121: // processWorkflowInstance(notNew, workflowInstanceId, con);
0122: //
0123: // //UserHolder user = sa.getAuditUser();
0124: // //MiscHelper.println("user.getName() = " + user.getName() );
0125: // //MiscHelper.println("user.getSc() = " + user.getSecurityClass());
0126: // //MiscHelper.println("sa.getId() = " + sa.getAuditId());
0127: // //MiscHelper.println("sa.getComment() = " + sa.getAuditComment());
0128: // //MiscHelper.println("sa.getStatus() = " + sa.getAuditStatus());
0129: // //MiscHelper.println("sa.getTime() = " + sa.getAuditTimestamp());
0130: // //if (sa.isAuditExceptionPresent()) {
0131: // // MiscHelper.println("sa.getAuditExceptionMessage() = "
0132: // // + sa.getAuditExceptionMessage());
0133: // // MiscHelper.println("sa.getAuditExceptionSource() = "
0134: // // + sa.getAuditExceptionSource());
0135: // //}
0136: // //
0137: // //for (int i = 0; i < wtu.getPropertyUpdateCount(); i++) {
0138: // // MiscHelper.println("propCommand = "
0139: // // + wtu.getPropertyCommand(i));
0140: // // MiscHelper.println("propName = " + wtu.getPropertyName(i));
0141: // // MiscHelper.println("propValu = " + wtu.getPropertyValue(i));
0142: // //}
0143: // //
0144: //
0145: //
0146: //
0147: // outValue = workflowInstanceId.toString();
0148: //
0149: // return outValue;
0150: //}
0151: ////catch (SQLException sqle) {
0152: //// throw new UnexpectedSystemException(sqle);
0153: ////}
0154: //finally {
0155: // closeDbResources(con, null, null);
0156: //}
0157: }
0158:
0159: //private BigDecimal processDocumentSet(boolean inNotNew,
0160: // WorkflowDocumentSetUpdates inWdsu, BigDecimal inWorkflowInstanceId,
0161: // Connection inCon) {
0162: //
0163: // PreparedStatement ps = null;
0164: //
0165: // try {
0166: //
0167: // BigDecimal outValue = null;
0168: //
0169: // if (!inNotNew) {
0170: //
0171: // outValue = getNextIndex(inCon);
0172: //
0173: // ps = inCon.prepareStatement(
0174: // "insert into T_JF_DOCUMENT_SETS"
0175: // + " (id_pk, workflow_id_fk)"
0176: // + " values (?, ?)");
0177: // ps.setBigDecimal(1, outValue);
0178: // ps.setBigDecimal(2, inWorkflowInstanceId);
0179: // }
0180: // else {
0181: // //ps = inCon.prepareStatement(
0182: // // "update T_JF_DOCUMENT_SETS"
0183: // // + " set workflow_template_id_fk = ?,"
0184: // // + " document_set_id_fk = ?,"
0185: // // + " trigger_data_id_fk = ?"
0186: // // + " where id_pk = ?");
0187: // //ps.setBigDecimal(1, new BigDecimal(1));
0188: // //ps.setBigDecimal(2, new BigDecimal(1));
0189: // //ps.setBigDecimal(3, new BigDecimal(1));
0190: // //ps.setBigDecimal(4, inWorkflowInstanceId);
0191: //
0192: // //do nothing
0193: // }
0194: //
0195: // if (ps != null) {
0196: // int updateCount = ps.executeUpdate();
0197: //
0198: // if (updateCount < 1) {
0199: // throw new UnexpectedSystemException("Old Copy");
0200: // }
0201: // else if (updateCount > 1) {
0202: // throw new UnexpectedSystemException("Inconsistent State");
0203: // }
0204: // else {
0205: // }
0206: // }
0207: //
0208: // return outValue;
0209: // }
0210: // catch (SQLException sqle) {
0211: // throw new UnexpectedSystemException(sqle);
0212: // }
0213: // finally {
0214: // closeDbResources(null, ps, null);
0215: // }
0216: //}
0217:
0218: //private BigDecimal processTrigger(boolean inNotNew,
0219: // WorkflowTriggerUpdates inWdsu, BigDecimal inWorkflowInstanceId,
0220: // Connection inConnection) {
0221: //
0222: // BigDecimal outValue = null;
0223: //
0224: // return outValue;
0225: //}
0226:
0227: //private void processWorkflowInstance(boolean inNotNew,
0228: // BigDecimal inWorkflowInstanceId, Connection inCon) {
0229: //
0230: // PreparedStatement ps = null;
0231: //
0232: // try {
0233: // if (!inNotNew) {
0234: // ps = inCon.prepareStatement(
0235: // "insert into T_JF_WORKFLOW_INSTANCES"
0236: // + " (id_pk, workflow_template_id_fk, document_set_id_fk,"
0237: // + " trigger_data_id_fk)"
0238: // + " values (?, ?, ?, ?)");
0239: // ps.setBigDecimal(1, inWorkflowInstanceId);
0240: // ps.setBigDecimal(2, new BigDecimal(1));
0241: // ps.setBigDecimal(3, new BigDecimal(1));
0242: // ps.setBigDecimal(4, new BigDecimal(1));
0243: // }
0244: // else {
0245: // ps = inCon.prepareStatement(
0246: // "update T_JF_WORKFLOW_INSTANCES"
0247: // + " set workflow_template_id_fk = ?,"
0248: // + " document_set_id_fk = ?,"
0249: // + " trigger_data_id_fk = ?"
0250: // + " where id_pk = ?");
0251: // ps.setBigDecimal(1, new BigDecimal(1));
0252: // ps.setBigDecimal(2, new BigDecimal(1));
0253: // ps.setBigDecimal(3, new BigDecimal(1));
0254: // ps.setBigDecimal(4, inWorkflowInstanceId);
0255: // }
0256: //
0257: // int updateCount = ps.executeUpdate();
0258: //
0259: // if (updateCount < 1) {
0260: // throw new UnexpectedSystemException("Old Copy");
0261: // }
0262: // else if (updateCount > 1) {
0263: // throw new UnexpectedSystemException("Inconsistent State");
0264: // }
0265: // else {
0266: // }
0267: // }
0268: // catch (SQLException sqle) {
0269: // throw new UnexpectedSystemException(sqle);
0270: // }
0271: // finally {
0272: // closeDbResources(null, ps, null);
0273: // }
0274: //}
0275:
0276: //private BigDecimal processSecurityAudit(SecurityAudit inSa,
0277: // Connection inCon) {
0278: //
0279: // PreparedStatement ps = null;
0280: //
0281: // try {
0282: //
0283: // BigDecimal outValue = null;
0284: //
0285: // outValue = getNextIndex(inCon);
0286: // UserHolder uh = inSa.getAuditUser();
0287: //
0288: // ps = inCon.prepareStatement("insert into T_JF_SECURITY_AUDITS "
0289: // + "(id_pk, audit_version, audit_user_name, "
0290: // + "audit_user_security_class, audit_id, audit_status, "
0291: // + "audit_comment, audit_timestamp, "
0292: // + "audit_exception_message, audit_exception_source) "
0293: // + "values (?,?,?,?,?,?,?,?,?,?)");
0294: // ps.setBigDecimal(1, outValue);
0295: // //TO DO: change below
0296: // ps.setInt(2, 1);
0297: // ps.setString(3, uh.getName());
0298: // ps.setString(4, uh.getSecurityClass());
0299: // ps.setInt(5, inSa.getAuditId());
0300: // ps.setString(6, inSa.getAuditStatus());
0301: // ps.setString(7, inSa.getAuditComment());
0302: // ps.setLong(8, inSa.getAuditTimestamp());
0303: // ps.setString(9, inSa.getAuditExceptionMessage());
0304: // ps.setString(10, inSa.getAuditExceptionSource());
0305: // int updateCount = ps.executeUpdate();
0306: // //MiscHelper.println("update Count = " + updateCount);
0307: // //con.commit();
0308: //
0309: // //MiscHelper.println("autoCommit = " + con.getAutoCommit());
0310: //
0311: // return outValue;
0312: // }
0313: // catch (SQLException sqle) {
0314: // throw new UnexpectedSystemException(sqle);
0315: // }
0316: // finally {
0317: // closeDbResources(null, ps, null);
0318: // }
0319: //}
0320:
0321: //private final static void closeDbResources(Connection inCon,
0322: // Statement inStatement, ResultSet inRs) {
0323: //
0324: // StringBuffer sb = new StringBuffer();
0325: //
0326: // try {
0327: // if (inRs != null) {
0328: // inRs.close();
0329: // }
0330: // }
0331: // catch (SQLException sqle) {
0332: // sb.append("|" + sqle.getMessage() + "|");
0333: // }
0334: //
0335: // try {
0336: // if (inStatement != null) {
0337: // inStatement.close();
0338: // }
0339: // }
0340: // catch (SQLException sqle) {
0341: // sb.append("|" + sqle.getMessage() + "|");
0342: // }
0343: //
0344: // try {
0345: // if (inCon != null) {
0346: // inCon.close();
0347: // }
0348: // }
0349: // catch (SQLException sqle) {
0350: // sb.append("|" + sqle.getMessage() + "|");
0351: // }
0352: //
0353: // if (sb.length() > 0) {
0354: // throw new UnexpectedSystemException(sb.toString());
0355: // }
0356: //}
0357:
0358: public WorkflowInstance retrieveWorkflowInstance(String inId) {
0359: throw UnexpectedSystemException.notImplemented();
0360: }
0361:
0362: public String submitTriggerData(String inHandle,
0363: WorkflowTrigger inTd) {
0364:
0365: throw UnexpectedSystemException.notImplemented();
0366:
0367: //Connection con = null;
0368: //PreparedStatement ps = null;
0369: //
0370: //try {
0371: //
0372: // String outValue = inHandle;
0373: //
0374: // con = getDatabaseConnection();
0375: // if (outValue == null) {
0376: // outValue = getNextIndex(con).toString();
0377: // }
0378: //
0379: // ps = con.prepareStatement("insert into " + T_TRIGGERS + " (" + ID
0380: // + ", " + WORKFLOW_ID + ", " + HANDLE + ", " + CONTENT + ", "
0381: // + AUDIT_ID + ", " + AUDIT_USER_ID + ", " + AUDIT_TIMESTAMP
0382: // + ", " + AUDIT_STATUS + ", " + AUDIT_COMMENT + ", "
0383: // + AUDIT_EXCEPTION_MESSAGE + ", " + AUDIT_EXCEPTION_SOURCE
0384: // + ") values (null,?,?,?,?,?,?,?,?,?,?)");
0385: // //ps.setString(1, inTd.getWorkflowId());//TO DO: correct
0386: // ps.setString(2, outValue);
0387: // ps.setString(3, inTd.getDataAsString());
0388: //
0389: // //ps.setInt(4, inTd.getAuditId());
0390: // //ps.setInt(5, getFileIdOfUser(inTd.getAuditUser()));
0391: // //ps.setLong(6, inTd.getAuditTimestamp());
0392: // //ps.setString(7, inTd.getAuditStatus());
0393: // //ps.setString(8, inTd.getAuditComment());
0394: // //ps.setString(9, inTd.getAuditExceptionMessage());
0395: // //ps.setString(10, inTd.getAuditExceptionSource());
0396: // ps.execute();
0397: //
0398: // putTextMessageOnQueue(outValue, null, getTriggerQueue());
0399: //
0400: // return outValue;
0401: //}
0402: //catch (SQLException sqle) {
0403: // throw new UnexpectedSystemException(sqle);
0404: //}
0405: //finally {
0406: // try {
0407: // if (ps != null) {
0408: // ps.close();
0409: // }
0410: // if (con != null) {
0411: // con.close();
0412: // }
0413: // }
0414: // catch (SQLException sqle) {
0415: // throw new UnexpectedSystemException(sqle);
0416: // }
0417: //}
0418: }
0419:
0420: public void updateTriggerDataStatus(String inHandle,
0421: WorkflowTrigger inTd) {
0422:
0423: throw UnexpectedSystemException.notImplemented();
0424: //Connection con = null;
0425: //PreparedStatement ps = null;
0426: //try {
0427: // con = getDatabaseConnection();
0428: //
0429: // String update = "update " + T_TRIGGERS;
0430: // String set = " set " + WORKFLOW_ID + " = ?, "
0431: // + AUDIT_STATUS + " = ?,"
0432: // + AUDIT_EXCEPTION_MESSAGE + " = ?,"
0433: // + AUDIT_EXCEPTION_SOURCE + " = ?";
0434: // String where = " where " + HANDLE + " = ? and "
0435: // + AUDIT_ID + " = ?";
0436: // String query = update + set + where;
0437: // ps = con.prepareStatement(query);
0438: // //
0439: // //ps.setString(1, inTd.getWorkflowId());//TO DO: correct
0440: // //ps.setString(2, inTd.getAuditStatus());
0441: // //ps.setString(3, inTd.getAuditExceptionMessage());
0442: // //ps.setString(4, inTd.getAuditExceptionSource());
0443: // //
0444: // ps.setString(5, inHandle);
0445: // //ps.setInt(6, inTd.getAuditId());
0446: // //
0447: // ps.execute();
0448: //}
0449: //catch (SQLException sqle) {
0450: // throw new UnexpectedSystemException(sqle);
0451: //}
0452: //finally {
0453: // try {
0454: // if (ps != null) {
0455: // ps.close();
0456: // }
0457: // if (con != null) {
0458: // con.close();
0459: // }
0460: // }
0461: // catch (SQLException sqle) {
0462: // throw new UnexpectedSystemException(sqle);
0463: // }
0464: //}
0465: }
0466:
0467: public WorkflowTrigger retrieveTriggerData(String inHandle) {
0468:
0469: throw UnexpectedSystemException.notImplemented();
0470: //Connection con = null;
0471: //PreparedStatement ps = null;
0472: //ResultSet rs = null;
0473: //
0474: //try {
0475: // WorkflowTrigger outValue = null;
0476: //
0477: // con = getDatabaseConnection();
0478: //
0479: // String select = ("select " + WORKFLOW_ID + ", " + CONTENT + ", "
0480: // + AUDIT_ID + ", " + AUDIT_TIMESTAMP + ", "
0481: // + AUDIT_STATUS + ", "
0482: // + AUDIT_COMMENT + ", " + AUDIT_EXCEPTION_MESSAGE + ", "
0483: // + AUDIT_EXCEPTION_SOURCE + ", " + USER_NAME + ", "
0484: // + SECURITY_CLASS);
0485: // String from = (" from " + T_TRIGGERS + ", " + T_USERS);
0486: // String where = (" where " + (T_TRIGGERS + "." + HANDLE)
0487: // + " = ? and " + (T_TRIGGERS + "." + AUDIT_USER_ID) + " = "
0488: // + (T_USERS + "." + ID));
0489: // String orderBy = (" order by " + AUDIT_ID + " desc");
0490: //
0491: // String query = select + from + where + orderBy;
0492: // //MiscHelper.println("hsql.retrieveTriggerData.query - " + query);
0493: //
0494: // ps = con.prepareStatement(query);
0495: // ps.setString(1, inHandle);
0496: // rs = ps.executeQuery();
0497: //
0498: // if (rs.next()) {
0499: // String workflowId = rs.getString(1);
0500: // String content = rs.getString(2);
0501: // int auditId = rs.getInt(3);
0502: // long auditTimestamp = rs.getLong(4);
0503: // String auditStatus = rs.getString(5);
0504: // String auditComment = rs.getString(6);
0505: // String auditExceptionMessage = rs.getString(7);
0506: // String auditExceptionSource = rs.getString(8);
0507: // String auditUserName = rs.getString(9);
0508: // String auditSecurityClass = rs.getString(10);
0509: //
0510: // UserHolderContext uhc =
0511: // SecurityLifecycleHelper.getUserHolderContext(
0512: // auditUserName, auditSecurityClass);
0513: //
0514: // SecurityLifecycle sl =
0515: // SecurityLifecycleHelper.getSecurityLifecycle();
0516: //
0517: // UserHolder uh = sl.getUser(uhc);
0518: //
0519: // SecurityAudit wa = SecurityAudit.newInstance(
0520: // uh, auditId, auditComment, auditStatus, auditTimestamp);
0521: //
0522: // //TO DO: change below
0523: // if (auditExceptionMessage != null
0524: // || auditExceptionSource != null) {
0525: // wa.setAuditException(auditExceptionMessage,
0526: // auditExceptionSource);
0527: // }
0528: //
0529: // outValue = WorkflowTrigger.newInstance();
0530: // }
0531: // else {
0532: // throw new UnexpectedSystemException(
0533: // "No trigger for handle - '" + inHandle + "'");
0534: // }
0535: //
0536: // return outValue;
0537: //}
0538: //catch (SQLException sqle) {
0539: // throw new UnexpectedSystemException(sqle);
0540: //}
0541: //finally {
0542: // try {
0543: // if (rs != null) {
0544: // rs.close();
0545: // }
0546: // if (ps != null) {
0547: // ps.close();
0548: // }
0549: // if (con != null) {
0550: // con.close();
0551: // }
0552: // }
0553: // catch (SQLException sqle) {
0554: // throw new UnexpectedSystemException(sqle);
0555: // }
0556: //}
0557: }
0558:
0559: //public ProjectScript[] accessDeployedScripts() {
0560: //
0561: // ProjectScript outValue[] = null;
0562: //
0563: // outValue = new ProjectScript[0];
0564: // MiscHelper.println("getDeployedScripts not implemented");
0565: //
0566: // return outValue;
0567: //
0568: // //throw UnexpectedSystemException.notImplemented();
0569: // //MiscHelper.println("<!-- GenHSQLWfLcBean getDeploydScripts DB -->");
0570: // //WorkflowStore ws = WorkflowStoreFactory.getWorkflowStore();
0571: // //WorkflowDatabase wd = WorkflowDatabase.newInstance();
0572: // //Connection sampleConn = ws.getConnection();
0573: // //try {
0574: // // wd.dropAllEntities(sampleConn, ws);
0575: // // wd.createAllEntities(sampleConn, ws);
0576: // //}
0577: // //catch (Exception e) {
0578: // // MiscHelper.println(e.getMessage());
0579: // // e.printStackTrace();
0580: // //}
0581: // //finally {
0582: // // ws.closeSQLObjects(sampleConn, null, null);
0583: // //}
0584: // //MiscHelper.println("<!--------------------------------------->");
0585: // //
0586: // //Connection con = null;
0587: // //PreparedStatement ps = null;
0588: // //ResultSet rs = null;
0589: // //
0590: // //try {
0591: // // ProjectScript outValue[] = null;
0592: // //
0593: // // ConfigServiceCaller csc =
0594: // // ConfigServiceCallerFactory.getConfigServiceCaller();
0595: // // //ConfigLifecycle cm =
0596: // // //ConfigLifecycleFactory.getConfigLifecycle();
0597: // //
0598: // // File scriptsDir = getScriptsDir();
0599: // //
0600: // // con = getDatabaseConnection();
0601: // //
0602: // // ps = con.prepareStatement("select " + SCRIPT_NAME + " from "
0603: // // + T_DEPLOYED_SCRIPTS + " order by " + ID);
0604: // // rs = ps.executeQuery();
0605: // // ArrayList scriptList = new ArrayList();
0606: // // while (rs.next()) {
0607: // // String nextScript = rs.getString(1);
0608: // // File nextScriptFile = new File(
0609: // // scriptsDir, nextScript + ".xml");
0610: // // if (nextScriptFile.exists()) {
0611: // // scriptList.add(nextScriptFile);
0612: // // }
0613: // // }
0614: // //
0615: // // outValue = new ProjectScript[scriptList.size()];
0616: // // for (int i = 0; i < scriptList.size(); i++) {
0617: // // File nextFile = (File)scriptList.get(i);
0618: // // String nextName =
0619: // // MiscHelper.removeFileExtension(nextFile.getName());
0620: // // outValue[i] = new GenericFileProjectScript(
0621: // // nextFile, nextName);
0622: // // }
0623: // //
0624: // // //cm.close();
0625: // //
0626: // // return outValue;
0627: // //}
0628: // //catch (SQLException sqle) {
0629: // // throw new UnexpectedSystemException(sqle);
0630: // //}
0631: // //finally {
0632: // // try {
0633: // // if (rs != null) {
0634: // // rs.close();
0635: // // }
0636: // // if (ps != null) {
0637: // // ps.close();
0638: // // }
0639: // // if (con != null) {
0640: // // con.close();
0641: // // }
0642: // // }
0643: // // catch (SQLException sqle) {
0644: // // throw new UnexpectedSystemException(sqle);
0645: // // }
0646: // //}
0647: // //
0648: //}
0649:
0650: //public void setDeployedScripts(ProjectScript inWs[]) {
0651: //
0652: // throw UnexpectedSystemException.notImplemented();
0653: // //Connection con = null;
0654: // //PreparedStatement ps = null;
0655: // //PreparedStatement ps2 = null;
0656: // //
0657: // //try {
0658: // // ConfigServiceCaller csc =
0659: // // ConfigServiceCallerFactory.getConfigServiceCaller();
0660: // // //ConfigLifecycle cm =
0661: // // ConfigLifecycleFactory.getConfigLifecycle();
0662: // //
0663: // // //delete existing deployed files
0664: // // File scriptsDir = getScriptsDir();
0665: // // File deployedScripts[] = scriptsDir.listFiles();
0666: // // for (int i = 0; i < deployedScripts.length; i++) {
0667: // // if (deployedScripts[i].isFile()
0668: // // && deployedScripts[i].getName().endsWith(".xml")) {
0669: // // deployedScripts[i].delete();
0670: // // }
0671: // // }
0672: // // con = getDatabaseConnection();
0673: // // ps = con.prepareStatement("delete from " + T_DEPLOYED_SCRIPTS);
0674: // // ps.execute();
0675: // //
0676: // // //create new deployed files
0677: // // for (int i = 0; i < inWs.length; i++) {
0678: // //
0679: // // ProjectScript nextScript = inWs[i];
0680: // //
0681: // // File nextScriptFile = new File(scriptsDir,
0682: // // nextScript.getName() + ".xml");
0683: // //
0684: // // MiscHelper.writeTextFile(nextScriptFile,
0685: // // nextScript.getContent());
0686: // //
0687: // // ps2 = con.prepareStatement("insert into " + T_DEPLOYED_SCRIPTS
0688: // // + " (" + ID + ", " + SCRIPT_NAME + ") values (null,?)");
0689: // // ps2.setString(1, nextScript.getName());
0690: // // ps2.execute();
0691: // // //TO DO: fix below, use array
0692: // // ps2.close();
0693: // // ps2 = null;
0694: // // }
0695: // //
0696: // // //cm.close();
0697: // //}
0698: // //catch (SQLException sqle) {
0699: // // throw new UnexpectedSystemException(sqle);
0700: // //}
0701: // //finally {
0702: // // try {
0703: // // if (ps != null) {
0704: // // ps.close();
0705: // // }
0706: // // if (ps2 != null) {
0707: // // ps2.close();
0708: // // }
0709: // // if (con != null) {
0710: // // con.close();
0711: // // }
0712: // // }
0713: // // catch (SQLException sqle) {
0714: // // throw new UnexpectedSystemException(sqle);
0715: // // }
0716: // //}
0717: //}
0718:
0719: //protected int getFileIdOfUser(UserHolder inUh) {
0720: //
0721: // Connection con = null;
0722: // PreparedStatement ps = null;
0723: // ResultSet rs = null;
0724: // PreparedStatement ps2 = null;
0725: // //ResultSet rs2 = null;
0726: // PreparedStatement ps3 = null;
0727: // ResultSet rs3 = null;
0728: //
0729: // try {
0730: // int outValue = 0;
0731: //
0732: // String name = inUh.getName();
0733: // String securityClass = inUh.getSecurityClass();
0734: //
0735: // //check if id is already present
0736: // con = getDatabaseConnection();
0737: // ps = con.prepareStatement(
0738: // "select " + ID + " from " + T_USERS + " where "
0739: // + USER_NAME + " = ? and " + SECURITY_CLASS + " = ?");
0740: // ps.setString(1, name);
0741: // ps.setString(2, securityClass);
0742: // rs = ps.executeQuery();
0743: //
0744: // //get id
0745: // if (rs.next()) {
0746: // outValue = rs.getInt(1);
0747: // }
0748: // else {
0749: // //insert user into
0750: // ps2 = con.prepareStatement("insert into " + T_USERS
0751: // + " (" + ID + ", " + USER_NAME + ", " + SECURITY_CLASS
0752: // + ") values (null,?,?)");
0753: // ps2.setString(1, name);
0754: // ps2.setString(2, securityClass);
0755: // ps2.execute();
0756: //
0757: // //get user id
0758: // ps3 = con.prepareStatement("CALL IDENTITY()");
0759: // rs3 = ps3.executeQuery();
0760: // //rs3 = ps2.executeQuery("CALL IDENTITY()");
0761: // while (rs3.next()) {
0762: // outValue = rs3.getInt(1);
0763: // }
0764: // }
0765: //
0766: // return outValue;
0767: // }
0768: // catch (SQLException sqle) {
0769: // throw new UnexpectedSystemException(sqle);
0770: // }
0771: // finally {
0772: // try {
0773: // if (rs != null) {
0774: // rs.close();
0775: // }
0776: // if (ps != null) {
0777: // ps.close();
0778: // }
0779: // //if (rs2 != null) {
0780: // // rs.close();
0781: // //}
0782: // if (ps2 != null) {
0783: // ps.close();
0784: // }
0785: // if (rs3 != null) {
0786: // rs.close();
0787: // }
0788: // if (ps3 != null) {
0789: // ps.close();
0790: // }
0791: // if (con != null) {
0792: // con.close();
0793: // }
0794: // }
0795: // catch (SQLException sqle) {
0796: // throw new UnexpectedSystemException(sqle);
0797: // }
0798: // }
0799: //}
0800:
0801: //public WorkflowInstance retrieveWorkflowInstance(String inId) {
0802: //
0803: // Connection con = null;
0804: // PreparedStatement ps = null;
0805: // ResultSet rs = null;
0806: //
0807: // try {
0808: // WorkflowInstance outValue = null;
0809: //
0810: // con = getDatabaseConnection();
0811: //
0812: // ps = con.prepareStatement(
0813: // "select " + WF_INSTANCE + " from " + T_WORKFLOWS
0814: // + " where " + ID + " = ?");
0815: // ps.setString(1, inId);
0816: // ps.execute();
0817: //
0818: // rs = ps.getResultSet();
0819: // if (rs.next()) {
0820: //
0821: // String r = rs.getString(1);
0822: // StringBuffer sb = new StringBuffer(r);
0823: //
0824: // //MiscHelper.println("hsql.retrieveWi = " + sb);
0825: //
0826: // outValue = VersionHelper.fromXMLToWorkflowInstance(
0827: // sb.toString());
0828: // }
0829: // else {
0830: // throw new UnexpectedSystemException(
0831: // "No workflow-instance found with id '" + inId + "'.");
0832: // }
0833: //
0834: // return outValue;
0835: // }
0836: // catch (SQLException sqle) {
0837: // throw new UnexpectedSystemException(sqle);
0838: // }
0839: // finally {
0840: // try {
0841: // if (rs != null) {
0842: // rs.close();
0843: // }
0844: // if (ps != null) {
0845: // ps.close();
0846: // }
0847: // if (con != null) {
0848: // con.close();
0849: // }
0850: // }
0851: // catch (SQLException sqle) {
0852: // throw new UnexpectedSystemException(sqle);
0853: // }
0854: // }
0855: //}
0856:
0857: //protected BigDecimal getNextIndex(Connection inCon) {
0858: //
0859: // Statement st = null;
0860: //
0861: // try {
0862: //
0863: // BigDecimal outValue = null;
0864: //
0865: // st = inCon.createStatement();
0866: // int resultRow = st.executeUpdate(
0867: // "INSERT INTO seqTable(id) VALUES (NULL)");
0868: // ResultSet rset = st.executeQuery("SELECT MAX(id) FROM seqTable");
0869: // int rint = 0;
0870: // while (rset.next()) {
0871: // rint = rset.getInt(1);
0872: // }
0873: // outValue = new BigDecimal((double)rint);
0874: // st.close();
0875: //
0876: // return outValue;
0877: // }
0878: // catch (SQLException sqle) {
0879: // throw new UnexpectedSystemException(sqle);
0880: // }
0881: // finally {
0882: // try {
0883: // if (st != null) {
0884: // st.close();
0885: // }
0886: // }
0887: // catch (SQLException sqle) {
0888: // throw new UnexpectedSystemException(sqle);
0889: // }
0890: // }
0891: //}
0892:
0893: //protected void updateWorkflowInstance(Connection inCon,
0894: // String inPfId, WorkflowInstance inWorkflow) {
0895: //
0896: // PreparedStatement ps = null;
0897: //
0898: // try {
0899: // BigInteger currentStateCode = inWorkflow.getStateCode();
0900: // BigInteger updatedStateCode =
0901: // currentStateCode.add(new BigInteger("1"));
0902: //
0903: // String workflowText = VersionHelper.fromWorkflowInstanceToXML(
0904: // inWorkflow, updatedStateCode);
0905: // //MiscHelper.println(
0906: // // "GenericHSQLWorkflowLifecycleBean - workflowTx");
0907: // //MiscHelper.println(workflowText);
0908: //
0909: // ps = inCon.prepareStatement(
0910: // "update " + T_WORKFLOWS + " set "
0911: // + WF_INSTANCE + " = ?, " + STATE_CODE + " = ? where "
0912: // + ID + " = ? and " + STATE_CODE + " = ?");
0913: //
0914: // ps.setString(1, new String(workflowText));
0915: // ps.setBigDecimal(2, new BigDecimal(updatedStateCode));
0916: // ps.setBigDecimal(3, new BigDecimal(inPfId));
0917: // ps.setBigDecimal(4, new BigDecimal(currentStateCode));
0918: //
0919: // ps.execute();
0920: // int updateCount = ps.getUpdateCount();
0921: //
0922: // if (updateCount != 1) {
0923: // throw new UnexpectedSystemException(
0924: // "Workflow-instance with id (" + inPfId
0925: // + ") has already been updated.");
0926: // }
0927: // }
0928: // catch (SQLException sqle) {
0929: // throw new UnexpectedSystemException(sqle);
0930: // }
0931: // catch (IOException ioe) {
0932: // throw new UnexpectedSystemException(ioe);
0933: // }
0934: // finally {
0935: // try {
0936: // if (ps != null) {
0937: // ps.close();
0938: // }
0939: // }
0940: // catch (SQLException sqle) {
0941: // throw new UnexpectedSystemException(sqle);
0942: // }
0943: // }
0944: //}
0945:
0946: //protected void insertWorkflowInstance(Connection inCon,
0947: // String inPfId, WorkflowInstance inWorkflow) {
0948: //
0949: // PreparedStatement ps = null;
0950: //
0951: // try {
0952: // //TO DO: update query variables
0953: //
0954: // //MiscHelper.println("inWorkflow = " + inWorkflow);
0955: // //MiscHelper.println("getStateCode = "
0956: // //+ inWorkflow.getStateCode());
0957: // //MiscHelper.println("xml = "
0958: // // + VersionHelper.fromWorkflowInstanceToXML(inWorkflow,
0959: // // inWorkflow.getStateCode()));
0960: // Document workflowDocument = XMLHelper.loadDocument(
0961: // VersionHelper.fromWorkflowInstanceToXML(inWorkflow,
0962: // inWorkflow.getStateCode()));
0963: // StringWriter sw = new StringWriter();
0964: //
0965: // XMLHelper.writeDocument(workflowDocument, sw);
0966: //
0967: // String workflowXml = sw.toString();
0968: //
0969: // StringReader sr = new StringReader(workflowXml);
0970: //
0971: // ps = inCon.prepareStatement(
0972: // "insert into " + T_WORKFLOWS
0973: // + " (" + ID + ", " + WF_INSTANCE + ", " + STATE_CODE
0974: // + ") values (?,?,?)");
0975: //
0976: // //MiscHelper.println("workflowXml.len() = "
0977: // //+ workflowXml.length());
0978: // ps.setString(1, inPfId);
0979: // //ps.setCharacterStream(2, sr, workflowXml.length());
0980: // ps.setString(2, workflowXml);
0981: // ps.setBigDecimal(3, new BigDecimal(inWorkflow.getStateCode()));
0982: // ps.execute();
0983: //
0984: // }
0985: // catch (SQLException sqle) {
0986: // throw new UnexpectedSystemException(sqle);
0987: // }
0988: // catch (ParserConfigurationException pce) {
0989: // throw new UnexpectedSystemException(pce);
0990: // }
0991: // catch (SAXException saxe) {
0992: // throw new UnexpectedSystemException(saxe);
0993: // }
0994: // catch (IOException ioe) {
0995: // throw new UnexpectedSystemException(ioe);
0996: // }
0997: // finally {
0998: // try {
0999: // if (ps != null) {
1000: // ps.close();
1001: // }
1002: // }
1003: // catch (SQLException sqle) {
1004: // throw new UnexpectedSystemException(sqle);
1005: // }
1006: // }
1007: //}
1008:
1009: //protected void insertWorkflowAttribute(Connection inCon,
1010: // String inPfId, String inAttrName, ValueAndClassForConceptTag inVac,
1011: // int inPubAttr, int inSysAttr) throws SQLException {
1012: //
1013: // //TO DO: check for attribute type, view, set flag for class type
1014: //
1015: // PreparedStatement ps = null;
1016: //
1017: // try {
1018: // final String INSERT_QUERY =
1019: // "insert into " + T_ATTRIBUTES + " ("
1020: // + ID + ", " + JF_ID + ", "
1021: // + ATTR_NAME + ", " + DECIMAL_VALUE + ", "
1022: // + BOOLEAN_VALUE + ", "
1023: // + STRING_VALUE + ", " + LONG_STRING_VALUE + ", "
1024: // + BaseDBQueryVendor.ATTR_TYPE + ", "
1025: // + BaseDBQueryVendor.ATTR_ACCESS + ", "
1026: // + BaseDBQueryVendor.ATTR_CLASS
1027: // + ") values (?,?,?,?,?,?,?,?,?,?)";
1028: // //+ ") values (pf_sequence.nextval,?,?,?,?,?,?,?,?,?)";
1029: // Object value = inVac.getValue();
1030: // Class valueClass = inVac.getValueClass();
1031: //
1032: // ps = inCon.prepareStatement(INSERT_QUERY);
1033: //
1034: // BigDecimal inId = getNextIndex(inCon);
1035: //
1036: // ps.setBigDecimal(1, inId);
1037: // ps.setString(2, inPfId);
1038: // ps.setString(3, inAttrName.toUpperCase());
1039: // ps.setInt(8, inSysAttr);
1040: // ps.setInt(9, inPubAttr);
1041: //
1042: // if (MiscHelper.isClassNumber(valueClass)) {
1043: // //set class
1044: // ps.setInt(10, BaseDBQueryVendor.DECIMAL);
1045: //
1046: // //TO DO: check for null
1047: // if (value != null) {
1048: // ps.setBigDecimal(4,
1049: // MiscHelper.fromNumberToBigDecimal(value));
1050: // }
1051: // else {
1052: // ps.setNull(4, Types.NUMERIC);
1053: // }
1054: // ps.setNull(5, Types.NUMERIC);
1055: // ps.setNull(6, Types.VARCHAR);
1056: // ps.setNull(7, Types.CLOB);
1057: // }
1058: // else if (value.getClass().getName().equals(
1059: // Boolean.class.getName())) {
1060: // //set class
1061: // ps.setInt(10, BaseDBQueryVendor.BOOLEAN);
1062: //
1063: // //TO DO: check for null
1064: // Boolean bValue = (Boolean)value;
1065: //
1066: // ps.setNull(4, Types.NUMERIC);
1067: // if (bValue == null) {
1068: // ps.setNull(5, Types.NUMERIC);
1069: // }
1070: // else if (bValue.booleanValue()) {
1071: // ps.setInt(5, 1);
1072: // }
1073: // else {
1074: // ps.setInt(5, 0);
1075: // }
1076: // ps.setNull(6, Types.VARCHAR);
1077: // ps.setNull(7, Types.CLOB);
1078: //
1079: // }
1080: // else {
1081: // //set class
1082: // ps.setInt(10, BaseDBQueryVendor.STRING);
1083: //
1084: // //TO DO: check for null
1085: // String sValue = null;
1086: // if (value != null) {
1087: // sValue = value.toString();
1088: // }
1089: //
1090: // ps.setNull(4, Types.NUMERIC);
1091: // ps.setNull(5, Types.NUMERIC);
1092: //
1093: // if (sValue == null) {
1094: // ps.setNull(6, Types.VARCHAR);
1095: // ps.setNull(7, Types.CLOB);
1096: // }
1097: // else if (sValue.length() <= 250) {
1098: // ps.setString(6, sValue);
1099: // ps.setNull(7, Types.CLOB);
1100: // }
1101: // else {
1102: // ps.setNull(6, Types.VARCHAR);
1103: // //ps.setCharacterStream(7, new StringReader(sValue),
1104: // // sValue.length());
1105: // ps.setString(7, new String(sValue));
1106: // }
1107: // }
1108: //
1109: // ps.execute();
1110: // }
1111: // finally {
1112: // try {
1113: // if (ps != null) {
1114: // ps.close();
1115: // }
1116: // }
1117: // catch (SQLException sqle) {
1118: // throw new UnexpectedSystemException(sqle);
1119: // }
1120: // }
1121: //}
1122:
1123: //protected void updateWorkflowAttribute(Connection inCon,
1124: // String inPfId, String inAttrName, ValueAndClassForConceptTag inVac,
1125: // int inSysAttr) throws SQLException {
1126: //
1127: // //TO DO: check for attribute type, view, set flag for class type
1128: //
1129: // PreparedStatement ps = null;
1130: // try {
1131: // final String UPDATE_BOOLEAN =
1132: // "update " + T_ATTRIBUTES + " set "
1133: // + BOOLEAN_VALUE + " = ? where "
1134: // + JF_ID + " = ? and "
1135: // + ATTR_NAME + " = ? and "
1136: // + BaseDBQueryVendor.ATTR_TYPE + " = ?";
1137: //
1138: // final String UPDATE_DECIMAL =
1139: // "update " + T_ATTRIBUTES + " set " + DECIMAL_VALUE
1140: // + " = ? where "
1141: // + JF_ID + " = ? and " + ATTR_NAME + " = ? and "
1142: // + ATTR_TYPE + " = ?";
1143: //
1144: // final String UPDATE_STRING =
1145: // "update " + T_ATTRIBUTES + " set " + STRING_VALUE + " = ?, "
1146: // + LONG_STRING_VALUE + " = ? where " + JF_ID + " = ? and "
1147: // + ATTR_NAME + " = ? and " + ATTR_TYPE + " = ?";
1148: //
1149: // Object value = inVac.getValue();
1150: // Class valueClass = inVac.getValueClass();
1151: // inAttrName = inAttrName.toUpperCase();
1152: //
1153: // if (MiscHelper.isClassNumber(valueClass)) {
1154: //
1155: // ps = inCon.prepareStatement(UPDATE_DECIMAL);
1156: //
1157: // if (value != null) {
1158: // ps.setBigDecimal(1,
1159: // MiscHelper.fromNumberToBigDecimal(value));
1160: // }
1161: // else {
1162: // ps.setNull(1, Types.NUMERIC);
1163: // }
1164: // ps.setString(2, inPfId);
1165: // ps.setString(3, inAttrName);
1166: // ps.setInt(4, inSysAttr);
1167: // }
1168: // else if (value.getClass().getName().equals(
1169: // Boolean.class.getName())) {
1170: //
1171: // ps = inCon.prepareStatement(UPDATE_BOOLEAN);
1172: //
1173: // Boolean bValue = (Boolean)value;
1174: //
1175: // if (bValue == null) {
1176: // ps.setNull(1, Types.NUMERIC);
1177: // }
1178: // else if (bValue.booleanValue()) {
1179: // ps.setInt(1, 1);
1180: // }
1181: // else {
1182: // ps.setInt(1, 0);
1183: // }
1184: // ps.setString(2, inPfId);
1185: // ps.setString(3, inAttrName);
1186: // ps.setInt(4, inSysAttr);
1187: // }
1188: // else {
1189: //
1190: // ps = inCon.prepareStatement(UPDATE_STRING);
1191: //
1192: // String sValue = null;
1193: // if (value != null) {
1194: // sValue = value.toString();
1195: // }
1196: //
1197: // if (sValue == null) {
1198: // ps.setNull(1, Types.VARCHAR);
1199: // //ps.setNull(2, Types.CLOB);
1200: // ps.setNull(2, Types.VARCHAR);
1201: // }
1202: // else if (sValue.length() <= 250) {
1203: // ps.setString(1, sValue);
1204: // //ps.setNull(2, Types.CLOB);
1205: // ps.setNull(2, Types.VARCHAR);
1206: // }
1207: // else {
1208: // ps.setNull(1, Types.VARCHAR);
1209: // //ps.setCharacterStream(2, new StringReader(sValue),
1210: // // sValue.length());
1211: // ps.setString(2, new String(sValue));
1212: // }
1213: // ps.setString(3, inPfId);
1214: // ps.setString(4, inAttrName);
1215: // ps.setInt(5, inSysAttr);
1216: // }
1217: //
1218: // ps.execute();
1219: // }
1220: // finally {
1221: // try {
1222: // if (ps != null) {
1223: // ps.close();
1224: // }
1225: // }
1226: // catch (SQLException sqle) {
1227: // throw new UnexpectedSystemException(sqle);
1228: // }
1229: // }
1230: //}
1231: //protected final static String T_JFOLDER_WORKFLOWS =
1232: // "T_JFOLDER_WORKFLOWS";
1233: //protected final static String T_USERS = "T_USERS";
1234: //protected final static String T_WORKFLOWS = "T_WORKFLOWS";
1235: //protected final static String T_DEPLOYED_SCRIPTS = "T_DEPLOYED_SCRIPTS";
1236: //protected final static String T_ATTRIBUTES =
1237: // BaseDBQueryVendor.T_ATTRIBUTES;
1238: //protected final static String T_TRIGGERS = "T_TRIGGERS";
1239: //
1240: //protected final static String WF_INSTANCE = "WF_INSTANCE";
1241: //protected final static String STATE_CODE = "STATE_CODE";
1242: //protected final static String ID = BaseDBQueryVendor.ID;
1243: //protected final static String SECURITY_CLASS = "SECURITY_CLASS";
1244: //protected final static String USER_NAME = "USER_NAME";
1245: //protected final static String SCRIPT_NAME = "SCRIPT_NAME";
1246: //protected final static String WORKFLOW_ID = "WORKFLOW_ID";
1247: //protected final static String HANDLE = "HANDLE";
1248: //protected final static String CONTENT = "CONTENT";
1249: //protected final static String AUDIT_ID = "AUDIT_ID";
1250: //protected final static String AUDIT_USER_ID = "AUDIT_USER_ID";
1251: //protected final static String AUDIT_TIMESTAMP = "AUDIT_TIMESTAMP";
1252: //protected final static String AUDIT_STATUS = "AUDIT_STATUS";
1253: //protected final static String AUDIT_COMMENT = "AUDIT_COMMENT";
1254: //protected final static String AUDIT_EXCEPTION_MESSAGE =
1255: // "AUDIT_EXCEPTION_MESSAGE";
1256: //protected final static String AUDIT_EXCEPTION_SOURCE =
1257: // "AUDIT_EXCEPTION_SOURCE";
1258:
1259: //
1260: //protected final static String JF_ID = BaseDBQueryVendor.JF_ID;
1261: //protected final static String ATTR_NAME = BaseDBQueryVendor.ATTR_NAME;
1262: //protected final static String ATTR_TYPE = BaseDBQueryVendor.ATTR_TYPE;
1263: //protected final static String DECIMAL_VALUE =
1264: // BaseDBQueryVendor.DECIMAL_VALUE;
1265: //protected final static String BOOLEAN_VALUE =
1266: // BaseDBQueryVendor.BOOLEAN_VALUE;
1267: //protected final static String STRING_VALUE =
1268: // BaseDBQueryVendor.STRING_VALUE;
1269: //protected final static String LONG_STRING_VALUE =
1270: // BaseDBQueryVendor.LONG_STRING_VALUE;
1271:
1272: //public BaseDBWorkflowLifecycleBean() {
1273: //}
1274:
1275: //public void close() {
1276: // //not implemented, included in WorkflowLifecycle, not used
1277: //}
1278:
1279: //protected abstract BaseDBQueryVendorProprietarySyntax
1280: // getBaseDBQueryVendorProprietarySyntax();
1281:
1282: //protected abstract void updateWorkflowAttribute(Connection inCon,
1283: // String inPfId, String inAttrName, ValueAndClassForConceptTag inVac,
1284: // int inSysAttr) throws SQLException;
1285:
1286: //protected abstract void insertWorkflowAttribute(Connection inCon,
1287: // String inPfId, String inAttrName, ValueAndClassForConceptTag inVac,
1288: // int inPubAttr, int inSysAttr) throws SQLException;
1289:
1290: //protected abstract int getFileIdOfUser(UserHolder inUh);
1291:
1292: //protected abstract BigDecimal getNextIndex(Connection inCon);
1293:
1294: //protected abstract void insertWorkflowInstance(Connection inCon,
1295: // String inPfId, WorkflowInstance inWorkflow);
1296:
1297: //protected abstract void updateWorkflowInstance(Connection inCon,
1298: // String inPfId, WorkflowInstance inWorkflow);
1299:
1300: //public abstract String submitTriggerData(String inHandle,
1301: // TriggerData inTd);
1302:
1303: //public abstract void updateTriggerDataStatus(String inHandle,
1304: // TriggerData inTd);
1305:
1306: //public abstract TriggerData retrieveTriggerData(String inHandle);
1307:
1308: //properties functions
1309: public void loadApplicationProperties(String inApp,
1310: Properties inProps) {
1311:
1312: throw UnexpectedSystemException.notImplemented();
1313: //try {
1314: // File propsDir = getPropertiesDir();
1315: // File propsFile = new File(propsDir, inApp + ".properties");
1316: // FileOutputStream fos = new FileOutputStream(propsFile);
1317: //
1318: // inProps.store(fos, "Application - " + inApp);
1319: //}
1320: //catch (FileNotFoundException fnfe) {
1321: // throw new UnexpectedSystemException(fnfe);
1322: //}
1323: //catch (IOException ioe) {
1324: // throw new UnexpectedSystemException(ioe);
1325: //}
1326: }
1327:
1328: public Properties getApplicationProperties(String inApp) {
1329:
1330: throw UnexpectedSystemException.notImplemented();
1331: //try {
1332: //
1333: // Properties outValue = new Properties();
1334: //
1335: // File propsDir = getPropertiesDir();
1336: // File propsFile = new File(propsDir, inApp + ".properties");
1337: // FileInputStream fis = new FileInputStream(propsFile);
1338: // outValue.load(fis);
1339: //
1340: // return outValue;
1341: //}
1342: //catch (FileNotFoundException fnfe) {
1343: // throw new UnexpectedSystemException(fnfe);
1344: //}
1345: //catch (IOException ioe) {
1346: // throw new UnexpectedSystemException(ioe);
1347: //}
1348: }
1349:
1350: public void unloadApplicationProperties(String inApp) {
1351: throw UnexpectedSystemException.notImplemented();
1352: //File propsDir = getPropertiesDir();
1353: //File propsFile = new File(propsDir, inApp + ".properties");
1354: //propsFile.delete();
1355: }
1356:
1357: //public void updateWorkflowInstance(WorkflowInstance inWi) {
1358: //
1359: // //throw UnexpectedSystemException.notImplemented();
1360: // Connection con = null;
1361: //
1362: // try {
1363: //
1364: // //MiscHelper.println(
1365: // //"GenericHSQLWorkflowLifecycleBean - updateWf");
1366: //
1367: // con = getDatabaseConnection();
1368: //
1369: // AttributeSet as = inWi.getAttributeSet();
1370: // ValueAndClassForConceptTag idVac =
1371: // as.getPublicSysAttr(AttributeSet.ID);
1372: // ValueAndClassForConceptTag statusVac =
1373: // as.getPublicSysAttr(AttributeSet.STATUS);
1374: //
1375: // String id = (String)idVac.getValue();
1376: // String status = (String)statusVac.getValue();
1377: //
1378: // updateWorkflowInstance(con, id, inWi);
1379: // storeWorkflowAttributes(con, id, as, false);
1380: //
1381: // //con.commit();//TO DO: remove this
1382: //
1383: // if (status.equals(TraceAudit.STATUS_ACTIVE)) {
1384: // putTextMessageOnQueue(id, null, getWorkflowQueue());
1385: // }
1386: // }
1387: // //catch (SQLException sqle) {
1388: // // throw new UnexpectedSystemException(sqle);
1389: // //}
1390: // finally {
1391: // try {
1392: // if (con != null) {
1393: // con.close();
1394: // }
1395: // }
1396: // catch (SQLException sqle) {
1397: // throw new UnexpectedSystemException(sqle);
1398: // }
1399: // }
1400: //
1401: // //TO DO: should this function return anything?
1402: //
1403: //}
1404:
1405: //TO DO: determine good function name and return type
1406: //TO DO: is there a regular expressions library
1407: //TO DO: determine if returning list of string ID's is okay
1408: //TO DO: determine what should be returned in a query
1409: //TO DO: determine what return will work with messaging and database
1410:
1411: //TO DO: determine good function name and return type
1412: //TO DO: determine if returning list of string ID's is okay
1413: //TO DO: determine what should be returned in a query
1414: //TO DO: determine what return will work with messaging and database
1415: public ResultSetContainer queryWorkflowInstances(
1416: StatementContainer inStatement) {
1417:
1418: throw UnexpectedSystemException.notImplemented();
1419: //Connection con = null;
1420: //
1421: //try {
1422: // ResultSetContainer outValue = null;
1423: //
1424: // con = getDatabaseConnection();
1425: //
1426: // BaseDBQueryVendor bdbqv = BaseDBQueryVendor.newBaseDBQueryVendor(
1427: // getBaseDBQueryVendorProprietarySyntax(), true);
1428: //
1429: // outValue = bdbqv.executeStatement(con, inStatement);
1430: //
1431: // return outValue;
1432: //
1433: //}
1434: ////catch (SQLException sqle) {
1435: //// throw new UnexpectedSystemException(sqle);
1436: ////}
1437: //finally {
1438: // try {
1439: // if (con != null) {
1440: // con.close();
1441: // }
1442: // }
1443: // catch (SQLException sqle) {
1444: // throw new UnexpectedSystemException(sqle);
1445: // }
1446: //}
1447: }
1448:
1449: //public ProjectApplicationSet accessProjectApplicationSet(
1450: // UserHolder inUh) {
1451: //
1452: // MiscHelper.println("getProjectApplicationSet not implemented");
1453: // return ProjectApplicationSet.newInstance();
1454: //
1455: // //throw UnexpectedSystemException.notImplemented();
1456: // //GenericFileProjectApplicationSet outValue =
1457: // // new GenericFileProjectApplicationSet(
1458: // // getApplicationsDirectory(inUh));
1459: // //
1460: // ////MiscHelper.println(
1461: // //// "getWorkflowApplicationSet::getApplicationsDirectory(inUh) = "
1462: // //// + getApplicationsDirectory(inUh).getAbsolutePath());
1463: // //
1464: // //File appList[] = getApplicationsDirectory(inUh).listFiles();
1465: // //for (int i = 0; i < appList.length; i++) {
1466: // // if (appList[i].isDirectory()) {
1467: // // GenericFileProjectApplication nextWa =
1468: // // new GenericFileProjectApplication(appList[i]);
1469: // // outValue.registerApplication(nextWa);
1470: // // }
1471: // //}
1472: // //
1473: // //outValue.load();
1474: // //
1475: // //return outValue;
1476: //}
1477:
1478: //public void setProjectApplicationSet(ProjectApplicationSet inWas,
1479: // UserHolder inUh) {
1480: //
1481: // throw UnexpectedSystemException.notImplemented();
1482: // //reset deployed applications
1483: // //File appList[] = getApplicationsDirectory(inUh).listFiles();
1484: // //for (int i = 0; i < appList.length; i++) {
1485: // // MiscHelper.deleteFileOrDirectory(appList[i]);
1486: // //}
1487: // //
1488: // //((GenericFileProjectApplicationSet)inWas).store();
1489: //}
1490:
1491: //protected File getApplicationsDirectory(UserHolder inUh) {
1492: //
1493: // File outValue = null;
1494: //
1495: // ConfigServiceCaller csc =
1496: // ConfigServiceCallerFactory.getConfigServiceCaller();
1497: // //ConfigLifecycle cm = ConfigLifecycleFactory.getConfigLifecycle();
1498: //
1499: // //File pfDir =
1500: // // GenericFileProjectApplicationSet.getJFolderDirectory(cm);
1501: // File usersDir =
1502: // GenericFileProjectApplicationSet.getRuntimeProjectSubDir("users");
1503: // //if (!usersDir.exists()) {
1504: // // usersDir.mkdirs();
1505: // //}
1506: //
1507: // int id = getFileIdOfUser(inUh);
1508: // File userDir = new File(usersDir, id + "");
1509: // if (!userDir.exists()) {
1510: // userDir.mkdirs();
1511: // }
1512: //
1513: // outValue = new File(userDir, "applications");
1514: // if (!outValue.exists()) {
1515: // outValue.mkdirs();
1516: // }
1517: //
1518: // //cm.close();
1519: //
1520: // return outValue;
1521: //}
1522:
1523: //public void fireTriggerData(TriggerDataPrecursor inTrigger) {
1524: //
1525: // throw UnexpectedSystemException.notImplemented();
1526: // //putTextMessageOnQueue(
1527: // // inTrigger.getDataAsString(), null, getTriggerQueue());
1528: //}
1529:
1530: //public TriggerDataHistory getTriggerDataHistory(String inHandle) {
1531: // throw UnexpectedSystemException.notImplemented();
1532: //}
1533: //public TriggerDataLabels getFailedTriggerSubmissions() {
1534: // throw UnexpectedSystemException.notImplemented();
1535: //}
1536:
1537: //public void startWorkflowInstance(WorkflowInstancePrecursor inWp) {
1538: //
1539: // Connection con = null;
1540: //
1541: // try {
1542: //
1543: // //4 scenarios when starting a workflow-instance
1544: // //Scenario 1 - trigger good, new workflow-instance
1545: // //Scenario 2 - trigger bad, new workflow-instance
1546: // //Scenario 3 - trigger good, existing workflow-instance
1547: // //Scenario 4 - trigger bad, existing workflow-instance
1548: //
1549: // con = getDatabaseConnection();
1550: //
1551: // TriggerData t = inWp.getTriggerData();
1552: //
1553: // //boolean triggerBad = t.isAuditExceptionPresent();
1554: // //boolean existingWorkflow = tc.isWorkflowPresent();
1555: //
1556: // String pfId = getNextIndex(con).toString();
1557: //
1558: // //if (!existingWorkflow) {
1559: // // pfId = getNextIndex(con).toString();
1560: // //}
1561: // //else {
1562: // // pfId = tc.getWorkflowId();
1563: // //}
1564: // //
1565: // //if (!triggerBad) {
1566: //
1567: // AttributeSet as = inWp.getAttributeSet();
1568: // RootConceptTagHolder rth = inWp.getRootScriptTagHolder();
1569: // HistoryAudit h = inWp.getHistoryAudit();
1570: //
1571: // //if (!existingWorkflow) {
1572: // //this is the only attribute added in this function
1573: // as.addPublicSysAttr(AttributeSet.ID,
1574: // ValueAndClassForConceptTagFactory.newValueAndClass(
1575: // pfId, String.class));
1576: // WorkflowInstance w =
1577: // WorkflowInstanceFactory.newWorkflowInstance(
1578: // h, rth, as, t, pfId,
1579: // WorkflowInstance.INITIAL_STATE);
1580: // insertWorkflowInstance(con, pfId, w);
1581: // //}
1582: // //else {
1583: // // WorkflowInstance w = null;
1584: // // updateWorkflowInstance(con, pfId, w);
1585: // //}
1586: //
1587: // storeWorkflowAttributes(con, pfId, as, true);
1588: //
1589: // Object s = as.getPublicSysAttr(
1590: //AttributeSet.STATUS).getValue();
1591: //
1592: // if (s.equals(TraceAudit.STATUS_ACTIVE)) {
1593: // putTextMessageOnQueue(pfId, null, getWorkflowQueue());
1594: // }
1595: // //}
1596: // //else {
1597: // // if (!existingWorkflow) {
1598: // // //this is the only attribute added in this function
1599: // // WorkflowInstance w = null;
1600: // // insertWorkflowInstance(con, pfId, w);
1601: // // }
1602: // // else {
1603: // // WorkflowInstance w = null;
1604: // // updateWorkflowInstance(con, pfId, w);
1605: // // }
1606: // //}
1607: //
1608: // }
1609: // //catch (SQLException sqle) {
1610: // // throw new UnexpectedSystemException(sqle);
1611: // //}
1612: // finally {
1613: // try {
1614: // if (con != null) {
1615: // con.close();
1616: // }
1617: // }
1618: // catch (SQLException sqle) {
1619: // throw new UnexpectedSystemException(sqle);
1620: // }
1621: // }
1622: //}
1623:
1624: public SecurityAuditSet getSecurityAudits(SecurityAuditQuery inSaq) {
1625: throw UnexpectedSystemException.notImplemented();
1626: }
1627:
1628: //protected void storeWorkflowAttributes(Connection inCon,
1629: // String inPfId, AttributeSet inAs, boolean inIsInsert) {
1630: //
1631: // try {
1632: //
1633: // Iterator iter = null;
1634: //
1635: // //public system attributes
1636: // iter = inAs.getPublicSysAttrNames();
1637: // while (iter.hasNext()) {
1638: // String attrName = (String)iter.next();
1639: // ValueAndClassForConceptTag vac =
1640: // inAs.getPublicSysAttr(attrName);
1641: // int pubAttr = BaseDBQueryVendor.PUBLIC;
1642: // int sysAttr = BaseDBQueryVendor.SYSTEM;
1643: // if (inIsInsert) {
1644: // insertWorkflowAttribute(inCon, inPfId, attrName, vac,
1645: // pubAttr, sysAttr);
1646: // }
1647: // else {
1648: // updateWorkflowAttribute(inCon, inPfId, attrName, vac,
1649: // sysAttr);
1650: // }
1651: // }
1652: //
1653: // //private system attributes
1654: // iter = inAs.getPrivateSysAttrNames();
1655: // while (iter.hasNext()) {
1656: // String attrName = (String)iter.next();
1657: // ValueAndClassForConceptTag vac =
1658: // inAs.getPrivateSysAttr(attrName);
1659: // int pubAttr = BaseDBQueryVendor.PRIVATE;
1660: // int sysAttr = BaseDBQueryVendor.SYSTEM;
1661: // if (inIsInsert) {
1662: // insertWorkflowAttribute(inCon, inPfId, attrName, vac,
1663: // pubAttr, sysAttr);
1664: // }
1665: // else {
1666: // updateWorkflowAttribute(inCon, inPfId, attrName, vac,
1667: // sysAttr);
1668: // }
1669: // }
1670: //
1671: // //public application attributes
1672: // iter = inAs.getPublicAppAttrNames();
1673: // while (iter.hasNext()) {
1674: // String attrName = (String)iter.next();
1675: // ValueAndClassForConceptTag vac =
1676: // inAs.getPublicAppAttr(attrName);
1677: // int pubAttr = BaseDBQueryVendor.PUBLIC;
1678: // int sysAttr = BaseDBQueryVendor.APPLICATION;
1679: // if (inIsInsert) {
1680: // insertWorkflowAttribute(inCon, inPfId, attrName, vac,
1681: // pubAttr, sysAttr);
1682: // }
1683: // else {
1684: // updateWorkflowAttribute(inCon, inPfId, attrName, vac,
1685: // sysAttr);
1686: // }
1687: // }
1688: //
1689: // //private application attributes
1690: // iter = inAs.getPrivateAppAttrNames();
1691: // while (iter.hasNext()) {
1692: // String attrName = (String)iter.next();
1693: // ValueAndClassForConceptTag vac =
1694: // inAs.getPrivateAppAttr(attrName);
1695: // int pubAttr = BaseDBQueryVendor.PRIVATE;
1696: // int sysAttr = BaseDBQueryVendor.APPLICATION;
1697: // if (inIsInsert) {
1698: // insertWorkflowAttribute(inCon, inPfId, attrName, vac,
1699: // pubAttr, sysAttr);
1700: // }
1701: // else {
1702: // updateWorkflowAttribute(inCon, inPfId, attrName, vac,
1703: // sysAttr);
1704: // }
1705: // }
1706: //
1707: // }
1708: // catch (SQLException sqle) {
1709: // throw new UnexpectedSystemException(sqle);
1710: // }
1711: //}
1712:
1713: //private helper methods
1714: //protected final static Connection getDatabaseConnection() {
1715: // try {
1716: // Connection outValue = null;
1717: //
1718: // Context context = new InitialContext();
1719: // Object dsObject = context.lookup(
1720: // "java:comp/env/jdbc/WorkflowLifecycle/DBStore");
1721: // DataSource ds = (DataSource)PortableRemoteObject.narrow(
1722: // dsObject, DataSource.class);
1723: //
1724: // outValue = ds.getConnection();
1725: //
1726: // return outValue;
1727: // }
1728: // catch (SQLException sqle) {
1729: // throw new UnexpectedSystemException(sqle);
1730: // }
1731: // catch (NamingException ne) {
1732: // throw new UnexpectedSystemException(ne);
1733: // }
1734: //}
1735:
1736: //protected final static File getScriptsDir() {
1737: // return GenericFileProjectApplicationSet.getRuntimeProjectSubDir(
1738: // "scripts");
1739: //}
1740:
1741: //protected final static File getPropertiesDir() {
1742: // return GenericFileProjectApplicationSet.getRuntimeProjectSubDir(
1743: // "properties");
1744: //}
1745:
1746: //document functions
1747: //public DocumentGroup getDocumentGroup(String inId, Integer inVersion) {
1748: // throw UnexpectedSystemException.notImplemented();
1749: //}
1750:
1751: //public void updateDocumentGroup(DocumentGroupUpdates inDgu) {
1752: // throw UnexpectedSystemException.notImplemented();
1753: //}
1754:
1755: }
|