/** * Validate column names and return a string if there's a validation warning. * * @param dao Data access object to validate columns for * @return A validation warning or null */ public static String validateColumns(DataAccessObject dao) { HashSet<String> uniqueHeaders = new HashSet<String>(); String warning = null; for (String header : dao.getColumnNames()) { if (header == null || header.length() == 0) { warning = Messages.getString("RowUtil.warningEmptyColumn"); // $NON-NLS-1$ break; } else if (uniqueHeaders.contains(header)) { warning = Messages.getFormattedString("RowUtil.warningDuplicateColumn", header); // $NON-NLS-1$ break; } uniqueHeaders.add(header); } if (warning != null) { logger.warn(warning); } return warning; }
private void processResult( Map<String, Object> dataRow, boolean isSuccess, String id, Error[] errors) throws DataAccessObjectException { // process success vs. error // extract error message from error result if (isSuccess) { writeSuccess(dataRow, id, null); } else { writeError( dataRow, errors == null ? Messages.getString("Visitor.noErrorReceivedMsg") : errors[0].getMessage()); } }
/** * Utility function for calculating the total number of rows available to current DAO instance * * @throws DataAccessObjectException */ public static int calculateTotalRows(DataReader dataReader) throws DataAccessObjectException { try { // visit the rows DAOSizeVisitor visitor = new DAOSizeVisitor(); for (Row row = dataReader.readRow(); isValidRow(row); row = dataReader.readRow()) { visitor.visit(row); } return visitor.getNumberOfRows(); } catch (DataAccessObjectException daoe) { logger.error(Messages.getString("RowUtil.error"), daoe); // $NON-NLS-1$ throw daoe; } finally { // since we've read all the rows, reopen the reader to reset the input dataReader.close(); dataReader.open(); } }
private void writeOutputToWriter(Object[] results, List<Map<String, Object>> dataArray) throws DataAccessObjectException, LoadException { if (results.length != dataArray.size()) { getLogger().fatal(Messages.getString("Visitor.errorResultsLength")); // $NON-NLS-1$ throw new LoadException(Messages.getString("Visitor.errorResultsLength")); } // have to do this because although saveResult and deleteResult // are a) not the same class yet b) not subclassed for (int i = 0; i < results.length; i++) { Map<String, Object> dataRow = dataArray.get(i); String statusMsg = null; if (results instanceof SaveResult[]) { SaveResult saveRes = (SaveResult) results[i]; if (saveRes.getSuccess()) { if (OperationInfo.insert == getConfig().getOperationInfo()) { statusMsg = Messages.getString("DAOLoadVisitor.statusItemCreated"); } else { statusMsg = Messages.getString("DAOLoadVisitor.statusItemUpdated"); } } dataRow.put(Config.STATUS_COLUMN_NAME, statusMsg); processResult(dataRow, saveRes.getSuccess(), saveRes.getId(), saveRes.getErrors()); } else if (results instanceof DeleteResult[]) { DeleteResult deleteRes = (DeleteResult) results[i]; if (deleteRes.getSuccess()) { statusMsg = Messages.getString("DAOLoadVisitor.statusItemDeleted"); } dataRow.put(Config.STATUS_COLUMN_NAME, statusMsg); processResult(dataRow, deleteRes.getSuccess(), deleteRes.getId(), deleteRes.getErrors()); } else if (results instanceof UpsertResult[]) { UpsertResult upsertRes = (UpsertResult) results[i]; if (upsertRes.getSuccess()) { statusMsg = upsertRes.getCreated() ? Messages.getString("DAOLoadVisitor.statusItemCreated") : Messages.getString("DAOLoadVisitor.statusItemUpdated"); } dataRow.put(Config.STATUS_COLUMN_NAME, statusMsg); processResult(dataRow, upsertRes.getSuccess(), upsertRes.getId(), upsertRes.getErrors()); } } }
@Override protected void loadBatch() throws DataAccessObjectException, LoadException { Object[] results = null; try { results = executeClientAction(getController().getPartnerClient(), dynaArray); } catch (ApiFault e) { handleException(e); } catch (ConnectionException e) { handleException(e); } // set the current processed int currentProcessed; try { currentProcessed = getConfig().getInt(LastRun.LAST_LOAD_BATCH_ROW); } catch (ParameterLoadException e) { // if there's a problem getting last batch row, start at the beginning currentProcessed = 0; } currentProcessed += results.length; getConfig().setValue(LastRun.LAST_LOAD_BATCH_ROW, currentProcessed); try { getConfig().saveLastRun(); } catch (IOException e) { String errMsg = Messages.getString("LoadAction.errorLastRun"); getLogger().error(errMsg, e); handleException(errMsg, e); } writeOutputToWriter(results, dataArray); // update Monitor getProgressMonitor().worked(results.length); getProgressMonitor() .setSubTask(getRateCalculator().calculateSubTask(getNumberOfRows(), getNumberErrors())); // now clear the arrays clearArrays(); }
private void handleError(final Exception e, String msgKey) throws LoadException { final String errMsg = Messages.getMessage(getClass(), msgKey); logger.error(errMsg, e); throw new LoadException(errMsg, e); }