diff --git a/bundles/org.openhab.binding.tr064/src/main/java/org/openhab/binding/tr064/internal/phonebook/Tr064PhonebookImpl.java b/bundles/org.openhab.binding.tr064/src/main/java/org/openhab/binding/tr064/internal/phonebook/Tr064PhonebookImpl.java index b9e1dc650..8e7782b76 100644 --- a/bundles/org.openhab.binding.tr064/src/main/java/org/openhab/binding/tr064/internal/phonebook/Tr064PhonebookImpl.java +++ b/bundles/org.openhab.binding.tr064/src/main/java/org/openhab/binding/tr064/internal/phonebook/Tr064PhonebookImpl.java @@ -72,7 +72,8 @@ public class Tr064PhonebookImpl implements Phonebook { phonebook = phonebooksType.getPhonebook().getContact().stream().map(contact -> { String contactName = contact.getPerson().getRealName(); return contact.getTelephony().getNumber().stream() - .collect(Collectors.toMap(number -> normalizeNumber(number.getValue()), number -> contactName)); + .collect(Collectors.toMap(number -> normalizeNumber(number.getValue()), number -> contactName, + this::mergeSameContactNames)); }).collect(HashMap::new, HashMap::putAll, HashMap::putAll); logger.debug("Downloaded phonebook {}: {}", phonebookName, phonebook); } catch (JAXBException | InterruptedException | ExecutionException | TimeoutException e) { @@ -80,6 +81,16 @@ public class Tr064PhonebookImpl implements Phonebook { } } + // in case there are multiple phone entries with same number -> name mapping, i.e. in phonebooks exported from + // mobiles containing multiple accounts like: local, cloudprovider1, messenger1, messenger2,... + private String mergeSameContactNames(String nameA, String nameB) { + if (nameA != null && nameA.equals(nameB)) { + return nameA; + } + throw new IllegalStateException( + "Found different names for the same number: '" + nameA + "' and '" + nameB + "'"); + } + @Override public String getName() { return phonebookName;