示例#1
0
 /**
  * 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());
   }
 }
示例#3
0
  /**
   * 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();
  }
示例#6
0
 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);
 }