/** execute a collection of InputInfo objects in one transaction */ public Collection execute(Collection inputInfoList) throws BaseSQLException { if (inputInfoList == null) throw new IllegalArgumentException("inputs list is null."); ImplicitTransactionManager tm = TransactionManagerUtil.getImplicitTransactionManager(); Collection returnTOList = new ArrayList(); try { tm.beginTransactionImplicit(); Iterator it = inputInfoList.iterator(); while (it.hasNext()) { InputInfo ip = (InputInfo) it.next(); UserDatabaseConnection connection = findOrCreateConnection(ip); OmniDTO returnTO = executeKeepConnection( connection, ip.getInputs(), ip.getProcessorType(), ip.getProcessorName(), ip.getOutputFilters()); returnTOList.add(returnTO); // now execute child InputInfo Collection childList = ip.getChildInputInfoObjects(); Iterator childIt = childList.iterator(); while (childIt.hasNext()) { InputInfo childIp = (InputInfo) childIt.next(); OmniDTO returnTO2 = executeKeepConnection( connection, childIp.getInputs(), childIp.getProcessorType(), childIp.getProcessorName(), childIp.getOutputFilters()); returnTO.addChildrenOmniDTOToList(returnTO2); } } tm.commitTransactionImplicit(); } catch (BaseSQLException bdex) { tm.rollbackTransactionImplicit(); throw bdex; } finally { tm.releaseResourcesImplicit(); } return returnTOList; }
/** execute with output filter */ public OmniDTO execute(Map inputs, String processorType, String processorName, Map outputFilters) throws BaseSQLException { if (processorType == null || processorName == null) throw new IllegalArgumentException("processorType or processorName is null."); if (inputs == null) inputs = new HashMap(); ImplicitTransactionManager tm = TransactionManagerUtil.getImplicitTransactionManager(); OmniDTO returnTO = null; try { tm.beginTransactionImplicit(); // if (log.isDebugEnabled()) // displayDS((String)inputs.get(DataProcessor.input_key_database_connection_name), // "beforeConnection"); UserDatabaseConnection connection = findOrCreateConnection(inputs); // if (log.isDebugEnabled()) // displayDS((String)inputs.get(DataProcessor.input_key_database_connection_name), // "beforeExecute"); returnTO = executeKeepConnection(connection, inputs, processorType, processorName, outputFilters); // if (log.isDebugEnabled()) // displayDS((String)inputs.get(DataProcessor.input_key_database_connection_name), // "afterExecute"); tm.commitTransactionImplicit(); // if (log.isDebugEnabled()) // displayDS((String)inputs.get(DataProcessor.input_key_database_connection_name), // "afterCommit"); } catch (BaseSQLException bdex) { tm.rollbackTransactionImplicit(); throw bdex; } finally { tm.releaseResourcesImplicit(); displayDS( (String) inputs.get(DataProcessor.input_key_database_connection_name), "afterRelease"); } return returnTO; }
/** execute a collection of InputInfo objects in one transaction */ public OmniDTO retrieveMasterDetails(InputInfo inputInfo) throws BaseSQLException { if (inputInfo == null) throw new IllegalArgumentException("inputInfo is null."); ImplicitTransactionManager tm = TransactionManagerUtil.getImplicitTransactionManager(); OmniDTO returnTO = null; try { tm.beginTransactionImplicit(); InputInfo ip = inputInfo; UserDatabaseConnection udc = findOrCreateConnection(ip); udc.getConnection().setReadOnly(true); returnTO = executeKeepConnection( udc, ip.getInputs(), ip.getProcessorType(), ip.getProcessorName(), ip.getOutputFilters()); log.debug("parent: " + returnTO); // now execute child InputInfo Collection childList = ip.getChildInputInfoObjects(); Iterator childIt = childList.iterator(); while (childIt.hasNext()) { InputInfo childIp = (InputInfo) childIt.next(); // find all input parameters in childIp that need data from parent List connectorList = new ArrayList(); Map childInputs = childIp.getInputs(); childInputs = convertKeyCase(childInputs); Iterator it = childInputs.keySet().iterator(); while (it.hasNext()) { String key = (String) it.next(); String value = (String) childInputs.get(key); if (key.startsWith("&")) connectorList.add(value); } // create a select union query String query = null; if (DataProcessorTypes.NAMED_SQL_STATEMENT_PROCESSOR.equals(childIp.getProcessorType())) { query = SqlConfig.getInstance().getSql(childIp.getProcessorName()); } else if (DataProcessorTypes.DIRECT_SQL_STATEMENT_PROCESSOR.equals( childIp.getProcessorType())) { query = childIp.getProcessorName(); } log.debug("child query1: " + query); // check if parent has data boolean parentHasData = false; TableData parentRt = null; if (returnTO != null) { parentRt = returnTO.getTableData(ip.getProcessorName()); if (parentRt != null) { int size = parentRt.getAllRows().size(); if (size > 0) parentHasData = true; } } // construct child query String childQuery = ""; if (query != null && connectorList.size() > 0 && parentHasData) { childQuery = getNewChildQuery(query, childIp, parentRt.getAllRows()); } else { childQuery = query; } log.debug("child query2: " + childQuery); if (parentHasData) { udc = findOrCreateConnection(childIp); OmniDTO returnTO2 = executeKeepConnection( udc, childIp.getInputs(), DataProcessorTypes.DIRECT_SQL_STATEMENT_PROCESSOR, childQuery, childIp.getOutputFilters()); // merge child records with corresponding parent record if (returnTO2 != null) { linkParentWithChild( parentRt, returnTO2.getTableData(childQuery), childIp.getProcessorName(), connectorList); } log.debug("returnTO2: " + returnTO2); } } } catch (SQLException ex) { throw new BaseSQLException(ex); } catch (BaseSQLException bdex) { throw bdex; } finally { tm.releaseResourcesImplicit(); } return returnTO; }