/** * Returns list of matched party ids based on first and last name * * @param firstName * @param lastName * @return */ public Set<Match> search(String firstName, String lastName) { lastName = lastName.trim(); firstName = firstName.trim(); Set<String> candidateParties = new HashSet<String>(); Set<Match> matchedParties = new HashSet<Match>(); if (firstName.isEmpty()) { // search just against lastnames List<ParsedNamePart> parsedNameParts = nameParts.get(TYPE_LAST_NAME); if (parsedNameParts != null) { for (int i = 0; i < parsedNameParts.size(); i++) { ParsedNamePart namePart = parsedNameParts.get(i); if (namePart.getValue().trim().equalsIgnoreCase(lastName)) { matchedParties.add(new Match(namePart.getPartyId(), 100)); } } } } else { // search against lastname ans firstname List<ParsedNamePart> parsedNameParts = nameParts.get(TYPE_LAST_NAME); if (parsedNameParts != null) { for (int i = 0; i < parsedNameParts.size(); i++) { ParsedNamePart namePart = parsedNameParts.get(i); if (namePart.getValue().trim().equalsIgnoreCase(lastName)) { candidateParties.add(namePart.getPartyId()); } } } parsedNameParts = nameParts.get(TYPE_FIRST_NAME); if (parsedNameParts != null) { for (int i = 0; i < parsedNameParts.size(); i++) { ParsedNamePart namePart = parsedNameParts.get(i); if (candidateParties.contains(namePart.getPartyId())) { if (namePart.getValue().trim().equalsIgnoreCase(firstName)) { // ok seems like we have a winner matchedParties.add(new Match(namePart.getPartyId(), 100)); } } } } if (matchedParties.size() == 0) { // both first name and last name didn't match // so lets report at least lastname matches with 50% score/confidence for (String candidateParty : candidateParties) { matchedParties.add(new Match(candidateParty, 50)); } } } return matchedParties; }