/** Load the data from the defined Data Source DB */ @Override public void loadDataFromDB() throws InitializationException { int custId; String orderId; String orderLineId; String alias; String description; String prodName; String service; String subscription; int custLoaded = 0; String tmpStartDate; String tmpEndDate; long startDate = 0; long endDate = 0; String tmpQuantity; int quantity; // Log that we are starting the loading OpenRate.getOpenRateFrameworkLog() .info("Starting Customer Cache Loading from DB for <" + getSymbolicName() + ">"); // Try to open the DS JDBCcon = DBUtil.getConnection(cacheDataSourceName); // Now prepare the statements prepareStatements(); // Execute the query try { mrs = StmtCustomerDataSelectQuery.executeQuery(); } catch (SQLException ex) { message = "Error performing SQL for retieving Customer data. message <" + ex.getMessage() + ">"; throw new InitializationException(message, ex, getSymbolicName()); } // loop through the results for the customer alias cache try { mrs.beforeFirst(); while (mrs.next()) { custLoaded++; orderId = mrs.getString(1); custId = mrs.getInt(2); orderLineId = mrs.getString(3); description = mrs.getString(4); tmpStartDate = mrs.getString(5); tmpEndDate = mrs.getString(6); tmpQuantity = mrs.getString(7); // parse the description prodName = getProduct(description); alias = getAlias(description); service = getService(description); subscription = getSubscription(description); if ((prodName == null) | (alias == null) | (service == null) | (subscription == null)) { OpenRate.getOpenRateFrameworkLog() .warning( "Record <" + description + "> skipped for customer <" + custId + "> order <" + orderId + ">."); continue; } // parse the start date try { if (tmpStartDate == null) { startDate = CommonConfig.LOW_DATE; } else { startDate = conv.convertInputDateToUTC(tmpStartDate); } } catch (ParseException ex) { OpenRate.getOpenRateFrameworkLog() .error( "Start Date format for record <" + custLoaded + "> are not correct. Date <" + tmpStartDate + ">, format <" + conv.getInputDateFormat() + "> order <" + orderId + ">. Data discarded."); } // parse the end date try { if (tmpEndDate == null) { endDate = CommonConfig.HIGH_DATE; } else { endDate = conv.convertInputDateToUTC(tmpEndDate); } } catch (ParseException ex) { OpenRate.getOpenRateFrameworkLog() .error( "End Date format for record <" + custLoaded + "> are not correct. Date <" + tmpEndDate + ">, format <" + conv.getInputDateFormat() + "> order <" + orderId + ">. Data discarded."); } // parse the Quantity quantity = Integer.parseInt(tmpQuantity); // print the information to the log OpenRate.getOpenRateFrameworkLog() .info( "Adding service ID <" + alias + "> to account <" + custId + "> with product <" + prodName + "> validity <" + tmpStartDate + " (" + startDate + ") - " + tmpEndDate + " (" + endDate + ")>, Qty: <" + quantity + "> order <" + orderId + ">."); // Add the map addAlias(alias, custId, startDate, endDate); addCustId(custId, CommonConfig.LOW_DATE, CommonConfig.HIGH_DATE, 0); addCPI( custId, service, subscription, prodName, startDate, endDate, Integer.parseInt(orderId), Integer.parseInt(orderLineId), quantity); } } catch (SQLException ex) { message = "Error opening Customer Data for <" + cacheDataSourceName + ">"; throw new InitializationException(message, ex, getSymbolicName()); } // Close down stuff try { mrs.close(); StmtCustomerDataSelectQuery.close(); JDBCcon.close(); } catch (SQLException ex) { message = "Error closing Result Set for Customer information from <" + cacheDataSourceName + ">"; throw new InitializationException(message, ex, getSymbolicName()); } OpenRate.getOpenRateFrameworkLog() .info("Customer Cache Data Loading completed from <" + cacheDataSourceName + ">"); OpenRate.getOpenRateFrameworkLog().info("Products Loaded: " + custLoaded); }
/** * Load the data from the defined Data Source * * @throws OpenRate.exception.InitializationException */ @Override public void loadDataFromDB() throws InitializationException { int ColumnIdx; int ColumnCount; int ConfigsLoaded = 0; String Group; ResultSetMetaData Rsmd; String[] SearchMapFields; int ResultFormFactor = 0; ArrayList<String> tmpResultList; // Find the location of the zone configuration file OpenRate.getOpenRateFrameworkLog() .info("Starting Regex Match Cache Loading from DB for <" + getSymbolicName() + ">"); // Try to open the DS JDBCcon = DBUtil.getConnection(cacheDataSourceName); // Now prepare the statements prepareStatements(); // Execute the query try { mrs = StmtCacheDataSelectQuery.executeQuery(); } catch (SQLException ex) { message = "Error performing SQL for retrieving Regex Match data in module <" + getSymbolicName() + ">. message <" + ex.getMessage() + ">"; OpenRate.getOpenRateFrameworkLog().fatal(message); throw new InitializationException(message, getSymbolicName()); } // loop through the results for the customer login cache try { Rsmd = mrs.getMetaData(); ColumnCount = Rsmd.getColumnCount(); // Read the form factor from the first entry, and then make sure // that we always get this if (ResultFormFactor == 0) { // Check that this is a form factor we are able to use. There // must be at least 3 fields for us to be able to work with // the record: // - Group identifier // - Some fields to compare (min 1) // - a result if (ColumnCount < 3) { // we're not going to be able to use this message = "You must define at least 3 entries in the record, you have defined <" + ColumnCount + ">"; OpenRate.getOpenRateFrameworkLog().fatal(message); throw new InitializationException(message, getSymbolicName()); } // Do we have a defined form factor? if (KeyFormFactor == 0) { // If we have not been given a key form factor, assume the result factor is 1 ResultFormFactor = 1; KeyFormFactor = ColumnCount - ResultFormFactor - 1; message = "Using default key factor for regex cache <" + cacheDataSourceName + ">. Assuming Key = <" + Integer.toString(KeyFormFactor) + "> and Result = <" + Integer.toString(ResultFormFactor) + ">"; OpenRate.getOpenRateFrameworkLog().info(message); } else { // Use the given factor ResultFormFactor = ColumnCount - KeyFormFactor - 1; if (ResultFormFactor < 1) { // Makes no sense to start if we don't give any results message = "Error in module <" + cacheDataSourceName + ">. Key fields >= total columns. Got KeyFields <" + KeyFormFactor + "> and columns <" + ColumnCount + ">"; OpenRate.getOpenRateFrameworkLog().fatal(message); throw new InitializationException(message, getSymbolicName()); } message = "Using defined key factor for regex cache <" + getSymbolicName() + ">. Using Key = <" + Integer.toString(KeyFormFactor) + "> and Result = <" + Integer.toString(ResultFormFactor) + ">"; OpenRate.getOpenRateFrameworkLog().info(message); } } // Start the loading mrs.beforeFirst(); while (mrs.next()) { ConfigsLoaded++; Group = mrs.getString(1); SearchMapFields = new String[KeyFormFactor]; // create the array to transfer the columns into the map for (ColumnIdx = 1; ColumnIdx < KeyFormFactor + 1; ColumnIdx++) { SearchMapFields[ColumnIdx - 1] = mrs.getString(ColumnIdx + 1); } tmpResultList = new ArrayList<>(); for (ColumnIdx = KeyFormFactor + 1; ColumnIdx < (ResultFormFactor + KeyFormFactor + 1); ColumnIdx++) { tmpResultList.add(mrs.getString(ColumnIdx + 1)); } // Add the map addEntry(Group.intern(), SearchMapFields, tmpResultList); // Update to the log file if ((ConfigsLoaded % loadingLogNotificationStep) == 0) { message = "Regex Map Data Loading: <" + ConfigsLoaded + "> configurations loaded for <" + getSymbolicName() + "> from <" + cacheDataSourceName + ">"; OpenRate.getOpenRateFrameworkLog().info(message); } } } catch (SQLException ex) { message = "Error opening Search Map Data for <" + getSymbolicName() + ">"; OpenRate.getOpenRateFrameworkLog().fatal(message); throw new InitializationException(message, ex, getSymbolicName()); } catch (NullPointerException ex) { message = "Error opening Search Map Data for <" + getSymbolicName() + "> in config <" + ConfigsLoaded + ">"; OpenRate.getOpenRateFrameworkLog().fatal(message); throw new InitializationException(message, ex, getSymbolicName()); } // Close down stuff try { mrs.close(); StmtCacheDataSelectQuery.close(); JDBCcon.close(); } catch (SQLException ex) { message = "Error closing Search Map Data connection for <" + cacheDataSourceName + ">"; OpenRate.getOpenRateFrameworkLog().fatal(message); throw new InitializationException(message, getSymbolicName()); } message = "Regex Map Data Loading completed. <" + ConfigsLoaded + "> configuration lines loaded for <" + getSymbolicName() + "> from <" + cacheDataSourceName + ">"; OpenRate.getOpenRateFrameworkLog().info(message); }