private void mergeRequiredRowWithUniqueKey(Table destinationTable, Row requiredRow) { List<Row> updatables = new ArrayList<Row>(); List<Row> incompatiblesRows = new ArrayList<Row>(); for (Row existingRow : destinationTable.getRows()) { if (checker.matchUniqueKey(requiredRow.getUniqueKey(), existingRow)) { if (checker.checkIncompatibilityIgnoringUniqueKey(requiredRow, existingRow)) { incompatiblesRows.add(existingRow); } else { updatables.add(existingRow); } } } if (!incompatiblesRows.isEmpty()) { throw new TokioLoaderException( computeErrorMessage(requiredRow, incompatiblesRows, CONFLICT_ERROR_MESSAGE)); } else if (updatables.size() > 1) { throw new TokioLoaderException( computeErrorMessage(requiredRow, updatables, TOO_MANY_ROWS_ERROR_MESSAGE)); } else if (updatables.size() == 1) { mergeFields(updatables.get(0), requiredRow); } else { destinationTable.addRow(requiredRow); } }
private void mergeRequiredRow(Table destinationTable, Row requiredRow) { boolean thereIsAMerge = false; for (Row existingRow : destinationTable.getRows()) { if (checker.matchAllFields(requiredRow, existingRow)) { LocationUtil.mergeLocationPointers( existingRow.getLocationPointer(), requiredRow.getLocationPointer()); thereIsAMerge = true; } } if (!thereIsAMerge) { if (requiredRow.getUniqueKey() == null) { destinationTable.addRow(requiredRow); } else { mergeRequiredRowWithUniqueKey(destinationTable, requiredRow); } } }