Java tutorial
/******************************************************************************* * Educational Online Test Delivery System * Copyright (c) 2013 American Institutes for Research * * Distributed under the AIR Open Source License, Version 1.0 * See accompanying file AIR-License-1_0.txt or at * http://www.smarterapp.org/documents/American_Institutes_for_Research_Open_Source_Software_License.pdf ******************************************************************************/ package org.opentestsystem.delivery.testreg.upload.validator.fileformat; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; import org.opentestsystem.delivery.testreg.upload.DataRecord; import org.opentestsystem.delivery.testreg.upload.RowMetadata; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Maps; public class DuplicateUniquePair { private final List<DataRecord> duplicates; private final Set<DataRecord> uniqueRecordSet; public DuplicateUniquePair(final List<DataRecord> inDuplicates, final Set<DataRecord> inUniqueRecords) { this.duplicates = inDuplicates; this.uniqueRecordSet = inUniqueRecords; } public List<DataRecord> getDuplicates() { return this.duplicates; } public Set<DataRecord> getUniqueRecordSet() { return this.uniqueRecordSet; } public boolean hasDuplicates() { return !this.duplicates.isEmpty(); } public List<Integer[]> getDuplicateRowNumbers() { final Map<DataRecord, List<Integer>> dataRecordDuplicateRowMap = Maps.newHashMap(); for (final DataRecord record : this.uniqueRecordSet) { if (this.duplicates.contains(record)) { if (dataRecordDuplicateRowMap.get(record) != null) { dataRecordDuplicateRowMap.get(record).add(record.getRowMetadata().getRowNum()); } else { final List<Integer> recordNumbers = new ArrayList<Integer>(); recordNumbers.add(getRowNumber(record.getRowMetadata())); Iterables.retainAll(this.duplicates, Arrays.asList(record)); recordNumbers.addAll(getRowNumbers(this.duplicates)); dataRecordDuplicateRowMap.put(record, recordNumbers); } } } return getDuplicateRowNumber(dataRecordDuplicateRowMap); } private List<Integer> getRowNumbers(final List<DataRecord> recordList) { final List<Integer> rowNumbers = Lists.newArrayList(); for (final DataRecord record : recordList) { rowNumbers.add(getRowNumber(record.getRowMetadata())); } return rowNumbers; } private List<Integer[]> getDuplicateRowNumber(final Map<DataRecord, List<Integer>> map) { final List<Integer[]> duplicateRowArray = Lists.newArrayList(); for (final List<Integer> dups : map.values()) { duplicateRowArray.add(dups.toArray(new Integer[dups.size()])); } return duplicateRowArray; } private int getRowNumber(final RowMetadata rowMetadata) { return rowMetadata.getRowNum(); } }